sklearn svm基本使用

栏目: 编程工具 · 发布时间: 6年前

内容简介:SVM在解决分类问题具有良好的效果,出名的软件包有推荐使用SVM的步骤为:

SVM基本使用

SVM在解决分类问题具有良好的效果,出名的软件包有 libsvm (支持多种核函数), liblinear (线性核)。此外 python 机器学习库scikit-learn也有svm相关算法, sklearn.svm. SVC

sklearn.svm.LinearSVR 分别由libsvm和liblinear发展而来。

推荐使用SVM的步骤为:

  1. 将原始数据转化为SVM算法软件或包所能识别的数据格式;
  2. 将数据标准化;(防止样本中不同特征数值大小相差较大影响分类器性能)
  3. 不知使用什么核函数,考虑使用RBF;
  4. 利用交叉验证网格搜索寻找最优参数(C, γ);(交叉验证防止过拟合,网格搜索在指定范围内寻找最优参数)
  5. 使用最优参数来训练模型;
  6. 测试。

下面利用scikit-learn说明上述步骤:

 1 import numpy as np
 2 from sklearn.svm import SVC
 3 from sklearn.preprocessing import StandardScaler
 4 from sklearn.model_selection import GridSearchCV, train_test_split
 5 
 6 def load_data(filename)
 7     '''
 8     假设这是鸢尾花数据,csv数据格式为:
 9     0,5.1,3.5,1.4,0.2
10     0,5.5,3.6,1.3,0.5
11     1,2.5,3.4,1.0,0.5
12     1,2.8,3.2,1.1,0.2
13     每一行数据第一个数字(0,1...)是标签,也即数据的类别。
14     '''
15     data = np.genfromtxt(filename, delimiter=',')
16     x = data[:, 1:]  # 数据特征
17     y = data[:, 0].astype(int)  # 标签
18     scaler = StandardScaler()
19     x_std = scaler.fit_transform(x)  # 标准化
20     # 将数据划分为训练集和测试集,test_size=.3表示30%的测试集
21     x_train, x_test, y_train, y_test = train_test_split(x_std, y, test_size=.3)
22     return x_train, x_test, y_train, y_test
23 
24 
25 def svm_c(x_train, x_test, y_train, y_test):
26     # rbf核函数,设置数据权重
27     svc = SVC(kernel='rbf', class_weight='balanced',)
28     c_range = np.logspace(-5, 15, 11, base=2)
29     gamma_range = np.logspace(-9, 3, 13, base=2)
30     # 网格搜索交叉验证的参数范围,cv=3,3折交叉
31     param_grid = [{'kernel': ['rbf'], 'C': c_range, 'gamma': gamma_range}]
32     grid = GridSearchCV(svc, param_grid, cv=3, n_jobs=-1)
33     # 训练模型
34     clf = grid.fit(x_train, y_train)
35     # 计算测试集精度
36     score = grid.score(x_test, y_test)
37     print('精度为%s' % score)
38 
39 if __name__ == '__main__':
40     svm_c(load_data('example.csv'))

其它内容

网格搜索小技巧

网格搜索法中寻找最优参数中为寻找最优参数,网格大小如果设置范围大且步长密集的话难免耗时,但是不这样的话又可能找到的参数不是很好,针对这解决方法是,先在大范围,大步长的粗糙网格内寻找参数。在找到的参数左右在设置精细步长找寻最优参数比如:

  1. 一开始寻找范围是 C = 2 −5 , 2 −3 , . . . , 2 15 and γ = 2 −15 , 2 −13 , . . . , 2 3 .由此找到的最优参数是(2 3 , 2 −5 );
  2. 然后设置更小一点的步长,参数范围变为2 1 , 2 1.25 , . . . , 2 5 and γ = 2 −7 , 2 −6.75 , . . . , 2 −3   在这个参数范围再寻找最优参数。

这样既可以避免一开始就使用大范围,小步长而导致分类器进行过于多的计算而导致计算时间的增加。

线性核和RBF的选择

如果训练样本的特征数量过于巨大,也许就不需要通过RBF等非线性核函数将其映射到更高的维度空间上,利用非线性核函数也并不能提高分类器的性能。利用linear核函数也可以获得足够好的结果,此外,也只需寻找一个合适参数C,但是利用RBF核函数取得与线性核函数一样的效果的话需要寻找两个合适参数(C, γ)。

分三种情况讨论:

  1. 样本数量远小于特征数量:这种情况,利用情况利用linear核效果会高于RBF核。
  2. 样本数量和特征数量一样大:线性核合适,且速度也更快。liblinear更适合
  3. 样本数量远大于特征数量: 非线性核RBF等合适。

本文主要参考这篇 A Practical Guide to Support Vector Classification

libsvm: A Library for Support Vector Machines

liblinear : A Library for Large Linear Classification

sklearn : scikit-learn Machine Learning in Python


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网站重构

网站重构

[美] Jeffrey Zeldman / 傅捷、王宗义、祝军 / 电子工业出版社 / 2005-4 / 38.00元

这本书是为了希望自己的网站成本变得更低,运行得更好,访问者更多的网页设计师、开发者、网站所有者及管理者写的。 书中着重分析了目前网站建设中存在的一些问题,以及“Web标准”思想的产生、发展和推广,并从技术细节上讲解了网站实际制作和开发的过程中如何向Web标准过渡,如何采用和符合Web标准。本书的出版目的就是帮助读者理解Web标准,创建出用最低的费用达到最多的用户,并维持最长时间的网站,并且提......一起来看看 《网站重构》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具