Sklearn --- 支援向量機
阿新 • • 發佈:2018-12-13
一、軟間隔支援向量機
軟間隔支援向量機的優化目標:
其中可以用下列損失函式替代
hinge損失:
指數損失:
對率損失:
import numpy as np from sklearn import datasets from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import LinearSVC # 讀取資料集 iris = datasets.load_iris() x = iris["data"][:, (2,3)] y = (iris["target"] == 2).astype(np.float64) # SVM引數列表 svm_clf = Pipeline(( # 引數標準化 ("scaler", StandardScaler()), # 線性SVC,懲罰引數C=1,使用hinge損失函式 ("linear_svc", LinearSVC(C = 1, loss = 'hinge')), )) # 擬合向量機 svm_clf.fit(x, y) # 使用訓練好的向量機進行預測 svm_clf.predict([[5.5,1.7]])
二、多項式特徵構造
舉個例子就是,假設有a、b兩個特徵,當degree=2時,其二次多項式為:
from sklearn.datasets import make_moons from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures polynomial_svm_clf = Pipeline(( # 構造多項式特徵,degree表示多項式次數 ("poly_features", PolynomialFeatures(degree = 3)), ("scaler", StandardScaler()), ("svm_clf", LinearSVC(C = 10, loss = "hinge")) )) polynomial_svm_clf.fit(x, y)
三、使用多項式核
from sklearn.svm import SVC
poly_kernel_svm_clf = Pipeline((
("scaler", StandardScaler()),
# 使用多項式核,degree表示深度,coef表係數,懲罰係數C設定為5
("svm_clf", SVC(kernel = "poly", degree = 3, coef0 = 1, C = 5))))
poly_kernel_svm_clf.fit(x,y)
四、高斯核函式
rbf_kernel_svm_clf = Pipeline(( ("scaler", StandardScaler()), # 使用高斯核函式,這裡的gamma是高斯核公式中的頻寬 ("svm_clf", SVC(kernel = "rbf", gamma = 5, C = 0.001)) ))
五、支援向量機迴歸
支援向量機優化目標:
from sklearn.svm import SVR
# 使用多項式核,其中epsilon在向量機理論中表示對訓練樣本的容忍度
svm_poly_reg = SVR(kernel = 'poly', degree = 2, C = 100, epsilon = 0.1)
svm_poly_reg.fit(x, y)
參考文獻:
《Hands-ON Machine Learning with Scikit-Learn & TensorFlow》
周志華的《機器學習》