机器学习sklearn(9)支持向量机svm——非线性
参数说明如下:
- 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——非线性相关推荐
- python sklearn 支持向量机_python机器学习库sklearn之支持向量机svm介绍
python机器学习库sklearn之支持向量机svm介绍tcB太阳2平台注册|网站分类目录 python数据挖掘系列教程tcB太阳2平台注册|网站分类目录 这里只讲述sklearn中如何使用svm算 ...
- 机器学习算法の03 支持向量机SVM
机器学习算法の03 支持向量机SVM SVM的基本概念 线性可分支持向量机 非线性支持向量机和核函数 线性支持向量机与松弛变量 LR与SVM的区别与联系 SVM的基本概念 基本概念: 支持向量机(su ...
- 机器学习算法 08 —— 支持向量机SVM算法(核函数、手写数字识别案例)
文章目录 系列文章 支持向量机SVM算法 1 SVM算法简介 1.1 引入 1.2 算法定义 2 SVM算法原理 2.1 线性可分支持向量机 2.2 SVM计算过程与算法步骤(有点难,我也没理解透,建 ...
- 机器学习模型3——支持向量机SVM
前置知识 拉格朗日乘子法 支持向量机SVM SVM:SVM全称是supported vector machine(⽀持向量机),即寻找到⼀个超平⾯使样本分成两类,并且间隔最⼤. SVM能够执⾏线性或⾮ ...
- svm多分类_人工智能科普|机器学习重点知识——支持向量机SVM
作为模式识别或者机器学习的爱好者,同学们一定听说过支持向量机这个概念,这可是一个,在机器学习中避不开的重要问题. 其实关于这个知识点,有一则很通俗有趣的传说: 很久以前,一个村庄里住着一位退隐的大侠, ...
- 最小二乘法支持向量机一般用在什么场合_人工智能科普|机器学习重点知识——支持向量机SVM...
作为模式识别或者机器学习的爱好者,同学们一定听说过支持向量机这个概念,这可是一个,在机器学习中避不开的重要问题. 其实关于这个知识点,有一则很通俗有趣的传说: 很久以前,一个村庄里住着一位退隐的大侠, ...
- 【Python-ML】SKlearn库支持向量机(SVM) 使用
# -*- coding: utf-8 -*- ''' Created on 2018年1月15日 @author: Jason.F @summary: Scikit-Learn库支持向量机分类算法 ...
- 机器学习算法之支持向量机 SVM
距离知识 点到直线/平面的距离公式: 1.假定点p(x0,y0),平面方程为f(x,y)=Ax+By+C,那么点p到平面f(x)的距离为: 2.从三维空间扩展到多维空间中,如果存在一个超平面f(X)= ...
- 用最通俗的语言讲机器学习之核支持向量机(SVM)
额,对于这个东西我不想扯得太复杂,我也不是什么计算机科学家,我学这个东西包括学机器学习的目的一直都很简单直接粗暴单纯,就是三个字:打建模!是的,我就是个俗人,所以写的这篇文章非俗人是看不懂的,如果有想 ...
最新文章
- CAS 4.0.0RC 配置MD5验证功能
- xshell突出显示集
- jenkins pipeline python_【python3-4】Jenkins pipline集成参数自动化执行python脚本
- mugen4g补丁如何使用_如何搜索下载游戏
- qgraphicsitem鼠标移动事件阻塞_常用的DOM事件
- elastic search java_在 Java 应用程序中使用 Elasticsearch
- Scanner对象接收数据进行分类处理 java
- python程序如何做界面_如何用Python给已有小程序做界面?
- (三)比特币时间序列数据的AI异常检测
- SpringBoot2.0使用Spring WebFlux之HelloWord篇
- linux git 搭建 debian,基于Debian Linux搭建Git服务器
- sql azure 语法_将SQL工作负载迁移到Microsoft Azure:服务选择
- Eos的Wasm智能合约的局限性
- 教你手工mysql拆库
- linux中源码安装node
- pip install ipython出错_Python -- 关于pip安装Ipython
- Restorator 2007 3.70.1729
- Win8 64位 安装 Delphi5
- 【分享】精通并发与Netty教程
- ug导出html,UG如何将工程图导出到CAD中?
热门文章
- 什么软件测试苹果手机循环电池,小技巧 | 不利用第三方软件,查看苹果设备电池循环次数...
- java code combat_CodeCombat编程游戏
- Logcat 使用笔记
- 安卓厨房linux汉化,【Madrigal 原创】一键制作ROM包,和安卓厨房完整版优化精简...
- Oracle:使用Impdp导入dmp文件的详细过程
- 设计模式——深入浅出策略模式
- [MATLAB技术贴]漫谈MATLAB矩阵转置
- 随机森林模型构建--在凯斯西储(CWRU)数据上的简单测试(1)
- 实验一 Multisim及门电路逻辑功能及测试
- JAVA 2022.7.12课程总结