分为监督学习Supervised learning和无监督学习Unsupervised learning,
1.监督学习Supervised learning
有两种典型的,一种叫做拟合/回归/Regression,另一种叫做分类Classification
2.无监督学习Unsupervised learning
典型的是聚类Clustering,还有异常检测Anomaly detection(Find unusual data points),还有降维Dimensionality reduction(Compress data using fewernumbers.)
3.线性回归Linear Regression
例如房价预测
1.名词解释
描述数据的标准符号
x:输入变量"input" variable,特征feature
y:输出变量"output" variable,目标"target" variable
m:训练数据的规模
(x,y):指特定的一个数据对
(x上标i,y上标i):指第i个数据
f:以前叫hypothesis,现在叫function,就是根据输入产生预测输出的值的模型
y-hat:(y上面一个小尖尖)使用函数f产生的预测输出的值,所有的统称
这个函数写法的意思是,f是一个以x作为输入的函数,并且根据w和b的值,f将输出预测y-hat的某个值
y-hat-i:指的是,在输入为x上标i的时候,经过函数处理后得到的预测值,指的是某一个特定的数据
2.代价函数/成本函数cost function
在线性回归里面,我们使用平均平方误差
为什么在线性回归里面使用这个成本函数呢:
称为平均平方误差:平方是为了不只关注距离而不关注正负;除以m是为了在不同数据集规模的情况下都有差不多大小的结果(让结果与数据集大小无关,和数据的值有关);除以2其实是后面别的处理里面形式更好看,没有特别大的意义
进一步把y-hat写出来:
3.代价函数的可视化
如果是这样的训练集的话:
在b的值取0的时候,如果使用上述代价函数的表达式,代价函数与系数w有关;可以画出J和w的关系图:类似于一个碗状
说明在w取值1的时候代价最小,即拟合出来的应该是y=1*x+0
如果b不是0的话,代价函数与b和w都有关,可视化结果可以得到类似如下情况:也是类似碗状
再进一步可以使用等高线画法,把这个图转换成二维的:等高线图
4.梯度下降gradient descent
记住梯度下降只能找到局部最小值
下面指的是batch grading descent批梯度下降,指的是更新参数的时候使用全部的数据集计算,另外还有只使用一部分的数据集进行参数更新的梯度下降,可以参考:https://blog.youkuaiyun.com/u012328159/article/details/80252012
1.含义和数学原理
一种系统方法/算法,用来寻找w和b这类参数值,以得到最小的代价 函数;当然这种方法也可以处理多于两个参数的代价函数
初始参数的设置并不重要,因此很多做法都是直接设置为0;在我们一轮一轮的改变后,会趋向于稳定(因为在最低点的偏导数为0,所以由公式可以知道,就不会再更新参数的值了,就是稳定了)
回顾一下梯度的数学公式:就是两个偏导
https://blog.youkuaiyun.com/myarrow/article/details/51332421
梯度下降的数学原理:
其实我们知道,一个地方的梯度,是这个地方下降最快的方向(这意味着在这个方向踏出的一小步,达到的下降效果是最好的),所以重复沿梯度的方向下降,可以最快速的到达低点,就可以最小化代价函数了,效果如下图:
下图中的两条路径的最低点,叫做local minima(局部最小值),我们可以发现,不同的位置起点可能会得到不同的局部最小值
2.实现梯度下降
梯度下降的笼统的公式:
其中:1、α是学习率learning rate,是一个从0到1的小数;α可以基本控制下坡的步幅;如果α很大的话,是一个非常激进的梯度下降过程,如果很小的话,下降的又会很慢。2、后面那个是偏导,决定的是下坡的方向
通过这两个式子,w和b参数的取值会缓慢向着代价最低的位置前进,并且在一段时间后达到收敛/稳定(就是local minimal的位置)
这个公式在代码里面更新的实现其实是有两种方式的,一种叫同步更新simultaneous updates,一种是异步更新non-simultaneous update
-
同步:一般来说,我们都是用这个的
-
异步:在这个异步的更新方式中,在temp1的计算中用的是新的θ0的值
3.学习率的选择
如果学习率很小,那么梯度下降会起作用,但是速度会很慢
如果学习率很大,那么可能会overshoot,可能无法收敛,甚至可能发散
当出现下图的效果,往往就是学习率调太大的情况:
为了找到合适的学习率,我们可以先试试使用非常小的学习率(例如0.001,因为小了并不会影响趋势效果只是慢),然后尝试增大(0.01或者0.003)这种,结合5代价函数的图,多次尝试,找到一个效果好的
4.线性回归中的梯度下降
具体公式的推导,上面那个只是笼统的,这里说的是把梯度下降的成本函数带进去的结果
偏导的计算:
带入更新公式:
梯度下降只能找到局部最小值,但是由于线性回归的特殊性(函数是下凸函数,只有一个最小值),所以局部最小值就是全局最小值
5.检查梯度下降是否收敛
在我们实现梯度下降的过程中,我们可以画出代价函数J随着训练轮次的变化图,
通过这张图,我们可以看到代价是否在下降(梯度下降是否有效),以及何时达到收敛
5.多元线性回归Multiple linear regression
1.多维特征
x下标j:第j维特征
n特征的维度
把这个表达式里面的,权重和特征分开,写成向量的形式,可以简化表达式
这个式子并不严谨,其实需要写转置
2.向量化Vectorization
把数据写成向量的形式后,我们就可以使用gpu以及cuda进行并行计算了
np.dot这个函数会自动计算
在计算机内部,不使用并行计算的话,需要一个一个计算然后读写,有很多额外开销
使用的话,可以直接把几个地址的数据算出来,并且用专门的硬件加在一起,在大量的数据运算中尤为重要
在计算梯度下降的时候,也可以使用并行计算加快速度
3.梯度下降
基本的写法,和向量的写法
一维梯度和多维梯度的比较:
6.多项式回归Polynomial Regression
多元线性回归,只是对不同的维度特征拟合直线;进一步可以对各个维度特征拟合曲线,就是多项式回归,例如:
7.特征数据缩放Feature Scaling/数据标准化(Data Normalization)
1.是什么
取消由于量纲不同引起的误差
数据同趋化处理:把数据变成固定区间(0,1)或者(-1,1)之间的小数,将数据映射到固定范围之内处理,更加方便快捷;
无量纲化处理:把有量纲的表达式变成无量纲的表达式,便于不同单位或量级的参数进行比较和加权。
由于我们的数据常常具有不同的尺寸,为了确保梯度下降的效率,我们最好需要对不同尺寸的数据进行放缩,将它们放在差不多相似的范围内
一般在两个维度数据相差两个数量级的情况下就需要对其中一个进行放缩,比如size(房子大小)和bedroom(房间数目)两个参数尺寸相差较大,就需要进行放缩
把数据放缩之后(其实就是拉伸两个轴),就会形成标准,好看的图像
2.缩放的方式
1.绝对最大缩放(除以最大值)
这种方法将每个特征值除以该特征的最大绝对值,使得缩放后的数据范围在-1到1之间。
2.平均值归一化方法(Mean normalization)
将该值映射到[-1,1]区间内,则需要计算属性A的平均值XMean,使用平均值归一化方法公式为
3.Min-Max归一化方法(Min-Max scaling / Min-Max normalization)
设XMin和XMax分别是属性A的最小值和最大值,将A的一个原始值X通过该标准化方法映射到[0,1]区间中得到值x,公式为:
进一步可以将该值X映射到[a,b]区间内,则公式为:
4..标准化(Standardization)/Z-score标准化方法(Z-score Normalization)
把数据放缩成标准正态分布,平均值为0,标准差为1