线性回归问题是机器学习的入门,本次介绍的是一元线性回归问题。对data数据集中的点进行线性回归问题分析。
data数据集中的数据:

线性回归分析的目的:
找到一条直线:y=w*x+b,使得点均匀的分布在直线的两端。

对于初始的w和b值,我们需要设立一个初始的值,这个值一般是随机的。然后再根据梯度去不断的调整w和b的值,直到达到我们设定的迭代次数或者梯度为0.

线性回归分析的步骤:
①计算loss的值
ps:图中的那两个微分,分别为loss函数对w求偏导,loss函数对b求偏导。
代码如下:

##计算loss值
def compute_error_for_line_given_points(b,w,points):#b和w为一开始的初始值,是随机的,points为numpy的一个二维数组[100,2]totalError=0for i in range(0,len(points)):x=points[i,0]y=points[i,1]totalError += (y-(w*x+b)) ** 2##** 2代表的是平方值return totalError/float(len(points))

②计算梯度和更新参数

代码如下:

##计算梯度和更新参数
def step_gradient(b_current,w_current,points,learningRate):#learningRate是学习率b_gradient=0w_gradient=0N=float(len(points))for i in range(0,len(points)):x=points[i,0]y=points[i,1]#grad_b=2(wx+b-y)#b_gradient+=(2/N)*((w_current*x+b_current)-y)#grad_w=2(wx+b-y)*xw_gradient+=(2/N)*x*((w_current*x+b_current)-y)#除以N是将所有计算得到的梯度值取平均值new_b=b_current-(learningRate*b_gradient)new_w=w_current-(learningRate*w_gradient)return [new_b,new_w]

③将更新后的w值赋值给原来的w,并且再次代入运算,直到到达设定的迭代次数

代码如下:

##循环若干次使得参数趋于稳定
def gradient_descent_runner(points,starting_b,starting_w,learning_rate,num_iterations):b=starting_bw=starting_w#更新若干次for i in range(num_iterations):##循环次数b,w=step_gradient(b,w,np.array(points),learning_rate)##得到新的b和wreturn [b,w]

最终代码:

import numpy as np##计算loss值
def compute_error_for_line_given_points(b,w,points):#b和w为一开始的初始值,是随机的,points为numpy的一个二维数组[100,2]totalError=0for i in range(0,len(points)):x=points[i,0]y=points[i,1]totalError += (y-(w*x+b)) ** 2##** 2代表的是平方值return totalError/float(len(points))
##计算梯度和更新参数
def step_gradient(b_current,w_current,points,learningRate):b_gradient=0w_gradient=0N=float(len(points))for i in range(0,len(points)):x=points[i,0]y=points[i,1]#grad_b=2(wx+b-y)#b_gradient+=(2/N)*((w_current*x+b_current)-y)#grad_w=2(wx+b-y)*xw_gradient+=(2/N)*x*((w_current*x+b_current)-y)new_b=b_current-(learningRate*b_gradient)new_w=w_current-(learningRate*w_gradient)return [new_b,new_w]
##循环若干次使得参数趋于稳定
def gradient_descent_runner(points,starting_b,starting_w,learning_rate,num_iterations):b=starting_bw=starting_w#更新若干次for i in range(num_iterations):##循环次数b,w=step_gradient(b,w,np.array(points),learning_rate)##得到新的b和wreturn [b,w]
def run():points=np.genfromtxt("data.csv",delimiter=",")learning_rate = 0.0001#学习率initial_b=0initial_w=0##初始的b和wnum_iterations=1000##迭代次数print("Starting gradient descent at b={0},w={1},error={2}".format(initial_b,initial_w,compute_error_for_line_given_points(initial_b,initial_w,points)))print("Running...")[b,w]=gradient_descent_runner(points,initial_b,initial_w,learning_rate,num_iterations)print("After {0} iterations b={1},w={2},error={3}".format(num_iterations,b,w,compute_error_for_line_given_points(b,w,points)))if __name__ == '__main__':run()

结果如图所示:

我们可以看到,经过1000次的迭代之后,loss值已经变小很多了。
图像如下图所示:

我们可以发现,点均匀的分布在直线的两侧。
绘图步骤:

points = np.genfromtxt("E:/机器学习数据/TensorFlow-2.x-Tutorials-master/深度学习与TensorFlow入门实战-源码和PPT/lesson04-回归问题实战/data.csv", delimiter=",")
plt.plot(points[:,0],points[:,1],'o')#绘制点
x = np.linspace(0, 100, 100)#随机生成100个处于[0,100]的点
y=1.4777440851894448*x+0.08893651993741346#根据计算出的斜率和截距得出对应的y坐标
plt.plot(x,y,c='orange')#绘制直线
plt.show()

