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

2021-09-30

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

2021-09-30

第1次作业–初识线性回归

目录
  • 第1次作业--初识线性回归
  • 一、用excel中数据分析功能做线性回归练习。分别选取20、200、2000组数据,进行练习。记录回归方程式、相关系数R^2
    • 1.前20组数据
    • 2前200组数据
    • 3前2000组数据
  • 二、用jupyter编程(不借助第三方库),用最小二乘法,重做第1题
    • 1.前20组数据
    • 2.前200组
    • 3.前2000组
  • 三、用jupyter编程,借助skleran,重做第1题。
    • 1.前20组数据
    • 2.前200组
    • 3.前2000组
  • 四、对三种方式的结果进行对比
  • 五、参考资料


一、用excel中数据分析功能做线性回归练习。分别选取20、200、2000组数据,进行练习。记录回归方程式、相关系数R^2 1.前20组数据
  1. 打开文件,选取前20组数据。点击插入,创建线形图

  1. 在生成的线形图点击+,选择趋势线–更多选项

  1. 选择显示公式和显示R平方值生成线形图

2前200组数据

同样方法

3前2000组数据


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

先上传.xmlx文件

1.前20组数据

代码如下

import pandas as pd
import numpy as np
from numpy import array
import matplotlib.pyplot as plt
import math
p=pd.read_excel('weights_heights(身高-体重数据集).xlsx')
p.shape
x = array(p[['Height']].values[:20,:])
y = array(p[['Weight']].values[:20,:])
plt.scatter(x,y)
plt. axis([62,76,0,180])
#20个
#计算平均值
x_mean=np.mean(x)
y_mean=np.mean(y)
#计算a,b
num=0.0#分子
d=0.0#分母
m=0.0
for x_i,y_i in zip(x,y):
    num+=(x_i-x_mean)*(y_i-y_mean)
    d+=(x_i-x_mean)**2
    m+=(y_i-y_mean)**2
a=num/d
b=y_mean-a*x_mean
y_hate=a*x+b
print("线性回归方程为:y=",a,"x","+",b)
#计算R^2
print("R^2:",((num/math.sqrt(d*m))**2))
plt.scatter(x,y)
plt.plot(x,y_hate,color='g')#绘制直线
plt.show()


运行结果:

2.前200组

代码如下:

import pandas as pd
import numpy as np
from numpy import array
import matplotlib.pyplot as plt
import math
p=pd.read_excel('weights_heights(身高-体重数据集).xlsx')
p.shape
x = array(p[['Height']].values[:200,:])
y = array(p[['Weight']].values[:200,:])
plt.scatter(x,y)
plt. axis([62,76,0,180])
#20个
#计算平均值
x_mean=np.mean(x)
y_mean=np.mean(y)
#计算a,b
num=0.0#分子
d=0.0#分母
m=0.0
for x_i,y_i in zip(x,y):
    num+=(x_i-x_mean)*(y_i-y_mean)
    d+=(x_i-x_mean)**2
    m+=(y_i-y_mean)**2
a=num/d
b=y_mean-a*x_mean
y_hate=a*x+b
print("线性回归方程为:y=",a,"x","+",b)
#计算R^2
print("R^2:",((num/math.sqrt(d*m))**2))
plt.scatter(x,y)
plt.plot(x,y_hate,color='g')#绘制直线
plt.show()

运行结果:

3.前2000组

像之前一样
结果:


三、用jupyter编程,借助skleran,重做第1题。 1.前20组数据
import pandas as pd
import numpy as np
from numpy import array
from sklearn import linear_model
import matplotlib.pyplot as plt
import math
p=pd.read_excel('weights_heights(身高-体重数据集).xlsx')
p.shape
x = array(p[['Height']].values[:20,:])
y = array(p[['Weight']].values[:20,:])
model = linear_model.LinearRegression()
model.fit(x,y)
#斜率
print(model.coef_)
a=model.intercept_
b=model.coef_
y_hate1=b*x+a
print("线性回归方程为:y=",b,"x","+",a)

线性回归方程为:y= [[4.1280375]] x + [-152.23378453]
运行结果:

散点图:

model.score(x,y)
plt.figure()
plt.scatter(x,y)
plt.plot(x,y_hate1,color='c')
plt.show()

2.前200组

代码和之前的一样

线性回归方程为:y= [[3.43166515]] x + [-105.95901105]

运行结果:

3.前2000组

线性回归方程为:y= [[2.95552697]] x + [-73.66078552]
运行结果:


四、对三种方式的结果进行对比 三种方式都可以很好地运用,但是Excel的结果数据明显精度会小于jupyter的两种方式,而对于jupyter的两种方式来说,不借助第三方库的方式需要自己去写公式的部分,借助skleran的话,因为这个库本身含有相关函数,在能熟练掌握skleran库的前提下,选择skleran当然更为轻松。 五、参考资料

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

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

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

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