#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得;
#注:此笔记是我自己认为本节课里比较重要、难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点;
#标记为<补充>的是我自己加的内容而非课堂内容,参考文献列于文末。博主能力有限,若有错误,恳请指正;
#---------------------------------------------------------------------------------#
<补充>机器学习按照数据标记分可分为四类:监督式学习,无监督学习,半监督学习和增强学习;
supervised learning(监督式): Application in which the training data comprises examples of the input vectors, along with their correspongding target vectors are known.
关键词: "right answer" given(有标签), classification, regression;
unsupervised learning(无监督): The training data consists of a set of input vectors X without any corresponding target values.
关键词: 无标签,clusering, density estimation, visualization;
Semi-supervised learning(半监督): is a class of machine learning techniques that make use of both labeled and unlabeled data for training - typically a small amount of labeled data with a large amount of unlabeled data.
关键词: 部分有标签;
reinforcement learning(增强学习): a teacher only says to classifier whether it is right when suggesting a category for a pattern. The teacher does not tell what the correct category is.就是说一个评价仅仅给出某种判断是对还是错,而没有给出错在哪里。
#---------------------------------------------------------------------------------#
K-means algorithm(不要同KNN混淆!)
K-means用来将没有标签的数据进行聚类(分组);
K-means算法概述(以K=2为例子来描述):
1,随机挑选两个数据作为类的中心(cluster centroids),见下图红叉和蓝叉;
2,Cluster assignment step:将每个数据按是和红叉近还是和蓝叉进来进行归类;
;
3,Move centroid step:计算当前红色点们(红类)和蓝色点们(蓝类)真正的中心,将红叉和蓝叉移到各自类的真正中心,见下图;
;
4,重复2,3步骤直到收敛,也即红叉和蓝叉落到当前红类和蓝类真正的中心;
#---------------------------------------------------------------------------------#
如何选择类的数目K?
Elbow method:
作cost function和K的图,找到"elbow",见下图左;
;
当然,结果可能是"elbow"不显著,见上图右;
#---------------------------------------------------------------------------------#
<补充>K-means 算法和EM算法的联系
K-means的步骤2和3,与EM算法的E-step和M-setp非常相似,若学到EM算法,可将两者比较着看;
#---------------------------------------------------------------------------------#
<补充>K-means和KNN的关系
K-Means算法用来聚类,用来判断哪些东西是一个比较相近的类型,而KNN算法是用来做归类的,也就是说,有一个样本空间里的样本分成很几个类型,然后,给定一个待分类的数据,通过计算接近自己最近的K个样本来判断这个待分类数据属于哪个分类。你可以简单的理解为由那离自己最近的K个点来投票决定待分类数据归为哪一类。KNN的具体介绍,推荐阅读陈皓所写博客;
KNN和K-Means的区别
KNN(K Nearest Neighbor) |
K-Means |
1.KNN是分类算法
2.监督学习 3.喂给它的数据集是带label的数据,已经是完全正确的数据 |
1.K-Means是聚类算法
2.非监督学习 3.喂给它的数据集是无label的数据,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序 |
没有明显的前期训练过程,属于memory-based learning | 有明显的前期训练过程 |
K的含义:来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c | K的含义:K是人工固定好的数字,假设数据集合可以分为K个簇,由于是依靠人工定好,需要一点先验知识 |
相似点:都包含这样的过程,给定一个点,在数据集中找离它最近的点。即二者都用到了NN(Nears Neighbor)算法,一般用KD树来实现NN。 |
#---------------------------------------------------------------------------------#
Dimensionality Reduction(降维)
降维的目的:
1,Data compression(压缩数据):
- Speeds up algorithms
- Reduces space used by data for them
2,Visualization(可视化):
将维数降到2维或3维,方便画图;
3,Ng老师没讲其他作用,不过肯定有,这里先留着,有待作补充;
注意:进行降维的时候不要忘记feature scaling和nomalization.
#---------------------------------------------------------------------------------#
PCA:Principle Component Analysis(主成分分析)
PCA是降维的最常用方法;
PCA算法描述:
1,在进行PCA之前要对数据做预处理,包括Mean normalization,Feature scaling ;
2,PCA finds the lower dimensional sub-space which minimizes the sum of the square,也就是说要找到一个维数更低的空间(直线,平面,...),这个空间使所有数据到这个空间的距离之和最小;
例子:2D->1D,
;
#---------------------------------------------------------------------------------#
Choosing the number of Principle Components
k = number of principle components;
PCA的目的是数据到目标空间(可以是直线,平面,...)的距离之和最小;
我们选择满足下式时的最小值作为K的值;
;
#---------------------------------------------------------------------------------#
PCA可用来帮助:
1,压缩数据;
2,可视化;
注意:PCA不能用来防止过拟合!过拟合还是得通过加正则化项来防止;
PCA会丢失一些数据,可能会对结果造成很大影响。实际应用中,得先不用PCA,当确认PCA会有帮助时再用到PCA;
#---------------------------------------------------------------------------------#
参考文献:
《统计学习方法》,李航著;
K Nearest Neighbor 算法, 陈皓著;
couresra课程: standford machine learning, by Andrew Ng;
couresra课程: *大学機器學習基石,by 林軒田;