機器學習第五篇——神經網絡

通過前面幾篇的學習,我們瞭解了線性模型邏輯迴歸決策樹的知識。下面就它們的應用領域和使用技巧進行說明。

線性模型:

  •  一般應用於迴歸問題上,適用於因變量和自變量之間有線性關係。
  • 在小數據集上用正規方程求解簡單、快速,在大數據集上可用梯度下降法求解。

邏輯迴歸:

  • 一般應用於二分類問題。
  • 分類器模型較簡單,不能形成邊界複雜的模型。

決策樹:

  • 決策樹的最大缺點是原理中的貪心算法,因此它所做的選擇只能是某種意義上的局部最優選擇。
  • 遇特徵數目較多的數據集很容易過擬合,所以很必要進行像剪枝、設置葉節點所需的最小樣本數或設置數的最大深度來避免過擬合。
  • 決策樹最大的優點是便於理解和解釋,樹的結構可以可視化出來。

有了以上的知識,大家在解決實際問題時可以根據具體情況選擇不同的方法。

好了,下面就進入這篇文章的主題——神經網絡,首先我們來了解感知機。

一、感知機

大家應該還記得邏輯迴歸中提到的單位階躍函數和對數機率函數吧。邏輯迴歸利用對數機率函數來進行分類,而感知機則是利用單位階躍函數來進行分類。具體示意如下。

分類原則是y=\sum_{i}^{n}W_{i}*X_{i} -\o,如果y>=0,則判定爲正樣本,如果y<0,則判定爲負樣本。感知機模型由W和θ參數唯一確定,因此我們的目標就是求出W和θ。具體過程如下。

可以看到,在二維平面上,感知機就是找一條直線分類數據,在n維空間上,就是找n-1維的超平面分類數據,這就要求數據是線性可分的。這個條件太苛刻了,並且感知機在數據不是線性可分的情況下效果很不好,爲了解決這個問題,人們就提出了神經網絡的概念。一個典型的三層神經網絡架構如下。

其中相關的定義如下。

  • \theta _{j} : 輸出層第 j 個神經元的閾值。
  • \gamma _{h}: 隱層第 h 個神經元的閾值。
  • v_{ih}: 輸入層第 i 個神經元和隱藏第 h 個神經元之間的連接權。
  • w_{hj}: 隱層第 h 個神經元和輸出層第 j 個神經元之間的連接權。
  • \alpha _{h}=\sum_{i=1}^{d}x_{i}v_{ih}: 隱層第 h 個神經元接受到的輸入。
  • \beta _{j}=\sum_{h=1}^{q}b_{h}w_{hj} :輸出層第 j 個神經元接受到的輸入。

三層神經網絡由 (d+l+1)q+l 個參數確定,而我們的目標就是用數據集擬合出這個參數,下面就介紹著名的BP算法(error BackPropagation)。

BP算法可以形象的描述爲從後往前的更新參數。理論證明,只要隱層的結點個數足夠,三層架構的神經網絡幾乎可以構造任何複雜的分類邊界,但設置合適的隱藏結點數是個棘手的問題。

有了理論知識,我們看看在sklearn中是怎麼應用神經網絡的。一個簡單的例子如下。

>>> 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])

MLPClassifier類相關參數說明:

     Parameters:

            hidden_layer_sizes : tuple, length = n_layers - 2, default (100,)

                 設置各隱層的結點數。

            activation : {‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, default ‘relu’

                 設置激活函數。

                 identity:f(x) = x

                 logistic:f(x) = 1 / (1 + exp(-x))

                 tanh:f(x) = tanh(x)

                 relu:max(0, x)

            solver : {‘lbfgs’, ‘sgd’, ‘adam’}, default ‘adam’

                 擬合參數的方法,‘sgd’就是隨機梯度下降法。

            alpha : float, optional, default 0.0001

                 正則化參數

            early_stopping : bool, default False

                是否使用“早停”策略緩解過擬合。

           validation_fraction : float, optional, default 0.1

               留出多少比率的驗證集用於“早停”策略。

 

Attributes:

        

          coefs_ : list, length n_layers - 1

              權值矩陣。

          intercepts_ : list, length n_layers - 1

              閾值。

 

Methods:

          predict_proba(X)

               樣本X屬於每一個類別的概率。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章