第三章 使用sklearn 實現機學習的分類算法
分類算法
- 分類器的性能與計算能力和預測性能很大程度上取決於用於模型訓練的數據
- 訓練機器學習算法的五個步驟:
- 特征的選擇
- 確定評價性能的標准
- 選擇分類器及其優化算法
- 對模型性能的評估
- 算法的調優
sklearn初步使用
- 3.1 sklearn中包括的processing 模塊中的標准化類,StandardScaler對特征進行標准化處理
from sklearn.processing import StandardSacler
sc = StandardScaler() #實例化
sc.fit(X_train)
sc.transform(X_train)
# - 以上兩句可以並寫成一句sc.fit_transform(X_trian)
# - 我們使用相同的放縮參數分別對訓練和測試數據集以保證他們的值是彼此相當的。**但是在使用fit_transform 只能對訓練集使用,而測試機則只使用fit即可。**
# - sklearn中的metrics類中包含了很多的評估參數,其中accuracy_score,
# - 中accuracy_score(y_test,y_pred),也就是那y_test與預測值相比較,得出正確率
y_pred = model.predict(X_test-std)
過擬合現象
過擬合現象出現有兩個原因:
- 訓練集與測試集特征分布不一致(黑天鵝和白天鵝)
- 模型訓練的太過復雜,而樣本量不足。
同時針對兩個原因而出現的解決方法: - 收集多樣化的樣本
- 簡化模型
- 交叉檢驗
邏輯斯諦回歸
感知機的一個最大缺點是:在樣本不是完全線性可分的情況下,它永遠不會收斂。
分類算中的另一個簡單高效的方法:logistics regression(分類模型)
- 很多情況下,我們會將邏輯回歸的輸出映射到二元分類問題的解決方案,需要確保邏輯回歸的輸出始終落在在0-1之間,此時S型函數的輸出值正好滿足了這個條件,其中:
幾率比(odd ratio)
特定的事件的發生的幾率,用數學公式表示為:$\frac{p}{1-p} $,其中p為正事件的概率,不一定是有利的事件,而是我們將要預測的事件。以一個患者患有某種疾病的概率,我們可以將正事件的類標標記為y=1。
- 也就是樣本特征與權重的線性組合,其計算公式:
z = w·x + b - 預測得到的概率可以通過一個量化器(單位階躍函數)簡單的轉化為二元輸出
- 如果y>0.5 則判斷該樣本類別為1,如y<0.5,則判定該樣本是其他類別。
- 對應上面的展開式,如果z≥0,則判斷類別是1,否則是其他。
- 閾值也就是0.5
通過邏輯斯諦回歸模型的代價函數獲得權重
- 判定某個樣本屬於類別1或者0 的條件概率如下:
- 邏輯回歸的代價函數是最小二乘損失函數
- 為了推導出邏輯斯蒂回歸的代價函數,需要先定義一個極大似然函數L,
- 用極大似然估計來根據給定的訓練集估計出參數w,對上式兩邊取對數,化簡為
求極大似然函數的最大值等價於求-l(w)的最小值,即:
利用梯度下降法求參數
- 在開始梯度下降之前,sigmoid function有一個很好的性質,
梯度的負方向就是代價函數下降最快的方向,借助泰勒展開,可以得到(函數可微,可導)
其中,f'(x) 和δ為向量,那么這兩者的內積就等於
當θ=π時,也就是在δ與f'(x)的方向相反時,取得最小值, 也就是下降的最快的方向了
這里也就是: f(x+δ) - f(x) = - ||δ||·||f'(x)||
也就是
- 其中,wj表示第j個特征的權重,η為學習率,用來控制步長。
- 對損失函數J(θ)中的θ的第j個權重求偏導,
所以,在使用梯度下降法更新權重時,只要根據公式
當樣本量極大的時候,每次更新權重需要耗費大量的算力,這時可以采取隨機梯度下降法,這時,每次迭代的時候需要將樣本重新打亂,然后用下面的式子更新權重
參考文獻:
- Raschka S. Python Machine Learning[M]. Packt Publishing, 2015
- 周志華. 機器學習 : = Machine learning[M]. 清華大學出版社, 2016.