機器學習——logistic回歸實踐
機器學習(十五)
——logistic回歸實踐
(原創內容,轉載請註明來源,謝謝)
一、概述
logistic回歸的核心是sigmoid函數,以及分類方式。當sigmoid值大於0.5時,判斷結果為1,小於0.5時判斷結果為。公式為g(z)=1/(1+e-z)。其中,z=w0x0+w1x1…+wnxn,w為x的權重,其中x0=1。
決策邊界是用於區分分類結果的一條線,線的兩邊代表分類的兩種結果。
之前提到logistic,是使用梯度下降演算法,用於獲取代價函數J最小值時的參數。現在使用梯度上升演算法,直接進行訓練,不計算代價函數。
logistic的本質,就是計算出sigmoid的最佳參數。
二、梯度上升與決策邊界
下面是一個用梯度上升演算法進行分類的例子。
1、獲取數據源
數據是存在txt文件中,需要讀取出來。其中每一行的前面的列都是特徵值,最後一列是分類結果。
需要注意的是,由於x0默認是1,在獲取的內容中沒有記錄,因此需要手動把其加上。
2、定義sigmoid
3、梯度上升演算法
和梯度下降,區別在於梯度下降的時候,weights是要減去α乘以偏導數,而梯度上升是採用加的方式。
這裡訓練500次,每次都是矩陣直接相乘的計算。
4、梯度上升的簡化—隨機梯度上升
梯度上升演算法,每次都要進行矩陣的計算,當數據量很大時,這個矩陣的計算量非常大,因此可以改成隨機梯度上升。
這裡和梯度上升的區別,就是在於把矩陣運算改成了數值運算,按照順序遍歷樣本,每次僅取一個樣本進行梯度上升計算。
5、隨機梯度上升優化
隨機梯度上升,還有優化的空間。主要在於兩點:
1)α
α表示的是每次改動的單位步長。由於隨機梯度上升演算法,在高頻的地方會出現波動非常大的情況,這裡讓α在訓練次數多的情況下略微遞減,但又加上一個0.01,保證其不會減到。這樣可以改善高頻抖動劇烈的現象。
2)隨機樣本
樣本每次隨機取一個,這樣避免上下相關的數據出現問題,導致結果周期性波動。
隨機梯度上升,是一種在線學習演算法,其可以根據每次的輸入,實時進行學習,而不用一次性讀取全部的內容。相比之下,一次性讀取全部內容的演算法,稱為批處理演算法。
6、繪製結果
這個用到matplotlib,對裡面的語法沒有太多的研究。
7、繪製結果
下面三行weights分別是三種梯度上升,其在500次訓練的情況下,基本上結果是一樣的,因此圖沒有一一放出來。隨機梯度的有點就是在於速度快,當特徵值非常多或者樣本非常大的時候,用隨機梯度上升可以顯著加快運算速度。
根據繪製出來的決策邊界,可以看出只有兩個紅點和一個綠點存在誤差,整體來說效果還是很好的。
三、實戰-給定數據集進行預測
1、需求
下面進行一個實戰。根據給定的數據量大的樣本,進行分類。其是通過馬的各種身體特徵,預測馬的身體情況。
2、分類函數
logistic回歸,其分類就是根據sigmoid函數的計算結果,大於0.5時判斷為1,否則是。
3、讀取數據並訓練
整個過程和上面類似,不贅述。
4、測試訓練結果
用訓練出來的weights,配合測試數據進行測試,並比對實際結果,計算誤差率。
5、執行測試
四、樣本數據缺失情況下的處理
當採樣存在問題,導致部分數據的特徵值沒有採集完全,或者分類結果沒有採集到時,往往並不能重新採集,因為代價太大,因此可以用下面的方式來處理。
1、總體方式
用特徵均值彌補、用特殊值如-1來彌補、忽略有缺失值的樣本、使用相似樣本的均值來彌補、用其他的機器學習演算法預測缺失值等。
2、對於logistic回歸
1)特徵值缺失
特徵值缺失的情況下,對於logistic,可以直接將缺失的特徵值設置成,這是因為在計算weights時,特徵值為的不會影響到最終的結果;另外結果是的在sigmoid中也是正中間,沒有趨向性。
2)分類結果缺失
分類結果缺失的,在logistic中,通常會拋棄,因為結果缺失的不太好知道實際的結果。
五、總結
logistic回歸演算法,總體來說還算好理解,理解好sigmoid和梯度下降/梯度上升演算法,基本上就可以用logistic來解決問題了。
——written by linhxx 2018.01.16


TAG:機器學習 |