支持向量机(Support Vector Machine,SVM)
概念:
在支持向量机中,样本数据被看作是在空间中的点,不同类别的样本被尽可能大的间隔分开。超平面是一个划分空间的决策边界,具有最大间隔,使得离超平面最近的样本点称为支持向量
原理:
支持向量机可以用于线性可分和线性不可分的数据集。对于线性可分数据集,支持向量机可以找到一个线性超平面将数据完全分开。对于线性不可分数据集,支持向量机使用核函数来将数据映射到高维空间,从而使其线性可分。
-
最大间隔分类:SVM的目标是找到一个超平面,能够在不同类别的样本之间保持最大的间隔。间隔是指从超平面到最近的样本点的距离,最大化间隔可以提高分类器的鲁棒性和泛化能力。
-
支持向量:在最大间隔超平面的确定过程中,只有少数样本点对于定义超平面起决定作用,它们被称为支持向量。支持向量决定了超平面的位置和方向。
-
核函数:SVM可以使用核函数将数据映射到高维特征空间,从而使非线性可分的问题线性可分化。常用的核函数有线性核、多项式核和径向基函数(RBF)核等。
-
对偶问题和凸优化:SVM的训练过程可以通过解决对偶问题来实现,这样可以将原始问题转化为凸优化问题。通过求解对偶问题,可以得到支持向量的权重和超平面的参数。
-
软间隔和惩罚因子:SVM可以处理部分线性可分的问题,引入软间隔和惩罚因子来容忍一定的错误分类。
用途:
二分类或者多分类
输入数据:
通常使用一个特征矩阵X来表示输入样本的特征,以及一个目标向量y来表示样本的分类标签
算法库:
sklearn
数据集划分:
train_test_split
是一个用于将数据集拆分为训练集和测试集的函数。它可以帮助我们评估机器学习模型在未见过的数据上的性能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 将数据集拆分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建一个支持向量机分类器 clf = svm.SVC() # 在训练集上训练分类器 clf.fit(X_train, y_train) # 在测试集上进行预测 y_pred = clf.predict(X_test) # 计算预测准确率 accuracy = accuracy_score(y_test, y_pred) print( "准确率:" , accuracy) |
函数的返回值包括:
X_train
:拆分后的训练集特征数据,用来训练X_test
:拆分后的测试集特征数据,用来预测y_train
:拆分后的训练集目标变量数据,用来训练y_test
:拆分后的测试集目标变量数据,和X_test的预测结果进行对比,评估模型的准确性
案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from sklearn import svm # 训练数据集 X = [[160], [165], [170], [175], [180]] # 身高(单位:厘米) y = [0, 0, 1, 1, 1] # 标签:0表示低于阈值,1表示高于阈值 # 创建支持向量机模型 model = svm.SVC(kernel= 'linear' ) # 使用训练数据拟合模型 model.fit(X, y) # 创建新样本 new_samples = [[168], [172]] # 待预测的身高 # 使用训练好的模型进行预测 predictions = model.predict(new_samples) # 输出预测结果 for sample, prediction in zip(new_samples, predictions): if prediction == 0: print(f "身高 {sample[0]} 厘米,预测为低于阈值" ) else : print(f "身高 {sample[0]} 厘米,预测为高于阈值" ) |
输出结果:
身高 168 厘米,预测为低于阈值
身高 172 厘米,预测为高于阈值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!