前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于SVM、Pipeline、GridSearchCV的鸢尾花分类

基于SVM、Pipeline、GridSearchCV的鸢尾花分类

作者头像
潇洒坤
发布2018-09-10 09:47:33
1.6K0
发布2018-09-10 09:47:33
举报
文章被收录于专栏:简书专栏简书专栏

2018年8月26日笔记

1.数据集

Iris(鸢尾花)数据集是多重变量分析的数据集。 数据集包含150行数据,分为3类,每类50行数据。 每行数据包括4个属性:Sepal Length(花萼长度)、Sepal Width(花萼宽度)、Petal Length(花瓣长度)、Petal Width(花瓣宽度)。可通过这4个属性预测鸢尾花属于3个种类的哪一类。 样本数据局部截图:

Iris.png

获取150个样本数据的3种方法: 1.完整的样本数据Iris.csv文件下载链接: https://pan.baidu.com/s/16N0ivGWFrmc73ustPLWPZA 密码: ugun 2.数据集链接:https://gist.github.com/curran/a08a1080b88344b0c8a7 3.在sklearn的skleanrn库中自带了iris数据集,可以导入sklearn库的datasets文件,调用datasets文件中的load_iris方法就可以获得iris数据集。 本文采用的是第3种方法,直接从sklearn库中获取数据。

2.观察数据

鸢尾花数据集详细中文解释链接:http://sklearn.apachecn.org/cn/0.19.0/datasets/index.html#iris 网页中内容如下图所示:

image.png

查看数据集对象的属性和方法,代码如下:

代码语言:javascript
复制
from sklearn.datasets import load_iris
dir(load_iris())

上面一段代码的运行结果如下:

['DESCR', 'data', 'feature_names', 'target', 'target_names']

查看数据集的描述,即打印数据集对象的DESCR属性,代码如下:

代码语言:javascript
复制
from sklearn.datasets import load_iris
print(load_iris().DESCR)

与上图中文文档的图对照阅读,可以加强对数据集的理解。 上面一段代码的运行结果如下图所示:

image.png

将150个样本4个特征组成的矩阵赋值给变量X,变量X为大写字母的原因是数学中表示矩阵使用大写字母。 将150个样本1个预测目标值组成的矩阵赋值给变量y。 载入数据集的代码如下:

代码语言:javascript
复制
from sklearn.datasets import load_iris
X = load_iris().data
y = load_iris().target

3.支持向量机分类器

验证分类器效果时,使用交叉验证使结果具有说服性。 交叉验证第1种写法: SVC是support vector classfier的简写。 从sklearn,model_selection库中导入ShuffleSplit方法。 使用sklearn.model_selection库中的ShuffleSplit方法实例化交叉验证对象时,需要3个参数。第1个关键字参数n_splits是指定进行几次交叉验证,第2个关键字参数train_size是训练集占总样本的百分比,第3个关键字参数test_size是测试集占总样本的百分比。 ShuffleSplit对象的split方法需要1个参数,参数为特征矩阵或者预测目标值。此方法的返回值的数据类型为生成器,可以for循环获取生成器中的每个元素,生成器的每个元素的数据类型为元组,元组中的第1个元素为训练集在样本中的索引,第2个元素为测试集在样本中的索引。 获取训练集和测试集后,实例化模型对象,使用模型对象的fit方法进行训练,使用模型对象的score方法对模型评分。

代码语言:javascript
复制
from sklearn.svm import SVC
from sklearn.model_selection import ShuffleSplit

cv_split = ShuffleSplit(n_splits=5, train_size=0.7, test_size=0.25)
for train_index, test_index in cv_split.split(X):
    train_X = X[train_index]
    test_X = X[test_index]
    train_y = y[train_index]
    test_y = y[test_index]
    svc_model = SVC()
    svc_model.fit(train_X, train_y)
    score = svc_model.score(test_X, test_y)
    print(score)

上面一段代码的运行结果如下:

交叉验证结果.png

交叉验证第2种写法,代码如下:

代码语言:javascript
复制
from sklearn.svm import SVC
from sklearn.model_selection import ShuffleSplit
from sklearn.model_selection import cross_val_score

cv_split = ShuffleSplit(n_splits=5, train_size=0.7, test_size=0.25)
svc_model = SVC()
score_ndarray = cross_val_score(svc_model, X, y, cv=cv_split)
print(score_ndarray)
score_ndarray.mean()

4.Pipeline和GridSearchCV结合使用

Pipeline和GridSearchCV结合使用搜索模型最优参数。 使用sklearn.pipeline库中的Pipeline方法实例化Pipeline对象时,需要1个参数,参数的数据类型为列表,列表中的每个元素的数据类型为元组或列表。 使用sklearn.model_selection库中的ShuffleSplit方法实例化交叉验证对象时,需要3个参数。第1个关键字参数n_splits是指定进行几次交叉验证,第2个关键字参数train_size是训练集占总样本的百分比,第3个关键字参数test_size是测试集占总样本的百分比。 变量param_grid里面有4个键值对,即对模型的4个参数搜索最优参数。 代码如下:

代码语言:javascript
复制
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.model_selection import ShuffleSplit
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier

pipe_steps = [
    ('svc', SVC())
]
pipeline = Pipeline(pipe_steps)
cv_split = ShuffleSplit(n_splits=5, train_size=0.7, test_size=0.25)
param_grid = {
    'svc__cache_size' : [100, 200, 400],
    'svc__C': [1, 10, 100],
    'svc__kernel' : ['rbf', 'linear'],
    'svc__degree' : [1, 2, 3, 4],
}
grid = GridSearchCV(pipeline, param_grid, cv=cv_split)
grid.fit(X, y)

查看表格搜索最优参数和最优得分,代码如下:

代码语言:javascript
复制
print(grid.best_params_)
print(grid.best_score_)

上面一段代码的运行结果如下:

{'svc__C': 1, 'svc__cache_size': 100, 'svc__degree': 1, 'svc__kernel': 'rbf'} 0.9789473684210527

5.模型检验

使用sklearn.metrics库中的classification_report方法检验上一步得出的最优模型分类效果。 代码如下:

代码语言:javascript
复制
from sklearn.metrics import classification_report

predict_y = grid.predict(X)
print(classification_report(y, predict_y))

上面一段代码的运行结果如下图所示:

image.png

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.数据集
  • 2.观察数据
  • 3.支持向量机分类器
  • 4.Pipeline和GridSearchCV结合使用
  • 5.模型检验
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档