機器學習:SVM(scikit-learn 中的 RBF、RBF 中的超參數 γ)
阿新 • • 發佈:2018-08-13
import colors 機器 class 核函數 RoCE caf 情況 方差
一、高斯核函數、高斯函數
- μ:期望值,均值,樣本平均數;(決定告訴函數中心軸的位置:x = μ)
- σ2:方差;(度量隨機樣本和平均值之間的偏離程度:, 為總體方差, 為變量, 為總體均值, 為總體例數)
- 實際工作中,總體均數難以得到時,應用樣本統計量代替總體參數,經校正後,樣本方差計算公式:S^2= ∑(X- ) ^2 / (n-1),S^2為樣本方差,X為變量, 為樣本均值,n為樣本例數。
- σ:標準差;(反應樣本數據分布的情況:σ 越小高斯分布越窄,樣本分布越集中;σ 越大高斯分布越寬,樣本分布越分散)
- γ = 1 / (2σ2):γ 越大高斯分布越窄,樣本分布越集中;γ 越小高斯分布越寬,樣本分布越密集;
二、scikit-learn 中的 RBF 核
1)格式
-
from sklearn.svm import SVC svc = SVC(kernel=‘rbf‘, gamma=1.0)
# 直接設定參數 γ = 1.0;
2)模擬數據集、導入繪圖函數、設計管道
- 此處不做考察泛化能力,只查看對訓練數據集的分類的決策邊界,不需要進行 train_test_split;
-
模擬數據集
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets X, y = datasets.make_moons(noise=0.15, random_state=666) plt.scatter(X[y
-
導入繪圖函數
def plot_decision_boundary(model, axis): x0, x1 = np.meshgrid( np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1), np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1) ) X_new
-
設計管道
from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.pipeline import Pipeline def RBFKernelSVC(gamma=1.0): return Pipeline([ (‘std_scaler‘, StandardScaler()), (‘svc‘, SVC(kernel=‘rbf‘, gamma=gamma)) ])
3)調整參數 γ,得到不同的決策邊界
- γ == 0.1
svc_gamma_01 = RBFKernelSVC(gamma=0.1) svc_gamma_01.fit(X, y) plot_decision_boundary(svc_gamma_01, axis=[-1.5, 2.5, -1.0, 1.5]) plt.scatter(X[y==0, 0], X[y==0, 1]) plt.scatter(X[y==1, 0], X[y==1, 1]) plt.show()
-
γ == 0.5
svc_gamma_05 = RBFKernelSVC(gamma=0.5) svc_gamma_05.fit(X, y) plot_decision_boundary(svc_gamma_05, axis=[-1.5, 2.5, -1.0, 1.5]) plt.scatter(X[y==0, 0], X[y==0, 1]) plt.scatter(X[y==1, 0], X[y==1, 1]) plt.show()
-
γ == 1
svc_gamma_1 = RBFKernelSVC(gamma=1.0) svc_gamma_1.fit(X, y) plot_decision_boundary(svc_gamma_1, axis=[-1.5, 2.5, -1.0, 1.5]) plt.scatter(X[y==0, 0], X[y==0, 1]) plt.scatter(X[y==1, 0], X[y==1, 1]) plt.show()
-
γ == 10
svc_gamma_10 = RBFKernelSVC(gamma=10) svc_gamma_10.fit(X, y) plot_decision_boundary(svc_gamma_10, axis=[-1.5, 2.5, -1.0, 1.5]) plt.scatter(X[y==0, 0], X[y==0, 1]) plt.scatter(X[y==1, 0], X[y==1, 1]) plt.show()
-
γ == 100
svc_gamma_100 = RBFKernelSVC(gamma=100) svc_gamma_100.fit(X, y) plot_decision_boundary(svc_gamma_100, axis=[-1.5, 2.5, -1.0, 1.5]) plt.scatter(X[y==0, 0], X[y==0, 1]) plt.scatter(X[y==1, 0], X[y==1, 1]) plt.show()
4)分析
- 隨著參數 γ 從小到大變化,模型經歷:欠擬合——優——欠擬合;
- γ == 100 時:
- 現象:每一個藍色的樣本周圍都形成了一個“鐘形”的圖案,藍色的樣本點是“鐘形”圖案的頂部;
- 原因:γ 的取值過大,樣本分布形成的“鐘形”圖案比較窄,模型過擬合;
- 決策邊界幾何意義:只有在“鐘形”圖案內分布的樣本,才被判定為藍色類型;否則都判定為黃山類型;
- γ == 10 時,γ 值減小,樣本分布規律的“鐘形”圖案變寬,不同樣本的“鐘形”圖案區域交叉一起,形成藍色類型的樣本的分布區域;
- 超參數 γ 值越小模型復雜度越低,γ 值越大模型復雜度越高;
機器學習:SVM(scikit-learn 中的 RBF、RBF 中的超參數 γ)