线性回归(Liner Regression,LR),是入门机器学习最基础的算法,在各种教程种均使用其作为入门示例。

通常对于数据量不大的情况,使用最小二乘公式即可直接得出LR的解,但对于大数据量的情况,则需要使用优化算法,逐步寻找最优解。

现利用numpy工具包,手推LR,从而加深对机器学习思想的理解。

对于一个线性回归问题,可以看成是一个多元一次方程,每个自变量对应一个参数(权重w),以及总的偏移量b,形如:

为了简单起见,这里使用一元一次线性方程为例进行演示,多元同理。

先放源码:

# -*- coding: utf-8 -*-
"""
Created on Thu Oct 10 16:09:11 2019@author: LWS
手推 Liner Regression
"""import numpy as np
import matplotlib.pyplot as plt# 定义超参
normal = False
epochs = 100
lr = 1e-3# 训练数据
X = np.array([1,2,3,4,5,6,7,8,9,10])
y = np.array([2*x+1+np.random.random()/10 for x in X])# 归一化原始数据
if normal == True:X = (X - X.min()) / (X.max() - X.min())y = (y - y.min()) / (y.max() - y.min())# 随机初始化参数w、b
w, b = np.random.random(), np.random.random()# 设:y = w*x + b, loss = 0.5*(y_hat - y)**2 = 0.5*(w*x + b - y)**2
# 则参数w、b的梯度为:G_w = x*(w*x + b - y),G_b = w*x + b - y
# 则按照梯度下降更新w、b:w = w - lr * G_w, b = b - lr * G_b # 开始训练
loss, W, B = [], [], []
for i in range(epochs):for X_batch,y_batch in zip(X,y):y_hat = w * X_batch + bG_w = X_batch*(y_hat - y_batch)G_b = y_hat - y_batchw = w - lr * G_wb = b - lr * G_bloss.append(0.5*(y_hat - y_batch)**2)W.append(w)B.append(b)print ('Final Result:\nw = %.4f\nb = %.4f'%(w,b))
plt.plot(loss[:])
plt.title('loss curve')
plt.show()plt.plot(W,label = 'w')
plt.plot(B,label = 'b')
plt.legend()
plt.title('w & b curve')

代码中,设函数关系为:

损失函数为:

则,参数w、b的梯度分别为:

采用梯度下降优化算法,沿着梯度减小的方向更新参数:

代码中,迭代了1000个epoch,得到更新后的参数结果如图所示:

可以看成,损失函数很早就趋于收敛了;参数w、b最终分别收敛于2、1附近,这与我们设定的x、y值是相符合的。

至此,完成手推LR,更复杂的函数同理;

同时注意到:梯度是手动计算的,这个过程在复杂函数中将变得很难,因此,各种深度学习框架就成了我们深入下去的必选。

手推LR(Liner Regression)相关推荐

  1. 复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥

    复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥? 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学 ...

  2. 手推Logistic Regression

    之前写过一篇手推LR的文章,是参考西瓜书写的.写完之后感觉还是不太清晰.后面看了下李宏毅老师的视频,发现对概念清晰了不少,又重新写了一篇.希望对大家有所帮助.之前那篇的链接在这里link

  3. 机器学习从零开始-常见算法手推pure python

    简单线性回归 概念 简单线性回归代码 # 平均值函数 def calculate_mean(a_list_of_values):mean=sum(a_list_of_values)/float(len ...

  4. 机器学习---手推xgboost

    XGBOOST算法总结 1. 前言 2. xgboost可以做什么 3. xgboost的兄弟们 3.1 简单介绍adaboost/GBDT 4. 手推xgboost 5. 如何分裂结点构造一棵树 1 ...

  5. (二十四) 手推BP神经网络的前向传播和反向传播

    手推BP神经网络的前向传播和反向传播 一.基本术语 1.监督学习与非监督学习 Supervised Learning有监督式学习: 输入的数据被称为训练数据,一个模型需要通过一个训练过程,在这个过程中 ...

  6. 985博士《深度学习》手推公式笔记开源PDF下载!

    前几天为大家找到的王博(Kings)的笔记[机器学习手推笔记],大家都非常喜欢,近几天发现王博的Github又更新了深度学习版本笔记 GitHub地址(点击原文阅读可直达GitHub): https: ...

  7. 【干货】105页周志华教授《机器学习手推公式》开源PDF

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 上述内容是手推公式的主要内容,本项目的Github主页如下:https://git ...

  8. opencv机器学习线性回归_全面讲解手推实战机器学习之线性回归

    点击上方"蓝字",发现更多精彩. 这个主题是讲解机器学习,会全面的讲解理论,知识干货.学了理论不会实践怎么办?调了包不懂实现?每个算法都会配备实践,手推和简单实现,让你知其然,还要 ...

  9. 更新!机器学习手推笔记《规则学习》

    点上方计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散   计算机视觉联盟笔记   作者:王博Kings.Sophia 本文内容概述王博Kings<机器学习>手推笔 ...

最新文章

  1. Java内存分析1 - 从两个程序说起
  2. 打通两台机器的ssh功能
  3. word文本样式代码样式_使用文本样式表达创建真相来源
  4. 谷歌不支持调用摄像头麦克风_谷歌发布安卓11系统:全新界面、更严的隐私管理...
  5. 漫画:要跳槽?这道缓存设计题你有必要看看!
  6. scala -abstract 类
  7. python 邻接矩阵_阿里巴巴举荐,Python视频,免费分享,用python求解特征向量和拉普拉斯矩阵...
  8. Go语言备忘录(1):基本数据结构
  9. plsql导入导出表结构和数据对象
  10. tmsf28335的启动步骤
  11. 2022年6月少儿编程等级测试来了
  12. 游戏源代码是什么意思_什么是游戏
  13. cjavapy在线正则表达式测试工具
  14. 隐马尔科夫模型(HMMM)
  15. 解析国内冷链物流的发展现状
  16. ipad服务器的显示器,淘汰下来的iPad能干嘛,几招让其秒变显示器
  17. 解决小米远程管理下电脑出现ftp文件错误提示
  18. 白杨SEO:微信视频号怎么玩?推广、涨粉、上热门及赚钱技巧大全
  19. 数据压缩算法综述(摘录)
  20. 怎么联系vue客服_Vue在线客服系统【开源项目】

热门文章

  1. 关于Atlas OS 卡VC导致reticuulating splines...的解决办法
  2. 2015年10月11日
  3. 仙道服务器维护,《问道》手游02月25日04:50分维护公告
  4. 英伟达与微软的合作里,藏着未来发展的关键词
  5. Spark 实战 - 3.一文搞懂 parquet
  6. 安卓手机用什么耳机最好?适合安卓手机的蓝牙耳机推荐
  7. python浮点数怎么表示_python浮点数
  8. gd剪裁圆形图片 php_PHP下图片裁剪、圆形、合并
  9. 【Python】Python安装教程
  10. 使用深度学习模型创作动漫故事,比较LSTM和GPT2的文本生成方法