- 导入模块
|
|
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
|
|
- 生成数据集
- 使用make_blobs函数生成用于聚类的数据,主要参数有:
- n_samples:样本个数
- centers:样本中心(类别)数
- random_state:随机种子(被指定后,每次构造数据相同)
- cluster_std:数据离散程度
- n_features:特征数,默认是2
- 返回值有样本数据集X和标签y,且都是ndarray对象
|
|
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')
|
|
- 模型选择及超参数调优
- 使用svm.SVC(C=1.0, kernel=’rbf’)来创建一个SVC对象,选择核为linear及不同的C
- 当C值特别大时,相当于=0,此时为硬间隔最大化;当C值很小时,此时为软间隔最大化,软间隔的支持向量或者在间隔边界上,或者在间隔边界与分离超平面之间, 或者在分离超平面误分一侧。
|
|
_,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参考见扩展 |
- 绘制图形
- 使用svm.SVC(C=1.0, kernel=’rbf’)来创建一个SVC对象,选择核为rbf及不同的gamma
- gamma越大,拟合的曲线就越复杂。
|
|
_,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)
|
|