支持向量機SVM
這是線性支持向量機,LSVM
marginpython
margin值越大越好,由於margin值越大,空間區分兩組數據效果越好,margin值越小,空間區分兩組數據效果越差
margin值最大的向量空間最好
lagrange multipliers拉格朗日乘數法是解決支持向量機margin最大值方法算法
在數學最優問題中,拉格朗日乘數法(以數學家約瑟夫·路易斯·拉格朗日命名)是一種尋找變量受一個或多個條件所限制的多元函數的極值的方法。這種方法將一個有n 個變量與k 個約束條件的最優化問題轉換爲一個有n + k個變量的方程組的極值問題,其變量不受任何約束。這種方法引入了一種新的標量未知數,即拉格朗日乘數:約束方程的梯度(gradient)的線性組合裏每一個向量的係數。 [1] 此方法的證實牽涉到偏微分,全微分或鏈法,從而找到能讓設出的隱函數的微分爲零的未知數的值。微信
支持向量優勢多線程
1.支持多維空間dom
2.不一樣核函數用於不一樣決策函數
支持多維空間
非線性SVM能夠轉換爲多維空間支持向量機
支持向量缺點:機器學習
1.若是數據特徵(維度)大於樣本量,支持向量機表現不好ide
2.支持向量機不提供機率區間估計
優勢:可處理多維度數據分類,小樣本數據能夠工做函數
缺點:找到準確的核函數和C參數,gamma參數須要很大計算量
優勢:靈活,處理低維度和高維度數據,高維度數據小樣本量表現良好學習
缺點:高維度,大樣本表現較差,須要數據預處理和調參優化
很難監控和可視化
另外推薦算法:決策樹和隨機森林(方即可視化,監控,容易理解)
經過核函數,非線性空間能夠轉換爲線性空間
支持向量應用積極普遍
python腳本應用
區分兩種蛋糕,根據奶油和糖兩種成分,首先數據可視化
python代碼實現分多類,decision_function_shape="ovr"
核函數
經過核函數,二維數據難以分類的能夠轉換爲多維函數,而後分類
python代碼kernel函數設置
gamma越高,複雜度越高
其它機器學習分類算法
decision_function
SVM分割超平面的繪製與SVC.decision_function( )的功能
https://blog.csdn.net/qq_33039859/article/details/69810788?locationNum=3&fps=1
在李航老師的《統計學習方法》— 支持向量機那章有個例題:
樣本點x1=(3,3),x2=(4,3),x3=(1,1),labels=(1,1,−1)
先說decision_function()的功能:計算樣本點到分割超平面的函數距離。
沒錯,是函數距離(將幾何距離,進行了歸一化,具體看書)
將x1=(3,3),x2=(4,3),x3=(1,1),labels=(1,1,−1)
decision_function()的功能:計算樣本點到分割超平面的函數距離,分割超平面一邊數據是正數,一邊是負數,若是是二分類,正數表明一類,負數表明另外一類
乳腺癌python腳本
此腳本包括參數設置,自動調優,數據規範化,機率計算,分類預測等等
# -*- coding: utf-8 -*- """ python金融風控評分卡模型和數據分析微專業課 https://edu.51cto.com/sd/f2e9b """ #標準化數據 from sklearn import preprocessing from sklearn.svm import SVC from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt cancer=load_breast_cancer() data=cancer.data featureNames=cancer.feature_names #random_state 至關於隨機數種子 X_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,stratify=cancer.target,random_state=42) svm=SVC() svm.fit(X_train,y_train) print("accuracy on the training subset:{:.3f}".format(svm.score(X_train,y_train))) print("accuracy on the test subset:{:.3f}".format(svm.score(x_test,y_test))) #觀察數據是否標準化 plt.plot(X_train.min(axis=0),'o',label='Min') plt.plot(X_train.max(axis=0),'v',label='Max') plt.xlabel('Feature Index') plt.ylabel('Feature magnitude in log scale') plt.yscale('log') plt.legend(loc='upper right') #標準化數據 X_train_scaled = preprocessing.scale(X_train) x_test_scaled = preprocessing.scale(x_test) svm1=SVC() svm1.fit(X_train_scaled,y_train) print("accuracy on the scaled training subset:{:.3f}".format(svm1.score(X_train_scaled,y_train))) print("accuracy on the scaled test subset:{:.3f}".format(svm1.score(x_test_scaled,y_test))) #改變C參數,調優,kernel表示核函數,用於平面轉換,probability表示是否須要計算機率 svm2=SVC(C=10,gamma="auto",kernel='rbf',probability=True) svm2.fit(X_train_scaled,y_train) print("after c parameter=10,accuracy on the scaled training subset:{:.3f}".format(svm2.score(X_train_scaled,y_train))) print("after c parameter=10,accuracy on the scaled test subset:{:.3f}".format(svm2.score(x_test_scaled,y_test))) #計算樣本點到分割超平面的函數距離 print (svm2.decision_function(X_train_scaled)) print (svm2.decision_function(X_train_scaled)[:20]>0) #支持向量機分類 print(svm2.classes_) #malignant和bening機率計算,輸出結果包括惡性機率和良性機率 print(svm2.predict_proba(x_test_scaled)) #判斷數據屬於哪一類,0或1表示 print(svm2.predict(x_test_scaled))
SVM分類
SVM 支持向量機,在sklearn裏面,有兩種,SVC支持向量分類,用於分類問題,SVR,支持向量迴歸,用於迴歸問題。
核方法
用於產生非線性分類邊界。
linear,線性核,會產生線性分類邊界,通常來講它的計算效率最高,並且須要數據最少。線性函數。
from sklearn import svm svc = svm.SVC(kernel='linear') svc.fit(X, y)
poly,多項式核,會產生多項式分類邊界。多項式函數。
svc = svm.SVC(kernel='poly',degree=4) svc.fit(X, y)
rbf,徑向基函數,也就是高斯核,是根據與每個支持向量的距離來決定分類邊界的,它能映射到無限維,是最靈活的方法,可是也須要最多的數據。容易產生過擬合問題。指數函數。
svc = svm.SVC(kernel='rbf', gamma=1e2)
多分類器
採用」one vs one」,在任意兩個樣本之間設計一個SVM,k個類別的樣本設計k(k-1)/2個svm,當對一個未知樣本進行分類時,最後得票最多的類別即爲該未知樣本的類別。
線性支持向量分類器(LinearSVC):相比於svm.SVC,使用了不一樣的算法,在某些數據集(好比稀疏數據集,文本挖掘)上運行得更快,對於多分類採用的就是」one vs all」的策略
svc=svm.LinearSVC(X,Y)
支持向量
就是最靠近分離邊界的樣本點,它們是二分類問題中最具備表明性的點。支持向量的座標能夠經過方法support_vectors_來找到。
svc.support_vectors_[:, 0], svc.support_vectors_[:, 1]
正則化
只考慮支持向量。使模型在處理樣本特徵的時候變得更加簡單。
正則項能夠經過調整係數C來決定
#大的C值:將會有較少的支持向量,決策邊界是被大多數支持向量所決定。 svc = svm.SVC(kernel='linear', C=1e3) #小的C值:將會有較多支持向量,決策邊界=類別A的平均值-類別B的平均值 svc = svm.SVC(kernel='linear', C=1e-3)
默認參數C=1,對於不少數據集,默認值就能工做的很好。
實踐經驗:對許多分類器來講,對樣本正則化,採用標準差正則方法是很是重要的提高預測效果的手段。
SVC參數解釋
(1)C: 目標函數的懲罰係數C,用來平衡分類間隔margin和錯分樣本的,default C = 1.0;
(2)kernel:參數選擇有RBF, Linear, Poly, Sigmoid, 默認的是"RBF";
(3)degree:if you choose 'Poly' in param 2, this is effective, degree決定了多項式的最高次冪;
(4)gamma:核函數的係數('Poly', 'RBF' and 'Sigmoid'), 默認是gamma = 1 / n_features;
(5)coef0:核函數中的獨立項,'RBF' and 'Poly'有效;
(6)probablity: 可能性估計是否使用(true or false);
(7)shrinking:是否進行啓發式;
(8)tol(default = 1e - 3): svm結束標準的精度;
(9)cache_size: 制定訓練所須要的內存(以MB爲單位);
(10)class_weight: 每一個類所佔據的權重,不一樣的類設置不一樣的懲罰參數C, 缺省的話自適應;
(11)verbose: 跟多線程有關,不大明白啥意思具體;
(12)max_iter: 最大迭代次數,default = 1, if max_iter = -1, no limited;(迭代次數太小,模型擬合不足,次數太高模型訓練時間過長,通常選擇默認值,不限制迭代次數)
(13)decision_function_shape : ‘ovo’ 一對一, ‘ovr’ 多對多 or None 無, default=None
(14)random_state :用於機率估計的數據重排時的僞隨機數生成器的種子。
歡迎各位同窗學習更多機器學習算法知識《python機器學習-乳腺癌細胞挖掘》,連接地址爲
https://edu.51cto.com/sd/7036f
(微信二維碼掃一掃報名)