【机器学习】支持向量机实战项目:水果分类器优化

支持向量机实战项目:水果分类器优化


手动反爬虫: 原博地址 https://blog.csdn.net/lys_828/article/details/122648245

 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

传统分类算法大部分是二值分类算法:系统随机产生一个超平面并移动它,直到训练集中属于不同类别的样本点正好位于该超平面的两侧。显然,这种机理能够解决线性分类问题,但不能够保证产生的超平面是最优的。

支持向量机(Support Vector Machine, SVM)基本思想:建立的最优分类超平面能够在保证分类精度的同时,使超平面两侧的空白区域最大化,从而实现对线性可分问题的最优分类。

除了解决线性分类的问题,也可以借助核函数实现线性不可分的问题。具体思路:将不可分样本映射到高维空间中,让样本点在高维空间线性可分。举个例子如下。
请添加图片描述

常见的核函数有:

(1)线性核函数
k ( x i , x j ) = x i T x j k(x_i,x_j)=x^T_ix_j k(xi,xj)=xiTxj
(2)多项式核函数
k ( x i , x j ) = ( x i T x j ) d k(x_i,x_j)=(x^T_ix_j)^d k(xi,xj)=(xiTxj)d
(3)高斯核函数
k ( x i , x j ) = e x p ( − ∣ ∣ x i − x j ∣ ∣ 2 2 δ 2 ) k(x_i,x_j)=exp(-\frac{||x_i-x_j||^2}{2\delta^2}) k(xi,xj)=exp(2δ2xixj2)

利用支持向量机水果分类的完善

第一步仍是加载模块和导入数据,代码及输出结果如下。
请添加图片描述
由于数据EDA之前已经做过了,这里可以直接进行特征数据和标签数据、训练集和测试集的划分。
请添加图片描述
进一步导入支持向量机模块和评估函数,代码如下。

from sklearn.svm import SVC
from sklearn.metrics import accuracy_score 
clf=SVC(kernel='poly',degree=2)
clf.fit(X_train,y_train)
y_pred=clf.predict(X_test)
ac=accuracy_score(y_test,y_pred)
ac

输出结果如下。采用的是二次多项式的核函数进行数据分类,模型最终得分仅有0.33。
请添加图片描述
更换高斯核函数(RBF),代码及输出结果如下。
请添加图片描述
然后更换为线性核函数,代码及输出结果如下。
请添加图片描述
经过上方三个模型的对比,如果直接传入四个特征字段,经过线性核函数下的支持向量机的分类效果最佳。

如果考虑一下数据量纲的影响,进行标准化处理,看看是否会对模型的最终得分有影响。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
scaler.fit(x_train)
x_train2 = scaler.transform(x_train)
x_test2 = scaler.transform(x_test)

输出结果如下。
请添加图片描述
然后将标准化的数据依次应用在三个模型上,代码及输出结果如下。实际输出结果显示,多项式核函数模型的分类效果有所提升,但是高斯核函数模型以及线性核函数模型得分都降低。
请添加图片描述
可以尝试分析一下原因,特征字段中可能存在一些毫无关联的字段,在建模中就属于干扰项,通过关系矩阵查看一下特征字段与标签字段的关联性,代码及输出结果如下。
请添加图片描述
输出中可以发现水果的质量和标签信息的关联性指数只有0.03,已经是极度不相关,可以尝试去除该字段后,再进行模型的创建。

X = fruits[[ 'width', 'height','color_score']]
y = fruits['fruit_label']
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.25)

输出结果如下。
请添加图片描述
将数据依次应用在各个模型上,代码及输出结果如下。这时候使用多项式核函数的模型得分结果最高了,而使用线性核函数的模型得分最低。(也可以尝试把数据标准化后跑一下模型)
请添加图片描述

如果有兴趣,也可以再剔除一个字段,保留两个字段作为特征字段后进行建模看看模型得分。最后需要说明,由于模型都是直接使用,没有进行参数的调整,运行结果可能与当前运行结果不一致,可以指定random_state参数保证每次输出结果一致。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值