机器学习入门1.1——线性回归

本文是原创文章,未经博主容许不得转载
我在csdn也同步发表了此文: https://blog.csdn.net/umbrellalalalala/article/details/80217105
本文受众:机器学习零基础者算法

1、由房价预测问题引出多变量线性回归

我为何从线性回归开始

理解线性回归是我我的认为的了解机器学习为什么物的最好的方式之一,线性回归不须要很难的数学基础。机器学习

什么是特征

标题中说的是多变量线性回归,实际上还有单变量线性回归,但后者较为简单,咱们稍后会说起函数

图1

图1

多变量意味着多特征,上图就显示了房价和不少特征的对应关系,这些特征中有房屋面积、卧室数量、楼层数量、房屋年龄。
根据这四个特征,咱们来定义特征矩阵:
\[ x^{(1)} = \left[ \begin{array}{c} 2104 \\ 5 \\ 1 \\ 45 \end{array} \right] \]
这个就表明表格中的第一组特征,其中x\(_j^{(i)}\)表示第i组特征的第j个元素,好比x\(_2^{(1)}\) = 5学习

预测房价

咱们在图1中列举了4个已知的房价以及它们的特征,那么咱们如何创建房价和特征之间的关系呢?
咱们来创建一个参数矩阵:
\[ θ = \left[ \begin{array}{c} θ_0 \\ θ_1 \\ θ_2 \\ θ_3 \\ θ_4 \end{array} \right] \]
其中\(θ_1\)~\(θ_4\)对应房价的四个特征,\(θ_0\)是额外加上去的参数,对应偏置量(bias),咱们能够先无论它,在后面的学习中咱们天然会知道这个是干什么用的
针对本例,咱们定义假设函数h_θ(x)以下:
\(h_θ(x) = θ_0 + θ_1x_1 + θ_2x_2 + θ_3x_3 + θ_4x_4\)
这个函数所计算的就是咱们的房价预测值,好比说
y_\(^{(i)}\) = \(h_θ(x^{(i)}) = θ_0 + θ_1x_1^{(i)} + θ_2x_2^{(i)} + θ_3x_3^{(i)} + θ_4x_4^{(i)}\) = \(θ^Tx^{(i)}\)
计算的就是依据第i套房子的特征预测的此套房的价格优化

机器学习的目标

如今咱们能够讲讲机器学习的目标了,在上一模块,咱们提到了房价的预测值y_\(^{(i)}\)的计算方法,
通过计算后,第i组特征值\(x^{(i)}\)对应一个房价预测值y_\(^{(i)}\)和一个真实房价值\(y^{(i)}\)
而机器学习要作的,就是尽可能使房价预测值和房价真实值之间的差距减小spa


笨笨的A:机器学习如何实现房价预测值和真实值之间的差距减小?
聪明的B反问:那你以为是什么决定了房价的预测值?
笨笨的A答:固然是房子的特征和θ参数矩阵的值
聪明的B再问:那你以为机器学习能调整哪一项的值?
笨笨的A:我以为,emmmmm,房子的特征是必定的,机器学习程序只能改变θ的值吧
聪明的B:你也可贵聪明一回。机器学习正是经过调整θ参数矩阵的值,从而使得预测值不断地接近真实值的。.net


机器学习的训练过程:已知一个数据集(好比图1就是一个数据集),数据集中给定了多组(实际上应当是至关多组)特征和真实值之间的对应关系。给θ参数矩阵设置初值,经过假设函数\(h_θ(x)\)计算出预测值,经过不断调整θ参数矩阵的取值,减小预测值和已知的真实值之间的差距。
机器学习的最终成果:一个较好的θ参数矩阵。咱们使用这个θ,对房价未知的房子进行预测值的计算。一个好的机器学习成果会较为准确地预测出一个和真实值差距很是小的值orm

2、★梯度降低算法

为何从梯度降低算法开始

