支持向量机-sklearn.svm

一、学习SVC()类的主要参数和属性

1、svm.SVC类的主要参数含义

参数含义
C浮点数,默认为1.0,表示误差项惩罚参数。C越小对误分类的惩罚越小,决策平面越光滑;C越大对误分类的惩罚越大,越倾向于精确地分类。
kernel字符串,默认rbf,是‘linear’,‘poly’,‘rbf’,‘sigmoid’中的一个,表示核函数的类型。
degree整数,默认为3,表示多项式核函数(‘poly’)的次数。
gamma浮点数,默认为auto,表示'rbf','poly','sigmoid'核函数的系数,auto表示1/n_features。

 2、svm.SVC类的属性

参数含义
support_ 返回形状为[n_SV]的数组,表示支持向量的索引
support_vectors_ 返回形状为[n_SV,n_features]的数组,表示支持向量
n_support_ 返回形状为[n_class]的数组,表示每个类的支持向量数量
dual_coef_ 返回形状为[n_class-1,n_SV]的数组,表示决策函数中支持向量的系数
coef_ 返回形状为[n_class*(n_class-1)/2,n_features]的数组,表示特征(原始问题的系数)权重,仅在使用线性核时有效
intercept_返回形状为[n_class*(n_class-1)/2]的数组,表示决策函数中的常数 

3、实例——支持向量机二元分类

二维平面上的两个点:(-1,0)作为类别0,(1,0)作为类别1,将这两个点作为训练集来训练支持向量机,使用训练的模型对新的样本进行预测,观察模型参数和训练过的模型参数,此处是选择核函数linear来训练模型的。

(1)观察模型参数

import numpy as np 
from sklearn import svm
x_train=[[-1,0],[1,0]]
y_train=[0,1]
clf=svm.SVC(kernel='linear',gamma=2)
clf.fit(x_train,y_train)
print('支持向量机模型训练参数为:\n',clf)

(2)使用predict()对新值进行预测

print('[-0.5,0]的类别为:',clf.predict([[-0.5,0]]))
print('[0.5,0]的类别为:',clf.predict([[0.5,0]]))

(3)查看SVC()类的属性

print('支持向量机在训练中的索引为:',clf.support_)
print('支持向量为:\n',clf.support_vectors_)
print('每个类的支持向量的数量为:',clf.n_support_)
print('支持向量机决策函数中支持向量的系数为:',clf.dual_coef_)
print('支持向量机的特征权重[线性核时的]为:',clf.coef_)
print('决策函数中的常数为:',clf.intercept_)

 二、使用SVC()训练二元类别数据集的支持向量机

使用样本生成器make_blobs()生成二元分类样本,选择核函数linear训练SVM模型,对两类样本进行分类,设置为100个样本的二元分类问题、指定类别中心位置为(-2,0),(2,0),使用fit()方法对数据集拟合支持向量机分类模型,观察支持向量的属性并预测新的样本类别,可视化原始数据、拟合的分类超平面支持向量、分类超平面及等高线,其中decision_function()的方法可用来计算样本到分类超平面的距离。

(1)训练支持向量机并观察其属性

import numpy as np 
import matplotlib.pyplot as plt
import pandas as pd 
from sklearn import svm 
from sklearn.datasets.samples_generator import make_blobs
centers=([(-2,0),(2,2)])             # 设置的中心位置
x,y=make_blobs(n_samples=100,centers=centers,n_features=2,random_state=0) # 生成100个样本数,二元
clf=svm.SVC(kernel='linear',gamma=2)  # 使用核函数linear
clf.fit(x,y)
print('支持向量在训练集中的索引为:',clf.support_)
print('支持向量为:\n',clf.support_vectors_)
print('每个类的支持向量的数量为:',clf.n_support_)

 我们可以看到,支持向量只有5个,两个类中支持向量的数量分别为3和2。

(2)可视化

plt.figure(figsize=(6,4))
plt.rc('font',size=14)
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],s=80,
            facecolors='none',zorder=10,edgecolors='k')
plt.scatter(x[:,0],x[:,1],c=y,marker='*',zorder=10,cmap=plt.cm.Paired,edgecolors='k')
plt.legend(['支持向量','原始数据'])
x_min,x_max=np.min(x[:,0])-1,np.max(x[:,0])+1
y_min,y_max=np.min(x[:,1])-1,np.max(x[:,1])+1
XX,YY=np.mgrid[x_min:x_max:200j,y_min:y_max:200j]   # 返回两个形状同为(200,200)的数组
Z=clf.decision_function(np.c_[XX.ravel(),YY.ravel()])
Z=Z.reshape(XX.shape)
plt.pcolormesh(XX,YY,Z>0,cmap=plt.cm.Paired)
plt.contour(XX,YY,Z,colors=['k','r','k'],linestyles=['--','-','--'],levels=[-.5,0,.5])
plt.xlim(x_min,x_max)
plt.ylim(y_min,y_max)
plt.title('支持向量机分类结果')
plt.show()

由图可知,拟合的最优分类超平面有5个支持向量,其中一个类别有3个支持向量,另一类别有2个支持向量;其中x_min:x_max:200j表示在[x_min,x_max]区间(包含x_min,x_max)的200个间隔相等的点。

(3)新值的预测

print('(2,2)属于的类别为:',clf.predict([[2,2]]))
print('(-2,2)属于的类别为:',clf.predict([[-2,2]]))

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值