栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

初识线性回归——分别使用Excel和jupyter拟合身高体重数据集线性回归模型

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初识线性回归——分别使用Excel和jupyter拟合身高体重数据集线性回归模型

目录
  • 一、Excel中数据分析功能
    • (一)、选取20组数据
    • (二)、选取200组数据
    • (三)、选取2000组数据
  • 二、用jupyter编程,借助sklearn
    • (一)、准备工作
    • (二)、选取20组数据
    • (三)、选取200组数据
    • (四)、选取2000组数据
  • 三、用jupyter编程(不借助第三方库),用最小二乘法
    • (一)、选取20组数据
    • (二)、选取200组数据
    • (三)、选取2000组数据
  • 四、结果分析
  • 五、参考资料

一、Excel中数据分析功能 (一)、选取20组数据


得到的线性回归方程为:y1= 4.128x1 -152.23
相关系数:R^2=0.3254

(二)、选取200组数据


得到的线性回归方程为:y2= 3.4317x2 -105.96
相关系数:R^2=0.31

(三)、选取2000组数据


得到的线性回归方程为:y3= 2.9555x3 -73.661
相关系数:R^2=0.2483

二、用jupyter编程,借助sklearn (一)、准备工作

1.先导入数据集文件,这样就不用去寻找文件地址了。

导入成功之后可以在这里看见。

2.接下来要开始书写代码啦,先导入需要的包,做好数据准备工作。

import pandas as pd
import numpy as np
from numpy import array
from sklearn import linear_model
import matplotlib.pyplot as plt
import math
d=pd.read_excel('weights_heights.xlsx')
d.shape

因为jupyter的特殊性可以一边编写,一边编译,方便及时纠错。

(二)、选取20组数据

代码:

#20个
x2 = array(d[['Height']].values[:200,:])
y2 = array(d[['Weight']].values[:200,:])
model = linear_model.LinearRegression()
model.fit(x2,y2)
#斜率
print(model.coef_)
#截距
print(model.intercept_)
a=model.intercept_
b=model.coef_
y_hate2=b*x2+a
print("线性回归方程为:y2=",b,"x2",a)
#计算R^2
model.score(x1,y1)
plt.figure()
plt.scatter(x1,y1)#散点图绘制初始数据
plt.plot(x1,y_hate1,color='r')#绘制直线
plt.show()

结果:


得到的线性回归方程为:y1= 4.1280375x1 -152.23378453
相关系数:R^2=0.3254230249366249

(三)、选取200组数据

代码:

#200个
x2 = array(d[['Height']].values[:200,:])
y2 = array(d[['Weight']].values[:200,:])
model = linear_model.LinearRegression()
model.fit(x2,y2)
#斜率
print(model.coef_)
#截距
print(model.intercept_)
a=model.intercept_
b=model.coef_
y_hate2=b*x2+a
print("线性回归方程为:y2=",b,"x2",a)
#计算R^2
model.score(x2,y2)
plt.figure()
plt.scatter(x2,y2)#散点图绘制初始数据
plt.plot(x2,y_hate2,color='r')#绘制直线
plt.show()


结果:得到的线性回归方程为:y2= 3.43166515 x2 -105.95901105
相关系数:R^2=0.309995534330923

(四)、选取2000组数据

代码:

#2000个
x3 = array(d[['Height']].values[:2000,:])
y3 = array(d[['Weight']].values[:2000,:])
model = linear_model.LinearRegression()
model.fit(x3,y3)
#斜率
print(model.coef_)
#截距
print(model.intercept_)
a=model.intercept_
b=model.coef_
y_hate3=b*x3+a
print("线性回归方程为:y3=",b,"x3",a)
#计算R^2
model.score(x3,y3)
plt.figure()
plt.scatter(x3,y3)#散点图绘制初始数据
plt.plot(x3,y_hate3,color='r')#绘制直线
plt.show()

结果:


得到的线性回归方程为:y3= 2.95552697x3 -73.66078552
相关系数:R^2=0.24830120336384287

三、用jupyter编程(不借助第三方库),用最小二乘法

因为前面的x1,y1;x2,y2;x3,y3中已经存放了需要的数据集,所以在后面的编写可以直接引用,不再重复读取。

(一)、选取20组数据

代码:

#20个
#计算平均值
x1_mean=np.mean(x1)
y1_mean=np.mean(y1)
#计算a,b
num=0.0#分子
d=0.0#分母
m=0.0
for x1_i,y1_i in zip(x1,y1):
    num+=(x1_i-x1_mean)*(y1_i-y1_mean)
    d+=(x1_i-x1_mean)**2
    m+=(y1_i-y1_mean)**2
a1=num/d
b1=y1_mean-a1*x1_mean
y_hate=a1*x1+b1
print("线性回归方程为:y1=",a1,"x1",b1)
#计算R^2
print("R^2:",((num/math.sqrt(d*m))**2))
plt.scatter(x1,y1)
plt.plot(x1,y_hate,color='g')#绘制直线
plt.show()

结果:

得到的线性回归方程为:y1= 4.1280375x1 -152.23378453
相关系数:R^2=0.32542302

(二)、选取200组数据

代码:

#计算平均值
#200个
x2_mean=np.mean(x2)
y2_mean=np.mean(y2)
#计算a,b
num=0.0#分子
d=0.0#分母
m=0.0
for x2_i,y2_i in zip(x2,y2):
    num+=(x2_i-x2_mean)*(y2_i-y2_mean)
    d+=(x2_i-x2_mean)**2
    m+=(y2_i-y2_mean)**2
a2=num/d
b2=y2_mean-a2*x2_mean
y_hate=a2*x2+b2
print("线性回归方程为:y2=",a2,"x2",b2)
#计算R^2
print("R^2:",((num/math.sqrt(d*m))**2))
plt.scatter(x2,y2)
plt.plot(x2,y_hate,color='g')#绘制直线
plt.show()

结果:

得到的线性回归方程为:y2= 3.43166515 x2 -105.95901105
相关系数:R^2=0.30999553

(三)、选取2000组数据

代码:

#2000个
#计算平均值
x3_mean=np.mean(x3)
y3_mean=np.mean(y3)
#计算a,b
num=0.0#分子
d=0.0#分母
m=0.0
for x3_i,y3_i in zip(x3,y3):
    num+=(x3_i-x3_mean)*(y3_i-y3_mean)
    d+=(x3_i-x3_mean)**2
    m+=(y3_i-y3_mean)**2
a3=num/d
b3=y3_mean-a3*x3_mean
y_hate=a3*x3+b3
print("线性回归方程为:y3=",a3,"x3",b3)
#计算R^2
print("R^2:",((num/math.sqrt(d*m))**2))
plt.scatter(x3,y3)
plt.plot(x3,y_hate,color='g')#绘制直线
plt.show()

结果:

得到的线性回归方程为:y3= 2.95552697x3 -73.66078552
相关系数:R^2=0.2483012

四、结果分析

三种方式得到的结果基本一致,只是小数点后的精度略有差别,毕竟都是用的线性回归模型。除此之外,借助sklearn编写程序可以很明显的感受到比直接编写更加简便,只需要调用相应的函数就可以快速得到结果。当然,Excel作为普适的数据分析软件,其中的功能还是十分强大的,里面的函数都是封装好了之后作为可视化软件面向用户的。

五、参考资料

https://blog.csdn.net/qq_44830040/article/details/104857592.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/275412.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号