支持向量機(Support Vector Machine):SVM算法既可以處理分類問題似舵,也可以處理回歸問題绅喉。SVM算法要解決的問題就是找到最好的決策邊界,以對問題進行分類和求解窟坐。
我們用這張圖來理解SVM算法,圖片中有兩類點方形和圓形,我們要找到一條分界線將兩類點清楚的分開惊搏。我們的依據是分界線離最近點的距離要最大贮乳,這樣的決策邊界是最優(yōu)的,右圖的決策邊界要優(yōu)于左圖的決策邊界恬惯,因為它的分類效果更好向拆,直觀地看就是決策邊界越寬越好。我們將這些最近的點成為支持向量酪耳,我們的決策邊界的構造只取決于它們浓恳,與其他點無關。
SVM是機器學習中非常重要的算法碗暗,也是面試中經常會被問到的算法颈将。因為SVM算法涉及到的數(shù)學問題非常的多,整個數(shù)學推導過程還是挺復雜的言疗。下方的鏈接是SVM算法的推導過程晴圾,如果想從事機器學習方面相關工作的,SVM的算法的數(shù)學原理是要掌握的噪奄。
鏈接:https://pan.baidu.com/s/1Ml-LbBkKy5bSZ4qJMSSGLQ
提取碼:u77t
1.SVM算法的核心要點
找到距離決策邊界最近的點死姚,然后使得該點到決策邊界的距離最大。
2.解決特征難以分割的數(shù)據
下圖中左邊的數(shù)據點在二維平面中是難以分割的勤篮,決策邊界非常復雜都毒。通過將二維數(shù)據映射到三位空間中,由于新增了一個高度方向的維度碰缔,數(shù)據點在這個方向上就變得容易區(qū)分了账劲。原數(shù)據X通過映射函數(shù)φ轉換成φ(X),使得新的數(shù)據集φ(X)容易分類手负。
3.SVM API文檔
sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0,
shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None,
verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)
SVM關鍵參數(shù)說明
C:浮點型數(shù)值涤垫,默認值為1,可指定數(shù)值竟终。這個參數(shù)我們稱之為松弛因子蝠猬,C值越大,決策邊界越窄统捶,分類要求越嚴格榆芦。C值越小,決策邊界越寬喘鸟,分類要求寬松匆绣,前面我們說到決策邊界越寬越好。
kernel:核變換參數(shù)什黑,如上面的將二維數(shù)據轉換為三維數(shù)據崎淳,就需要指定kernel參數(shù)。kernel可指定為‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’愕把,默認為'rbf'拣凹。'linear'就是線性變換森爽,'rbf'就是對數(shù)據做高斯變換,如將二維數(shù)據轉換為三維數(shù)據嚣镜。
gamma爬迟,默認為'auto',只有當kernel指定為'rbf'時菊匿,gamma數(shù)值才有效付呕。gamma值越大,支持向量的個數(shù)越少跌捆,gamma值越小徽职,支持向量的個數(shù)越多。支持向量的數(shù)量影響模型的訓練與預測速度疹蛉。
SVM 樣例演示
使用sklearn中封裝好的iris數(shù)據集活箕,最終得出SVM算法的精度。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
iris_X = iris.data
iris_y = iris.target
from sklearn.model_selection import train_test_split
#切分數(shù)據集
X_train,X_test,y_train,y_test = train_test_split(iris_X,iris_y,test_size = 0.3,random_state = 0)
#調用SVC算法
from sklearn.svm import SVC
clf = SVC(kernel = 'linear')
clf.fit(X_train,y_train)
clf.score(X_test,y_test)
0.9777777777777777
SVM算法小結:
SVM算法的目標是求解最優(yōu)的決策邊界可款,對決策邊界起決定性的作用的數(shù)據點育韩,我們稱之為支持向量,也就是距離決策邊界最近的數(shù)據點闺鲸。
SVM算法可以將低維不可分的數(shù)據轉化為高維可分的數(shù)據筋讨。
SVM算法中最主要的三個參數(shù):
C:懲罰力度的大小,C越小摸恍,容錯能力越大悉罕,對決策邊界的要求越寬松。C越大立镶,容錯能力越小壁袄,對決策邊界的要求越嚴格。
kernel:核函數(shù)媚媒,默認為'rbf'高斯核函數(shù)嗜逻,對原始數(shù)據進行變換。
gamma:只有當kernel為'rbf'缭召,gamma值才回起作用栈顷,gamma值越大,選用的支持向量越少嵌巷,gamma值越小萄凤,所選用的支持向量越多。