SVM→8.SVM实战→3.调节SVM参数

SVM→8.SVM实战→3.调节SVM参数

《SVM→8.SVM实战→3.调节SVM参数》


描述代码
  1. 导入模块
1
2
3
4
from sklearn.datasets.samples_generator import make_blobs
import matplotlib.pyplot as plt
from sklearn.svm import SVC # "Support vector classifier"
import numpy as np
  1. 生成数据集
    1. 使用make_blobs函数生成用于聚类的数据,主要参数有:
      1. n_samples:样本个数
      2. centers:样本中心(类别)数
      3. random_state:随机种子(被指定后,每次构造数据相同)
      4. cluster_std:数据离散程度
      5. n_features:特征数,默认是2
    2. 返回值有样本数据集X和标签y,且都是ndarray对象
1
2
3
4
In[3]: type(make_blobs)
Out[3]: function
In[4]: X, y = make_blobs(n_samples=50, centers=2,random_state=0, cluster_std=0.80)
In[5]: plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
paste-320533409300483.jpg
  1. 模型选择及超参数调优
    1. 使用svm.SVC(C=1.0, kernel=’rbf’)来创建一个SVC对象,选择核为linear及不同的Cpaste-300729315098627.jpg
    2. 当C值特别大时,相当于paste-142996641153027.jpg=0,此时为硬间隔最大化;当C值很小时,此时为软间隔最大化,软间隔的支持向量或者在间隔边界上,或者在间隔边界与分离超平面之间, 或者在分离超平面误分一侧。

1
2
3
4
5
6
7
_,axi = plt.subplots(1,2)

for axi, C in zip(axi, [10.0, 0.1]):
model = SVC(kernel='linear', C=C).fit(X, y)
axi.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
plot_svc_decision_function(model, axi)
axi.set_title('C = {0:.1f}'.format(C), size=14)
plot_svc_decision_function参考见扩展
  1. 绘制图形
    1. 使用svm.SVC(C=1.0, kernel=’rbf’)来创建一个SVC对象,选择核为rbf及不同的gamma    paste-309881890406403.jpg
    2. gamma越大,拟合的曲线就越复杂。
1
2
3
4
5
6
7
_,axi = plt.subplots(1,2)

for axi, gamma,C in zip(axi, [10.0, 0.1],[1,1]):
model = SVC(kernel='rbf', gamma=gamma,C=C).fit(X, y)
axi.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
plot_svc_decision_function(model, axi)
axi.set_title('gamma = {0:.1f}'.format(gamma), size=14)

扩展

参考见SVM→8.SVM实战→1.训练一个基本的SVM
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def plot_svc_decision_function(model, ax=None, plot_support=True):
"""Plot the decision function for a 2D SVC"""
if ax is None:
ax = plt.subplot(111)
xlim = ax.get_xlim()
ylim = ax.get_ylim()

# create grid to evaluate model
x = np.linspace(xlim[0], xlim[1], 30)
y = np.linspace(ylim[0], ylim[1], 30)
X,Y = np.meshgrid(x, y)
xy = np.vstack([X.flatten(), Y.flatten()]).T
P = model.decision_function(xy).reshape(X.shape)

# plot decision boundary and margins
#levels是 alpha是透明度 linestyles
ax.contour(X, Y, P, colors='k',
levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'])

# plot support vectors
if plot_support:
ax.scatter(model.support_vectors_[:, 0],
model.support_vectors_[:, 1],
s=500,c='',edgecolors='black')

posted on 2018-10-08 09:54 LeisureZhao 阅读(...) 评论(...) 编辑 收藏

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试