初识线性回归

excel
jupyter

什么是线性回归

在二十世纪二十年代以前,科学家基于传统牛顿力学、相对论等理论的成功,认为世界是由因果规律支配的,一切事物都严格遵守因果律和自然法则。也就是苹果会掉下来是因为有力在拉它,太阳在转也是因为有力在拉它。推导到最后就发现世界必须有一个源头提供原始的力,最终侧面证明了上帝的存在
二十世纪二十年代,开创量子力学的哥本哈根学派科学家波尔、海森伯认则为认为世界上一切事物的发生都是不确定的,只能用概率也就是发生的可能性来描述事物运动规律。也就是说世间一切的事儿都符合于某种概率分布而不是因果,可以用概率模型来表示一切规律。
机器学习就是希望通过历史数据来找到事物背后的模式(pattern),而线性模型就是描述事物背后规律的一种方法。线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合(加减乘除)起来,得到的结果和目标接近。

三种方式对身高体重做线性回归

利用excel中数据分析功能做线性回归(20.200.20000组数据)

1打开加载项中的分析工具库
在这里插入图片描述
2数据-分析-数据分析中选择回归
1)20组
在这里插入图片描述
回归结果在这里插入图片描述
从上表可以看出回归方程为: H=0.078832W+58.15127
R平方为: 0.325423 H-W模型拟合度中等
而显著性水平P为0.008 属于非常显著
2)200组
在这里插入图片描述
回归方程: H=0.090333
W+56.45743
R平方为: 0.309995

3)20000组
在这里插入图片描述
在这里插入图片描述

回归方程: H=0.081842*W+57.58395
R平方为: 0.251339

利用jupyter使用最小二乘法编程

利用的公式
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
points = np.genfromtxt("D:/weights_heights.csv",delimiter=",")
#将wh.csv文件中的数据赋值给points
#将points中的数据分别赋给x,y,求回归方程y=ax+b
x=points[1:21,2];  //20,200,20000分别为21,201,20001
y=points[1:21,1];
#根据自己需要使用数据的个数更改[]中的值
pccs = np.corrcoef(x, y)
c,d=pccs
e,f=c
x_mean = np.mean(x)
y_mean = np.mean(y)
xsize = x.size
zi = (x * y).sum() - xsize * x_mean *y_mean
mu = (x ** 2).sum() - xsize * x_mean ** 2
a = zi / mu
b = y_mean - a * x_mean
a = np.around(a,decimals=2)
b = np.around(b,decimals=2)
print(f'回归线方程:y = {a}x + {b}')
print(f'相关系数为{f}')
#使用第三方库skleran画出拟合曲线
y1 = a*x + b
plt.scatter(x,y)
plt.plot(x,y1,c='r')

20:
在这里插入图片描述

200:
在这里插入图片描述
20000:
在这里插入图片描述

借助skleran库

代码

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
points = np.genfromtxt("D:/weights_heights.csv",delimiter=",")
#将wh.csv文件中的数据赋值给points
#将points中的数据分别赋给x,y,求回归方程y=ax+b
x=points[1:21,2];
y=points[1:21,1];
#根据自己需要使用数据的个数更改[]中的值
pccs = np.corrcoef(x, y)
c,d=pccs
e,f=c
x_mean = np.mean(x)
y_mean = np.mean(y)
xsize = x.size
zi = (x * y).sum() - xsize * x_mean *y_mean
mu = (x ** 2).sum() - xsize * x_mean ** 2
a = zi / mu
b = y_mean - a * x_mean
a = np.around(a,decimals=2)
b = np.around(b,decimals=2)
print(f'回归线方程:y = {a}x + {b}')
print(f'相关系数为{f}')
#使用第三方库skleran画出拟合曲线
y1 = a*x + b
plt.scatter(x,y)
plt.plot(x,y1,c='r')

结果与不借助skleran时相同

小结

线性回归的定义,是利用最小二乘函数对一个或多个自变量之间关系进行建模的方法。回归回归其实他更像一种倒推,从数据,方程中倒推变量之间的关系。从身高体重这一例子中初始回归,可以看出身高与体重拟合度一般,但仍有很高的显著度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值