通过SKlearn把底层算法能简单的执行
机器学习的编程其实并不难实现
梯度下降:
梯度下降法(Gradient Descent,GD)常用于求解无约束情况下凸函数(Convex Function)的极小值,是一种迭代类型的算法,因为凸函数只有一个极值点,故求解出来的极小值点就是函数的最小值点。
凸函数:函数图像上任意两点的连线要在最小值的上方。
线性代数的代价函数又叫最小二乘法,h-y用平方形式表达正数,不用绝对值,是因为绝对值包括了正还有负,图像就变成了V字形图像而不能求导了。导数的性质必须是连续的数值,这里的V字形图像的拐点(实质该点不存在)不是线性的关系,和抛物线的顶点不一样,绝对值的代价函数他没有拐点,所以不能用(没有唯一值的导数不算能求导)
为了代价函数的值要求到各点的距离差要够小,这样距离模型上的点平均都近近才好,这样得到的损失值才小
代价函数中利用平方作表达的优越性:
1、得到误差值都是正数
2、能得到凸函数的代价函数(能进行梯度下降)
3、有折中性能,模型存在的意义就更大了
代价函数的横坐标是θ,纵坐标是cost,梯度下降通过θ迭代得越来越小到0的时候代价函数得到θ对应的cost为0时,就是最小值,梯度下降中计算的θ每次迭代都是利用上一次留下的θ。
梯度下降的收敛条件:当目标函数的函数值变化非常小的时候或者达到最
大迭代次数的时候,就结束循环。
每次迭代整理完梯度下降就开始整理θ,然后建模再整理cost(就在代价函数到梯度函数再到建模得到y值,然后再循环),这里什么时候停止不是看建模的函数的,而是看收敛条件决定的代价函数变化非常小了就可以进行停止了,或者达到最大迭代次数了也可以自动停止了(有时候每到代价cost非常小的值,但是已经降不下去了,就会提前设置好最大迭代次数来自动停止防止占用内存消耗资源)
梯度下降法求解一元,也能求解二元代价函数:z=f(x,y)
线性回归中影响迭代的因素:
1、随机初始值(所放进去执行代价函数的权重)
2、学习率
梯度下降的形式:
1、批量梯度下降法(把所有的权重值都代进去迭代一遍,全都试过所以速度很慢)
有N个样本,求梯度的时候就用了N个样本的梯度数据
优点:准确 (得到的代价函数最小值就是最优解,不会说是近似的,因为有限的数据集里全都迭代过了)
缺点:速度慢(并且会陷入局部最优解,比如图像上有多个凸峰,如果梯度下降没有通过次级峰去到最低峰的那个区域,那么就会在判断次级峰是最优解从而选择偏向次级峰的那边横坐标权重去一步步迭代)
所以大数据和深度学习中不会考虑该梯度下降形式