svm.svc(c=1.0, kernel='rbf', degree=3, gamma='auto', 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.svc中各個引數含義:
1.c:根據官方文件,這是乙個軟間隔分類器,對於在邊界內的點有懲罰係數c,c的取值在0-1。0之間,預設值為1.0
c越大代表這個分類器對在邊界內的雜訊點的容忍度越小,分類準確率高,但是容易過擬合,泛化能力差。所以一般情況下,應該適當減小c,對在邊界範圍內的雜訊有一定容忍。
2.kernel:核函式型別,預設為『rbf』,高斯核函式,exp(-gamma|u-v|^2)
其他可選項有:
'linear':線性核函式,u'*v
'poly':多項式核函式,(gamma*u'*v + coef0)^degree
'sigmoid':sigmoid核函式,tanh(gamma*u'*v + coef0)
3.degree:多項式核的階數,預設為3
對其他核函式不起作用
4.gamma:核函式係數,只對'rbf','poly','sigmoid'起作用
預設為'auto',此時值為樣本特徵數的倒數,即1/n_features.
5.coef0:核函式的常數項,只對'poly','sigmoid'有用
6.shrinking:是否啟用啟發式收縮方式,預設為true
啟發式收縮方式就是:如果能預知哪些變數對應著支援向量,則只要在這些樣本上訓練就夠了,其他樣本可不予考慮,這不影響訓練結果,但降低了問題的規模並有助於迅速求解,起到乙個加速訓練的效果。
7.tol:停止訓練的誤差精度,預設值為0.001
8.probability:預設為false,決定最後是否按概率輸出每種可能的概率,但需注意最後的**函式應改為clf.predict_proba。
x=[[1,2,3].
[2,3,4],
[54,6,7],
[5,8,2]
]y=[1,2,1,2]
clf=svm.svc(probability=true)
clf.fit(x,y)
print clf.predict_proba([10,15,13])
output:
[[ 0.62913274 0.37086726]]
9.class_weight:預設為none,給每個類別分別設定不同的懲罰引數c,如果沒有給,則會給所有類別都給c=1,即前面指出的引數c.
x=[[1,2,3],[11,18,16],[22,27,26],[33,34,39]]
y=[2,1,2,3]
clf=svm.svc(probability=true,kernel='rbf', degree=2,gamma=0.1,decision_function_shape="ovr",class_weight=)
clf.fit(x,y)
print clf.predict([10,15,13])#**的分類結果
print clf.predict_proba([10,15,13])#輸出屬於每一類的概率
print clf.decision_function([10,15,13])#每個點與分類邊界的距離
output:
[2][[ 0.23039413 0.44680601 0.32279986]]
[[ 1.01201676 2.48798324 -0.5 ]]
10.verbose:是否啟用詳細輸出,一般為flase。
11.max_iter:int引數 預設為-1,最大迭代次數,如果為-1,表示不限制
12.decision_function_shape:決定了分類時,是一對多的方式來構建超平面,還是一對一。'ovo'還是'ovr'。
a.一對多法(one-versus-rest,簡稱1-v-r svms)。訓練時依次把某個類別的樣本歸為一類,其他剩餘的樣本歸為另一類,這樣k個類別的樣本就構造出了k個svm。分類時將未知樣本分類為具有最大分類函式值的那類。
ovr模式:
x=[[1,2,3],[11,18,16],[22,27,26],[33,34,39]]
y=[1,1,2,3]
clf=svm.svc(probability=true,kernel='rbf', degree=2,gamma=0.1,random_state=2,decision_function_shape="ovr")
clf.fit(x,y)
print clf.predict([10,15,13])
print clf.predict_proba([10,15,13])
print clf.decision_function([10,15,13])
output:
[1][[ 0.34890691 0.32548254 0.32561055]]#屬於類別1的概率值最大
[[ 2.5 0.75 -0.25]]#到第乙個分類平面的距離最大,即分類為1
b.一對一法(one-versus-one,簡稱1-v-1 svms)。其做法是在任意兩類樣本之間設計乙個svm,因此k個類別的樣本就需要設計k(k-1)/2個svm。當對乙個未知樣本進行分類時,最後得票最多的類別即為該未知樣本的類別。libsvm中的多類分類就是根據這個方法實現的。
x=[[1,2,3],[11,18,16],[22,27,26],[33,34,39],[3,3,9],[13,24,49]]
y=[1,1,2,3,4,3]
from sklearn.svm import svc
clf=svm.svc(probability=true,kernel='rbf', degree=2,gamma=0.1,random_state=2,decision_function_shape="ovo")
clf.fit(x,y)
print(clf.predict([[10,15,13]]))
print(clf.predict_proba([[10,15,13]]))
print(clf.decision_function([[10,15,13]]))
output:
[1][[ 0.23456566 0.23289301 0.29844741 0.23409392]]
[[ 5.74784310e-01 1.49568619e-01 5.81831270e-01 -5.00000000e-01
-8.38002527e-10 4.99999999e-01]]#4類有6個一對一的超平面,得票最多的類別為最終類別
13.random_state:預設為none,在混洗資料時用於概率估計,沒什麼影響.
【常用函式】
predict:返回乙個陣列表示個測試樣本的類別。
predict_probe:返回乙個陣列表示測試樣本屬於每種型別的概率。
decision_function:返回乙個陣列表示測試樣本到對應型別的超平面距離。
get_params:獲取當前svm函式的各項引數值。
score:獲取**結果準確率。
set_params:設定svc函式的引數
clf.n_support_:各類的支援向量的個數
clf.support_:各類的支援向量在訓練樣本中的索引
clf.support_vectors_:全部支援向量
接著上面的例子訓練出的clf:
print(clf.n_support_)
print(clf.support_)
print(clf.support_vectors_)
output:
[2 1 2 1]#共四類,支援向量分別有2,1,2,1個
[0 1 2 3 5 4]#第一類的支援向量有2個,在訓練集中對應的索引為0和1,後面三類同理
[[ 1. 2. 3.]
[ 11. 18. 16.]
[ 22. 27. 26.]
[ 33. 34. 39.]
[ 13. 24. 49.]
[ 3. 3. 9.]]
sklearn中隨機森林的引數
1,criterion gini or entropy default gini 是計算屬性的gini 基尼不純度 還是entropy 資訊增益 來選擇最合適的節點。2,splitter best or random default best 隨機選擇屬性還是選擇不純度最大的屬性,建議用預設。3,m...
sklearn中隨機森林的引數
1,criterion gini or entropy default gini 是計算屬性的gini 基尼不純度 還是entropy 資訊增益 來選擇最合適的節點。2,splitter best or random default best 隨機選擇屬性還是選擇不純度最大的屬性,建議用預設。3,m...
sklearn 中的 Pipeline 機制
管道機制在機器學習 演算法中得以應用的根源在於,引數集在新資料集 比如測試集 上的重複使用。管道機制實現了對全部步驟的流式化封裝和管理 streaming workflows with pipelines 注意 管道機制更像是程式設計技巧的創新,而非演算法的創新。接下來我們以乙個具體的例子來演示sk...