参数说明如下:

  • C:惩罚项,float类型,可选参数,默认为1.0,C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。
  • kernel:核函数类型,str类型,默认为’rbf’。可选参数为:

’linear’:线性核函数

‘poly’:多项式核函数

‘rbf’:径像核函数/高斯核

‘sigmod’:sigmod核函数

‘precomputed’:核矩阵

  • precomputed表示自己提前计算好核函数矩阵,这时候算法内部就不再用核函数去计算核矩阵,而是直接用你给的核矩阵,核矩阵需要为n*n的。
  • degree:多项式核函数的阶数,int类型,可选参数,默认为3。这个参数只对多项式核函数有用,是指多项式核函数的阶数n,如果给的核函数参数是其他核函数,则会自动忽略该参数。
  • gamma:核函数系数,float类型,可选参数,默认为auto。只对’rbf’ ,’poly’ ,’sigmod’有效。如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features。
  • coef0:核函数中的独立项,float类型,可选参数,默认为0.0。只有对’poly’ 和,’sigmod’核函数有用,是指其中的参数c。
  • probability:是否启用概率估计,bool类型,可选参数,默认为False,这必须在调用fit()之前启用,并且会fit()方法速度变慢。
  • shrinking:是否采用启发式收缩方式,bool类型,可选参数,默认为True。
  • tol:svm停止训练的误差精度,float类型,可选参数,默认为1e^-3。
  • cache_size:内存大小,float类型,可选参数,默认为200。指定训练所需要的内存,以MB为单位,默认为200MB。
  • class_weight:类别权重,dict类型或str类型,可选参数,默认为None。给每个类别分别设置不同的惩罚参数C,如果没有给,则会给所有类别都给C=1,即前面参数指出的参数C。如果给定参数’balance’,则使用y的值自动调整与输入数据中的类频率成反比的权重。
  • verbose:是否启用详细输出,bool类型,默认为False,此设置利用libsvm中的每个进程运行时设置,如果启用,可能无法在多线程上下文中正常工作。一般情况都设为False,不用管它。
  • max_iter:最大迭代次数,int类型,默认为-1,表示不限制。
  • decision_function_shape:决策函数类型,可选参数’ovo’和’ovr’,默认为’ovr’。’ovo’表示one vs one,’ovr’表示one vs rest。
  • random_state:数据洗牌时的种子值,int类型,可选参数,默认为None。伪随机数发生器的种子,在混洗数据时用于概率估计。

调参要点:

  • 一般推荐在做训练之前对数据进行归一化,当然测试集中的数据也需要归一化。
  • 在特征数非常多的情况下,或者样本数远小于特征数的时候,使用线性核,效果已经很好,并且只需要选择惩罚系数C即可。
  • 在选择核函数时,如果线性拟合不好,一般推荐使用默认的高斯核'rbf'。这时我们主要需要对惩罚系数C和核函数参数gamma进行艰苦的调参,通过多轮的交叉验证选择合适的惩罚系数C和核函数参数gamma。
  • 理论上高斯核不会比线性核差,但是这个理论却建立在要花费更多的时间来调参上。所以实际上能用线性核解决问题我们尽量使用线性核。

更详细的参数调试可以参考:https://www.cnblogs.com/pinard/p/6126077.html

import numpy as np
import pandas as pd
from sklearn import svm
import matplotlib.pyplot as plt
%matplotlib inline

#载入训练集
path_train = r"C:\Users\Machine Learning\testset_rbf.txt"
dataset = pd.read_csv(path_train, sep='\t', header=None, encoding='ANSI')

#拆分特征向量和标签
dataset = np.array(dataset)
dataset_data = dataset[:,:-1]
dataset_label = dataset[:,-1]

#数据集可视化
plt.scatter(dataset_data[dataset_label==1,0],dataset_data[dataset_label==1,1])
plt.scatter(dataset_data[dataset_label==-1,0],dataset_data[dataset_label==-1,1])
plt.show()

#训练模型
clf = svm.SVC(kernel='rbf', gamma='auto')
clf.fit(dataset_data, dataset_label)

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

clf.support_vectors_         #支持向量

