歡迎各位同學學習python信用評分卡建模視頻系列教程(附代碼, 博主錄製) :
騰訊課堂報名入口
網易雲課堂報名入口
(微信二維碼掃一掃)
支持向量機SVM
這是線性支持向量機,LSVM
margin
margin值越大越好,因為margin值越大,空間區分兩組數據效果越好,margin值越小,空間區分兩組數據效果越差
margin值最大的向量空間最好
lagrange multipliers拉格朗日乘數法是解決支持向量機margin最大值方法
在數學最優問題中,拉格朗日乘數法(以數學家約瑟夫·路易斯·拉格朗日命名)是一種尋找變量受一個或多個條件所限制的多元函數的極值的方法。這種方法將一個有n 個變量與k 個約束條件的最優化問題轉換為一個有n + k個變量的方程組的極值問題,其變量不受任何約束。這種方法引入了一種新的標量未知數,即拉格朗日乘數:約束方程的梯度(gradient)的線性組合裡每個向量的係數。[1] 此方法的證明牽涉到偏微分,全微分或鏈法,從而找到能讓設出的隱函數的微分為零的未知數的值。
支持向量優點
1.支持多維空間
2.不同核函數用於不同決策函數
支持多維空間
非線性SVM可以轉換為多維空間支持向量機
支持向量缺點:
1.如果數據特徵(維度)大於樣本量,支持向量機表現很差
2.支持向量機不提供概率區間估計
優點:可處理多維度數據分類,小樣本數據可以工作
缺點:找到準確的核函數和C參數,gamma參數需要很大計算量
優點:靈活,處理低維度和高維度數據,高維度數據小樣本量表現良好
缺點:高維度,大樣本表現較差,需要數據預處理和調參
很難監控和可視化
另外推薦算法:決策樹和隨機森林(方便可視化,監控,容易理解)
通過核函數,非線性空間可以轉換為線性空間
支持向量應用積極廣泛
python腳本應用
區分兩種蛋糕,根據奶油和糖兩種成分,首先數據可視化
C 參數
C參數表示,你懲罰錯誤分類點的力度
sklearn默認C參數是1
C參數設置小,算法複雜度小,C參數高,追求錯誤率最低
支持多個分層
python代碼實現分多類,decision_function_shape="ovr"
核函數
通過核函數,二維數據難以分類的可以轉換為多維函數,然後分類
python代碼kernel函數設置
gamma越高,複雜度越高
其它機器學習分類算法
decision_function
SVM分割超平面的繪製與SVC.decision_function( )的功能blog.csdn.net/qq_330398
在李航老師的《統計學習方法》— 支持向量機那章有個例題:
樣本點x1=(3,3),x2=(4,3),x3=(1,1),labels=(1,1,−1)
decision_function()的功能:計算樣本點到分割超平面的函數距離,分割超平面一邊數據是正數,一邊是負數,如果是二分類,正數代表一類,負數代表另一類
乳腺癌python腳本
此腳本包括參數設置,自動調優,數據規範化,概率計算,分類預測等等
"""@author: QQ:231469242"""from sklearn import preprocessingfrom sklearn.svm import SVCfrom sklearn.datasets import load_breast_cancerfrom sklearn.model_selection import train_test_splitimport matplotlib.pyplot as plt cancer=load_breast_cancer()data=cancer.datafeatureNames=cancer.feature_namesX_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))) 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_) print(svm2.predict_proba(x_test_scaled))print(svm2.predict(x_test_scaled))SVM分類
SVM 支持向量機,在sklearn裡面,有兩種,SVC支持向量分類,用於分類問題,SVR,支持向量回歸,用於回歸問題。核方法用於產生非線性分類邊界。
linear,線性核,會產生線性分類邊界,一般來說它的計算效率最高,而且需要數據最少。線性函數。from sklearn import svmsvc = 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」的策略就是最靠近分離邊界的樣本點,它們是二分類問題中最具有代表性的點。支持向量的坐標可以通過方法support_vectors_來找到。
svc.support_vectors_[:, 0], svc.support_vectors_[:, 1]正則化只考慮支持向量。使模型在處理樣本特徵的時候變得更加簡單。
正則項可以通過調整係數C來決定svc = svm.SVC(kernel='linear', C=1e3)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金融風控模型模型和數據分析微專業課
(微信二維碼掃一掃報名)