梯度降低算法是我我的认为的最好的了解机器学习优化算法的方法,它只须要一点点高等数学基础,若是你高等数学学得不太好也不要紧,只要你了解梯度就能继续往下看。
(若是你连梯度是什么也不清楚,只要你了解导数,也应该能接受如下的内容,但我要提醒你,数学水平是机器学习的瓶颈之一。但不用担忧,若是你只是想早日学会写代码,你能够先”强行理解“这几篇文章的内容。毕竟,不是每一个领域的实践都是受限于对理论的了解上的
注意梯度降低算法只是众多优化算法中的一种blog

损失函数

顾名思义,预测值和真实值差距越大,损失函数的值越大。
咱们定义损失函数以下:
\(J(θ_0,θ_1...θ_n)\) = \(\frac{1}{2m}\sum_{i=1}^m\) \({(h_θx^{(i)}-y^{(i)})}^2\)
显然,本文房价预测的例子的损失函数以下:
\(J(θ_0,θ_1,θ_2,θ_3,θ_4)\) = \(\frac{1}{2×4}\sum_{i=1}^4\) \({(h_θx^{(i)}-y^{(i)})}^2\)
因为本文房价预测的例子中一共给了4组数据,因此上式中m=4,每组数据有4个特征,因此θ参数矩阵中有5个份量。
损失函数J(θ)是关于θ参数矩阵的函数,咱们的目标是使得J(θ)的值尽量小,因此咱们采用较为经典的梯度降低算法。
如下咱们以一个简单的例子告诉你什么是梯度降低算法get

梯度降低算法原理

若是了解梯度可跳过

若是你不知道梯度是什么,那么这部分就是为你准备的,固然你想看完这几行就理解梯度也不太可能(须要你本身再查些梯度定义来了解)
一个简单的例子:
f(x) = \(x^2\)
咱们如何求其最小值?
显然,先求其导数,f\(^{'}(x)\) = 2x,
而后,咱们求出导数为0的点,即为此函数的极值点,经计算极值点为x=0。
本身画个图分析,不管是向极值点左侧仍是向极值点右侧,函数值都是愈来愈大的,因此x=0为函数的极小值点,因此最小值为f(0)=0。
咱们注意到在本例中:
若当前点在极小值点左侧,那么最小值点在当前点的右边;若当前点在极小值点右侧,那么最小值点在当前点的左边
不难证实:
若当前点的导数值为负,那么最小值点在当前点的右边(x轴的正方向);若当前点的导数值为正,那么最小值点在当前点的左边(x轴的负方向)
不难发现,最小值点的方向老是和导数的“方向”是相反的。
以上例子只是一元函数的状况,尚不牵扯梯度的概念,


笨笨的A:啥是梯度呀?
聪明的B:这都不知道,你登过山没?
笨笨的A:登过呀,并且我还发现,朝着最陡峭的方向前进,上升的速度会变快呢
聪明的B:废话,这是常识。并且你刚说的“最陡峭的方向”和“梯度”是一个意思
笨笨的A:6个字的词和2个字的词怎么能是一个意思呢
聪明的B:真拿你没办法。就像沿着最陡峭的方向爬山高度上升最快同样,若是某点沿着梯度的方向”前进“,那么此点的函数值也是变大得最快的。
笨笨的A:好吧,我再思考一下。

以后,笨笨的A查阅了一些资料,发现梯度的概念没有想象中那么难。


梯度的方向就是函数值增加最快的方向


以上的例子,咱们用导数分析一元函数的最小值,而房价预测的损失函数是一个五元函数,很多机器学习模型的损失函数也为多元函数
因此咱们须要用梯度来分析其最小值。使得函数取得最小值的方法就是,沿着梯度的负方向移动(想象一下你下山的时候沿着什么方向降低最快?)

好了,不了解梯度的伙计们,我只能帮大家到这了,毕竟这不是数学博客,剩下的靠大家本身了解了(若是只是想早日写出机器学习程序,能够接着往下看,理论以后再补也不迟)

梯度降低公式


对于θ矩阵中的每个份量,都分别执行这个公式。
这就是梯度降低算法。
你可能注意到了上式中有一个α,那是学习率,咱们在接下来会介绍

学习率

咱们在上面已经讲到,沿着梯度的负方向移动当前点是函数值减小最快的方向。但每次移动多少呢?
想象如下下山的时候,咱们以最陡峭的方式下山,胆小的(好比你家的泰迪犬)可能会“蹭着”往下走,花了大半天时间才到谷底;胆大的(好比你家的哈士奇)可能跟脱缰的野狗同样拽着你往下死命冲。


学习率就是更新参数的速度,对于梯度降低算法而言,至关于沿着最陡峭的方向下山时,每一步走多远。


泰迪犬花了大半天才到谷底,哈士奇可能半小时就拽着你到了谷底。
那么学习率是否是越大越好呢?固然不是!不过缘由并非哈士奇的速度会把你吓出心脏病。


学习率过大的后果:可能会越过函数局部最小值而致使没法收敛
意思就是:下山时若是你一步迈得太大,以致于你能越过谷底直接一步走到了对面的山峰上,那你就会在山谷间来回“振荡”……


因此,学习率不能过大(越过局部最小值),也不能太小(训练效率低下)

小结

至此,你已经了解到了最基本的线性回归概念,足够你写代码了。
tensorflow官方的第一个程序是mnist手写数字识别程序,是一个分类问题,线性回归彷佛没法解决这种问题,因此以后的文章中,我会详细介绍逻辑回归的概念。
但了解那个以前,如下几个问题你能回答吗:


一、机器学习的目标是什么?
二、假设函数\(h_θ{x^(i)}\)是干什么用的?
三、梯度降低算法又被称为“最速降低”,为何?
四、学习率为何不能太大?
五、你更喜欢泰迪仍是哈士奇?


Enjoy the symphony of the storm. ——umbrellalalalala

相关文章
相关标签/搜索