Python实现线性回归拟合并绘图

Python 实现线性回归拟合并绘图
线性回归拟合并绘图
介绍
线性回归是机器学习中最基础、最重要的⽅法之⼀。接下来,你需要根据题⽬提供的数据点,完成线性拟合,并绘制出图像。⽬标
题⽬给出⼀个⼆维数组如下,共计 20 个数据样本。
data = [[5.06, 5.79], [4.92, 6.61], [4.67, 5.48], [4.54, 6.11], [4.26, 6.39],
[4.07, 4.81], [4.01, 4.16], [4.01, 5.55], [3.66, 5.05], [3.43, 4.34],
[3.12, 3.24], [3.02, 4.80], [2.87, 4.01], [2.64, 3.17], [2.48, 1.61],
[2.48, 2.62], [2.02, 2.50], [1.95, 3.59], [1.79, 1.49], [1.54, 2.10], ]
你需要根据这 20 个样本,使⽤线性回归拟合,得到⾃变量系数及截距项。
其中, 即为⾃变量系数, 则为常数项。
最后,需要使⽤ Matplotlib 将数据样本绘制成散点图,并将拟合直线⼀并绘出。
提⽰
你可以使⽤⾃⾏实现的最⼩⼆乘法函数计算 ww 和 bb 的值,也可以使⽤ scikit-learn 提供的线性回归类完成。提⽰代码如下:def  linear_plot ():
"""
参数:⽆
返回:
w -- ⾃变量系数, 保留两位⼩数
b -- 截距项, 保留两位⼩数
fig -- matplotlib 绘图对象
"""
data = [[5.06, 5.79], [4.92, 6.61], [4.67, 5.48], [4.54, 6.11], [4.26, 6.39],
[4.07, 4.81], [4.01, 4.16], [4.01, 5.55], [3.66, 5.05], [3.43, 4.34],
[3.12, 3.24], [3.02, 4.80], [2.87, 4.01], [2.64, 3.17], [2.48, 1.61],
[2.48, 2.62], [2.02, 2.50], [1.95, 3.59], [1.79, 1.49], [1.54, 2.10], ]
### TODO: 线性拟合计算参数 ###
w = None
b = None
fig = plt .figure () # 务必保留此⾏,设置绘图对象
### TODO: 按题⽬要求绘图 ###
return  w , b , fig # 务必按此顺序返回
图像⽰例:
y =wx +b
w b
实现思路
这⾥使⽤最⼩⼆乘法解决这⼀问题,先来看⼀下最⼩⼆乘法的数学表达式。
根据上⾯的公式写出代码,就可以直接求待拟合直线的斜率和截距了。
参考代码
def linear_plot():
import numpy as np
import matplotlib.pyplot as plt
"""
参数:⽆
返回:
w -- ⾃变量系数, 保留两位⼩数
b -- 截距项, 保留两位⼩数
fig -- matplotlib 绘图对象
"""
data =[[5.06,5.79],[4.92,6.61],[4.67,5.48],[4.54,6.11],[4.26,6.39],
[4.07,4.81],[4.01,4.16],[4.01,5.55],[3.66,5.05],[3.43,4.34],
[3.12,3.24],[3.02,4.80],[2.87,4.01],[2.64,3.17],[2.48,1.61],
[2.48,2.62],[2.02,2.50],[1.95,3.59],[1.79,1.49],[1.54,2.10],]
### TODO: 线性拟合计算参数 ###
SumXiYi =0
SumXi =0
SumYi =0
SumXi2 =0
PointX =[]
拟合直线PointY =[]
for item in range(len(data)):
XiYi = data[item][0]* data[item][1]
SumXiYi += XiYi
SumXi += data[item][0]
SumYi += data[item][1]
SumXi2 += data[item][0]* data[item][0]
PointX.append(data[item][0])
PointY.append(data[item][1])
w =(len(data)* SumXiYi - SumXi * SumYi)/(len(data)* SumXi2 - SumXi * SumXi)    b =(SumXi2 * SumYi - SumXiYi * SumXi)/(len(data)* SumXi2 - SumXi * SumXi)    w =round(w,2)
b =round(b,2)
X = np.arange(0.5,6,0.01)
Y = w * X + b
plt.plot(X, Y, color='red')
plt.scatter(PointX, PointY,  color='blue')# 散点图
fig = plt.figure()# 务必保留此⾏,设置绘图对象
### TODO: 按题⽬要求绘图 ###
fig.show()
return w, b, fig # 务必按此顺序返回
if __name__=="__main__":
linear_plot()
绘制出的图像如下图所⽰:

本文发布于:2024-09-23 03:14:46,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/359552.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线性   拟合   回归
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议