機器學習-邏輯迴歸與線性迴歸

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()

紅色點是真是測試集數據,藍線是預測的線性模型。

相關文章
相關標籤/搜索