引言
我們前面學習了 Linear Regression
,它可以用於房價,天氣,股價等的預測,會發現這些場景的資料值都是連續性的。因此可以總結,Linear Regression 用於預測連續的值。
而在現實中還有另外一種場景,比如,判斷郵件是否為垃圾郵件,判斷某人是否會買保險,或者是判斷某人會投票給共和黨還是民主黨等。這些場景有個共同的特點,就是要預測的值是一種明確的分類。我們把這種問題稱為 Classification (分類)
問題。可以用 Logistic Regression
來解決。
Classification (分類)
問題還分為兩種情況,一種是預測的值只有 yes 或 no 兩種分類,我們把這種分類問題稱為 Binary Classification
, 另一種是預測值是多種分類。
這節課先來看 Binary Classification
的處理方法。
正文
假如你是一個保險公司的資料分析師,任務是在已知上述資料的前提下,做分析,預測一個人購買保險的可能性。目測這個表的數值,可以大概看出,年輕人買的可能性比較小,年紀大的人買的可能性比較大。
引入資料
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
df = pd.read_csv('/Users/rachel/Downloads/py-master/ML/7_logistic_reg/insurance_data.csv')
輸出
圖形化輸出目前的資料分佈
plt.scatter(df.age, df.bought_insurance, marker='+', color='red')
拆分訓練資料和測試資料
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df[['age']], df.bought_insurance, test_size=0.1)
引入模型並訓練
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(solver='lbfgs')
// 訓練模型
model.fit(X_train, y_train)
// 用測試資料預測
model.predict(X_test) // 輸出 array([1, 0, 0])
// 測試資料實際的值
X_test
輸出
來分析一下預測資料的合理性,預測的值是 1,0,0,對應著年齡來看,就是 50歲的人會買保險,29歲和 30歲的人不會買保險。這也符合我們最初的分析。
檢視模型精度
下面用 score()
函式檢視模型的準確度:
model.score(X_test, y_test) // 輸出 1.0, 由於資料量小, 所以準確度非常高
// 精確檢視每個資料傾向的百分比
model.predict_proba(X_test)
array([[0.19136177, 0.80863823],
[0.76147559, 0.23852441],
[0.87036695, 0.12963305]])
// 隨意預測一個年齡
model.predict([[25]]) // 輸出 array([0]),意味著不買的可能性比較大