初探機器學習之邏輯回歸

上次本專欄探討了簡單的線性回歸,通過分析數據之間的相關關係,找到一個最佳擬合線,並用這個擬合線對輸出變數的預測。但是,有些場景,線性回歸沒有辦法使用。因為有些變數是離散的,如通過癌細胞的情況,對癌症的預測,或根據郵件內容,判斷郵件是否為垃圾郵件。像這樣的預測,它的結構就是兩個是或不是,是一個離散狀態。因此之前的線性回歸在這裡沒有辦法使用。

邏輯回歸,就是用於離散狀態曲線的預測。既然叫回歸,那麼裡面會用到線性相關的曲線。本文分類兩大板塊進行說明。

第一部分是邏輯回歸的理論說明。第二部分,結合一個簡單的實例,來詳細研究邏輯回歸的實踐過程。任何一個理論,通過動手去實踐,才能形成更加直觀的認識。

第一部分:理論說明

邏輯回歸模型的假設是:

h_{	heta}(x) 函授的輸出結構介於0~1之間。 	heta^{T}為方程的係數的轉置。通過下面這個例子可以很好理解

g代表邏輯函數,通常是一個常用的S形函數(sigmoid function),公式為:

g(z)=frac{1}{(1+e^{-z})}

其圖像為:

當z <0時, g(z) <0.5;

z =0時, g(z) =0.5;

z >0時, g(z) >0.5

z=	heta^{T}cdot X

	heta^{T}cdot X > 0 ,預測y=1的概率。

	heta^{T}cdot X < 0 ,預測y=0的概率。

	heta^{T}cdot X =0 構成的曲線,就是決策面。

h_{	heta}(x) 的含義對於給定的輸入變數,根據選擇的參數計算輸出變數=1的可能性,即 h_{	heta}(x)=P(y=1|x,	heta)

第二部分:實踐

實踐還是按照提出問題,理解數據,清理數據,構建模型,評估模型這樣的套路來進行。

提出問題

小明獲取一些數據,關於學習時間與是否通過的狀態。它需要用這些數據建立一個模型,並用來預測學習時長與能否通過考試的狀態。

數據如下:

理解數據

通過考試對應的數據列,只有兩個狀態,0和1。應該可以理解為沒有通過考試,用0來表示。通過考試,用1來表示。離散的狀態,不能再用之前的線性回歸模式來分析。由於離散狀態,表示對標籤進行分類,因此需要邏輯回歸的模型進行建模。

數據清洗

由於原始的數據是一個字典,對於數組方面的操作,會受到限制,因此需要把變成一個有序的數組,可以調用數組對象自帶的函數進行處理,提高數據處理效率。

examOrderDict = OrderedDict(examDict)examDf = pd.DataFrame(examOrderDict)

examDf 為一個DataFrame的數據格式

同時需要對數據進行劃分,『學習時間』為特徵,『通過考試』為標籤。如下

exam_X = examDf.loc[:,學習時間]exam_y = examDf.loc[:,通過考試]

為了構建邏輯回歸模型,需要把已有的數據樣本進行劃分,一部分劃分為訓練數據,一部分劃分為測試數據。這裡分配比例是0.8.

from sklearn.cross_validation import train_test_splitX_train,X_test,y_train,y_test = train_test_split(exam_X,exam_y,train_size=0.8)

由於X_train,X_test,y_train,y_test的數據類型不能被直接使用,需用用reshape進行整形。

X_train = X_train.values.reshape(-1,1)y_train = y_train.values.reshape(-1,1)X_test = X_test.values.reshape(-1,1)y_test = y_test.values.reshape(-1,1)

到此,訓練數據和測試數據已經準備完畢,接下來開始構建模型。

數據建模

邏輯回歸同樣需要調用機器學習scikit-learn中的機器學習庫,本次使用LogisticRegression回歸函數。

from sklearn.linear_model import LogisticRegressionmodel = LogisticRegression()model.fit(X_train,y_train)

評估模型

為了驗證回歸模型評估準確度,需要用測試集的數據進行驗證測試。調用score函數。計算邏輯回歸模型的準確率。

model.score(X_test,y_test)

算得結果是0.5

可以確定,預測準確率是50%。為什麼呢?是因為數據集太少,導致訓練的模型的不是很準確。隨著數據的加多,模型會變得更加準確。

在這裡預測一下當學習時間為3個小時,考試通過的概率是多少。調用predict_proba函數,算得考試通過的概率為56%。

為了驗證下這個對不對,直接用邏輯回歸模型進行計算。

a=model.intercept_b=model.coef_x=3;z=a+b*xy_pred1=1/(1+np.exp(-z))

算得概率也是為56%。

兩個結果一致。

結論

在面對需要分類的問題時,線性回歸不再使用。需要調用邏輯回歸模型進行機器學習。同時邏輯回歸的預測模型準確度,和數據集有關係。當數據集很小時,反而準確率會很差。因此也是為什麼大數據的興起,才能帶來人工智慧的發展。


推薦閱讀:

VC眼中的人工智慧!
使用sklearn來進行驗證碼識別
邏輯回歸(二分類)與極大似然
機器學習篇-名詞:候選集,覆蓋率
1-3 What is Machine Learning

TAG:機器學習 | 邏輯回歸 |