logistic迴歸與線性迴歸實際上有不少相同之處,最大的區別就在於他們的因變量不一樣,其餘的基本都差很少,正是由於如此,這兩種迴歸能夠歸於同一個家族,即廣義線性模型(generalized
linear
model)。這一家族中的模型形式基本上都差很少,不一樣的就是因變量不一樣,若是是連續的,就是多重線性迴歸,若是是二項分佈,就是logistic迴歸。logistic迴歸的因變量能夠是二分類的,也能夠是多分類的,可是二分類的更爲經常使用,也更加容易解釋。因此實際中最爲經常使用的就是二分類的logistic迴歸。而邏輯迴歸是用於分類問題,線性迴歸纔是用於迴歸問題的。python
接下來就用python的sklearn實現一個例子,這裏用到了skearn中的load_iris數據數組
#次日 邏輯迴歸與線性迴歸 #導入iris數據 from sklearn.datasets import load_iris #導入迴歸方法 from sklearn.linear_model import LinearRegression,LogisticRegression #導入拆分數據集的方法 from sklearn.model_selection import train_test_split #用於分析驗證測試結果 from sklearn.metrics import confusion_matrix,classification_report # 載入sklearn數據 iris = load_iris() # 獲取特徵數據 iris_data = iris['data'] # 特徵列名 columns = iris['feature_names'] # 獲取籤值 iris_label = iris['target'] # 拆分訓練集和測試集 train_x,test_x,train_y,test_y = train_test_split(iris_data,iris_label,test_size=0.3) clf = LogisticRegression() #訓練 clf.fit(train_x,train_y) #預測 predict_y = clf.predict(test_x) print(confusion_matrix(test_y,predict_y)) print(classification_report(test_y,predict_y))
代碼很簡單,導入數據和訓練基本上就是這樣,這裏說一下confusion_matrix這個主要用於查看預測結果和真是結果的差異dom
[[18 0 0] [ 0 13 1] [ 0 1 12]]
以上結果,列是預測結果數量,行是真是結果數量,在對角線上的數聽說明預測和真實結果一直,這裏看第二行三列,這裏就說明真實結果是類型二結果預測成爲類型三。測試
讓後就是classification_report這個方法能夠看到預測結果的一些信息,好比準確率,召回率等等spa
precision recall f1-score support 0 1.00 1.00 1.00 18 1 0.93 0.93 0.93 14 2 0.92 0.92 0.92 13 avg / total 0.96 0.96 0.96 45
能夠看到有三個類型0,1,2code
第一列precision表示準確率,從上往下意思是預測爲0類的準確率爲1,預測爲1類的準確率是0.93,預測爲2類的準確率是0.92,最後一行是平均準確率。blog
第二列recall表示召回率ci
第三列f1-score表示F1分數get
第四列support表示改分類有多少樣本it
從這個結果來看,總體預測結果較好,平均準確率和召回率還有F1都比較理想,特別是在類型0上是徹底準確,類別2和3相對要差一點。
因爲數據特徵有3個沒法用matplotlib可視化,下面咱們用一個特徵的數據實現一下線性迴歸而且可視化出來。
import numpy as np from matplotlib import pyplot as plt #生成二維的線性散點,加入一些偏移量 x = np.linspace(0, 50, 100) + 2*np.random.randn(100) y = 2*x + 5*np.random.randn(100) #預測須要的x值二維數組,用此方法將數組轉換成二維的 x = x.reshape(-1,1) # 上面例子有,一樣是拆分訓練集和測試集 train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.3) # 咱們先畫一下訓練集和測試集的數據吧 plt.figure(figsize=(16,6)) plt.subplot(1,2,1) plt.scatter(train_x,train_y,label='train data') plt.legend() plt.subplot(1,2,2) plt.scatter(test_x,test_y,label='test data') plt.legend() plt.show()
左邊的訓練集,右邊的是測試集,接下來咱們用訓練集開始訓練,讓後用測試集來測訓練的效果,而且打印出來
# 線性迴歸方法 clf = LinearRegression() # 用訓練集訓練 clf.fit(train_x,train_y) # 預測測試集 predict_y = clf.predict(test_x) # 打印出來 plt.figure(figsize=(8,6)) plt.xlim([-5,55]) plt.ylim([-10,110]) plt.xlabel('x') plt.ylabel('y') plt.scatter(test_x,test_y,c='r',label='really') plt.plot(test_x,predict_y,color='b',label='predict') plt.legend() plt.show()
紅色點是真是測試集數據,藍線是預測的線性模型。