机器学习最简单的入门(1)线性回归

1 概述

下面我将通过简单易懂的语言来带大家入门机器学习,通过一个线性回归的例子,大家可以快速理解机器学习的基本思想。

2 机器学习定义

根据百科,机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

3 线性回归

我们有一系列的坐标点作为数据集,其中 X = {xi},Y={yi},形成了一些列坐标点(xi,yi),这些点的分布接近一条直线。

我们可以假设一个函数

y_ = a*x + b,其中 a和b 是待定的参数,我们需要通过调整a 、b,使得这个函数的图形接近这些坐标点。

4 损失函数

那么,我们如何评价我们预期的函数 y_ 与源数据集拟合得最好呢?光靠看相似层度是不行的,我们需要定义一个损失函数loss,来衡量我们预期函数 y_ 的拟合程度,loss越小,说明拟合得越好。

我们可以定义:loss = 1 / (2 * n)* sum((a*xi + b -  yi)^2 )

这个损失函数的意思是:将每个点的xi 带入 预期函数 y_,然后和真实的yi做差,然后平方,最后将每个点求和,再除以2*n,其中 n 是 数据集中点的个数。

5 参数更新

有了损失函数loss,我们已经可以衡量 预期函数y_ 的好坏了,因为y_ 是关于a、b的函数,所以就是衡量 a和b 好坏。

但是我们该如何更新a、b,使其朝着使loss最小的方向发展呢?

答案就是求导,一个函数loss对其自变量a求导(偏导),就可以求得这个函数在某个位置的梯度da,那么,我们只要让自变量减去这个梯度(a = a  - da,梯度通常还要乘以一个学习率,这里先省略) ,就可以使得这个函数值loss减小。

所以,我们知道了loss函数是关于a、b的函数,我们需要修改a、b,使得loss减小,这样,我们就需要求loss对a、b的偏导,

da和db,然后再同步更新a和b

a = a - alpha*da

b = b - alpha*db

其中要注意a、b是同步更新的,计算完第一步之后,不要将新的a带入第二步,第二步的a还是旧的a。alpha是学习率,因为有时候梯度很大,一做差,就会把loss变大,这样是无法优化的。其实,上面的步骤也成为梯度下降法,我们每次求自变量的梯度,然后更新,都是在loss这座“山”上面,选择一个最陡峭的方向向下走一小步。

6 重复迭代

将数据集迭代很多次,就可以将参数a、b更新到最适应这个数据集的值,所以这是loss损失函数是很小的,这时候我们就可以认为 预测函数y_ 和数据集拟合得很好了。

7 代码

下面是图片,如果可以自己照着敲代码,用python 3.6 写的,为了显示图片要用pip安装matplotlib,为了能用ipynb格式的笔记本模式,可以安装jupyter。  想要代码的,可以留言索取或者私信我, 我再发过去。点个赞。

猜你喜欢

转载自blog.csdn.net/u014126257/article/details/108679148