初识线性回归(Excel-Python实现)

1)用excel中数据分析功能做线性回归练习。分别选取20、200、2000(或20000)组数据,进行练习。记录回归方程式、相关系数R2 ; 导入加载宏

数据分析选择回归
请添加图片描述

右边生成线性回归方程和R的平方值
请添加图片描述
20组:

Y=4.128x-152.23
R^2=0.3254

请添加图片描述
200组:

Y=3.4671x-108.34
R^=0.3131

请添加图片描述

2)用jupyter编程(不借助第三方库),用最小二乘法,重做第1题;

编程代码:

import matplotlib.pyplot as plt;
import pandas as pd
import numpy as np
import math
#准备数据
p=pd.read_excel('G:\下载\weights_heights.xls','weights_heights')
#读取20行数据
p1=p.head(20)
x=p1["Height"]
y=p1["Weight"]
# 平均值
x_mean = np.mean(x)
y_mean = np.mean(y)
#x(或y)列的总数(即n)
xsize = x.size
zi=((x-x_mean)*(y-y_mean)).sum()
mu=((x-x_mean)*(x-x_mean)).sum()
n=((y-y_mean)*(y-y_mean)).sum()
# 参数a b
a = zi / mu
b = y_mean - a * x_mean
#相关系数R的平方
m=((zi/math.sqrt(mu*n))**2)
# 这里对参数保留4位有效数字
a = np.around(a,decimals=4)
b = np.around(b,decimals=4)
m = np.around(m,decimals=4)
print(f'回归线方程:y = {a}x +({b})') 
print(f'相关回归系数为{m}')
#借助第三方库skleran画出拟合曲线
y1 = a*x + b
plt.scatter(x,y)
plt.plot(x,y1,c='r')

20组数据:

回归线方程:y = 4.128x +(-152.2338)
相关回归系数为0.3254

请添加图片描述
200组代码仅需修改p1=p.head(20)改为p1=p.head(200)
200组:

回归线方程:y = 3.4317x +(-105.959)
相关回归系数为0.31

请添加图片描述
20000组代码仅需修改p1=p.head(200)改为p1=p.head(20000)
20000组:

回归线方程:y = 3.071x +(-81.691)
相关回归系数为0.2513

请添加图片描述

3)用jupyter编程,借助skleran,重做第1题。

编程代码:

import pandas as pd
import numpy as np
from numpy import array
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import math
df = pd.read_excel('G:\下载\weights_heights.xls','weights_heights')
df.shape
x=array(df[['Height']].values[:20,:])
y=array(df[['Weight']].values[:20,:])
model = LinearRegression()
model.fit(x, y)
print(model.coef_)
print(model.intercept_)
a=model.intercept_
b=model.coef_
y_hat=b * x +a
print("线性回归方程为:y=",b,"x",a)
model.score(x,y)
plt.figure()
plt.scatter(x,y) # 散点图绘制原始数据x,y
plt.plot(x,y_hat,color="r") # 绘制直线
plt.show()

20组数据:
请添加图片描述
代码仅需修改:

x=array(df[['Height']].values[:200,:])
y=array(df[['Weight']].values[:200,:])

200组数据:
请添加图片描述
代码仅需修改:

x=array(df[['Height']].values[:20000,:])
y=array(df[['Weight']].values[:20000,:])

20000组数据:
请添加图片描述

对三种方式的结果进行对比:

excel有自己设计的算法,勾选数据然后利用他的算法,只需简单调用即可得到结果,比较方便。sklearn非常方便,内有函数可以调用,写下来的代码可以节约不少速度,比较简洁,自己用最小二乘法写代码比较麻烦,但是可以增加我们对代码的理解能力,三种方法得到的结果都一样的。

4)总结

本次学习让我对python编程有了更深的理解,也熟悉了excel工具的运用,对比了下python和java,python在数学这方面感觉比java更加好使,可以生成图,让我们观察对比起来更简单,学会python对以后工作非常有用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值