Python搭建SVM

本文深入探讨了SVM(支持向量机),包括线性分类器、损失函数(多类SVM损失与Softmax损失)、正则化以及数据预处理。介绍了SVM如何通过评分函数进行预测,并使用损失函数衡量预测的准确性。此外,还讨论了正则化如何帮助提升模型的泛化能力。最后,提到了在实际应用中如何处理数据和选择模型参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.线性分类器

2.损失函数 Loss function

多类支持向量机损失(Multiclass Support Vector Machine Loss)

损失函数(Softmax分类器):

 3.正则化(Regularization)

4.总结如下:   

5.部分代码及其解释

6.全部代码 


  从SVM开始才算真正步入机器学习了,之前的KNN只能算是公式应用,毕竟没有损失函数,没有权重优化怎么能称之为学习呢?

SVM的知识包括几个主要方面评分函数、损失函数、正则化以及梯度下降
从整个过程来看:
1.初始化权重,训练数据点乘权重得到评分矩阵;
2.根据评分矩阵和损失函数公式来求得损失值,并对损失值进行正则化,来减小大的权重参数对损失值影响;
3.利用梯度下降方法对损失值来进行迭代,通过损失值来调整权值参数达到最优。

1.线性分类器

    W被称为权重(weights),b被称为偏差向量(bias vector)

举例:xi=32*32*3*1 [3072 x 1]的列向量;W=10*3072   W的每一行对应一个类的分类器

那么xi的大小就变成[3073x1],而不是[3072x1]了,多出了包含常量1的1个维度。W大小就是[10x3073]了。W中多出来的这一列对应的就是偏差值b
把权重和偏差放到一个矩阵(如图1所示),我们就只需要学习一个权重矩阵,而不用去学习两个分别装着权重和偏差的矩阵了。

                                                                                                图1

所得的结果就是想要得到的评分矩阵(具体例子如图2所示)

图2

                                                                                                   图2

 每一行相当于一个分类器,第一行就是cat的分类器,得分分别是第一幅图cat得分是3.2,第二幅图cat得分是4.9。

2.损失函数 Loss function

多类支持向量机损失(Multiclass Support Vector Machine Loss)

第i个数据的多类SVM的损失函数为

        第i个数据中包含图像xi的像素和代表正确类别的标签yi 。评分函数输入像素数据,然后通过公式 来计算不同分类类别的分值。这里我们将分值简写为 。比如,针对第j个类别的得分就是第j个元素:sj=f(xi,W)j。yi 表示正确的得分,针对第i个数据的多类SVM的损失函数定义如下:

关于0的阀值:max(0,-)函数,它常被称为折叶损失(hinge loss)。有时候会听到人们使用平方折叶损失SVM(即L2-SVM),它使用的是max(0,-)2,将更强烈(平方地而不是线性地)地惩罚过界的边界值。
不使用平方是更标准的版本,但是在某些数据集中,平方折叶损失会工作得更好,可以通过交叉验证来决定到底使用哪个。

在上述例子中,Syi ,分别是3.2,4.9,-3.1。

L1=max(0,5.1-3.2+1)+ max(0,-1.7-3.2+1)

L2=…

举例来说,在CIFAR-10中,我们有一个N=50000的训练集,每个图像有D=32x32x3=3072个像素,而K=10,这是因为图片被分为10个不同的类别(狗,猫,汽车等)。定义评分函数为: ,该函数是原始图像像素到分类分值的映射。

损失函数(Softmax分类器):

第i个数据的Softmax分类器的损失函数为

Softmax分类器就可以理解为逻辑回归分类器面对多个分类的一般化归纳。SVM将输出 作为每个分类的评分(因为无定标,所以难以直接解释)。与SVM不同,Softmax的输出(归一化的分类概率)更加直观,并且从概率上可以解释。
在Softmax分类器中,函数映射保持不变,但将这些评分值视为每个分类的未归一化的对数概率,并且将折叶损失(hinge loss)替换为交叉熵损失(cross-entropy loss)。公式如下:

normalize 意思是归一化也就是公式中的

### 使用PythonSVM实现昆虫识别系统 支持向量机(Support Vector Machine, SVM)是一种监督学习算法,广泛用于分类任务。对于昆虫识别这一特定应用领域而言,可以采用如下方式构建基于Python和支持向量机的解决方案。 #### 数据预处理阶段 为了使SVM能够有效工作,首先需要准备高质量的数据集。这通常意味着收集大量不同种类昆虫的照片,并将其转换成适合输入到机器学习模型的形式。考虑到昆虫图像可能存在大小不一的情况,建议先统一调整所有图片尺寸至固定规格;接着提取每张图片的颜色直方图、纹理特征或者更复杂的局部二值模式(LBP)[^1]作为后续训练的基础属性描述符。 #### 特征工程环节 除了简单的像素级表示外,还可以考虑引入更多高级别的语义信息来增强模型表现力。例如通过卷积神经网络(Convolutional Neural Network, CNN)预先训练得到的一系列权重参数初始化一个基础框架,再针对具体应用场景微调最后一层全连接层以适应当前任务需求——这种方法被称为迁移学习(Transfer Learning),它能显著减少所需样本数量并加快收敛速度[^2]。 然而,在此背景下如果坚持选用传统意义上的SVM,则可能需要依赖手工设计特征而非自动化的深度特征抽取机制。此时可以从颜色空间变换(Color Space Transformation)入手,比如RGB转HSV/GrayScale等操作有助于简化背景干扰因素的影响程度;另外边缘检测(Canny Edge Detection)/角点响应(Harris Corner Response)等功能也能帮助捕捉目标物体轮廓结构特点从而提升区分度[^3]。 #### 构建与优化SVM模型过程 一旦完成了前期准备工作之后就可以正式进入核心部分—建立SVM分类器了。Scikit-Learn库提供了非常便捷易用的支持向量分类接口`sklearn.svm.SVC()`,只需指定核函数类型(线性Linear/RBF/Gaussian等)、正则化系数C以及松弛变量gamma即可快速搭建起初步原型: ```python from sklearn import svm clf = svm.SVC(kernel='rbf', C=1.0, gamma='scale') ``` 值得注意的是由于实际场景下各类别间往往存在不平衡现象因此还需额外关注评估指标的选择问题,像精确率(Precision)、召回率(Recall)及其综合衡量标准F1-Score都比单纯依靠准确率(Accuracy)更能反映真实性能优劣情况。 最后切勿忘记交叉验证(Cross Validation)步骤的重要性,借助K折划分(K-Fold Splitting)手段反复测试多个随机子集组合下的泛化能力最终挑选出最优超参配置方案确保部署上线后的稳定性与可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值