机器学习

机器学习分类:
主要分为监督学习和无监督学习两类。

1.监督学习:
回归(regression)问题:线性回归
分类(classfication)问题:logistic回归,神经网络,SVM

2.无监督学习:
聚类(cluster)问题:k-means
降维问题:主成分分析(PCA)
异常检测问题
———————————————————————————————————————

优化算法

一般的监督学习步骤:
0.选择特征,数据处理(标准化,PCA)
1.假设函数
2.代价函数(正则化)
3.优化算法
4.评估性能(准确率和召回率)

梯度下降算法:
1.要自行选择学习率α(α在下降的过程中不用改了),而且α太小下降太慢(可通过将输入的数据标准化来优化),α太大反而有可能最后发散。
2.算法流程:

repeat{
  	计算代价函数关于各个参数的偏导数
  	同步更新各个参数}

3.适用于特征10000以上(例如神经网络中)
4.判断梯度下降何时终止:用眼睛看,如果变化很小就差不多终止了
5.不一定会下降到全局最优,可能会是局部最优

正规方程算法:
不用确定学习率,但是计算量比较大,可以直接算出局部最优解。适用于特征10000以下的情况

高级的优化算法:
不用确定学习率,而且精确度速度都很好

正则化(regularization):
防止过拟合问题。在代价函数中加入惩罚项,来控制一些参数比较小,从而提高模型的泛化能力

———————————————————————————————————————

神经网络

神经网络概述:
解决大量特征的(多元)分类问题的非线性计算工具(少量特征的分类问题可以用logistics回归算法),计算量很大

神经网络前向传播算法:
通过各层的权值计算出中间隐藏层的激活值,和最后输出层的输出值

神经网络反向传播算法:
从最后一层的输出值开始,用前向传播的结果,逐层计算前面各层的误差值,用误差值计算总代价函数关于各个参数的偏导数,从而用梯度下降算法优化

训练神经网络步骤:
1.随机初始化参数
2.计算前向传播
3.计算总代价函数
4.计算反向传播,更新偏导数矩阵
5.进行梯度检查,确保梯度下降算法的正确性
6.使用梯度下降算法得到最优的参数

选择神经网络结构:用数据集把各种结构都跑一遍,选J_test最小的

———————————————————————————————————————

一些小技巧

数据集划分:
1.训练集60%:用于前向传播和反向传播来更新参数

2.交叉验证集(CV集)20%:用于选择最适合(泛化能力最好)的假设函数
(选择多项式项数p:看J_train和J_cv,与p的函数图像,选择训练集和cv集中错误率都比较少的p)
(选择正则化参数λ:看J_train和J_cv,与λ的函数图像,来选择训练集和cv集中错误率都比较少的λ)
(选择合适的p和λ,是为了选择一个合适的假设函数来避免bias和variance)

3.测试集20%:将训练集更新的最优权重带入,选择一套标准来评估模型

判断是否会high bias或high variance:
看学习曲线(J_train和J_cv,与数据数量m的函数图像),增加数据的数量可以缓解variance,但对bias没用
———————————————————————————————————————

评估模型

评估:
在具体实现一个机器学习算法的时候,先做一个简单粗暴的模型来跑一下是比较好的。这样可以根据评估结果,选择合适的优化算法,并可以尝试新的想法,并用这个模型来实现新的想法

偏分类问题(分类过度问题)的评估:
拥有较高的准确率P和召回率R的算法比较准确。不同的threshold的值,会得到不同的P和R的结果,并且P和R是一个高另外一个就会低的。所以用F1_score来综合评估(F1_score=2*PR/P+R,F1值越高越准确)

数据集的评估:
思考,用这些数据,专业人士能评估出比较准确的结果?如果可以,那么就是可行的数据

假设函数和数据与bias和variance的关系:
用复杂的假设函数来保证低bias,用大量的数据来保证低variance

———————————————————————————————————————

SVM

SVM(支持向量机,大间隔分类器)概述:
1.用于监督学习中的分类问题

2.将logistic回归的代价函数中的两项改成另外的代价函数(并将正则化的参数λ换成C=1/λ),以便于发挥SVM的计算优势(默认的核函数是线性核)

3.不会输出取值的概率,而是直接给出分类的结果

4.SVM的分类线很宽,分类线的选择比较严格,用尽量大的间隔来分隔数据

核(相似性函数):通常在SVM中使用(高斯核在SVM的代价函数中,用θTf代替θTx,其中f为标记点和样本点之间的高斯相似性),通过标记点和相似性函数来定义新的特征变量,从而训练出更复杂的非线性边界。核和其他的算法也可以搭配,但是计算的速度太慢了

标记点的选择:直接在训练集中选几个即可

当特征变量n多,数据m少时,用线性核或logistic回归;当n少,m适中时,用高斯核(注意标准化或范围缩放)。此外还有许多不同的核函数。

———————————————————————————————————————

聚类问题

k-means算法:

repeat{
	将数据集中的点按照离各组中心点距离分为k组(离哪个中心点最近就是哪组)
	将中心点移动到各组点的平均位置
}

要选择分类的类别数k,看k和代价函数J的函数图像,通过“肘部法则”选择肘部的k作为类别数

中心点要随机初始化,并且初始化的点的选择不同,可能会得到不同的结果。为了得到最好的分类结果,可以将k-means算法用不同的初始化点跑多次,选择最好的结果

降维问题
主成分分析(PCA)算法:计算出一条所有点的投影距离之和最小的线出来,作为降维的基准。通常情况下,PCA算法是将n维降低到k维的算法,也就是投影到k个方向展开的线性子空间中。

PCA可以用来提高机器学习的速度,但是不能用来防止过拟合

如果原始数据效果比较好,就不用PCA

———————————————————————————————————————

异常检测问题

异常检测的阈值选择:
由于是很偏的分类问题(异常的情况很少),所以要做偏分类问题的评估。尝试多个阈值,然后选择其中F1_score最高的

异常检测问题和分类问题的区别:
异常检测问题中的异常样本很少,可能下一个异常就会是之前从没遇到过的。如果下一次异常很有可能是之前遇到过的,那么是可以当做分类问题来处理的

多元高斯分布:
当两个特征之间有相关性时,可以使用多元高斯分布来检测,通过设置协方差矩阵参数来建立模型。当m>10n,并且没有太多的冗余特征时,可以考虑用多元高斯分布,其余情况用一元高斯分布即可

———————————————————————————————————————

大数据学习

随机梯度下降:
由于大数据的情况下,梯度下降算法每一次迭代都要遍历整个数据集,所以会比较慢。随机梯度下降算法每次迭代只用一个数据来计算即可,速度会很快。不同于原始梯度下降算法,随机梯度下降算法会曲折迂回地达到最小值附近。

mini-batch梯度下降:
是原始梯度下降和随机梯度下降的折中,mini-batch梯度下降中每次迭代使用的数据量为b个(100>b>1)

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