简单上手sklearn机器学习:支持向量机(SVC)

        这里是对sklearn库里的机器学习支持向量机分类器SVC的实战文章,大家如果对其原理感兴趣的话可以自行搜索,这里我将会带你零基础学会使用sklearn库里面的SVC,这里只是一个很简单的模型实战,如果写的不好也请多多指教。

1 数据的确定与划分

        这里我就直接用sklearn里自带的鸢尾花数据集来进行实战,因为这里的数据集是完整无缺失的,所以就不进行数据预处理了,首先我们导入鸢尾花数据集。

from sklearn.datasets import load_iris


data=load_iris()
X=data.data
Y=data.target

        对数据进行划分,我们采用sklearn自带的划分数据集,对数据进行37划分,其中70%作为训练集,30%作为测试集,同时将数据随机数固定,确保每次划分的数据集一样。

from sklearn.model_selection import train_test_split


Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,Y,test_size=0.3,random_state=420)

2 模型的选参与调优

        到这里我们就开始对模型进行选参和调优了,首先在sklearn的SVC中,你要选择的参数就是核函数,这里不懂的想要了解一下的可以自行上网去搜索,对于核函数的选择我们在kernel中进行操作的,下面请看代码。

from sklearn.svm import SVC


Kernel = ["linear","poly","rbf","sigmoid"]
scorel=[]
for k in Kernel:
    clf = SVC(kernel=k).fit(Xtrain,Ytrain)
    scorel.append(clf.score(Xtest,Ytest))
best_kernel=Kernel[scorel.index(max(scorel))]
best_kernel

        通过上面的代码我们初步确定了参数kernel的值,同时不同的核函数他所对应的参数也有所不同,具体如下图所示。

        不同参数的调参步骤基本上都是一致的,这里我们拿rbf为例来进行调参,同时为了更加直观的表现出训练的过程,我们将其绘制出来,同时参数cache_size表示模型训练时的内存大小,大家可以根据自己电脑的配置来修改,单位为MB。

import numpy as np
import matplotlib.pyplot as plt


mc = []
gamma_range = np.logspace(-10, 1, 50)
for i in gamma_range:
    clf = SVC(kernel="rbf",gamma = i,cache_size=2000).fit(Xtrain,Ytrain)
    mc.append(clf.score(Xtest,Ytest))
    
print(max(mc), gamma_range[mc.index(max(mc))])
plt.plot(gamma_range,mc)
plt.show()

         训练过程如下图所示,如果你训练完后发现图像依旧呈现上升趋势的话那就增大范围在进行训练。

         最后我们来对本文中最后一个参数C来进行调优,它代表了错误项的惩罚参数,用于控制模型的复杂度与对训练数据拟合程度之间的权衡,我们可以通过对C的调优来优化模型。

q = []
C_range = np.linspace(0.01,30,50)
for i in C_range:
    clf = SVC(kernel="rbf",C=i,gamma = gamma_range[mc.index(max(mc))],cache_size=20000).fit(Xtrain,Ytrain)
    q.append(clf.score(Xtest,Ytest))
    
print(max(q), C_range[q.index(max(q))])
plt.plot(C_range,q)
plt.show()

         训练过程如下图所示。

 3 总结

        到这里一个简单的SVC模型实战就结束了,希望对大家有所帮助,如果有错误也希望大家提出来,我们共同进步。

4 代码汇总

from sklearn.datasets import load_iris
from sklearn.svm import SVC
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split


data=load_iris()
X=data.data
Y=data.target

Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,Y,test_size=0.3,random_state=420)

Kernel = ["linear","poly","rbf","sigmoid"]
scorel=[]
for k in Kernel:
    clf = SVC(kernel=k).fit(Xtrain,Ytrain)
    scorel.append(clf.score(Xtrain,Ytrain))
best_kernel=Kernel[scorel.index(max(scorel))]

mc = []
gamma_range = np.logspace(-10, 1, 50)
for i in gamma_range:
    clf = SVC(kernel="rbf",gamma = i,cache_size=2000).fit(Xtrain,Ytrain)
    mc.append(clf.score(Xtrain,Ytrain))
    
print(max(mc), gamma_range[mc.index(max(mc))])
plt.plot(gamma_range,mc)
plt.show()

q = []
C_range = np.linspace(0.01,30,50)
for i in C_range:
    clf = SVC(kernel="rbf",C=i,gamma = gamma_range[mc.index(max(mc))],cache_size=20000).fit(Xtrain,Ytrain)
    q.append(clf.score(Xtrain,Ytrain))
    
print(max(q), C_range[q.index(max(q))])
plt.plot(C_range,q)
plt.show()

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值