1. 程式人生 > >sklearn之神經網路模型(有監督)

sklearn之神經網路模型(有監督)

分類

MLPClassifier

引數說明:

  1. hidden_layer_sizes : 元組形式,長度n_layers-2,預設(100,),第i元素表示第i個神經元的個數

  2. activation: {‘identity’, ‘logistic’, ‘tanh’, ‘relu’},預設"relu"

    • ‘identity’: f(x) = x
    • ‘logistic’:f(x) = 1 / (1 + exp(-x))
    • ‘tanh’ : f(x) = tanh(x)
    • ‘relu’ : f(x) = max(0, x)
  3. solver:{‘lbfgs’, ‘sgd’, ‘adam’}, default ‘adam’

    • lbfgs:quasi-Newton方法的優化器
    • sgd:隨機梯度下降
    • adam: Kingma, Diederik, and Jimmy Ba提出的機遇隨機梯度的優化器 注意:預設solver ‘adam’在相對較大的資料集上效果比較好(幾千個樣本或者更多),對小資料集來說,lbfgs收斂更快效果也更好
  4. alpha:float,可選的,預設0.0001,正則化項引數

  5. batch_size:int , 可選的,預設‘auto’,隨機優化的minibatches的大小,如果solver是‘lbfgs’,分類器將不使用minibatch,當設定成‘auto’,batch_size=min(200,n_samples)

  6. 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.
  7. max_iter: int,可選,預設200,最大迭代次數。

  8. random_state:int 或RandomState,可選,預設None,隨機數生成器的狀態或種子

  9. shuffle: bool,可選,預設True,只有當solver=’sgd’或者‘adam’時使用,判斷是否在每次迭代時對樣本進行清洗。

  10. tol:float, 可選,預設1e-4,優化的容忍度

  11. learning_rate_int:double,可選,預設0.001,初始學習率,控制更新權重的補償,只有當solver=’sgd’ 或’adam’時使用。

  12. power_t: double, optional, default 0.5,只有solver=’sgd’時使用,是逆擴充套件學習率的指數.當learning_rate=’invscaling’,用來更新有效學習率。

  13. verbose : bool, optional, default False,是否將過程列印到stdout

  14. warm_start : bool, optional, default False,當設定成True,使用之前的解決方法作為初始擬合,否則釋放之前的解決方法

  15. momentum : float, default 0.9,Momentum(動量) for gradient descent update. Should be between 0 and 1. Only used when solver=’sgd’.

  16. nesterovs_momentum : boolean, default True, Whether to use Nesterov’s momentum. Only used when solver=’sgd’ and momentum > 0

  17. early_stopping : bool, default False,Only effective when solver=’sgd’ or ‘adam’,判斷當驗證效果不再改善的時候是否終止訓練,當為True時,自動選出10%的訓練資料用於驗證並在兩步連續爹迭代改善低於tol時終止訓練

  18. validation_fraction: float, optional, default 0.1,用作早期停止驗證的預留訓練資料集的比例,早0-1之間,只當early_stopping=True有用

  19. beta_1 : float, optional, default 0.9,Only used when solver=’adam’,估計一階矩向量的指數衰減速率,[0,1)之間

  20. beta_2 : float, optional, default 0.999,Only used when solver=’adam’估計二階矩向量的指數衰減速率[0,1)之間

  21. psilon: float, optional, default 1e-8,Only used when solver=’adam’數值穩定值。

屬性說明:

  1. classes_:每個輸出的類標籤
  2. loss_:損失函式計算出來的當前損失值
  3. coefs_:列表中的第i個元素表示i層的權重矩陣
  4. intercepts_:列表中第i個元素代表i+1層的偏差向量
  5. n_iter_:迭代次數
  6. n_layers_:層數
  7. n_outputs_:輸出的個數
  8. 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):設定引數。
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])
clf.predict_proba([[2., 2.], [-1.,- 2.]])  
array([[  1.96718015e-004,   9.99803282e-001],
       [  1.00000000e+000,   4.67017947e-144]])

迴歸

from sklearn.neural_network import MLPRegressor

正則化

實用技巧

  • 多層感知器對特徵的縮放是敏感的,所以它強烈建議您歸一化你的資料。 例如,將輸入向量 X 的每個屬性放縮到到 [0, 1] 或 [-1,+1] ,或者將其標準化使它具有 0 均值和方差 1。
  • 最好使用 GridSearchCV 找到一個合理的正則化引數α \alpha ,通常範圍是在 10.0np.arange(1,7) 10.0 ** -np.arange(1, 7)
  • 據經驗可知,我們觀察到 L-BFGS 收斂速度是更快的並且是小資料集上更好的解決方案。對於規模相對比較大的資料集,Adam 是非常魯棒的。 它通常會迅速收斂,並得到相當不錯的表現。 另一方面,如果學習率調整得正確, 使用 momentum 或 nesterov’s momentum 的 SGD 可以比這兩種演算法更好。