機器學習-Logistic回歸(Logistic Regression)案例
- 2019 年 10 月 4 日
- 筆記
微信公眾號:yale記 關注可了解更多的教程問題或建議,請公眾號留言。
背景介紹
不要被它的名字弄糊塗!它是一種分類而非回歸演算法。它用於根據給定的自變數集估計離散值(二進位值,如0/1,yes/no,true/false)。簡單來說,它通過將數據擬合到logit函數來預測事件發生的概率。因此,它也被稱為logit回歸。由於它預測概率,因此其輸出值介於0和1之間(如預期的那樣)。
再次,讓我們通過一個簡單的例子來嘗試理解這一點。
假設你的朋友給你一個難題來解決。只有2個結果場景 - 要麼你解決它,要麼你沒解決。現在想像一下,你正在獲得各種各樣的謎題/測驗,試圖了解你擅長哪些科目。這項研究的結果將是這樣的 - 如果給你一個基於三角測量的十年級問題,你有70%的可能解決它。另一方面,如果是第五級歷史問題,獲得答案的概率僅為30%。這就是Logistic回歸為您提供的。
在數學領域,結果的對數幾率被建模為預測變數的線性組合:
odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence ln(odds) = ln(p/(1-p)) logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk
以上,p是存在感興趣特徵的概率。它選擇的參數最大化觀察樣本值的可能性,而不是最小化誤差平方和(如普通回歸)。
現在,您可能會問,為什麼要使用log函數?為簡單起見,我們只是說這是複製步進函數的最佳數學方法之一。我可以詳細介紹,但這會超出本文的目的。

來看使用python的scikit-learn完成的Logistic回歸案例:



程式碼塊
# ## 使用Scikit-learn的LogisticRegression完成測試案例 # In[30]: import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score # ### 讀取訓練數據和測試數據集 # In[31]: train_data = pd.read_csv('train-data.csv') test_data = pd.read_csv('test-data.csv') print(train_data.head()) # ### 列印訓練數據和測試數據形狀 # In[32]: print('Shape of training data :',train_data.shape) print('Shape of testing data :',test_data.shape) # In[33]: #現在,我們需要預測測試數據中缺少的目標變數 # target變數 - Survived #在訓練數據上分離獨立變數和目標變數 train_x = train_data.drop(columns=['Survived'],axis=1) train_y = train_data['Survived'] #在測試數據上分離獨立變數和目標變數 test_x = test_data.drop(columns=['Survived'],axis=1) test_y = test_data['Survived'] model = LogisticRegression(solver='liblinear') model.fit(train_x,train_y) # In[34]: #訓練模型的係數 print('Coefficient of model :', model.coef_) #攔截模型 print('Intercept of model',model.intercept_) # In[35]: # 預測訓練數據集 predict_train = model.predict(train_x) # 訓練數據集得分 accuracy_train = accuracy_score(train_y,predict_train) print('accuracy_score on train dataset : ', accuracy_train) # In[36]: # 預測測試數據集 predict_test = model.predict(test_x) # 測試數據集得分 accuracy_test = accuracy_score(test_y,predict_test) print('accuracy_score on test dataset : ', accuracy_test)