当前位置: 首页 > news >正文

【机器学习】python基础实现线性回归

手写梯度下降的实现y=kx+b的线性回归

算法步骤:

(1)构造数据,y=3*x+5;

(2)随机初始化\hat{k}\hat{b},任意数值,例如\hat{k}=9,\hat{b}=10;

(3)计算\hat{y}\hat{y}=\hat{k}x+\hat{b},并计算loss=(y-\hat{y})^{^{2}}=(y-(\hat{k}x+\hat{b}))^{2}

(4)分别对\hat{k}\hat{b}求导数,\hat{k}=\hat{k}-\Delta \hat{k}\hat{b}=\hat{b}-\Delta \hat{b}

        其中

      \Delta \hat{k}={\frac{\partial loss}{\partial \hat{k}}}=-2(y-({\hat{k}x+\hat{b})})\cdot x

\Delta \hat{b}={\frac{\partial loss}{\partial \hat{b}}}=-2(y-({\hat{k}x+\hat{b})})

重复循环n次后停止

构造线性函数:

      y=kx+b\ \ (k=3,b=5)

 代码实现:

X=[i for i in range(0,15)]k=3
b=5
Y=[k*i+b for i in X]import matplotlib.pyplot as plt
fig, ax = plt.subplots()# 在同一个图形中绘制散点图和折线图
ax.scatter(X, Y, color='blue', label='scatter')
ax.plot(X, Y, color='red', label='line')# 添加图例
ax.legend()# 显示图形
plt.show()

 

MSE损失函数:

loss=(y-\hat{y})^{^{2}}=(y-(\hat{k}x+\hat{b}))^{2}

loss.append((Y[i]-y_[i])**2)  #公式对应代码

分别对k和b求导结果如图所示:

{\frac{\partial loss}{\partial \hat{k}}}=-2(y-({\hat{k}x+\hat{b})})\cdot x

{\frac{\partial loss}{\partial \hat{b}}}=-2(y-({\hat{k}x+\hat{b})})

#公式对应代码
delta_K_sum.append((Y[i]-y_[i])*(-2)*X[i])
delta_B_sum.append((Y[i]-y_[i])*(-2))

全部代码:

X=[i for i in range(0,15)]
X
k=3
b=5
Y=[k*i+b for i in X]
Y
import matplotlib.pyplot as plt
# 创建散点图
plt.scatter(X, Y)# 显示图形
plt.show()
#随机初始化要求的k和b
K=8
B=10
#k和b是正确答案,根据数据和随机初始化的K和B去拟合函数,找到最优的k和b
#y=Kx+B
loss=[]#计算预测值
for i in range(1000):y_=[K*i+B for i in X]loss=[]for i in range(len(X)):loss.append((Y[i]-y_[i])**2)print(sum(loss)/len(loss))# cha=loss.sum()/len(loss)#计算loss#根据最小二乘法  对y_求导,等我用纸写一下,利用loss对K求梯度,去更新K的值,对B求梯度,求更新B的值#直到K和B基本拟合图像delta_K_sum=[]delta_B_sum=[]for i in range(len(X)):delta_K_sum.append((Y[i]-y_[i])*(-2)*X[i])delta_B_sum.append((Y[i]-y_[i])*(-2))delta_K=sum(delta_K_sum)/len(delta_K_sum)delta_B=sum(delta_B_sum)/len(delta_B_sum)#0.01是学习率,保证稳定收敛K=K-0.01*delta_KB=B-0.01*delta_Bprint(K,B)
print(K,B)

结果图像:

X=[i for i in range(0,15)]Y=[K*i+B for i in X]import matplotlib.pyplot as plt
fig, ax = plt.subplots()# 在同一个图形中绘制散点图和折线图
ax.scatter(X, Y, color='blue', label='scatter')
ax.plot(X, Y, color='red', label='line')# 添加图例
ax.legend()# 显示图形
plt.show()

http://www.lryc.cn/news/136111.html

相关文章:

  • vue table合并行 动态列名
  • Spring Cloud Alibaba-Nacos Discovery--服务治理
  • 【C++】unordered_map和unordered_set的使用 及 OJ练习
  • 初识 JVM 01
  • FPGA应用学习笔记----I2S和总结
  • 归并排序之从微观看递归
  • Pytorch-day07-模型保存与读取
  • 【C语言每日一题】01. Hello, World!
  • arm: day8
  • k8s容器加入host解析字段
  • 浅谈开发过程中完善的注释的重要性
  • Docker 微服务实战
  • JupyterHub实战应用
  • 【MySQL】视图
  • 基于 Android 剧院购票APP的开发与设计
  • 反转链表II
  • HTML 和 CSS 来实现毛玻璃效果(Glassmorphism)
  • 【技术】国标GB28181视频平台EasyGBS通过对应密钥上传到其他平台展示的详细步骤
  • SpeedBI数据可视化工具:浏览器上做分析
  • 8.21笔记
  • MyBatis-Plus中公共字段的统一处理
  • SQL的导出与导入
  • 记录一次wordpress项目的发布过程
  • HTML详解连载(8)
  • Linux系统之安装OneNav个人书签管理器
  • 主程技术分享: 游戏项目帧同步,状态同步如何选
  • ChatGPT-4: 半年的深度使用思考
  • 【健康医疗】Axure用药提醒小程序原型图,健康管理用药助手原型模板
  • ERROR in static/js/xxx.js from UglifyJs
  • 阿里云ECS服务器安装PostgreSQL