首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AI,来帮我找一条拟合线!

今天是正月初七,小编在这里给大家拜个晚年,狗年旺旺旺!本来这篇文章应该在春节前就发出来,但小编沉浸在买年货、过大年的热烈气氛中,因此在假期期间小编只能抽出时间,认真学习在正月初七给大家补上这一篇,好了,咱们言归正传,所谓一年之计在于春,我们一起好好抓住2018年春天这一学习的大好时机!

从今天的标题中很多小伙伴估计已经看出来了主题,那就是线性回归。线性回归的研究已经有超过200年的历史,已经被广泛地研究了。已经有很多传统的算法可以解决这一问题,例如大家熟知的普通的最小二乘法,这里对于传统的算法极其实现小编就不多展开了,今天小编在上一次官方例子的基础上进一步解释如何使用Python+TensorFlow去解决实际的算法问题。

今天以一简单数据组来说明如何使用Python+TensorFlow去解决简单的一阶线性回归问题。假设有一组数据点(3.3,1.7),(4.4,2.76),(5.5,2.09),(6.71,3.19),(6.93,1.694),(4.168,1.573),(9.779,3.366),(6.182,2.596),(7.59,2.53),(2.167,1.221),(7.042,2.827),(10.791,3.465),(5.313,1.65),(7.997,2.904),(5.654,2.42),(9.27,2.94),(3.1,1.3),如果要以一个最简单的方程式来近似这组数据,则用一阶的线性方程式最为适合。先将这组数据绘图如下:

下面我们具体看看如何采用Python+TensorFlow的方式去解决这个问题,

首先上述代码中第一行是把TensorFlow的库加进来,第二行是将NumPy的库加进来NumPy系统是Python的一种开源的数值计算扩展。NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。第三行是将matplotlib.pyplot的库加进来,matplotlib.pyplot是一个有命令风格的函数集合,它看起来和MATLAB很相似。可以创建一幅图,在图中创建一个绘图区域,在绘图区域中添加一条线等等。上面那张图我们就是用matplotlib.pyplot中的函数绘制出来的。第四行是为下面初始化参数准备随机函数。

这三行代码是我们在机器学习中的参数,第一个learning_rate是在梯度下降法时使用的步长参数,当然这个参数是可以调整的,在这里我们暂定为0.01。第二个training_epochs在这里我们可以理解为训练次数,总共学习次数为1000。第三个参数display_step的值为50,含义为每50步打印一次参数学习

情况。

这三行代码很好理解,就是将我们上面提到的数据作为训练数据集准备。

这四行代码是建立TensorFlow中的数据流图,其中tf.placeholder()和tf.Variable()机制中的函数,这个我们后续会集中去理解,这里不展开了。

模型

在这里我们建立的是一个一阶的线性模型去拟合这些点,因此我们在这个数学问题上建立的模型即为y=Wx+b其中参数W和b是需要在过程中机器自己学出来的,也是我们最后数学问题的解。

策略

在这里我们采用的损失函数为均方差函数,该损失函数其实就是平方损失函数的线性变形,如果不清楚损失函数概念的同学,请参考“要击出一记重拳,先要后退一步”的帖子。损失函数的值越小,模型就越好,因此我们的目标就是求出使该函数值即均方差最小的W和b。

算法

在这里我们仍然使用梯度下降法进行计算,步长为上面提到的learning_rate=0.01,求得cost最小即上述策略中的均方差最小的W和b即为我们本次线性回归的解。

下面我们就按上述的模型、策略、算法三要素进行训练。

上述代码为训练过程,并且每50次打印一下计算结果,运行的结果为:

最后我们将计算结果打印出来,即为我们本次线性回归最后的解,如下图中蓝色的直线所示:

不知道大家发现没,其实机器学习的核心代码可能仅仅只有三行,但是围绕这三行核心代码需要展开的数学知识和编程基础却有不少,因此机器学习本质上是一个多学科交融的学科,包括数学、计算机等。其实有了数学知识然后看一段代码的解释,其实我们基本能对算法有了一个大概的理解,核心的三部分无非即为模型、策略、算法。但是为了能更好的理解程序以及上手解决问题,小编接下来打算花点时间过一遍Python和TensorFlow的编程基础,这为我们后面学习更高级的算法夯实基础,希望感兴趣的同学继续跟紧我们的脚步,在2018年好好学习AI吧,我们争取让自己的思维和处理实际问题的方式更上一层楼!最后还是以这句话自勉吧!

本文中部分公式参考了https://github.com/aymericdamien/TensorFlow-Examples/blob/master/examples/2_BasicModels/linear_regression.py

作者简介

一个不想学好AI的女儿奴,绝不是一个好的会挖笋的核电工程师

往期文章

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180222G0ET2000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券