一、无监督学习之聚类算法
(一)聚类算法:Clustering
监督学习:使用标注(labeled)的训练样本(x,y) ,来训练一个从x映射到y的函数。
非监督学习:无标签数据。
训练集只有????(1),????(2).....一直到????(????)。但没有任何标签????,也即没有输出值。 将这些数据输入到算法,由算法来找出这些数据的内在结构(规律)。
如上图所示,数据看起来可分成两个分开的点集(称为簇),一个能够圈出这些点集的算法(对数据进行分组),就被称为聚类算法。此外,还有其他类型的非监督学习算法,可以找到其他类型的结构或模式,而不只是簇。
Ø 应用场景举例:
1. 市场分割:在数据库中存储了许多客户信息,将他们分成不同的客户群,以对不同类型的客户分别销售产品或服务。
2. 社交网络分析:比如你经常跟哪些人联系,而这些人又经常给哪些人发邮件,跟那些人联系,由此找到关系密切的人群。
3. 使用聚类算法来更好的组织、管理数据中心。识别哪些计算机经常协作工作。用于重新分配资源、布局网络,优化数据中心。
4. 利用聚类算法分析星系的构成。
(二)聚类算法:K-Means(K-均值)
K-Means是应用比较广泛的聚类算法:将未标记的数据集中的数据,分门别类到不同的组(共K组)。就某一组数据,使用该组数据的质心,来表示该组。
下面举例说明。
如上图所示,K-Means算法原理及步骤如下:
1、随机初始化K个聚类中心。
2、将数据集中的每个数据关联到其中一个类,方法:分别计算出每个数据与距离每个中心点的距离(相似度),将其与距离最近的中心点关联起来。与同一个中心点关联的所有数据归成同一类。
3、分别计算每组数据(共K组)的质心,使用新计算出的K个质心为新的聚类中心。
4、重复步骤2-3 直至中心点不再变化。
(三)K-Means代价函数
K-Mean聚类算法本质:最小化所有的数据点与其所关联的聚类中心点之间的距离之和。故代价函数:
其中????????(????)代表与????(????)最近的聚类中心点。目标便是找出使得代价函数最小的 ????(1),????(2),...,????(????)和????1,????2,...,????????。
回顾之前的内容,这里存在两大步骤。第一大步骤是用于减小????(????)引起的代价,即,将数据点归类到距离其最近(相似度最高)的聚类中心。而第二大步骤则是用于减小????????引起的代价,即计算出各组的质心,因为各组的质心是距离该组所有数据总距离最小的点。迭代的过程一定是每次迭代都会减小代价函数,不然便是出现了错误。
局部最优问题解法(K小于10时有效):多次运行K-Means算法,每次都重新随机初始化,分别计算出代价函数,选择代价函数最小的作为最终结果。
(四)K-Means:其他内容
种类的数量K如何选定:
1. 人工选择:依据所解决问题的需要,人为选定。
2. 肘部法则:使代价函数下降剧烈的K,举例如下。
如上图所示,随着K值增加,代价函数的值不断下降,当到K=3时,代价函数值依然下降迅速,而此后,代价函数下降趋于平缓。由此,可以选择K=3。
二、无监督学习之降维
(一)降维:Dimensionality Reduction
降维可把多维度特征降到任何想要的维度,如将1000维的特征降至100维。尤其是处理海量特征,又无法清晰取舍各特征时,降维不失为一种很好的方法。
l 适用场景:
1. 减少特征数量,节省算力:通过一些数据处理手段将特征归并。
2. 数据可视化:高维数据难以可视化表示。多维到二维、三维,利于可视化。
l 原理思考:
降维的原理是并不直接舍弃各特征值,而是对各特征“一视同仁”。在降维后,相关特征值的某些细节被舍弃了。优点是不需要使用者深入理解各特征的含义,但同时这也是最大的缺点,某些关键特征的细节信息,有可能也在降维过程中被舍弃,从而导致无法训练出很好的模型。故需慎重使用降维,只在有必要的时候(算法运行太慢或耗费太多资源)才考虑采用降维。
l 举例
1.二维→一维(投影到直线)
如上所示,现在有一个二维的数据,x1与x2各代表一个特征,想把这两个特征降成一个特征。取一条直线z,x1与x2在该直线z上会有一个对应的映射点,就可以实现从x1和x2的两个维度变成一个维度z。如果x1与x2有m个数据样本,投影到直线z上也有m个数据样本。
2.三维→二维:三维向量投射到一个二维平面上,降至二维的特征向量
如上图所示,三维是一个立体空间,每个数据由x1,x2,x3组成。我们构建一个平面空间,将三维上的每个点投影到二维平面上,然后用z1与z2来表示每个点,从而实现三维降到二维。
(二)主成因分析PCA:Principal Component Analysis
PCA:把所有的数据都投射到一个方向向量(Vector direction) ,并且投射的平均均方误差能尽可能地小。方向向量是一个经过原点的向量,而投射误差是特征向量向该方向向量作垂线的长度。将????维数据降至????维的问题:找到向量????(1),????(2),...,????(????)使得总的投射误差最小。
步骤:
Step1:特征缩放。计算出各特征的均值,然后令????= ????−????。如果各特 征值的跨度在不同数量级上,还需将除以标准差s(即该特征值的范围:max-min)。
Step2:计算协方差矩阵(covariance matrix)????。
Step3:计算协方差矩阵????的特征向量(eigenvectors)。在Octave 里可以利用奇异值分解(singular value decomposition)来求解,[U, S, V]= svd(sigma)
上式中的????是一个与数据之间最小投射误差的方向向量构成的n*n矩阵。如果希望将数据从????维降至????维,只需要从????中选取前????个向量,获得一个????× ????维度的矩阵????????????????????????????,然后计算获得所需的新特征向量: ????(????)= ????????reduce ∗????(????)
????(????)→(n*k矩阵)T* (n*1矩阵) → k*1矩阵
三、无监督学习之异常检测
(一)异常检测:Anomaly Detection
定义:给定正常的数据集 ????(1), ????(2), . . , ????(????),构建一个模型,预测新的数据 ????????????????????是不是异常的,即这个测试数据同属于该组数据的几率????(????)是多少。
如图,在蓝色圈内的数据属于该组数据的可能性较高,而离圈很远的数据,其属于该组数据的可能性就越低。这种方法称为密度估计,表达如下:
Ø 应用场景
1)欺诈检测,行为分析:例如在线采集而来的数据,特征向量中可能会包含如:用户多久登录一次,访问过的页面,在论坛的发帖数量,甚至是打字速度等。根据这些特征构建一个模型,用这个模型来识别那些不符合该模式的用户。
2)异常值检测,系统监控:如用于数据中心、应用系统,采集内存、磁盘、CPU、网络等的负载及资源使用率。根据这些特征可以构建一个模型,用来判断某些计算机/系统是不是有可能出错了。
(二)异常检测算法:高斯分布/正态分布
正态分布,也称为高斯分布。
举例,通常情况下,某个地区的人群身高符合正态分布,所有人的身高值基本在一个固定范围之中。工业生产中也有正态分布的现象,如生产出来的产品品质,这些产品的尺寸、规格均在一定的范围内,呈现为正态分布。而范围外的,则为异常数据。
假设:通常认为异常检测场景的已有样本 ????符合高斯分布????∼????(????,????²),其概率密度函数为:
可使用已有的数据来计算均值????和方差????²:
问题进一步变成:对于给定的数据集 ????(1), ????(2), . . . , ????(????),计算出每一个特征(共n个)的????和 ????²。
给定新的数据,即可根据模型计算出 ????(????)
(三)异常检测算法:特征处理
思考:异常检测假设特征符合高斯分布,如果数据分布不是高斯分布呢?
非高斯分布情况下异常检测算法也能工作,但是最好还是将数据转换成高斯分布,例如通过对数函数等: ????= ????????????(????+ ????),其中 ????为非负常数;或者 ????= ????????,????为0-1 之间的一个分数等方法。
把特征的分布转为高斯分布
误差纠偏:
一个常见问题:异常的数据可能也会有较高的????(????)值,因而被算法认为是正常的。
这种情况下我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。如可以增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。
也可以将一些相关的特征进行组合,来构造新的、更好的特征(异常数据在该组合特征下的值异常地大或小)。例如,在检测数据中心计算机状况的例子中,可以用CPU负载与网络带宽的比例作为一个新特征,通常网络带宽高,则说明业务流量大,CPU负载也会变高。异常情况下,如果该值异常地大或小,便很有可能意味着该服务器可能出问题了。
(四)异常检测模型训练及评估
Ø 思考
异常检测算法是一个非监督学习算法,也就无法像监督学习那样,根据预测结果和样本中的变量 ????值来构建损失函数,并以此评测算法的有效性了,需要另一种方法来检验算法是否有效。
Ø 方法
从已有的数据集入手,从其中选择一部分正常数据构建训练集,然后将剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。
例如,有10000台正常引擎数据,有20台异常引擎数据,可以这样分配数据:
1)6000台正常引擎的数据作为训练集
2)2000台正常引擎和10台异常引擎的数据作为交叉检验集
3)2000台正常引擎和10台异常引擎的数据作为测试集
具体的评价方法如下:
1)根据测试集数据,计算出各特征的平均值和方差,构建出????(????)函数。
2)针对交叉检验集,尝试使用不同的????值作为阀值,并预测数据是否异常,根据 F1值或者查准率与查全率的比例来选择合适的 ????。
3)选定 ????后,针对测试集进行预测,计算异常检验系统的????1值,或者查准率与查全率之比。由F1值来评判算法是否有效。
(五)异常检测vs 监督学习
思考:异常检测与监督学习非常相似,将异常检测中的正向及负向样本,补充y值,不就可以构建出完整标注的数据集了么? 那何时使用异常检测,合适使用监督学习呢?如下一些方法供参考:
Ø 选用异常检测的原则:
1)异常样本的数量极少,甚至有时候是0;
2)异常的种类及情况很多,并且很难确定,难以预知,有太多没见过的不同的异常类型。
那么对于以上这类问题,通常应该使用异常检测算法。
四、AI实践课:AutoML
(一)“大数据公司”的困惑
在这个数据大爆炸的时代,许多公司收集了海量数据,但苦于没有合适的数据加工方法,海量数据不仅没为公司创造出价值,反而成为成本负担。
大数据进化之路:成本中心→ 价值创造、价值创新中心
(二)人人皆可构建属于自己的AI:AutoML & AutoDL
人工智能中目前依然涉及大量人工:
数据准备:数据收集、数据清洗、数据标注。
数据加工:特征提取、模型选择、参数调节、模型评估等。
因此,有人提出,能否让这些人工部分也尽可能实现自动化,尤其是需要大量专家经验的数据加工部分。在这个趋势下,自动化机器学习/深度学习应运而生:AutoML、AutoDL。
AutoML终极目标:
用户只需要准备好数据,其余的请交给AutoML。
AI大众化、AI普惠、人人皆可用AI来创造价值。
关于机器学习、深度学习的资料推荐:建议大家可以把吴恩达老师的机器学习和深度学习两大课程细细学一遍,非常适合于作为入门课程。本次分享中的不少素材也是源自吴恩达老师的课程,希望大家有所收获,也再次致谢吴恩达老师。