python机器学习理论与实战(六)支持向量机

Python机器学习理论与实战(六)支持向量机

简介

支持向量机(Support Vector Machine,简称 SVM)是一个强大的分类算法,其具有优秀的泛化能力。在本文中,我们将介绍 SVM 的原理、实现及应用。

SVM 原理

SVM 的核心思想是:找到一个可以将不同类别的数据分割开的最优超平面。其中“最优”的定义是:在所有能成功分割不同类别数据的超平面中,选择距离两类样本点最近的点到超平面的距离最大的超平面。

SVM 实现

SVM 可以用于线性可分和线性不可分的情况。使用不同的核函数可以将线性不可分的情况转化为线性可分,从而解决问题。

下面是使用 scikit-learn 实现 SVM 的基本流程:

from sklearn import svm
clf = svm.SVC()  # 初始化 SVM 模型
clf.fit(X_train, y_train)  # 训练模型
y_predict = clf.predict(X_test)  # 预测结果

其中 X_train 表示训练集的特征矩阵,y_train 表示训练集的标签,X_test 表示测试集的特征矩阵,y_predict 表示模型预测出的测试集标签。

下面是一个简单的例子,使用 SVM 对 iris 数据集进行分类:

from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 初始化 SVM 模型
clf = svm.SVC(kernel='linear', C=1)
clf.fit(X_train, y_train)

# 预测结果并计算准确率
y_predict = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_predict)
print('准确率:%.2f%%' % (accuracy * 100))

SVM 应用

SVM 通常用于分类问题,例如文本分类、图像分类等。以下是两个示例:

例子1:使用 SVM 进行文本分类

下面是将 SVM 用于文本分类的示例:

import numpy as np
from sklearn import svm
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
newsgroups_train = fetch_20newsgroups(subset='train')
categories = newsgroups_train.target_names

# 特征工程
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(newsgroups_train.data)
y = newsgroups_train.target

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 初始化 SVM 模型
clf = svm.SVC(kernel='linear', C=1)
clf.fit(X_train, y_train)

# 预测结果并计算准确率
y_predict = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_predict)
print('准确率:%.2f%%' % (accuracy * 100))

例子2:使用 SVM 进行图像分类

下面是将 SVM 用于图像分类的示例:

import os
import cv2
import numpy as np
from sklearn import svm
from sklearn.metrics import accuracy_score

# 加载数据集
data_dir = './data'
classes = ['cats', 'dogs']

X, y = [], []
for class_id, class_name in enumerate(classes):
    for file_name in os.listdir(os.path.join(data_dir, class_name)):
        img_path = os.path.join(data_dir, class_name, file_name)
        img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
        img = cv2.resize(img, (32, 32))  # 将图像缩放至相同大小
        X.append(img.flatten())  # 将图像数据展平为一维数组
        y.append(class_id)

# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 初始化 SVM 模型
clf = svm.SVC(kernel='linear', C=1)
clf.fit(X_train, y_train)

# 预测结果并计算准确率
y_predict = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_predict)
print('准确率:%.2f%%' % (accuracy * 100))

总结

这篇文章介绍了 SVM 的原理和实现,同时给出了文本分类和图像分类的两个示例。SVM 是一种非常强大的分类算法,具有很好的泛化能力,既可以用于线性可分问题,也可以用于线性不可分问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python机器学习理论与实战(六)支持向量机 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Python函数中的作用域规则详解

    Python函数中的作用域规则详解 作用域是程序中变量可见性和生命周期的范围,Python中的作用域可以被分成四种:局部作用域、嵌套作用域、全局作用域和内置作用域。了解这些作用域规则是理解Python语言非常关键的部分之一。 局部作用域 在Python函数中,由程序员在函数内部定义的变量属于函数内部的局部作用域。当一个函数被调用时,这个函数的局部作用域被创建…

    python 2023年6月5日
    00
  • Python实例分享:快速查找出被挂马的文件

    下面是关于“Python实例分享:快速查找出被挂马的文件”的完整攻略的详细讲解。 什么是被挂马的文件 “被挂马”的文件是指已经被黑客攻击添加了恶意脚本的文件,这些恶意脚本可能会给网站带来安全风险,严重时甚至会导致网站瘫痪。所以,快速查找出被挂马的文件非常重要。 如何查找被挂马的文件 第一步:查找可疑文件 被挂马的文件一般会被隐藏在常用的文件中,如PHP文件,…

    python 2023年6月3日
    00
  • Python 创建原始音频

    【问题标题】:Python Creating raw audioPython 创建原始音频 【发布时间】:2023-04-05 01:26:01 【问题描述】: 我使用的是 Windows 7。我想做的就是创建原始音频并将其流式传输到扬声器。在那之后,我想创建可以产生正弦进行的类(基本上,一种慢慢变得越来越尖锐的音调)。之后,我想将我的原始音频放入音频编解码…

    Python开发 2023年4月6日
    00
  • python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式

    当使用Python中的Matplotlib库进行数据可视化时,可以通过以下两种方式来改变图中的坐标轴刻度。 改变横坐标或纵坐标的刻度显示 在Matplotlib中,可以使用xticks()和yticks()方法来指定坐标轴刻度的显示方式。这两个方法接受一个序列作为参数,序列中的元素是要显示的刻度值。例如,以下代码将x轴刻度指定为0, 5, 10: impor…

    python 2023年6月3日
    00
  • 利用python实现简易版的贪吃蛇游戏(面向python小白)

    1. 搭建游戏框架- ### 用Python中的tkinter库搭建GUI界面用于显示游戏画面,初始化画布大小和游戏中各种元素的初始化和更新。- ### 用Python中的time库来控制游戏的速度,决定蛇的移动速度。 2. 设计游戏元素- ### 蛇:包含蛇头和蛇身,蛇头的位置由用户控制,而蛇身会随着蛇头的移动发生变化。- ### 食物:随机生成位置,控制…

    python 2023年5月19日
    00
  • Python实现朴素贝叶斯的学习与分类过程解析

    Python实现朴素贝叶斯的学习与分类过程解析 简介 朴素贝叶斯是一种基于概率统计的分类算法。它假设特征之间相互独立,且每个特征对于分类的影响是等同的。朴素贝叶斯广泛应用于各种文本分类任务,如垃圾邮件分类、情感分析等。 本文将介绍Python实现朴素贝叶斯的学习与分类过程,主要包括以下步骤:数据预处理,生成词向量,构建模型,训练模型,四种分类算法的实现及准确…

    python 2023年6月5日
    00
  • Windows上的python + gtk3?

    【问题标题】:python + gtk3 on windows?Windows上的python + gtk3? 【发布时间】:2023-04-06 22:16:02 【问题描述】: 我正在尝试将一个小应用程序移植到 Windows(我最初是为 ubuntu 制作的),它是在 python + gtk3 上编写的…我知道 gtk3 很难让它在 Window…

    Python开发 2023年4月7日
    00
  • 新手如何快速入门Python(菜鸟必看篇)

    新手如何快速入门Python(菜鸟必看篇) Python是一种高级编程语言,由于其简单易学,语法简洁清晰,如今已成为当下最受欢迎的编程语言之一。Python有广泛的应用领域,涉及数据科学、Web开发、人工智能等多个领域。 对于Python的入门者来说,了解如何快速入门Python非常重要。这里将简单介绍如何快速入门Python。 学习Python前的准备 根…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部