基于numpy实现线性回归问题分析相关推荐

  1. matlab最小二乘法_基于最小二乘法的线性回归拟合

    阅读本文需要的知识储备: 高等数学 概率论与数理统计 Python基础 线性回归,其实生活中有很多这样的例子,比如:票价与行车距离.服务质量之间的关系,买房时房价与面积.地域等的关系.给我们一组这样的 ...

  2. 基于AdaBoost算法的情感分析研究

    源码下载 http://www.byamd.xyz/hui-zong-1/ 基于AdaBoost算法的情感分析研究 摘 要 随着互联网的快速发展,各类社交媒体平台如微信.QQ等也与日俱增,而微博更是集 ...

  3. 基于Python的线性回归预测模型介绍及实践

    基于Python的线性回归预测模型介绍及实践 这是一篇学习的总结笔记 参考自<从零开始学数据分析与挖掘> [中]刘顺祥 著 完整代码及实践所用数据集等资料放置于:Github 线性回归预测 ...

  4. 基于itchat的个人情感分析

    基于itchat的个人情感分析 昝道广 概述 前言 思考 性别分析 好友签名情感分析 地区分布 爬虫技术分析 代码解析(部分) 后记 前言 本文以迅雷不及掩耳盗铃儿响叮当机立断章取义无反顾,雄姿英发, ...

  5. numpy找到矩阵中不同元素的种类_基于NumPy和图像分类的人工神经网络构建

    基于NumPy和图像分类的人工神经网络构建 本文利用NumPy系统在Python中构建人工神经网络,以便为Fruits360数据集执行图像分类应用程序. 本文提及的所有内容(即图像和源代码,不包括Fr ...

  6. numpy 删除所有为_用Numpy和Pandas工具分析销售数据

    在数据分析领域,Python中用到最多的包是numpy,pandas和matplotlib,本文共分为三个部分:1.使用numpy和pandas分析一维数据 2.使用numpy和pandas分析二维数 ...

  7. 山东大学2019级软件工程应用与实践——基于人工智能的多肽药物分析问题(七)

    2021SC@SDUSC 基于人工智能的多肽药物分析问题 主题:蛋白质预训练模型 学习论文: <ProtTrans: Towards Cracking the Language of Life' ...

  8. 山东大学2019级软件工程应用与实践——基于人工智能的多肽药物分析问题(十二)

    2021SC@SDUSC 基于人工智能的多肽药物分析问题 主题:蛋白质预训练模型(6) 代码分析 Benchmark Section ProtTrans/Benchmark/ProtAlbert.ip ...

  9. 基于Transformer的文本情感分析编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制 + Positional Encoding位置编码)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

最新文章

  1. 推荐给程序员的书:七月图书推荐
  2. Tails 3.13 发布,更新 Intel 微码,改进拼音输入法支持
  3. 2014-05-08 总结(补充)
  4. android 单例的作用,Android中单例模式的几个坑
  5. RocketMQ入门
  6. 前端学习(1168):构造函数方法(转换为真正数组)
  7. 在C++函数中使用__asm int 3和__debugbreak的调试
  8. js基础之--变量 作用域和内存问题
  9. 标准SPI、DUAL SPI、Quad SPI
  10. Linux最常用的20个命令
  11. win7计算机资源管理器卡住,Win7资源管理器未响应的解决方法
  12. 老人与海好词100英文带翻译_英语好词好句摘抄 老人与海 英文版 好词好句摘抄...
  13. 秋招详细攻略——从准备到面试
  14. 苹果手机通话记录删除了怎么恢复?
  15. 泛型类、泛型方法的使用与理解
  16. 20160411_使用老毛桃破解电脑密码
  17. ubuntu data backup and recovery
  18. 一个很酷的基于OpenGL + C#的Wince界面开源程序
  19. web项目引入PDF.js并添加水印禁止下载
  20. python dataframe 模糊匹配_Python模糊匹配(FuzzyWuzzy) – 保持最佳匹配

热门文章

  1. WPF的binding
  2. Java—JVM的内存
  3. Python如何引用豆瓣api镜像地址
  4. C语言找出4个最大和4个最小数,济南大学C语言程序设计教案:C语言实验课程第四课.doc...
  5. python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)
  6. 我人傻了,火狐坏了,重启系统删了重下都搞不好那种,点开只有弹窗(已解决)
  7. mysql外键_mysql系列之存储引擎
  8. python实现logistic_使用python实现logistic二分类
  9. STL库中string类内存布局的探究
  10. 改变UITextField placeHolder颜色、字体