邏輯回歸分類
05-22
邏輯回歸分類
推薦閱讀:
1.什麼是邏輯回歸
邏輯回歸分本質不是回歸演算法,而是分類演算法。邏輯回歸本質上是運用二分分類的演算法,即標籤只有兩個。例如對於一首歌,我們喜歡或者不喜歡;一次考試,結果是通過或者不通過;一場比賽,結果實晉級或者淘汰。2.分類與回歸的區別分類和回歸有三點不同:1)分類輸出的是離散數據,e.g. 考試結果通過或者不通過;回歸輸出的是連續數據,例如考試分數。線性回歸的表達式是y=ax+b,如下圖所示,邏輯回歸的表達式是y=S(z),函數S是Sigmoid函數,參數z=ax+b是回歸函數。
2)分類得到的是決策面,決策面是不同類別數據分割的邊界,邊界兩邊是不同類別的數據;回歸演算法得到的是最佳擬合線。
3)用正確率最為指標監督分類,即正確數據在總數據中的比例;在回歸中用決定係數R平方評估模型。3. 邏輯回歸實例本案例是根據訓練數據建立邏輯回歸模型,以判斷考試是否通過。案例也會利用測試數據對模型進行檢驗,判斷模型的效果。首先導入包和創立數據集from collections import OrderedDictimport pandas as pdexamDict={學習時間:[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,2.50,
2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50], 通過考試:[0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]}examOrderDict=OrderedDict(examDict)examDf=pd.DataFrame(examOrderDict)以學習時間為特徵,是否通過考試為標籤。#特徵featuresexam_X=examDf.loc[:,學習時間]#標籤labesexam_y=examDf.loc[:,通過考試]
繪製散點圖,觀察兩個變數分布情況。import matplotlib.pyplot as plt#散點圖plt.scatter(exam_X, exam_y, color="c", label="exam data")#添加圖標標籤plt.xlabel("Hours")plt.ylabel("Pass")#顯示圖像plt.show()建立訓練數據集和測試數據集
from sklearn.cross_validation import train_test_split#建立訓練數據和測試數據X_train , X_test , y_train , y_test = train_test_split(exam_X , exam_y , train_size = .8)#輸出數據大小print(原始數據特徵:,exam_X.shape ,,訓練數據特徵:, X_train.shape ,
,測試數據特徵:,X_test.shape )print(原始數據標籤:,exam_y.shape , 訓練數據標籤:, y_train.shape , 測試數據標籤: ,y_test.shape)原始數據特徵: (20,) ,訓練數據特徵: (16,) ,測試數據特徵: (4,)原始數據標籤: (20,) 訓練數據標籤: (16,) 測試數據標籤: (4,)訓練模型,先使用reshape將數據變為n行1列。#將訓練數據特徵轉換成二維數組XX行*1列X_train=X_train.values.reshape(-1,1)#將測試數據特徵轉換成二維數組行數*1列
X_test=X_test.values.reshape(-1,1)#導入邏輯回歸from sklearn.linear_model import LogisticRegression#創建模型:邏輯回歸model = LogisticRegression()#訓練模型model.fit(X_train , y_train) 模型評估model.score(X_test , y_test)輸出
0.25測試數據的值X_test輸出array([[5. ], [3. ], [3.5], [2. ]])y_test
輸出18 111 013 07 0Name: 通過考試, dtype: int64模型準確率僅為0.25.原因在於數據量太小。因此需要增大數據量,這樣才能提高模型準確率。正如大數定律所說的:統計的數據足夠大,那麼事物出現的頻率就會無限接近它的期望。進一步理解邏輯函數
model.predict_proba(3)輸出array([[0.25736965, 0.74263035]])array中第1個值是標籤為0的概率值,第2個值是標籤為1的概率值,這兩個值的和是1.預測數據pred=model.predict([[3]])print(pred)輸出[1]用predict方法得到的分類結果是1,而測試數據中3對應的標籤值是0,因此這個預測結果是錯誤的。邏輯函數中的Z是回歸方程,用intercept和coef得到截距和回歸係數,再代入Sigmoid函數中得到概率值。#第1步:得到回歸方程的z值#回歸方程:z=??+??x#截距a=model.intercept_#回歸係數b=model.coef_x=3.5z=a+b*x#第2步:將z值帶入邏輯回歸函數中,得到概率值y_pred=1/(1+np.exp(-z))print(預測的概率值:,y_pred)輸出預測的概率值: [[0.74263035]]推薦閱讀:
※初探機器學習之邏輯回歸
※邏輯回歸初體驗
※python與機器學習入門(6)邏輯回歸
※廣告CTR預估中預測點擊率的校準
TAG:邏輯回歸 |