array([[-2.14824e-01,  6.62756e-01],[-5.57789e-01,  3.75797e-01],[ 4.90767e-01, -6.80029e-01],[-3.56048e-01,  5.37960e-01],[-4.75167e-01, -3.46247e-01],[ 4.02158e-01,  5.77744e-01],[ 6.19080e-01, -8.81880e-02],[ 5.39368e-01, -3.74972e-01],[-4.03483e-01,  4.74466e-01],[-1.29980e-02,  5.25985e-01],[ 1.53738e-01,  4.91531e-01],[ 3.88215e-01, -6.56567e-01],[ 7.47800e-01, -6.66300e-02],[-7.01600e-01,  1.90983e-01],[ 5.95222e-01,  2.09570e-01],[-3.07768e-01,  5.03038e-01],[-7.77063e-01, -3.48066e-01],[-7.55431e-01,  9.67110e-02],[ 3.34204e-01,  3.81237e-01],[ 2.27222e-01,  5.27437e-01],[ 5.77939e-01,  4.03784e-01],[-5.68534e-01,  4.42948e-01],[ 2.97885e-01, -6.32874e-01],[ 5.41359e-01, -2.05969e-01],[-6.89946e-01, -5.08674e-01],[ 5.23902e-01, -4.36156e-01],[ 2.49281e-01, -7.11840e-01],[ 1.93449e-01,  5.74598e-01],[-2.57542e-01, -7.53885e-01],[-7.25568e-01, -2.92022e-01],[ 2.23650e-01,  1.30142e-01],[ 2.07123e-01, -1.94630e-02],[ 1.95300e-01, -1.79039e-01],[-2.38076e-01,  5.83000e-04],[-4.13576e-01,  1.45681e-01],[ 1.99894e-01, -1.99381e-01],[-3.92868e-01, -1.25261e-01],[ 3.53588e-01, -7.06170e-02],[ 3.94164e-01, -5.82170e-02],[-4.49349e-01, -3.80740e-02],[ 2.68066e-01, -7.16210e-02],[-1.51650e-02,  3.59326e-01],[ 7.95220e-02,  1.93198e-01],[ 2.53289e-01, -2.85861e-01],[-2.50001e-01,  1.41621e-01],[ 6.82860e-02,  3.92741e-01],[ 3.53980e-02, -3.33682e-01],[ 2.11795e-01,  2.46890e-02],[-4.56770e-02,  1.72907e-01],[ 2.29465e-01,  2.50409e-01],[ 3.84300e-01, -1.76570e-01],[ 1.73900e-02,  1.52441e-01],[-2.93382e-01, -1.39778e-01],[-2.03272e-01,  2.86855e-01],[ 2.33512e-01, -1.06274e-01],[-4.48939e-01,  1.76725e-01],[ 1.55907e-01, -1.66371e-01],[ 2.04177e-01, -2.35160e-02],[-2.16050e-02,  1.58080e-01]])

clf.support_

array([ 0,  6, 15, 17, 21, 25, 27, 30, 36, 41, 42, 43, 46, 48, 53, 58, 59,65, 76, 78, 81, 82, 85, 87, 88, 90, 91, 92, 93, 99,  3,  7,  9, 13,14, 16, 18, 19, 23, 26, 28, 29, 33, 34, 40, 45, 50, 51, 52, 54, 56,60, 61, 62, 71, 74, 75, 80, 94])

clf.n_support_

array([30, 29])

#载入测试集
path_test = r"C:\Users\Machine Learning\testset_rbf2.txt"
dataset2 = pd.read_csv(path_test, header=None, sep='\t')
dataset2 = np.array(dataset2)
dataset2_data_test = dataset2[:,:-1]
dataset2_label_test = dataset2[:,-1]

clf_pred = clf.predict(dataset2_data_test)

clf.score(dataset2_data_test, dataset2_label_test)     #模型评估

0.9

#统计预测错误率

num = len(dataset2_label_test)
n = 0
for i in range(0,num):
    if clf_pred[i] != dataset2_label_test[i]:
        n += 1
print(n)
print("error_rate: %.2f" %(n/num) )

10
error_rate: 0.10

#对比真实值与预测值

print('dataset2_label_test clf_pred')
for i in range(0,num):
    print(dataset2_label_test[i],'                 ', clf_pred[i])

dataset2_label_test clf_pred
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   -1.0
-1.0                   1.0
-1.0                   -1.0
-1.0                   -1.0

