机器学习-自己写个线性回归算法v0版-实现图片分类

迭代30000次,loss=0.0984,学习率=0.1,数字图片分类效果一般

迭代40000次,loss=0.0352,学习率=0.1, 数字图片分类效果较好

画出了loss曲线图,可以看出,在loss=4附近,loss曲线发生短暂上升,之后持续下降;其中在迭代10000次左右后,下降速度趋缓。

对预测值y按照阈值法进行了分类,分类函数为classify_id(result)


具体结果:

学习率=0.1

epoch=39999,loss=tensor([[0.0353]], grad_fn=),weights=tensor([ 0.2679,-1.1017, 75.4234, -27.5171, -49.4079, 15.8718, -13.4961, 95.7110, -14.0505,-56.6473, -106.9320, 0.5181, 102.3565], grad_fn=)



干货

线性回归(Linear Regression)

线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w和b。

线性回归算法步骤:

1、先令w=w0(初始化w)

2、把w0代入model输出

3、观察模型输出与期望值y*

4、如果输出与期望相同,求解完成()

5、如果不同,以一定规则更新w,即w1=R(w)

6、把w1代入model,得到模型输出

7、转到第三步

线性回归算法的关键问题有2个:

1、如何观察输出与期望之间的差?

2、更新w的规则如何制定?

对于第一个关键问题——

定义Loss 函数:

解决第二个关键问题——第一种思路是用最小二乘法(least square method);第二种思路,就用到大名鼎鼎的“梯度下降”(gradient descent)了。

梯度下降法(gradient descent)是一个最优化算法,常用于机器学习和人工智能当中用来递归性地逼近最小偏差模型。

梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在机器学习中,基于基本的梯度下降法发展了两种梯度下降方法,分别为随机梯度下降法和批量梯度下降法。

如果说在机器学习领域有哪个优化算法最广为认知,用途最广,非梯度下降算法莫属。梯度下降算法是一种非常经典的求极小值的算法,比如在线性回归里我们可以用最小二乘法去解析最优解,但是其中会涉及到对矩阵求逆,由于多重共线性问题的存在是很让人难受的,无论进行L1正则化的Lasso回归还是L2正则化的岭回归,其实并不让人满意,因为它们的产生是为了修复此漏洞,而不是为了提升模型效果,甚至使模型效果下降。但是换一种思路,比如用梯度下降算法去优化线性回归的损失函数,完全就可以不用考虑多重共线性带来的问题。其实不仅是线性回归,逻辑回归同样是可以用梯度下降进行优化,因为这两个算法的损失函数都是严格意义上的凸函数,即存在全局唯一极小值,较小的学习率和足够的迭代次数,一定可以达到最小值附近,满足精度要求是完全没有问题的。并且随着特征数目的增多(列如100000),梯度下降的效率将远高于去解析标准方程的逆矩阵。神经网络中的后向传播算法其实就是在进行梯度下降,GDBT(梯度提升树)每增加一个弱学习器(CART回归树),近似于进行一次梯度下降,因为每一棵回归树的目的都是去拟合此时损失函数的负梯度,这也可以说明为什么GDBT往往没XGBoost的效率高,因为它没办法拟合真正的负梯度,而Xgboost 的每增加的一个弱学习器是使得损失函数下降最快的解析解。



以上是自己实现梯度算法的原理,python代码如下

自己写梯度下降 实现模型训练


自己实现梯度下降前,需要推导出计算梯度的公式,对于我这种数学就饭吃的人就不友好了。

遇到问题不要慌,调用库来帮忙!

我们可以使用pytorch,它把求取梯度的方法内嵌了。下面是调用pytorch实现的代码

使用pytorch的梯度下降实现模型训练


下面是转载


一、算法简介

1.1 什么是回归分析

回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线/线来拟合数据点,目标是使曲线到数据点的距离差异最小。

1.2 线性回归

线性回归是回归问题中的一种,线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w和b。通长我们可以表达成如下公式:

y^为预测值,自变量x和因变量y是已知的,而我们想实现的是预测新增一个x,其对应的y是多少。因此,为了构建这个函数关系,目标是通过已知数据点,求解线性模型中w和b两个参数。

1.3 目标/损失函数

求解最佳参数,需要一个标准来对结果进行衡量,为此我们需要定量化一个目标函数式,使得计算机可以在求解过程中不断地优化。

针对任何模型求解问题,都是最终都是可以得到一组预测值y^ ,对比已有的真实值 y ,数据行数为 n ,可以将损失函数定义如下:

即预测值与真实值之间的平均的平方距离,统计中一般称其为MAE(mean square error)均方误差。把之前的函数式代入损失函数,并且将需要求解的参数w和b看做是函数L的自变量,可得

现在的任务是求解最小化L时w和b的值,

即核心目标优化式为

求解方式有两种:

1)最小二乘法(least square method)

求解 w 和 b 是使损失函数最小化的过程,在统计中,称为线性回归模型的最小二乘“参数估计”(parameter estimation)。我们可以将 L(w,b) 分别对 w 和 b 求导,得到

令上述两式为0,可得到 w 和 b 最优解的闭式(closed-form)解:


2)梯度下降(gradient descent)

梯度下降核心内容是对自变量进行不断的更新(针对w和b求偏导),使得目标函数不断逼近最小值的过程

你可能感兴趣的:(机器学习-自己写个线性回归算法v0版-实现图片分类)