機器學習-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)

Tags: