无监督学习
对于一类没有标签 y 的机器学习问题称之为无监督学习
K-Means聚类算法
1.概述:
K-Means聚类算法就是把一系列样本点x(i)按照特征的相似程度(向量距离)聚合为不同的K类,是一个不断迭代的过程,该过程中聚类中心不断变化,所有样本点所属的聚类也不断变化,最终聚合为不同的K类;
2.过程:
- 初始化聚类中心:可以采用随机的方式从样本点中选取不同的 K 个点作为聚类中心,因为根据初始样本点的不同,最后的聚类结果也会不同,此外,也可以根据不同的聚类中心,由最终的聚类结果计算代价函数(各个聚类中样本到达聚类中心的距离之和),选出最小的那一种方案;
- 归类:帮助样本点选取‘类别’,也就是选取最近的那一个聚类中心,使样本x(i)到他的距离最近(特征最为相似);
- 更新聚类中心:根据这一次的聚类结果,重新计算聚类中心,由该类别所有样本的特征均值来决定;
重复以上三步,直到达到迭代次数,聚类完成;
PCA(principle component analysis:主成分分析)
1.概述:
PCA 是降维中常常用到的算法,具体来说,就是将原本 n 维的数据样本降低到 k 维的数据样本,最大程度的保留数据的信息,是一种以损失一定的信息量来换取数据压缩(节省存储空间、加快算法效率)与可视化的一种算法;此外,PCA 并不适用于避免过拟合(减少特征数量)问题;
2.过程:
- 计算数据样本的协方差矩阵,在matlab中:Sigma = X ’ * X/m;
- 由Sigma 计算特征向量:【U,S,V】= svd(Sigma);U_r = U(:,1:K);(前 k 个特征向量(主成分))
- 新的样本值 z(i) = U_r ’ * x(i);
- 数据的恢复:x_a(i) = U_r * z(i) ;
3.关于 K 的选择:
如下图示:
有两种计算方式,左边是先恢复得到x_a,然后计算比值,右边是根据计算出的 S 对角线上的特征值来计算比值,比值的含义分别为损失的信息百分比和保留的信息百分比;
4.PCA不是线性回归:
如下图示:
左边为线性回归,右边为PCA;
其他ML问题
异常检测(Anomaly Detection)
异常检测是用于检测样本点中某些特征值出现异常的那些点,具体做法是建立一个概率模型 P(X) ,使用正常的样本点,y == 0来拟合P(X) 的参数,然后将新的样本点代入求取,若小于某一设定值**‘sigma**,则判定为异常点,即 y == 1;
样本特征的分布
常用的分布为正态分布,而这里的 P(X) 就是对应的概率密度函数,需要拟合的参数为均值mu、方差sigma^2,正态分布的概率模型为下图所示:
各参数的计算细节下图中也有所示:
一般和特例的区别和各自的应用场景:
注:original 的为normal 形式的特例,即 n = 2 的情况,需要自行选择参与运算的特征项,两种类型的模型的适用情况在最后一张图中也有所比对;
sigma 的选取
对于用 training set 训练得到的参数 mu、sigma2 ,然后用 cross validation 来选择最合适的 sigma 的值,使用的判定方法为Precision-Recall,以及 F1 的值,这一点在监督学习那一块有提到:
F1 = 2 * prec * rec / (pre + rec) ;
与监督学习的对比:
监督学习一般都有足够数目的 y == 1 的样本来训练参数,而异常检测中的这样的样本数目极少,而且异常的种类也不尽相同,而且未来出现的异常样本也和之前的异常样本大不相同,所以不同的特性决定了不同的应用场景;
推荐系统(Recommender System)
推荐系统解决如下问题:
对于某一种产品 X (电影、书籍等等),X(i) 为一个 n 维向量,分别对应着改产品的不同特征,而对于某一用户 U,其有一个对于该产品的参数向量(通过学习训练:最小化代价函数、梯度下降得到)theta,所以,当出现一种新的产品的时候,就可以根据 theta’ * X 的值来为用户推荐产品;
以上的描述中,仿佛与线性回归无异,但推荐系统中不同的是,不是所有的标签值都是完整的,也就是说,不是对所有的样本x,用户都有相应的评价 y,有些 y 值是可以为空的,因此代价函数中参与运算的项都是标签值不为空的项;此外,在推荐系统的问题中,样本x 的特征值也可能是空的,这就需要一种算法来自动填充那些空值,即协同过滤算法;
Collaborative filtering (协同过滤)
所谓的协同过滤就是特征矩阵X和参数矩阵theta都是不完整的,因此,可以通过彼此进行相互训练学习(X····>theta····>X····>theta…),以得到完整的参数;
协同过滤算法:最小化代价函数 J(X,Theta):
- 以随机的一列较小的值初始化X、theta;
- 最小化 J (梯度下降、高级优化算法);
- 由得到的 X、theta 预测用户对该产品的评价;
可以理解为所有用户对所有产品的评价 Y、R 中隐含着产品的特征矩阵 X、用户的评价系数矩阵 theta,通过最小化代价函数来求得这两个矩阵
Low rank matrix factorization (低秩矩阵分解)(?)
Y = X * theta’ ;(某一用户对某一产品的评价值)
Mean normalization (均值归一化)
问题情景:若某一用户对任何产品都没有相关评价,该如何为其推荐?
这就需要对评价矩阵 Y 进行一些相应的处理,首先,根据已有的Y(i)计算其均值(基数只考虑存在的Y(i)值的个数),得到 mu,然后用
Y - mu 得到处理后的评价矩阵 Y ';但是需要注意,在最终预测 y 值时,同样得加上这个 mu 值,即 x * theta + mu;
协同过滤的梯度求解理解
协同过滤算法与神经网络算法有类似之处,因为参数 theta 不再为单一向量,而是一个系数矩阵,在神经网络中,采用 back propagation 方法来计算各个系数的梯度,而协同过滤中仍然采用求导数方式来直接求得梯度,这与线性回归、逻辑回归中计算梯度的方法是一致的,只是参数的维度更高了而已,可以分别对不同的用户或不同的产品分别求解,这样就与多次线性回归无异了;
大规模数据机器学习
在一些机器学习问题当中,我们面临的是特大数据集合,这时候有些算法的适用性就不是那么高了(需要大量的计算代价),因此需要采取一些新的策略和方法来解决这种庞大数据集的学习问题
Stochastic gradient descent(随机梯度下降)
随机梯度下降就是为了解决训练集 m 很大的机器学习问题,因为在Batch gradient descent 中,每一次参数的更新都会对整个训练集进行求和计算,当这个基数很大时,计算代价就会很高,因此,采取每次只对一个随机选取的样本进行参数的更新,也就是**‘一小步’:具体过程见下图:
除了随机梯度下降,另外一种方式是mini - batch gradient descent**,这种方式是在每一次的迭代中,使用 b 个训练样本,对比随机梯度下降中每次使用一个样本和批量梯度下降中每次使用全部样本;
在批量梯度下降算法中,验证算法合理及收敛的方式是判断代价函数 J 随着每一次的迭代呈下降趋势,同样,在随机梯度下降算法中,采用类似的方法来判定算法是否合理以及收敛情况,具体计算方式见下图:
此外,如果希望算法能更准确的收敛到某一局部最优,可以在学习的过程中随着迭代次数的增加而相应的减小学习速率,但是此举也会额外的增加其他参数,从而导致了算法更为复杂,根据需要来选择是否应用这一方法;
Online learning (在线学习)
在线学习就是针对某些有持续用户流输入的模型,相对于有固定训练集的算法来说,在线学习不再选用固定的数据集,而是从持续的用户流中获取数据,可以理解为另一种形式的随机梯度下降算法:不断获得数据------> 训练模型 ------> 丢弃数据 ------ > 重新获得数据;
Map - Reduce and data parallelism (减少映射和数据并行)
当有很多的数据集时,我们就可以把大量的数据集分为不同的几个部分,采用多台机器(一台机器多个核)来分别运算数量级较小的数据,然后通过网络传输(一台多核就不需要)到数据中心进行整合,这样得到的结果与一台机器使用整个庞大数据集的效果是一样的;这样做的思想是提升数据运算的并行性,同样是为了解决大规模的机器学习问题;
照片OCR和机器学习流水线
照片OCR
OCR是一种帮助计算机理解图片中的一些环境(文字、标识等等)的一种算法,以识别照片中的文字为例,下面展示OCR的一个流水线(各个模块):
image -----------> Text detection (文本检测)----------------> Character segmentation (字符分割)--------------> Character recognition(单个字符识别、校正等等);
每一个模块都可以单独进行,对于一些复杂的机器学习系统,这种流水线更为常见,由不同团队完成不同的任务最后进行整合;
Sliding Window
在前两个模块中一个重要的检测识别方法便是滑动窗口,选取一定大小的窗口遍历整个需要检测的对象(以一定的步长比如多少像素滑动),从而根据已经训练好的模型(大量的正、负学习样本)来判定是否为所需,文本检测和字符分割原理上都类似;
获取大量数据和人工数据
- 从 0 开始产生
- 从已有的一小部分带有标签的数据中,通过添加一些噪声(字符人工变形、声音添加杂音)等方式扩充数据样本,当然,这些扩充后的样本应该是那些有可能出现在样本集中的,而不是一些没有意义(不太可能出现)的样本;
天花板分析
分析机器学习系统中哪一步最值得花时间优化或者说哪一步的提升对整个系统的最终效果(采取某些指标:字符识别准确度、分类准确度等等)提升最有效果,从而把时间和资源分配在适当的环节或步骤上;具体实现方式可参考以下步骤:
- 对于某一个模块,人为的将其准确度提升到100%(perfect system),然后对整个系统的效果进行评估;
- 由上一步得出的各个模块最优化后整个系统的效果评估结果,可以得知提升哪一步对最终的结果影响最大(系统的瓶颈所在)