机器学习sklearn(9)支持向量机svm——非线性相关推荐

  1. python sklearn 支持向量机_python机器学习库sklearn之支持向量机svm介绍

    python机器学习库sklearn之支持向量机svm介绍tcB太阳2平台注册|网站分类目录 python数据挖掘系列教程tcB太阳2平台注册|网站分类目录 这里只讲述sklearn中如何使用svm算 ...

  2. 机器学习算法の03 支持向量机SVM

    机器学习算法の03 支持向量机SVM SVM的基本概念 线性可分支持向量机 非线性支持向量机和核函数 线性支持向量机与松弛变量 LR与SVM的区别与联系 SVM的基本概念 基本概念: 支持向量机(su ...

  3. 机器学习算法 08 —— 支持向量机SVM算法(核函数、手写数字识别案例)

    文章目录 系列文章 支持向量机SVM算法 1 SVM算法简介 1.1 引入 1.2 算法定义 2 SVM算法原理 2.1 线性可分支持向量机 2.2 SVM计算过程与算法步骤(有点难,我也没理解透,建 ...

  4. 机器学习模型3——支持向量机SVM

    前置知识 拉格朗日乘子法 支持向量机SVM SVM:SVM全称是supported vector machine(⽀持向量机),即寻找到⼀个超平⾯使样本分成两类,并且间隔最⼤. SVM能够执⾏线性或⾮ ...

  5. svm多分类_人工智能科普|机器学习重点知识——支持向量机SVM

    作为模式识别或者机器学习的爱好者,同学们一定听说过支持向量机这个概念,这可是一个,在机器学习中避不开的重要问题. 其实关于这个知识点,有一则很通俗有趣的传说: 很久以前,一个村庄里住着一位退隐的大侠, ...

  6. 最小二乘法支持向量机一般用在什么场合_人工智能科普|机器学习重点知识——支持向量机SVM...

    作为模式识别或者机器学习的爱好者,同学们一定听说过支持向量机这个概念,这可是一个,在机器学习中避不开的重要问题. 其实关于这个知识点,有一则很通俗有趣的传说: 很久以前,一个村庄里住着一位退隐的大侠, ...

  7. 【Python-ML】SKlearn库支持向量机(SVM) 使用

    # -*- coding: utf-8 -*- ''' Created on 2018年1月15日 @author: Jason.F @summary: Scikit-Learn库支持向量机分类算法 ...

  8. 机器学习算法之支持向量机 SVM

    距离知识 点到直线/平面的距离公式: 1.假定点p(x0,y0),平面方程为f(x,y)=Ax+By+C,那么点p到平面f(x)的距离为: 2.从三维空间扩展到多维空间中,如果存在一个超平面f(X)= ...

  9. 用最通俗的语言讲机器学习之核支持向量机(SVM)

    额,对于这个东西我不想扯得太复杂,我也不是什么计算机科学家,我学这个东西包括学机器学习的目的一直都很简单直接粗暴单纯,就是三个字:打建模!是的,我就是个俗人,所以写的这篇文章非俗人是看不懂的,如果有想 ...

最新文章

  1. CAS 4.0.0RC 配置MD5验证功能
  2. xshell突出显示集
  3. jenkins pipeline python_【python3-4】Jenkins pipline集成参数自动化执行python脚本
  4. mugen4g补丁如何使用_如何搜索下载游戏
  5. qgraphicsitem鼠标移动事件阻塞_常用的DOM事件
  6. elastic search java_在 Java 应用程序中使用 Elasticsearch
  7. Scanner对象接收数据进行分类处理 java
  8. python程序如何做界面_如何用Python给已有小程序做界面?
  9. (三)比特币时间序列数据的AI异常检测
  10. SpringBoot2.0使用Spring WebFlux之HelloWord篇
  11. linux git 搭建 debian,基于Debian Linux搭建Git服务器
  12. sql azure 语法_将SQL工作负载迁移到Microsoft Azure:服务选择
  13. Eos的Wasm智能合约的局限性
  14. 教你手工mysql拆库
  15. linux中源码安装node
  16. pip install ipython出错_Python -- 关于pip安装Ipython
  17. Restorator 2007 3.70.1729
  18. Win8 64位 安装 Delphi5
  19. 【分享】精通并发与Netty教程
  20. ug导出html,UG如何将工程图导出到CAD中?

热门文章

  1. 什么软件测试苹果手机循环电池,小技巧 | 不利用第三方软件,查看苹果设备电池循环次数...
  2. java code combat_CodeCombat编程游戏
  3. Logcat 使用笔记
  4. 安卓厨房linux汉化,【Madrigal 原创】一键制作ROM包,和安卓厨房完整版优化精简...
  5. Oracle:使用Impdp导入dmp文件的详细过程
  6. 设计模式——深入浅出策略模式
  7. [MATLAB技术贴]漫谈MATLAB矩阵转置
  8. 随机森林模型构建--在凯斯西储(CWRU)数据上的简单测试(1)
  9. 实验一 Multisim及门电路逻辑功能及测试
  10. JAVA 2022.7.12课程总结