Support Vector Machines及数据可视化实战篇

支持向量机实战

这次我们使用Jupyter Notebook来完成Support Vector Machines的探索!
我们这次使用的实验数据是非常典型的分类数据集——Iris 数据集。Iris中文名为鸢尾花,此数据集包含了150个数据样本,分为三类,每类50个数据,每个数据包含了4个属性(花萼长度、花萼宽度、花瓣长度、花瓣宽度)。我们接下来会使用SVM模型去预测鸢尾花属于下列种类(Setosa、Versicolour、Virginica)的哪一个。
因为数据集很经典,所以我们不需要特地把数据集单独下载下来,可以通过网址直接在Jupyter Notebook上得到。

获取数据:

# The Iris Setosa
from IPython.display import Image
url = 'http://upload.wikimedia.org/wikipedia/commons/5/56/Kosaciec_szczecinkowaty_Iris_setosa.jpg'
Image(url,width=300, height=300)
# The Iris Versicolor
from IPython.display import Image
url = 'http://upload.wikimedia.org/wikipedia/commons/4/41/Iris_versicolor_3.jpg'
Image(url,width=300, height=300)
# The Iris Virginica
from IPython.display import Image
url = 'http://upload.wikimedia.org/wikipedia/commons/9/9f/Iris_virginica.jpg'
Image(url,width=300, height=300)

读入数据后进行编写:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
iris = sns.load_dataset('iris')

EDA

在开始建模之前可视化数据是一个十分重要的环节,他可以很好的帮助你理解各个Feature之间的关系。完善的EDA会让我们在之后的建模环节有清楚的目的性!但是这项重要的工作被很多人忽略了!

我们先全局画一张图标,这样更能掌握变量关系。之后我们在进行细化可视化。

# Setosa is the most separable. 
sns.pairplot(iris,hue='species',palette='Dark2')

在这里插入图片描述

我们选择其中一个Feature进行可视化,这里我们选择了Setosa的花萼宽度。

setosa = iris[iris['species']=='setosa']
sns.kdeplot( setosa['sepal_width'], setosa['sepal_length'],
                 cmap="plasma", shade=True, shade_lowest=False)

在这里插入图片描述

Model:

1·拆分数据集,将数据集拆成训练数据和预测数据两部分;

from sklearn.model_selection import train_test_split
X = iris.drop('species',axis=1)
y = iris['species']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)

2·建模;

from sklearn.svm import SVC
svc_model = SVC()
svc_model.fit(X_train,y_train)

以上我们建模就完成了,我们进行预测。
3·预测;

predictions = svc_model.predict(X_test)
from sklearn.metrics import classification_report,confusion_matrix
print(confusion_matrix(y_test,predictions))
print(classification_report(y_test,predictions))

在这里插入图片描述
我们可以看到就算不进行优化,这个准确率也是十分惊人的。但主要还是数据集很简单,并且数据很少的缘故。但是我们使用简单的数据集有助于我们理解较为复杂的模型。
4·优化;
模型越是复杂,训练好的模型就越是困难。接下来介绍几个重要的超参数:
超参数是什么呢?他是模型在数据学习中学不到的东西,需要人为调节才能达到最好效果。
C :控制着能接受错误的最大程度(防止模型过拟合);
Gamma :控制投影规则的影响范围;
下面是一张C、gamma不同组合的示意图,可以帮助我们更好的理解其中含义:
在这里插入图片描述
在进行超参数搜寻的时候我们需要用到一个工具——GridsearchCV
在设定好C、gamma的搜寻区间之后,我们就可以进行搜寻了,当然,这里我们只是进行了较为简单的粗略搜寻。较为精细的搜寻我们以后会介绍,他会结合GridsearchCV和RandomizedsearchCV.

from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.1,1, 10, 100], 'gamma': [1,0.1,0.01,0.001]} 
grid = GridSearchCV(SVC(),param_grid,refit=True,verbose=2)
grid.fit(X_train,y_train)

结果:
在这里插入图片描述
因为GridsearchCV中的refit参数我们设置为True,代表在找到最佳的配置之后会重新训练模型,所以我们在预测的时候就可以直接使用上述模型啦。

grid_predictions = grid.predict(X_test)
print(classification_report(y_test,grid_predictions))

在这里插入图片描述
我们可以看到这个准确度还是有提高的,对于我们来说模型越精准越好,最好能100%预测,所以对于这种模型的优化是无止境的,我们追求的就是极致。:)
OK!对于SVM的学习,我们就到这里了,以后会有更精彩的数据集和模型优化手段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值