目录
一、概念
支持向量机(SVM)是按监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面,可以将问题转换为一个求解凸二次规划的问题。
在线性可分情况下,要在原空间中寻找两类样本最优分类超平面,选出决策边界。在线性不可分情况下,需要加入松弛变量,通过使用非线性映射规则将空间样本升维到高维度空间,来变为线性可分,这样就可以在特征空间中寻找最优分类超平面。
SVM在各种实际问题上都表现优秀,在手写体识别和人脸识别应用广泛,在文本和超文本分类上,因为可以大量减少标准归纳和转换设置中对标记训练实例的需求,也是举足轻重的存在。另外,SVM也被用在图像分类,图像分割系统,在生物学和其他科学上SVM也备受青睐。
二、SVM的基本原理
SVM的基本原理 可以概括为在特征空间中找到一个最优的超平面,将不同类别的样本尽可能地分开。其中,支持向量是离超平面最近的样本点,它们决定了超平面的位置和形状。SVM通过最大化支持向量到超平面的距离,即间隔(margin),来提高分类的准确性和鲁棒性。
三、分类
- 线性可分支持向量机
- 线性支持向量机
- 非线性支持向量机
先认识两个概念之间的关系,分别是输入空间、特征空间。假设一个分类问题的输入空间于特征空间不同,则线性可分向量机和线性支持向量机假设这两个空间的元素可以一一对应,非线性支持向量机则利用一个非线性核技巧完成映射。支持向量机的学习都是基于特征空间进行的。
四、支持向量机的不同功能
功能 | |
监督学习 | 线性二分类与多分类(Linear Support Vector Classfication) 非线性二分类与多分类(Support Vector Classfication,SVC) 普通连续型变量的回归(SVR) 概率型连续变量的回归(Bayesian SVM) |
无监督学习 | 支持向量聚类(Support Vector Clustering) 异常值检测(One-class SVM) |
半监督学习 | 转导支持向量机(Transductive Support Vector Machines,TSVM) |
五、SVM的优势
2.1 适用于高维空间:SVM在高维空间中表现出色,能够处理具有复杂特征的数据集。这使得SVM在图像分类、文本分类等领域中得到广泛应用。
2.2 鲁棒性强:SVM通过间隔最大化的方式,减少了对训练数据的依赖,从而提高了模型的鲁棒性。即使在部分数据存在噪声或异常点的情况下,SVM仍能取得较好的分类效果。
2.3 无局部极小值问题:相对于其他机器学习算法,SVM的目标函数是凸优化问题,不存在局部极小值问题。这意味着我们可以通过数学方法获得全局最优解。
六、SVM的应用场景
1、图像分类
SVM在图像分类中表现出色,能够有效地识别不同类别的物体、人脸等。它可以基于图像的特征提取进行分类,具有很高的准确性和鲁棒性。
# 导入必要的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import accuracy_score
# 加载数据集
digits = datasets.load_digits()
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=42)
# 创建SVM分类器
clf = svm.SVC()
# 在训练集上训练SVM模型
clf.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
2、文本分类
SVM在文本分类任务中广泛应用,可以实现垃圾邮件过滤、情感分析等功能。通过将文本数据转化为向量表示,SVM能够对文本进行有效分类。
# 导入必要的库
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import accuracy_score
# 加载数据集
categories = ['alt.atheism', 'soc.religion.christian', 'comp.graphics', 'sci.med']
news = fetch_20newsgroups(categories=categories)
# 特征提取
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(news.data)
y = news.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建SVM分类器
clf = svm.SVC()
# 在训练集上训练SVM模型
clf.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
3、生物信息学
SVM在生物信息学领域中也被广泛应用,如蛋白质分类、DNA序列分析等。SVM能够处理高维度的生物数据,发现潜在的模式和规律。
# 导入必要的库
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn import datasets
# 加载数据集
data = datasets.load_iris()
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)
# 创建SVM分类器
clf = svm.SVC()
# 在训练集上训练SVM模型
clf.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
七、实验总结
支持向量机作为一种强大的分类算法,具有广泛的应用领域和优势。通过最大化支持向量到超平面的距离,SVM能够提高分类的准确性和鲁棒性。在图像分类、文本分类和生物信息学等领域,SVM都显示出了卓越的性能。随着机器学习技术的不断发展,我们可以期待SVM在更多实际问题中的应用。