博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一元线性回归原理及python简单实现
阅读量:4291 次
发布时间:2019-05-27

本文共 2323 字,大约阅读时间需要 7 分钟。

原理

一元线性回归模型:

在这里插入图片描述

从上公式可以看出,每个样本带到公式里后,公式形式相同,β0和β1相同,ε不同。ε服从标准正太分布。其中,β0和β1是未知参数,ε是由其他随机因素引起的。
一元线性回归模型的关键问题是求解β0和β1、σ2的值。

β0和β1的求解

采用最小二乘法:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得到:
在这里插入图片描述
因此:
在这里插入图片描述

σ2的估计

在这里插入图片描述

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

python简单实现

import numpy as npimport matplotlib.pyplot as pltclass 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()        returnx_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()

效果图:

在这里插入图片描述

参考:

转载地址:http://erhgi.baihongyu.com/

你可能感兴趣的文章
Java互联网架构-分布式系统服务治理
查看>>
阿里巴巴Java开发规约插件全球首发!
查看>>
StringRedisTemplate常用操作 / Redis中删除过期Key的三种策略
查看>>
fastdfs 图片服务器 使用java端作为客户端上传图片 / 【FastDFS专题】fastdfs使用实战(概念篇)
查看>>
Java互联网架构-Redis分布式缓存架构实现与原理解析
查看>>
让数据库不再成为业务发展瓶颈——分布式数据库架构设计
查看>>
java多线程有哪些实际的应用场景?
查看>>
分布式集群Session共享~多个tomcat7+redis的session共享实现
查看>>
实例|如何从两个List中筛选出相同的值
查看>>
搭建ECS云服务器(5)设置nginx+fastdfs+tomcat+redis开启自启动
查看>>
SSO单点登录的发展由来以及实现原理
查看>>
阿里巴巴,排行前10的开源项目,第一不是Dubbo!
查看>>
手把手教你新装的linux之后的必要配置(9)
查看>>
Java互联网架构-Spring分布式事务
查看>>
持久化框架:轻量级的关系型数据库中间件 Sharding-JDBC
查看>>
Java中如何实现分页功能
查看>>
简述架构演变过程中对session存储以及权限校验的不同的解决方案
查看>>
Spring Cloud是什么,和Dubbo对比如何?
查看>>
【Lucene】Apache Lucene全文检索引擎架构之入门实战
查看>>
【Lucene】Apache Lucene全文检索引擎架构之构建索引
查看>>