機器學習——簡單線性迴歸(下)

loveliuzz發表於2017-09-13

1、簡單線性迴歸模型舉例:汽車賣家做電視廣告數量與賣出汽車數量:

(1)對於上面示例中給定的點,如何連出適合簡單線性迴歸模型的最佳線性迴歸線?

將上述例項中的5個點在座標系中繪出,

目的:找到一個方程可以模擬出最好的迴歸線;最好的迴歸線是最能夠體現例項點的分佈趨勢的直線。

量化是最好的迴歸線的數學方法是:

即:使得對於每個例項點的真實值與估計值只差的平方和最小的迴歸線

注:是給出的資料的真實值,是估計的值,也就是畫出的迴歸線上對應的值。

(2)計算

通過對給出的條件求導,讓導數為0,求出

b1=[(1-2)(14-20)+(3-2)(24-20)+(2-2)(18-20)+(1-2)(17-20)+(3-2)(27-20)]/[(1-2)^2+(3-2)^2+(2-2)^2+(1-2)^+(3-2)^2]=20/4=5

b0=20-5*2=10

可以得出估計線性迴歸方程為:

(3)預測

假設有一週廣告數量為6,預測汽車銷量是多少?

直接將x_given=6帶入上面的估計線性迴歸方程,得出預測的汽車銷量為:y_hat = 5*6+10=40

(4)在Python中實現上面的例子

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

import numpy as np
def fitSLR(x,y):    #x,y分別是兩個列表list
    n=len(x)
    dinominator = 0   #分母
    numerator = 0     #分子
    for i in range(0,n):
        numerator += (x[i]-np.mean(x))*(y[i]-np.mean(y))
        dinominator += (x[i]-np.mean(x))**2
    print("numerator:",numerator)
    print("dinominator:",dinominator)
    b1 = numerator/float(dinominator)
    b0 = np.mean(y)-b1*np.mean(x)

    return b0,b1

def predict(x,b0,b1):
    return b0+b1*x

x = [1,3,2,1,3]
y = [14,24,18,17,27]

b0,b1 = fitSLR(x,y)
print("intercept:",b0,"slope:",b1)

x_test = 6
y_test = predict(x_test,b0,b1)
print("y_test:",y_test)
執行結果:

numerator: 20.0
dinominator: 4.0
intercept: 10.0 slope: 5.0
y_test: 40.0

相關文章