機器學習——多元線性迴歸分析(multiple regression)及應用

loveliuzz發表於2017-09-16

1、多元迴歸分析與簡單線性迴歸區別

多個自變數x

2、多元迴歸模型

其中,是引數,是誤差值

3、多元迴歸方程

4、估計多元迴歸方程

一個樣本被用來計算的點估計

5、估計流程(與簡單線性迴歸類似)


6、估計方法

使sum of squares最小,運算與簡單線性迴歸類似,涉及線性代數和矩陣代數的運算

7、舉例

一家快遞公司送貨,X1:運輸里程;X2:運輸次數;Y:總運輸時間


8、描述引數含義

平均每多送1英里,運輸時間延長0.0611小時

平均每多一次運輸,運輸時間延長0.923小時

9、預測

問題:如果一個運輸任務是跑102英里,運輸6次,預計時間是多長?

10、如果自變數裡面有分型別變數(categorical data),如何處理?

11、關於誤差的分佈

12、對第一個表格的資料,快遞公司運輸問題用Python進行程式碼實現

運輸里程、運輸次數、總運輸時間按列的形式儲存到檔案TransportData.csv檔案中,如下圖:

Python3.5實現程式碼為:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

from  numpy import genfromtxt      #genfromtxt函式建立陣列表格資料
import numpy as np
from sklearn import datasets,linear_model

#讀取資料,r後邊內容當做完整的字串,忽略裡面的特殊字元
dataPath = r'F:\PythonCode\Regresssion\TransportData.csv'
transportData = genfromtxt(dataPath,delimiter=',')       #將路徑下的文字檔案匯入並轉化成numpy陣列格式
print("transportData:",transportData)

X = transportData[:,:-1]      #取所有行和除了最後一列的所有列作為特徵向量
Y = transportData[:,-1]       #取所有行和最後一列作為迴歸的值
print("X:",X)
print("Y:",Y)

#建立迴歸模型
regr = linear_model.LinearRegression()
regr.fit(X,Y)
print("coefficients:",regr.coef_)          #b1,...,bp(與x相結合的各個引數)
print("intercept:",regr.intercept_)        #b0(截面)

x_pred = [102,6]
y_pred = regr.predict(x_pred)         #預測
print("y_pred:",y_pred)
執行結果:

transportData: [[ 100.     4.     9.3]
 [  50.     3.     4.8]
 [ 100.     4.     8.9]
 [ 100.     2.     6.5]
 [  50.     2.     4.2]
 [  80.     2.     6.2]
 [  75.     3.     7.4]
 [  65.     4.     6. ]
 [  90.     3.     7.6]
 [  90.     2.     6.4]]
X: [[ 100.    4.]
 [  50.    3.]
 [ 100.    4.]
 [ 100.    2.]
 [  50.    2.]
 [  80.    2.]
 [  75.    3.]
 [  65.    4.]
 [  90.    3.]
 [  90.    2.]]
Y: [ 9.3  4.8  8.9  6.5  4.2  6.2  7.4  6.   7.6  6.4]
coefficients: [ 0.06231881  0.88000431]
intercept: -0.807517256255
y_pred: [ 10.82902718]
13、當自變數中有分類變數(如:車型)時,多元線性迴歸處理

將分類變數轉化成0,1,2等數字來表示。0:小車,1:SUV,2:卡車,轉碼格式為:用一個3維數表示,所用車輛型別為1,其餘車型為0.

運輸里程、運輸次數、運輸車型、總運輸時間按列的形式儲存到檔案TransportData2.csv檔案中,轉碼格式如下圖:

轉碼格式:(轉化過程,不是最終儲存內容

將轉碼後的資料儲存在TransportData2.csv檔案中


對前面的程式碼稍作修改即可:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#多元線性迴歸處理自變數中有分類變數
from  numpy import genfromtxt      #genfromtxt函式建立陣列表格資料
import numpy as np
from sklearn import datasets,linear_model

#讀取資料,r後邊內容當做完整的字串,忽略裡面的特殊字元
dataPath = r'F:\PythonCode\Regresssion\TransportData2.csv'
transportData = genfromtxt(dataPath,delimiter=',')       #將路徑下的文字檔案匯入並轉化成numpy陣列格式
print("transportData:",transportData)

X = transportData[:,:-1]      #取所有行和除了最後一列的所有列作為特徵向量
Y = transportData[:,-1]       #取所有行和最後一列作為迴歸的值
print("X:",X)
print("Y:",Y)

#建立迴歸模型
regr = linear_model.LinearRegression()
regr.fit(X,Y)
print("coefficients:",regr.coef_)          #b1,...,b5(與x相結合的各個引數)
print("intercept:",regr.intercept_)        #b0(截面)

x_pred = [102,6,0,0,1]
y_pred = regr.predict(x_pred)         #預測
print("y_pred:",y_pred)
執行結果:

transportData: [[ 100.     4.     0.     1.     0.     9.3]
 [  50.     3.     1.     0.     0.     4.8]
 [ 100.     4.     0.     1.     0.     8.9]
 [ 100.     2.     0.     0.     1.     6.5]
 [  50.     2.     0.     0.     1.     4.2]
 [  80.     2.     0.     1.     0.     6.2]
 [  75.     3.     0.     1.     0.     7.4]
 [  65.     4.     1.     0.     0.     6. ]
 [  90.     3.     1.     0.     0.     7.6]
 [  90.     2.     1.     0.     0.     6.4]]
X: [[ 100.    4.    0.    1.    0.]
 [  50.    3.    1.    0.    0.]
 [ 100.    4.    0.    1.    0.]
 [ 100.    2.    0.    0.    1.]
 [  50.    2.    0.    0.    1.]
 [  80.    2.    0.    1.    0.]
 [  75.    3.    0.    1.    0.]
 [  65.    4.    1.    0.    0.]
 [  90.    3.    1.    0.    0.]
 [  90.    2.    1.    0.    0.]]
Y: [ 9.3  4.8  8.9  6.5  4.2  6.2  7.4  6.   7.6  6.4]
coefficients: [ 0.05545649  0.69545199 -0.1734737   0.57081602 -0.39734232]
intercept: 0.197201946472
y_pred: [ 9.62913307]

相關文章