通過前面幾篇的學習,我們瞭解了線性模型、邏輯迴歸、決策樹的知識。下面就它們的應用領域和使用技巧進行說明。
線性模型:
- 一般應用於迴歸問題上,適用於因變量和自變量之間有線性關係。
- 在小數據集上用正規方程求解簡單、快速,在大數據集上可用梯度下降法求解。
邏輯迴歸:
- 一般應用於二分類問題。
- 分類器模型較簡單,不能形成邊界複雜的模型。
決策樹:
- 決策樹的最大缺點是原理中的貪心算法,因此它所做的選擇只能是某種意義上的局部最優選擇。
- 遇特徵數目較多的數據集很容易過擬合,所以很必要進行像剪枝、設置葉節點所需的最小樣本數或設置數的最大深度來避免過擬合。
- 決策樹最大的優點是便於理解和解釋,樹的結構可以可視化出來。
有了以上的知識,大家在解決實際問題時可以根據具體情況選擇不同的方法。
好了,下面就進入這篇文章的主題——神經網絡,首先我們來了解感知機。
一、感知機
大家應該還記得邏輯迴歸中提到的單位階躍函數和對數機率函數吧。邏輯迴歸利用對數機率函數來進行分類,而感知機則是利用單位階躍函數來進行分類。具體示意如下。
分類原則是,如果y>=0,則判定爲正樣本,如果y<0,則判定爲負樣本。感知機模型由W和θ參數唯一確定,因此我們的目標就是求出W和θ。具體過程如下。
可以看到,在二維平面上,感知機就是找一條直線分類數據,在n維空間上,就是找n-1維的超平面分類數據,這就要求數據是線性可分的。這個條件太苛刻了,並且感知機在數據不是線性可分的情況下效果很不好,爲了解決這個問題,人們就提出了神經網絡的概念。一個典型的三層神經網絡架構如下。
其中相關的定義如下。
- : 輸出層第 j 個神經元的閾值。
- : 隱層第 h 個神經元的閾值。
- : 輸入層第 i 個神經元和隱藏第 h 個神經元之間的連接權。
- : 隱層第 h 個神經元和輸出層第 j 個神經元之間的連接權。
- : 隱層第 h 個神經元接受到的輸入。
- :輸出層第 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:
樣本X屬於每一個類別的概率。