sk_learn 中使用SVM使用以及参数意义

1 准备数据集

1 from sklearn.datasets import make_moons
2 X, y = make_moons(n_samples=100, noise=0.15, random_state=42)

 

2 训练模型

1 from sklearn.pipeline import Pipeline
2 from sklearn.preprocessing import PolynomialFeatures, StandardScaler
3 
4 rbf_svm_clf = Pipeline([
5     ('scaler', StandardScaler()),
6     ('svm_clf', SVC(C = 1, kernel='rbf', gamma = 5))
7     ])
8 
9 rbf_svm_clf.fit(X, y)

 

3 结果可视化

 1 def plot_dataset(X, y, axes):
 2     plt.plot(X[:, 0][y==0], X[:, 1][y==0], "bs")
 3     plt.plot(X[:, 0][y==1], X[:, 1][y==1], "g^")
 4     plt.axis(axes)
 5     plt.grid(True, which='both')
 6     plt.xlabel(r"$x_1$", fontsize=20)
 7     plt.ylabel(r"$x_2$", fontsize=20, rotation=0)
 8 
 9 def plot_predictions(clf, axes):
10     x0s = np.linspace(axes[0], axes[1], 100)
11     x1s = np.linspace(axes[2], axes[3], 100)
12     x0, x1 = np.meshgrid(x0s, x1s)
13     X = np.c_[x0.ravel(), x1.ravel()]
14     y_pred = clf.predict(X).reshape(x0.shape)
15     y_decision = clf.decision_function(X).reshape(x0.shape)
16     plt.contourf(x0, x1, y_pred, cmap=plt.cm.brg, alpha=0.2)
17     plt.contourf(x0, x1, y_decision, cmap=plt.cm.brg, alpha=0.1)
18 
19 plot_predictions(polynomial_svm_clf, [-1.5, 2.5, -1, 1.5])
20 plot_dataset(X, y, [-1.5, 2.5, -1, 1.5])
21 
22 save_fig("moons_polynomial_svc_plot")
23 plt.show()

结果如下图所示:

 

 注:

核函数使用 rbf(高斯核) 时候,超参数 gamma 表示分离超平面的非线性程度,gamma越大,非线性越强,模型越容易过拟合。

C 同理,不过超参数C代表的是模型对误分类点的惩罚程度,C越大,惩罚越大,模型越容易过拟合训练集数据。

 

posted @ 2021-04-11 15:35  橘子葡萄火龙果  阅读(240)  评论(0编辑  收藏  举报