一、安装及创建虚拟环境
pip install - i https: // pypi. tuna. tsinghua. edu. cn/ simple 包名
二、SVM简介
Svm
(support Vector Mac
)又称为支持向量机,是一种二分类的模型。支持向量机可以分为线性和非线性两大类。其主要思想是找到空间中的一个更够将所有数据样本划开的直线(平面或者超平面),并且使得数据集中所有数据到这个超平面的距离最短。
线性SVM
有两种方式实现:LinearSVC(C)
和SVC(C=1, kernel="linear")
LinearSVC
(Linear Support Vector Classification
)线性支持向量机,核函数是 linear
,相关参数:
C
:目标函数的惩罚系数C,默认C = 1.0;
loss
:指定损失函数. squared_hinge
(默认), squared_hinge
penalty
: 惩罚方式,str
类型,l1, l2
dual
:选择算法来解决对偶或原始优化问题。当nsamples
>nfeatures
时dual
=false
tol
:svm
结束标准的精度, 默认是1e - 3
multi_class
:如果y输出类别包含多类,用来确定多类策略, ovr
表示一对多,crammer_singer
优化所有类别的一个共同的目标 。如果选择crammer_singer
,损失、惩罚和优化将会被被忽略。
max_iter
: 要运行的最大迭代次数。int
,默认1000。
SVC
用于分类,用libsvm
实现,参数如下:
C
: 惩罚项,默认为1.0,C越大容错空间越小;C越小,容错空间越大
kernel
: 核函数的类型,可选参数为:
linear
: 线性核函数
poly
: 多项式核函数
rbf
: 高斯核函数
sigmod
: sigmod
核函数(竟然还有这种核函数)
precomputed
: 核矩阵,表示自己提前计算好核函数矩阵
degree
: 多项式核函数的阶,默认为3,只对多项式核函数生效,其他的自动忽略
gamma
: 核函数系数,可选,float
类型,默认为auto
。只对rbf
,poly
,sigmod
有效。如果gamma
为auto
,代表其值为样本特征数的倒数,即1/n_features
.
coef0
:核函数中的独立项,float
类型,可选,默认为0.0。只有对poly
和sigmod
核函数有用,是指其中的参数c
probability
:是否启用概率估计,bool
类型,可选参数,默认为False
,这必须在调用fit()
之前启用,并且会fit()
方法速度变慢
tol
:svm
停止训练的误差精度,float
类型,可选参数,默认为1e^-3
cache_size
:内存大小,float
,可选,默认200。指定训练所需要的内存,单位MB
class_weight
:类别权重,dict
类型或str
类型,可选,默认None
。给每个类别分别设置不同的惩罚参数C,如果没有,则会给所有类别都给C=1,即前面指出的C。如果给定参数balance
,则使用y的值自动调整与输入数据中的类频率成反比的权重
max_iter
:最大迭代次数,int
类型,默认为-1,不限制
decision_function_shape
:决策函数类型,可选参数ovo
和ovr
,默认为ovr
。ovo
表示one vs one
,ovr
表示one vs rest
。(多分类)
random_state
:数据洗牌时的种子值,int
类型,可选,默认为None
模型训练结束后,可以使用下列参数:
support_ : array
类型,支持向量的索引
support_vectors_
: 支持向量的集合
n_support_
: 比如SVC
将数据集分成了4类,该属性表示了每一类的支持向量的个数。
dual_coef_
: array, shape = [n_class-1, n_SV]
对偶系数,支持向量在决策函数中的系数,在多分类问题中,这个会有所不同。
coef_ : array
,该参数仅在线性核时才有效,指的是每一个属性被分配的权值。
intercept_
:array
, shape = [n_class * (n_class-1) / 2]
决策函数中的常数项bias
。和coef_
共同构成决策函数的参数值.
三、LinearSVC(C)方式实现分类
输入python
命令进入python
编译
导入需要的包:
import numpy as np
import matplotlib. pyplot as plt
from sklearn import datasets
from sklearn. preprocessing import StandardScaler
from sklearn. svm import LinearSVC
iris= datasets. load_iris( )
X= iris. data
Y= iris. target
X= X[ : , : 2 ]
Y1= Y[ Y< 2 ]
y1= len ( Y1)
Y2= Y[ Y< 1 ]
y2= len ( Y2)
X= X