#对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 林軒田;

coursera机器学习-聚类,降维,主成分分析的更多相关文章

  1. Coursera机器学习+deeplearning.ai+斯坦福CS231n

    日志 20170410 Coursera机器学习 2017.11.28 update deeplearning 台大的机器学习课程:台湾大学林轩田和李宏毅机器学习课程 Coursera机器学习 Wee ...

  2. 机器学习之路:python 特征降维 主成分分析 PCA

    主成分分析: 降低特征维度的方法. 不会抛弃某一列特征, 而是利用线性代数的计算,将某一维度特征投影到其他维度上去, 尽量小的损失被投影的维度特征 api使用: estimator = PCA(n_c ...

  3. 斯坦福大学Andrew Ng - 机器学习笔记(6) -- 聚类 & 降维

    大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深 ...

  4. Coursera 机器学习笔记(六)

    主要为第八周内容:聚类(Clustering).降维 聚类是非监督学习中的重要的一类算法.相比之前监督学习中的有标签数据,非监督学习中的是无标签数据.非监督学习的任务是对这些无标签数据根据特征找到内在 ...

  5. 机器学习-聚类Clustering

    简介 前面介绍的线性回归,SVM等模型都是基于数据有标签的监督学习方法,本文介绍的聚类方法是属于无标签的无监督学习方法.其他常见的无监督学习还有密度估计,异常检测等. 聚类就是对大量未知标注的数据集, ...

  6. Spark机器学习7·降维模型(scala&python)

    PCA(主成分分析法,Principal Components Analysis) SVD(奇异值分解法,Singular Value Decomposition) http://vis-www.cs ...

  7. 机器学习笔记簿 降维篇 PCA 01

    降维是机器学习中十分重要的部分,降维就是通过一个特定的映射(可以是线性的或非线性的)将高维数据转换为低维数据,从而达到一些特定的效果,所以降维算法最重要的就是找到这一个映射.主成分分析(Princip ...

  8. coursera机器学习-支持向量机SVM

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  9. coursera机器学习笔记-建议,系统设计

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

随机推荐

  1. DokuWiki用storage的模式在sae上部署后速度太慢

    利用sae做的io wrapper接口,对dokuwiki做了基于sae的分布式storage存储改造,能正常安装和运行,但速度太慢,基本没什么用. 定义一个常量: define('SAESTORE_ ...

  2. [翻译] Autofac 控制范围和生命周期

    原文链接:http://docs.autofac.org/en/latest/lifetime/index.html Lifetime 是指服务的实例在程序中存活多久 – 从最初的实例化到清理(dis ...

  3. easyui datagrid 点击表头的事件

    在用datagrid的时候我们可能要用到点击表头来触发一个function,这里有个简单的例子. 首先你得有个能用的datagrid. <div>    <table id=&quo ...

  4. JS代码实用代码实例(输入框监听,点击显示点击其他地方消失,文件本地预览上传)

    前段时间写前端,遇到一些模块非常有用,总结以备后用 一.input框字数监听 <!DOCTYPE html> <html lang="en"> <he ...

  5. C#多线程:使用ReaderWriterLock类实现多用户读/单用户写同步

    摘要:C#提供了System.Threading.ReaderWriterLock类以适应多用户读/单用户写的场景.该类可实现以下功能:如果资源未被写操作锁定,那么任何线程都可对该资源进行读操作锁定, ...

  6. WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)

    以前学习Windows Form编程的时候,总感觉自己做的界面很丑,看到360安全卫士.迅雷等软件的UI设计都非常美观,心里总是憧憬着要是自己能实现这样的UI效果该多好!!!另一个困扰我的问题是,这个 ...

  7. go语言 类型:布尔类型

    Go语言中的布尔类型与其他语言基本一致,关键字也为bool,可赋值为预定义的true和false示例代码如下: var v1 bool v1 = true v2 := (1 == 2) // v2也会 ...

  8. 新建WEB前端开发技术交流群---期待你的加入

    这几天创建了一个前端开发的技术交流群,面向的对象主要包括正在学习前端开发的和即将步入前端开发行列的小伙伴儿,主要是为大家提供一个共同学习,共同进步的开放平台.无论你现在是在自学中,还是在培训中,甚至是 ...

  9. 学习zepto.js(原型方法)[1]

    新的一周,新的开始,今天来学习一下zepto里边的原型方法,就是通过$.进行调用的方法,也是可以通过$.fn进行扩展的方法: $.camelCase(): 方法接收一个字符串,将连字符格式的字符串转为 ...

  10. [javascript svg fill stroke stroke-width circle 属性讲解] svg fill stroke stroke-width circle 属性 绘制圆形及引入方式讲解

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...