线性回归分析python实现_一元线性回归原理及python简单实现

原理

一元线性回归模型:

从上公式可以看出,每个样本带到公式里后,公式形式相同,β0和β1相同,ε不同。ε服从标准正太分布。其中,β0和β1是未知参数,ε是由其他随机因素引起的。

一元线性回归模型的关键问题是求解β0和β1、σ2的值。

β0和β1的求解

采用最小二乘法:

得到:

因此:

σ2的估计

从上推导过程可以看出,β0和β1、σ2的估计值都可以由样本值计算得出。

python简单实现

import numpy as np

import matplotlib.pyplot as plt

class SimpleRegress(object):

def __init__(self, x_data, y_data):

self.x_data = x_data

self.y_data = y_data

self.b0 = 0

self.b1 = 1

return

def calculate_work(self): # 回归方程中b0、b1的求解

x_mean = np.mean(self.x_data) # x_mean= 14.0

y_mean = np.mean(self.y_data) # y_mean= 130.0

x1 = self.x_data - x_mean # x1= [-12. -8. -6. -6. -2. 2. 6. 6. 8. 12.]

y1 = self.y_data - y_mean # y1= [-72. -25. -42. -12. -13. 7. 27. 39. 19. 72.]

s = x1 * y1 # s= [864. 200. 252. 72. 26. 14. 162. 234. 152. 864.]

u = x1 * x1 # u= [144. 64. 36. 36. 4. 4. 36. 36. 64. 144.]

self.b1 = np.sum(s) / np.sum(u) # b1= 5.0

self.b0 = y_mean - self.b1 * x_mean # b0= 60.0

return

def test_data_work(self, text_data): # 回归方程的建立与数值预测

result = list([])

for one_test in text_data:

y = self.b0 + self.b1 * one_test

result.append(y)

return result

def root_data_view(self): # 绘制源数据可视化图

plt.scatter(x_data, y_data, label='simple regress', color='k', s=5) # s 点的大小

plt.xlabel('x')

plt.ylabel('y')

plt.legend()

plt.show()

return

def test_data_view(self): # 绘制回归线

# 绘制回归线两个点的数据

x_min = np.min(self.x_data)

x_max = np.max(self.x_data)

y_min = np.min(self.y_data)

y_max = np.max(self.y_data)

x_plot = list([x_min, x_max])

y_plot = list([y_min, y_max])

# 绘制

plt.scatter(x_data, y_data, label='root data', color='k', s=5) # s 点的大小

plt.plot(x_plot, y_plot, label='regression line')

plt.xlabel('x')

plt.ylabel('y')

plt.legend()

plt.title('simple linear regression')

plt.show()

return

x_data = list([2, 6, 8, 8, 12, 16, 20, 20, 22, 26])

y_data = list([58, 105, 88, 118, 117, 137, 157, 169, 149, 202])

test_data = list([16])

sr = SimpleRegress(x_data, y_data)

sr.calculate_work()

result = sr.test_data_work(test_data) # result= [140.0]

# sr.root_data_view()

sr.test_data_view()

效果图:

参考:一元线性回归(一)----简单线性回归与最小二乘法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值