1. 程式人生 > >學習SVM中碰到的函式

學習SVM中碰到的函式

學習svm的時候,看了幾個大牛的程式碼,程式碼中調了幾個函式庫,在此記錄下來,方便以後的學習。

一、sklearn.svm.SVC

sklearn.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=
None,random_state=None)

引數:

  • C:懲罰引數,預設值是1.0
    C越大,表示對誤分類的懲罰變大,演算法更想將訓練集全分對,這樣對訓練集測試時準確率很高,可能會過擬合,泛化能力弱;C越小,表示對誤分類的懲罰變小,允許容錯,可能會欠擬合,泛化能力強。
  • kernel:核函式,預設是rbf
    ‘linear’:線性
    ‘poly’:多項式
    ‘sigmoid’:
    ‘precomputed’:
    ‘rbf’:像正太分佈,但是和正太分佈沒什麼關係
  • gamma : ‘rbf’、‘poly’ 和‘sigmoid’的核函式引數。預設是’auto’,則會選擇1/n_features。
  • coef0 :核函式的常數項。對於‘poly’和 ‘sigmoid’有用。
  • shrinking :是否採用shrinking heuristic方法,預設為true
  • probability :是否採用概率估計?.預設為False
  • tol :停止訓練的誤差值大小,預設為1e-3
  • cache_size :核函式cache快取大小,預設為200
  • class_weight :類別的權重,字典形式傳遞。設定第幾類的引數C為weight*C(C-SVC中的C)
  • verbose :允許冗餘輸出?
  • max_iter :最大迭代次數。-1為無限制。
  • decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3
  • random_state :資料洗牌時的種子值,int值

上面的值中用的最多的有:C、kernel、degree、gramma、coef0。

二、sklearn: predict和predict_proba

這裡用一段程式碼展示效果:

from sklearn.linear_model import LogisticRegression
import numpy as np
x_train = np.array([[1,2,3],
                    [1,3,4],
                    [2,1,2],
                    [4,5,6],
                    [3,5,3],
                    [1,7,2]])
y_train = np.array([0, 0, 0, 1, 1, 1])
x_test = np.array([[2,2,2],
                   [3,2,6],
                   [1,7,4]])
clf = LogisticRegression()
clf.fit(x_train, y_train)
# 返回預測標籤
clf.predict(x_test)
array([1, 0, 1])
# 返回預測屬於某標籤的概率
clf.predict_proba(x_test)
array([[ 0.43348191, 0.56651809],
       [ 0.84401838, 0.15598162],
       [ 0.13147498, 0.86852502]])

預測[2,2,2]的標籤是0的概率為0.43348191,1的概率為0.56651809

預測[3,2,6]的標籤是0的概率為0.84401838,1的概率為0.15598162

預測[1,7,4]的標籤是0的概率為0.13147498,1的概率為0.86852502

probas = clf.predict(x_test)

predict_proba返回的是一個n行k列的陣列(probas),n是資料集的資料量,k是標籤數。

probas[: , j]打印出來的是每個資料對標籤j預測出的概率

三、資料視覺化seaborn

sns.set(context="notebook", style="dark", palette=sns.diverging_palette(240, 10, n=2))
seaborn中有五種可供選擇的主題:

 1.darkgrid(灰色網格)
 2.whitegrid(白色網格)
 3.dark(黑色)
 4.white(白色)
 5.ticks(十字叉)

sns.diverging_palette的意義:
sns.palplot(sns.diverging_palette(220, 20, n=7))

在這裡插入圖片描述

sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=7))

在這裡插入圖片描述
sep引數控制面板中間區域的兩個漸變的寬度:

sns.palplot(sns.diverging_palette(10, 220, sep=80, n=7))

在這裡插入圖片描述
也可以用中間的色調來選擇調色,而不是用亮度:

sns.palplot(sns.diverging_palette(255, 133, l=60, n=7, center="dark"))

在這裡插入圖片描述

四、Pandas:DataFrame物件的基礎操作

import pandas as pd
import numpy as np

df = pd.DataFrame([1, 2, 3, 4, 5], columns=['cols'], index=['a','b','c','d','e'])
print df
    cols
