支持向量机

  • 说明
  • 支持向量机
  • 示例
  • python代码


说明

sklearn训练好的支持向量机模型_sklearn ,随后求出权重sklearn训练好的支持向量机模型_sklearn_02和截距sklearn训练好的支持向量机模型_sklearn训练好的支持向量机模型_03,最终求得决策边界。

支持向量机

  在scikit-learn中SVC实现了支持向量机模型,可以用于二分类也可以用于多分类,支持线性和非线性,是比较常用到,对于大数据量的样本并不实用,并其原型为:

class sklearn.svm.SVC(*, C=1.0, kernel='rbf', degree=3, 
gamma='scale', coef0=0.0, shrinking=True, probability=False, 
tol=0.001, cache_size=200, class_weight=None, verbose=False, 
max_iter=- 1, decision_function_shape='ovr', break_ties=False, 
random_state=None)

参数
C:浮点型,容错值,如果C越大,意味着对分类要求越严格。
kernel:默认值为rbf,选择核函数

  • ‘linear’:线性核sklearn训练好的支持向量机模型_sklearn训练好的支持向量机模型_04
  • ‘poly’:多项式核sklearn训练好的支持向量机模型_python_05
  • ‘rbf’:高斯核函数sklearn训练好的支持向量机模型_机器学习_06
  • ‘sigmoid’:sklearn训练好的支持向量机模型_机器学习_07
  • ‘precomputed’:提供一个可调用对象,它被用来从数据矩阵中预先计算核矩阵(n_samples, n_samples)
  • 注:sklearn训练好的支持向量机模型_sklearn训练好的支持向量机模型_08为gamma参数,sklearn训练好的支持向量机模型_python_09为coef0参数

degree:一个整数,当kernel=‘rbf’时可以被使用,表示多项式的次数。
gamma:默认为‘scale’,核函数系数,当kernel为‘poly’、‘rbf’、‘sigmoid’时。

  • ‘scale’:其值为sklearn训练好的支持向量机模型_python_10
  • ‘auto’:其值为sklearn训练好的支持向量机模型_机器学习_11

coef0:浮点型,默认为0.0,核函数的自由项,只有在kernel为‘poly’、‘sigmoid’时才有意义。
shrinking:布尔值,默认为True,如果为True,则使用启发式收缩,这样在迭代次数比较大的情况下,可以缩短迭代时间。
probability:布尔值,默认为True,如果为True,则启动概率估计功能,必须在模型训练之前设置,因为训练时会使用5折交叉验证,会延长训练时长。
tol:浮点数,默认为1e-3,指定迭代的阈值。
cache_size:浮点数,默认为200,单位MB,指定核函数cache大小。
class_weight:字典或者字符串 ‘balanced’,默认为None,指定权重。

  • ‘None’:如果未给出,则权重为1
  • ‘字典’:如果是字典,则指定每个类的权重
  • ‘balanced’:如果是字符串balanced,每个类的权重是它类频率的反比,sklearn训练好的支持向量机模型_支持向量机_12

verbose:布尔值,默认为False,如果为True,启动verbose输出,不能在多线程环境中运行。
max_iter:整数,默认为-1,指定最大迭代次数。
decision_function_shape:字符串,默认’ovr’,指定决策函数的形状。

  • ‘ovo’:使用one-vs-one (‘ovo’)准则,决策函数形状 sklearn训练好的支持向量机模型_支持向量机_13,每个分类定义了一个二分类SVM,由n_classes个二分类SVM组成一个多分类SVM
  • ‘ovr’:使用one-vs-rest(‘ovr’)准则,决策函数形状 sklearn训练好的支持向量机模型_支持向量机_14,每个分类定义了一个二分类SVM,由n_classes个二分类SVM组成一个多分类SVM

break_ties:布尔值,默认为False,如果为True,决策准则为’ovr’且类别数量大于2,则决策函数的置信度将被打破。
random_state:一个帧数或者一个RandomState实例或者为None,默认为None。

  • 如果是整数:它指定了随机数生成器的种子。
  • 如果是RandomState:指定了一个随机数生成器。
  • 如果是None:使用默认的随机数生成器。

属性
class_weight:一个数组,形状为[n_classes],类别权重。
classes_:一个数组,形状为[n_classes],分类的标签值。
coef_:一个数组,形状为[n_classes*(n_classes-1)/2,n_classes],每个特征的系数,只有在线性核中有效。
dual_coef_:形状为[n_classes-1,n_SV],对偶问题中,在分类决策函数中每个支持向量机的系数。
fit_status_:一个整数,0表示正确拟合,否则为1。
intercept_:一个数组,形状为[n_classes*(n_classes-1)/2,],决策函数中的常数项。
support_:一个数组[n_SV],支持向量的下标。
support_vectors_:一个数组[n_SV,n_features],支持向量。
n_support_:一个数组[n_classes],每个分类的支持向量机的个数。
probA_:一个数组,形状为[n_classes*(n_classes-1)/2]
probB_:一个数组,形状为[n_classes*(n_classes-1)/2]

  • 如果参数probability为False,则probA_和probB_的值为空,如果probability为True,进行概率估计。

shape_fit_:一个维度元组,显示训练数据的维度。

实例方法
decision_function(X):预测样本的置信分数。
fit(X,y):训练模型。
get_params([deep]):获取模型参数信息。
predict(X):用模型进行预测,返回预测值。
score(X, y[, sample_weight]):返回模型的预测性能得分。
set_params(**params):设置模型参数。

示例

import matplotlib
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
from sklearn import datasets
from sklearn.svm import SVC
import pandas as pd
import numpy as np

 读取数据
data = datasets.load_iris().data
target = datasets.load_iris().target
# 这里只取两个特征,两个类别便于画图
X = data[:,(2,3)]
X0 = np.insert(X,2,values=target,axis=1)
dataset = pd.DataFrame(X0,columns=['x0','x1','y'])
dataset = dataset[dataset['y']!=2]
# 训练预测
clf = SVC(kernel='linear',C=float('inf'),probability=True)
clf.fit(dataset[['x0','x1']],dataset['y'])
clf_pred = clf.predict(dataset[['x0','x1']])
# 输出参数
x0 = np.linspace(0, 5.5, 200)
w = clf.coef_[0]
b = clf.intercept_[0]
boundry_line = -b/w[1] -w[0]/w[1]*x0
support = clf.support_vectors_
# 边界
margine = 1/w[1]
margine_high = boundry_line + margine
margine_low  = boundry_line - margine
# 画图
plt.figure(figsize=(8,5))
plt.xlim(0,5)
plt.ylim(0,2)
plt.plot(dataset['x0'][dataset['y']==0],dataset['x1'][dataset['y']==0],'ro')
plt.plot(dataset['x0'][dataset['y']==1],dataset['x1'][dataset['y']==1],'bo')
plt.plot(x0,boundry_line,'b',linewidth=2)
plt.plot(x0,margine_high,'b--',linewidth=2)
plt.plot(x0,margine_low,'b--',linewidth=2)
plt.scatter(support[:,0],support[:,1],s=180,facecolors='#7f7f7f')
plt.show()

sklearn训练好的支持向量机模型_机器学习_15

python代码

git地址:https://github.com/lingxiaaisuixin/MarchineLearning/tree/master/SVM