1. 程式人生 > >Sklearn --- 支援向量機

Sklearn --- 支援向量機

一、軟間隔支援向量機

軟間隔支援向量機的優化目標:

\min \limits_{w,b} \frac{1}{2}\left | \left | w \right | \right |^2+C \sum_{i=1}^{m}l_{0/1}(y_i(w^Tx_i+b)-1)

其中l_{0/1}可以用下列損失函式替代

hinge損失:l_{hinge}(z)=max(0,1-z)

指數損失:l_{exp}(z)=exp(-z)

對率損失:l_{log}(z)=log(1+exp(-z))

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時,其二次多項式為:(1,a,b,a^{2},ab,b^{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))
))

 

五、支援向量機迴歸

支援向量機優化目標:

\min \limits_{w,b} \frac{1}{2}\left | \left | w \right | \right |^2+C \sum_{i=1}^{m}l_{\epsilon }(f(x_i)-y_i)

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》

周志華的《機器學習》