機器學習-多元線性迴歸(Multiple Regression)演算法
阿新 • • 發佈:2019-01-29
學習彭亮《深度學習基礎介紹:機器學習》課程
與簡單線性迴歸區別
- 簡單線性迴歸:一個自變數(x)
- 多元線性迴歸:多個自變數(x)
多元迴歸模型
y=β0+β1x1+β2x2+ … +βpxp+ε
其中:β0,β1,β2… βp是引數
ε是誤差值
多元迴歸方程
E(y)=β0+β1x1+β2x2+ … +βpxp
估計多元迴歸方程
y_hat=b0+b1x1+b2x2+ … +bpxp,(估計值),一個樣本被用來計算β0,β1,β2… βp的點估計b0, b1, b2,…, bp
估計方法
使sum of squares最小
多元線性迴歸運算與簡單線性迴歸運算類似,涉及到線性代數和矩陣代數的運算
例子
Time = b0+ b1*Miles + b2 * Deliveries
描述引數含義
- b0: 平均每多運送一英里,運輸時間延長b1 小時
- b1: 平均每多一次運輸,運輸時間延長 b2 小時
關於誤差的分佈
- 誤差ε是一個隨機變數,均值為0
- ε的方差對於所有的自變數來說相等
- 所有ε的值是獨立的
- ε滿足正態分佈,並且通過β0+β1x1+β2x2+ … +βpxp反映y的期望值
程式碼應用1(Xi均為連續變數)
#coding=utf-8
# @Author: yangenneng
# @Time: 2018-01-17 15:42
# @Abstract:多元線性迴歸(Multiple Regression)演算法
from numpy import genfromtxt
import numpy as np
from sklearn import linear_model
datapath=r"D:\Python\PyCharm-WorkSpace\MachineLearningDemo\MultipleRegression\data\data.csv"
#從文字檔案中提取資料並轉為numpy Array格式
deliveryData = genfromtxt(datapath,delimiter=',')
print "data"
# print deliveryData
# 讀取自變數X1(運送英里數),X2(運送次數)
x= deliveryData[1:,1:-1]
# 讀取因變數(運送時間)
y = deliveryData[1:,-1]
print "x:",x
print "y:",y
# 呼叫線性迴歸模型
lr = linear_model.LinearRegression()
# 裝配資料
lr.fit(x, y)
print lr
print("coefficients:")
print lr.coef_
print("intercept:")
print lr.intercept_
#預測
xPredict = [102,6]
yPredict = lr.predict(xPredict)
print("predict:")
print yPredict
程式碼應用2(Xi包含類別變數)
對類別變數進行轉碼
#coding=utf-8
# @Author: yangenneng
# @Time: 2018-01-17 16:11
# @Abstract:多元線性迴歸(Multiple Regression)演算法 含類別變數
from numpy import genfromtxt
import numpy as np
from sklearn import linear_model
datapath=r"D:\Python\PyCharm-WorkSpace\MachineLearningDemo\MultipleRegression\data\data2.csv"
#從文字檔案中提取資料並轉為numpy Array格式
deliveryData = genfromtxt(datapath,delimiter=',')
print "data"
# print deliveryData
# 讀取自變數X1...x5
x= deliveryData[1:,1:-1]
# 讀取因變數
y = deliveryData[1:,-1]
print "x:",x
print "y:",y
# 呼叫線性迴歸模型
lr = linear_model.LinearRegression()
# 裝配資料
lr.fit(x, y)
print lr
print("coefficients:")
print lr.coef_
print("intercept:")
print lr.intercept_
#預測
xPredict = [90,2,0,0,1]
yPredict = lr.predict(xPredict)
print("predict:")
print yPredict