初识线性回归

初识线性回归

人工智能第1次作业



一、用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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值