a     1
b     2
c     3
d     4
e     5
df2 = pd.DataFrame([[1, 2, 3],[4, 5, 6]], columns=['col1','col2','col3'], index=['a','b'])
print df2
   col1  col2  col3
a     1     2     3
b     4     5     6
df3 = pd.DataFrame(np.array([[1,2],[3,4]]), columns=['col1','col2'], index=['a','b'])
print df3
   col1  col2
a     1     2
b     3     4
df4 = pd.DataFrame({'col1':[1,3],'col2':[2,4]},index=['a','b'])
print df4
   col1  col2
a     1     2
b     3     4

建立DataFrame物件的資料可以為列表,陣列和字典,列名和索引為列表物件。
更多操作詳見:https://blog.csdn.net/u014281392/article/details/75331570

五、sklearn.svm.LinearSVC

from sklearn import svm
svc = svm.LinearSVC(C=1, loss='hinge', max_iter=1000)
# 接下來與SVM函式一樣正常訓練即可
svc.fit(data[['X1', 'X2']], data['y'])
svc.score(data[['X1', 'X2']], data['y'])

與引數kernel ='linear’的SVC類似,但是以liblinear而不是libsvm的形式實現,因此它在懲罰和損失函式的選擇方面具有更大的靈活性,並且應該更好地擴充套件到大量樣本。

此類支援密集和稀疏輸入,並且多類支援根據one-vs-the-rest方案處理。

Sklearn.svm.LinearSVC(penalty=’l2’, loss=’squared_hinge’, dual=True, tol=0.0001, C=1.0, multi_class=’ovr’,fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)

  • penalty : string, ‘l1’ or ‘l2’ (default=’l2’)
    指定懲罰中使用的規範。 'l2’懲罰是SVC中使用的標準。 'l1’導致稀疏的coef_向量。

  • loss : string, ‘hinge’ or ‘squared_hinge’ (default=’squared_hinge’)
    指定損失函式。 “hinge”是標準的SVM損失(例如由SVC類使用),而“squared_hinge”是hinge損失的平方。

  • dual : bool, (default=True)
    選擇演算法以解決雙優化或原始優化問題。 當n_samples> n_features時,首選dual = False。

  • tol : float, optional (default=1e-4)
    公差停止標準

  • C : float, optional (default=1.0)
    錯誤項的懲罰引數

  • multi_class : string, ‘ovr’ or ‘crammer_singer’ (default=’ovr’)
    如果y包含兩個以上的類,則確定多類策略。 “ovr”訓練n_classes one-vs-rest分類器,而“crammer_singer”優化所有類的聯合目標。 雖然crammer_singer在理論上是有趣的,因為它是一致的,但它在實踐中很少使用,因為它很少能夠提高準確性並且計算成本更高。 如果選擇“crammer_singer”,則將忽略選項loss,penalty和dual。

  • fit_intercept : boolean, optional (default=True)
    是否計算此模型的截距。 如果設定為false,則不會在計算中使用截距(即,預期資料已經居中)。

  • intercept_scaling : float, optional (default=1)
    當self.fit_intercept為True時,例項向量x變為[x,self.intercept_scaling],即具有等於intercept_scaling的常量值的“合成”特徵被附加到例項向量。 截距變為intercept_scaling *合成特徵權重注意! 合成特徵權重與所有其他特徵一樣經受l1 / l2正則化。 為了減小正則化對合成特徵權重(並因此對截距)的影響,必須增加intercept_scaling。

  • class_weight : {dict, ‘balanced’}, optional
    將類i的引數C設定為SVC的class_weight [i] * C. 如果沒有給出,所有課程都應該有一個重量。 “平衡”模式使用y的值自動調整與輸入資料中的類頻率成反比的權重,如n_samples /(n_classes * np.bincount(y))

  • verbose : int, (default=0)
    啟用詳細輸出。 請注意,此設定利用liblinear中的每程序執行時設定,如果啟用,可能無法在多執行緒上下文中正常工作。

  • random_state : int, RandomState instance or None, optional (default=None)
    在隨機資料混洗時使用的偽隨機數生成器的種子。 如果是int,則random_state是隨機數生成器使用的種子; 如果是RandomState例項,則random_state是隨機數生成器; 如果為None,則隨機數生成器是np.random使用的RandomState例項。

  • max_iter : int, (default=1000)
    要執行的最大迭代次數。