简单的线性回归问题(python实现)

关于简单的线性回归方程*:
E(y) = β0+β1x*

这个方程对应的图像是一条直线,称作回归线
其中,β0是回归线的截距
β1是回归先的斜率
E(y)是在一个给定x值下y的期望值(均值)

简单线性回归模型举栗:

汽车卖家做电视广告数量和卖出的汽车数量:
简单的线性回归问题(python实现)_第1张图片

在这里要找到一个合适简单的线性回归线,
需要满足的条件是
这里写图片描述
这里 :
yi表示实际卖出的汽车的数量
ŷ表示预测的数量

只要所有实际卖出的数量减去预估的数量之和最小,那这就是最合适的回归线模型。

这个方程叫做估计线性方程(estimated regression line)

ŷ=b0+b1x
其中,b0是估计线性方程的纵截距
b1是估计线性方程的斜率
ŷ是在自变量x等于一个给定值的时候,y的估计值

我们要求出b0和b1两个公式如下:
简单的线性回归问题(python实现)_第2张图片
b1的分子 = (1-2)(14-20)+(3-2)(24-20)+(2-2)(18-20)+(1-2)(17-20)+(3-2)(27-20)
= 6 + 4 + 0 + 3 + 7
= 20

b1的分母 = (1-2)^2 + (3-2)^2 + (2-2)^2 + (1-2)^2 + (3-2)^2
= 1 + 1 + 0 + 1 + 1
4

b1 = 20/4 =5

这里写图片描述
b0 = 20 - 5*2 = 20 - 10 = 10

所以最后求出的估计线性方程如下所示

简单的线性回归问题(python实现)_第3张图片

求出估计线性方程后,我们就可以推测,如果下个月做6个广告,那么预售的汽车销量大概是在5*6+10=40辆

由于python的算术比c++简单方便的多,所以这里就用python语言实现:

#简单现行回归:只有一个自变量 y=k*x+b 预测使 (y-y*)^2  最小
import numpy as np

def fitSLR(x,y):
    n=len(x)    #获取x的长度,x是list
    dinominator = 0#初始化分母
    numerator=0     #初始化分子
    for i in range(0,n):    #求b1
        numerator += (x[i]-np.mean(x))*(y[i]-np.mean(y))    
        dinominator += (x[i]-np.mean(x))**2 #**表示平方

    print("numerator:"+str(numerator))
    print("dinominator:"+str(dinominator))

    b1 = numerator/float(dinominator)   #得出b1
    b0 = np.mean(y)/float(np.mean(x))   #得出b0

    return b0,b1


# y= b0+x*b1
def prefict(x,b0,b1):       #定义一个简单的线性方程
    return b0+x*b1

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

b0,b1=fitSLR(x, y)          
y_predict = prefict(6,b0,b1)
print("y_predict:"+str(y_predict))

你可能感兴趣的:(机器学习)