开发者学堂课程【机器学习入门-概念原理及常用算法:无监督学习】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/355/detail/4186
无监督学习
内容介绍:
一、Unsupervised learning
二、K-Means
三、Nearest neighbor methods
四、Decision trees
五、Ensemble methods
六、Try GDBT @Parameter Server
七、部分算法应用场景
八、Homework
一、Unsupervised learning
One way to interpret many unsupervised learning
algorithms is that they try to "re-create"the input using a limited hypothesis class
非监督,它是一个没有 label 的情况下的学习算法,其实很多类的算法它都是非监督算法都是想去能够重建输入,所以它的这样一个假设级一般是hypothesis function:hθ:Rn→Rn-want h≈x(i)for all training data,loss function:l:Rn×Rn→R+-E.g.,l(h(x),x)=||h(x)-x||2
二、K-Means
1、Parameters are a set of k"centers" in the data
2、θ={μ(1),μ(2),...,μ(k)},μ(i)∈RK
3、Hypothesis class picks the closest center
hθ(x)=μ(argmini||x-μ(i)||2)
4、With this framework,training looks the same as supervised
learning minimizeθ
Emi=1||x(i)-hθ(x(i)||2
K-Means是聚类的一个算法,它的参数是k聚类的中心,一个假设级也是每个样本都挑一个跟它最近的,通过这样一种机制得到一个剧烈的中心点。
例:首先初始化得到 k 个中心点,可能k中心点是随机化来赋予的,k是有一定的策略,包括初试点的赋予也是有一定的方式跟方法的,然后通过这种方式跟方法来设置好k,可以跟这样一个中心点之后就开始迭代,来算这几个点,离哪个中心点比较近,哪个近,它就属于一个中心点,每次弄完统一分配之后来重新计算这个中心点,可能中心点不怎么发生变化,那么 k-means 就基本上收敛了。
如果设定 k 等于5,把跑出去的结果放在里面,k-means 这种情况下的效果是很好的。
三、Nearest neighbor methods
1、Predict output based upon closest example in training set
set h(x) = y(argmini||x-x(i)||2)
2、Can also average over kclosest examples:knearest neighbor
3、Requires no separate "training"phase, but requires that we keep around all the data
少数服从多数的一个概念,它本身不需要所谓的训练过程,但是它需要在预测时候需要把所有的数据都要过一遍,通过这样一种关系,如果给定一个测试数据 x ,找到 k 个离它最近的一个样本,看这个 k 里面哪个 label 是最常见的出现最多,那么就是x label。
比如 k 等于3,中间的红五角星,如果在附近找三个比较近的,是需要有一系列的数据结构算法来支持的,中间也会比较耗内存。如果 K 等于6,画的是外环的圈,如果k等于3的时候,它的红星的 label 是 class b,因为这两个出现的多一点,k等于6的时候它所谓的类就是 class a
所以这中间k的选取也有很大关系,但是这个算法比较自然,一般效果不会太差。
四、Decision trees
Hypothesis class partitions space into diffrent regions; Can also have linear predictors(regression or classification) at the leaves;Greedy training find nodes that best separate data into distinct classes
第二类是一个决策树,决策树它是把这样一个空间分成多个不同的区域,非常类似于这个人来去做一些决策。
其实它跟人来做决策非常像,同时可能在日常生活也写了很多这样的一个角色的过程,比如c里面有一堆 if else 的地方其实都会有这样一个过程,它可以用来做回归,也可以用来做分类。
例:收入跟年龄,来预测两类
把小于收入61的画一条线,年龄27画一条线,年龄38画一条线,这样就分的很好,这也是一个非线性的决策,一个边界。
Fun Time
The following c like code can be viewed as a decision tree of three leaves
if (income > 100000) return true;
else {
if (debt > 50000) return false;
else return true;
}
What is the output of the tree for (income, debt) = (98765, 56789)?
A. True
B.98765
C. False
D.56789
如果有类似c一样的代码,如果这样一个输入是这样,输出是什么样的?
五、Ensemble methods
1、Combine a number of different hypotheses, popular instances:
2、Random forests:ensemble of decision trees built from different subsets of training data;
3、Boosting: iteratively train multiple clasifiers/regresion on reweighted examples based upon performance of the previous hypothesis
实践中用的非常广,是集成学习,就是把一系列的猫都 combine 起来,有两种类别的方式,类似于 random forests ,每个人都来到一个不同的数据去学习不同的模型之后再把它 combine ,还有一种是每次训练的模型都在前一次的基础上进行迭代,进行提高,这种程度 boosting ,比如这种常见的 fdbt 等等。
六、Try GDBT @Parameter Server
按照 http∶//gitlab.alibaba-inc.com/parameter-server/ps-sdk/wikis/smart 的说明,组织好样本;
使用类似∶ param_server-ily_gbdt_ota_train_data-o ly.gbdt_ota_train_model-a SMART 的命令,进行建模
比如在集团里面有个 fdbt,按照它的说明,把样本组织好,把特征分成一列,前面是 label ,后面是特征和它的值,通过在云端设置一个节点,通过命令进行建模,完整的命令在说明里面查看。
七、部分算法应用场景
Following the Occam's Razor principle:use the least complicated algorithm that can address your needs and only go for something more complicated if strictly necessary
逻辑回归 |
简单高效,调参容易,特征、样本规模→千亿量级,广泛应用在二分类上,支持在线学习,典型场景∶广告/推荐/广告/营销中CTR &CVR预估、Rank等 |
决策树 |
直观易理解,支持非线性,样本规模百亿量级,特征规模万级别输出特征重要度,二分类跟多分类,典型场景∶搜索排序、推荐、Rank、回归、特征选择等 |
SVM |
在工业级场景中,相对逻辑回归几乎没有优势,且训练比较慢。 一般不推荐在工业级场景中使用 |
KNN |
Simplest thing you can do, often effective but slow and requires lots of memory |
K-Means |
没有标签数据时,clustering when you need to group points based on some feature |
线性回归 |
Use when you want to predict continuous values, instead of classifying |
首先一个大的原则就是 Occam's Razor,这个原则就是希望去用一些相对没有那么复杂的算法,就能够解决问题。
而且只有在需要去用那么复杂的算法的时候,才去用它,这是一个非常重要的前提。
逻辑回归简单高效,支持的特征规模跟样本规模也比较多,调仓也比较容易,可能要调的是一个政策化的一个参数,因为它使用方面比较容易上手,所以它广泛应用在iPhone类上面,并且它也比较好的能够支持在线学习,比如说谷歌的 stil 的算法,它在一些典型的场景里面,比如广告推荐搜索营销中的ctr和cvr的一个预估认可等等,运用得非常的广。
第二个是决策数,它是因为过程确实非常容易理解,人也比较容易去debug,这是比较好的非线性的一个特征,所以它再多分类上应用的非常广,并且它能够输出这样一个特征的重要程度,所以它也在类似于推荐搜索上面用的非常的广,svm它其实在工业级的级别的场景中相对逻辑回归,它并没有什么太多的优势,并且它的训练相对是比较慢的,所以一般不怎么推荐在工业级的场景中去使用它。
当然在一些数据量不大,然后操作规模也不大的情况下,应用它还是有一定的优势的。 KNN它比较简单,也比较高手,但是真的比较慢,它需要消耗比较多的一个内存。
L-means 当没有这样一个标签数据的时候,可以去尝试用 K-means并且 K-means 的一些输出可以用作别的算法的一个输入,线性回归就是想预测连续着的尝试线性回归,一般情况下使用算法的时候先把逻辑回归去做一个 based on ,再尝试用一些决策树一些更优的,取得一个更好的效果。
实际情况下,尝试顺序∶逻辑回归→决策树→Ensemble method
这样的一个顺序并不是绝对的,可以根据自己的问题去灵活的去选择去应用。
总结:这些算法分为监督和非监督,它的一些应用场景,比如说回归分类,然后聚类,降维在这里并没有太多的去提及,而且也阐述了为什么机器能够学习,包括一个PAC理论,希望去实现一个比较简单的机器学习的算法。
再次要强调一下 machine learning,它涉及的学科非常多,它包括这个特征的表示,模型的评估,然后算法这样一个优化求解的问题,数据里面的一些问题,然后还有各式各样的算法,同时在面对大规模的时候,它对应的这样一个模型的system,怎么去设计工程方面的一些东西,所以要考虑的问题是方方面面的。
八、Homework
1、使用http://gitlab.alibaba-inc.com/jun.zhoujun/ml-base/wikis/criteo 100000 data , 10万条criteo数据,尝
试logistic regression, decision tree等算法,进行数据处
理、特征分析,建立模型
2、分析loss、收敛等情况,绘制收敛曲线
3、Check模型是否有效,并分析各个特征的重要性
自己动手去尝试一下逻辑回归、决策书 gbde 等等这些算法去亲测,感受一下AI的魅力,去分析这样一个模型,分析 loss 收敛的情况,汇集一些曲线,查一下这个模型是不是真的有效,是不是特征真的是合理,通过这样一个方式能够直观了解的去用这样一个积极学习的东西,甚至最后能够给自己的一些场景联系上,能够尝试去使用这样一个模型能力的算法。