1. 程式人生 > >scikit-leran學習筆記(3)---神經網路模型(有監督的)

scikit-leran學習筆記(3)---神經網路模型(有監督的)

1.Multi-layer Perceptron 多層感知機

MLP是一個監督學習演算法,圖1是帶一個隱藏層的MLP模型
這裡寫圖片描述
左邊層是輸入層,由神經元集合{xi|x1,x2,…,xm},代表輸入特徵,隱藏層的每個神經元將前一層的的值通過線性加權求和的方式表示,即w1x1+w2x2+…+wmxm,其次是一個非線性啟用函式g(.):R->R,比如雙曲函式,輸出層接受從最後一個隱藏層輸出的值並將他們轉換成值。
這個模組包含公共屬性coefs_intercepts_coefs_ 是權重矩陣列表,下標為i的權重矩陣代表i和i+1層的權重。intercepts_

是一個偏差向量列表,其中第i個偏差向量代表加到i+1層上的偏差值。
MLP的優點是:
- 可以學習非線性模型
- 使用partial_fit 實時學習
MLP的缺點是:
- 有隱藏層的MLP包含一個非凸性損失函式,存在超過一個最小值,所以不同的隨機初始權重可能導致不同驗證精確度
- MLP要求調整一系列超引數,比如隱藏神經元,隱藏層的個數以及迭代的次數
- MLP對特徵縮放比較敏感

2.分類

MLPClassifier使用BP演算法來實現一個多層感知機。
示例1:

>>> from sklearn.neural_network import MLPClassifier
>>> X=[[0.,0.],[1.,1.]]
>>> y=[0,1] >>> clf = MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=(5,2),random_state=1) >>> clf.fit(X,y) MLPClassifier(activation='relu', alpha=1e-05, batch_size='auto', beta_1=0.9, beta_2=0.999, early_stopping=False, epsilon=1e-08, hidden_layer_sizes=(5
, 2), learning_rate='constant', learning_rate_init=0.001, max_iter=200, momentum=0.9, nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True, solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False, warm_start=False) >>> clf.predict([[2.,2.],[-1.,-2.]]) array([1, 0]) >>> [coef.shape for coef in clf.coefs_] [(2L, 5L), (5L, 2L), (2L, 1L)] >>> clf.predict_proba([[2.,2.],[1.,2.]]) array([[ 1.96718015e-04, 9.99803282e-01], [ 1.96718015e-04, 9.99803282e-01]])

引數說明:
1. hidden_layer_sizes :元祖格式,長度=n_layers-2, 預設(100,),第i個元素表示第i個隱藏層的神經元的個數。
2. activation :{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, 預設‘relu
- ‘identity’: no-op activation, useful to implement linear bottleneck,
返回f(x) = x
- ‘logistic’:the logistic sigmoid function, returns f(x) = 1 / (1 + exp(-x)).
- ‘tanh’:the hyperbolic tan function, returns f(x) = tanh(x).
- ‘relu’:the rectified linear unit function, returns f(x) = max(0, x)
4. solver: {‘lbfgs’, ‘sgd’, ‘adam’}, 預設 ‘adam’,用來優化權重
- lbfgs:quasi-Newton方法的優化器
- sgd:隨機梯度下降
- adam: Kingma, Diederik, and Jimmy Ba提出的機遇隨機梯度的優化器
注意:預設solver ‘adam’在相對較大的資料集上效果比較好(幾千個樣本或者更多),對小資料集來說,lbfgs收斂更快效果也更好。
5. alpha :float,可選的,預設0.0001,正則化項引數
6. batch_size : int , 可選的,預設‘auto’,隨機優化的minibatches的大小,如果solver是‘lbfgs’,分類器將不使用minibatch,當設定成‘auto’,batch_size=min(200,n_samples)
7. learning_rate :{‘constant’,‘invscaling’, ‘adaptive’},預設‘constant’,用於權重更新,只有當solver為’sgd‘時使用
- ‘constant’: 有‘learning_rate_init’給定的恆定學習率
- ‘incscaling’:隨著時間t使用’power_t’的逆標度指數不斷降低學習率learning_rate_ ,effective_learning_rate = learning_rate_init / pow(t, power_t)
- ‘adaptive’:只要訓練損耗在下降,就保持學習率為’learning_rate_init’不變,當連續兩次不能降低訓練損耗或驗證分數停止升高至少tol時,將當前學習率除以5.
8. max_iter: int,可選,預設200,最大迭代次數。
9. random_state:int 或RandomState,可選,預設None,隨機數生成器的狀態或種子。
10. shuffle: bool,可選,預設True,只有當solver=’sgd’或者‘adam’時使用,判斷是否在每次迭代時對樣本進行清洗。
11. tol:float, 可選,預設1e-4,優化的容忍度
12. learning_rate_int:double,可選,預設0.001,初始學習率,控制更新權重的補償,只有當solver=’sgd’ 或’adam’時使用。
13. power_t: double, optional, default 0.5,只有solver=’sgd’時使用,是逆擴充套件學習率的指數.當learning_rate=’invscaling’,用來更新有效學習率。
14. verbose : bool, optional, default False,是否將過程列印到stdout
15. warm_start : bool, optional, default False,當設定成True,使用之前的解決方法作為初始擬合,否則釋放之前的解決方法。
16. momentum : float, default 0.9,Momentum(動量) for gradient descent update. Should be between 0 and 1. Only used when solver=’sgd’.
17. nesterovs_momentum : boolean, default True, Whether to use Nesterov’s momentum. Only used when solver=’sgd’ and momentum > 0.
18. early_stopping : bool, default False,Only effective when solver=’sgd’ or ‘adam’,判斷當驗證效果不再改善的時候是否終止訓練,當為True時,自動選出10%的訓練資料用於驗證並在兩步連續爹迭代改善低於tol時終止訓練。
19. validation_fraction : float, optional, default 0.1,用作早期停止驗證的預留訓練資料集的比例,早0-1之間,只當early_stopping=True有用
20. beta_1 : float, optional, default 0.9,Only used when solver=’adam’,估計一階矩向量的指數衰減速率,[0,1)之間
21. beta_2 : float, optional, default 0.999,Only used when solver=’adam’估計二階矩向量的指數衰減速率[0,1)之間
22. epsilon : float, optional, default 1e-8,Only used when solver=’adam’數值穩定值。
屬性說明:
- classes_:每個輸出的類標籤
- loss_:損失函式計算出來的當前損失值
- coefs_:列表中的第i個元素表示i層的權重矩陣
- intercepts_:列表中第i個元素代表i+1層的偏差向量
- n_iter_ :迭代次數
- n_layers_:層數
- n_outputs_:輸出的個數
- out_activation_:輸出啟用函式的名稱。
方法說明:
- fit(X,y):擬合
- get_params([deep]):獲取引數
- predict(X):使用MLP進行預測
- predic_log_proba(X):返回對數概率估計
- predic_proba(X):概率估計
- score(X,y[,sample_weight]):返回給定測試資料和標籤上的平均準確度
-set_params(**params):設定引數。

今天就寫到這裡啦,這一部分還沒有看完,,明天繼續啦~,初學小菜鳥,望多多指教