(原创)Stanford Machine Learning (by Andrew NG) --- (week 8) Clustering & Dimensionality Reduction
本周主要介绍了聚类算法和特征降维方法,聚类算法包括K-means的相关概念、优化目标、聚类中心等内容;特征降维包括降维的缘由、算法描述、压缩重建等内容。coursera上面Andrew NG的Machine learning课程地址为:https://www.coursera.org/course/ml
(一)K-means聚类算法
Input data:未标记的数据集,类别数K;
算法流程:
- 首先随机选择K个点,作为初始聚类中心(cluster centroids);
- 计算数据集中每个数据与聚类中心的距离,将其划分到与其最近的中心点那类;
- 重新计算每个类的平均值,并将其作为新的聚类中心;
- 重复步骤2-4直至聚类中心不再变化;
![]() |
![]() |
![]() |
Repeat {
for i = 1 to m
c(i):= index (from 1 to K) of cluster centroid closest to x(i)
for k = 1 to K
μk:= average (mean) of points assigned to cluster k}
PS:K-means算法也可以用于在没有明显区分的情况下将数据分组,如T-shirt的尺寸问题。
优化目标(Optimization objective)



聚类中心初始化(Random initialization)
![]() |
![]() |
![]() |
- 选择K<m,即聚类中心点的个数要小于所有训练集的数量;
- 随机选择K个训练实例,然后令K个聚类中心分别与这K个训练实例相等;
- 多次运行K-means算法,每次都进行随机初始化;
- 计算代价函数,选择代价最小的结果。
聚类数选择(Choosing the number of clusters)


(二)降维(Dimensionality Reduction)


数据可视化(Data Visualization)

![]() |
![]() |
PCA(Principal Component Analysis )
PCA | Linear Regression |
投影误差最小(右图) | 预测误差最小(左图) |
无预测任务 | 需预测结果 |

PCA算法


[U,S,V] = svd(Sigma);
其中U是最小投影误差的方向向量构成的矩阵。
Ureduce = U(:,1:k);
z = UTreduce *x;
压缩重建& k的选择
1. 压缩重建:
- 通过z = UTreduce *x计算特征向量z;其中x是n*1维,所以z是k*1维。
- 通过xapprox = UTreduce * z来近似得到原来的特征向量x;其中z是k*1。所以xapprox 是n*1维。
![]() |
![]() |
从上面的分析中可以看出,我们希望在误差尽量小的情况下k值尽量小,那么怎样选择k呢?
2. 方法一:
- 在k = 1时,使用PCA算法;
- 计算Ureduce,z(1),z(2),...,z(m),x(1)approx ,...,x(m)approx
- 检验是否?
若否,则继续尝试k=2,k=3,.......
3. 方法二:
在Octave中使用svd函数时,[U,S,V] = svd(Sigma);其中的S是n*n的矩阵,只有对角线上有值,如下所示:
≡
使用PCA的优势及应用
假如我们的输入特征向量是10000维,在使用PCA后可以降至1000维,这样可以加速训练过程,并减少内存。
PS:对于测试集和交叉验证集,同样可以使用训练集得到的Ureduce.由于我们将特征空间由n维减少到了k维,有人会认为这样做会避免过拟合,这样做也许有效,但不是很好的避免过拟合的方法。若要避免过拟合,还是应尝试正则化的方法。
HOMEWORK
好了,既然看完了视频课程,就来做一下作业吧,下面是Clustering & Dimensionality Reduction部分作业的核心代码:
1. findClosestCentroids
m = size(X,1);
dis_vec = zeros(K,1);
for i = 1:m
for j = 1:K
dis_vec(j) = sum((X(i,:)-centroids(j,:)).^2);
end
[v,k] = min(dis_vec);
idx(i) = k;
end
2. computeCentroids
tp_sum = zeros(K, n);
tp_num = zeros(K, 1);
for i = 1:m
cy = idx(i);
tp_sum(cy,:) = tp_sum(cy,:) + X(i,:);
tp_num(cy) += 1;
end
for j = 1:K
centroids(j,:) = tp_sum(j,:)/tp_num(j);
end
3. pca.m
sigma = (1/m)*X'*X;
[U,S,V] = svd(sigma);
4. projectData.m
Z = X*U(:,1:K);
5. recoverData.m
X_rec = Z* U(:,1:K)';
(原创)Stanford Machine Learning (by Andrew NG) --- (week 8) Clustering & Dimensionality Reduction的更多相关文章
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 10) Large Scale Machine Learning & Application Example
本栏目来源于Andrew NG老师讲解的Machine Learning课程,主要介绍大规模机器学习以及其应用.包括随机梯度下降法.维批量梯度下降法.梯度下降法的收敛.在线学习.map reduce以 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 7) Support Vector Machines
本栏目内容来源于Andrew NG老师讲解的SVM部分,包括SVM的优化目标.最大判定边界.核函数.SVM使用方法.多分类问题等,Machine learning课程地址为:https://www.c ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly Detection&Recommender Systems
这部分内容来源于Andrew NG老师讲解的 machine learning课程,包括异常检测算法以及推荐系统设计.异常检测是一个非监督学习算法,用于发现系统中的异常数据.推荐系统在生活中也是随处可 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 4) Neural Networks Representation
Andrew NG的Machine learning课程地址为:https://www.coursera.org/course/ml 神经网络一直被认为是比较难懂的问题,NG将神经网络部分的课程分为了 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 1) Linear Regression
Andrew NG的Machine learning课程地址为:https://www.coursera.org/course/ml 在Linear Regression部分出现了一些新的名词,这些名 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 3) Logistic Regression & Regularization
coursera上面Andrew NG的Machine learning课程地址为:https://www.coursera.org/course/ml 我曾经使用Logistic Regressio ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 1) Introduction
最近学习了coursera上面Andrew NG的Machine learning课程,课程地址为:https://www.coursera.org/course/ml 在Introduction部分 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 5) Neural Networks Learning
本栏目内容来自Andrew NG老师的公开课:https://class.coursera.org/ml/class/index 一般而言, 人工神经网络与经典计算方法相比并非优越, 只有当常规方法解 ...
- (原创)Stanford Machine Learning (by Andrew NG) --- (week 6) Advice for Applying Machine Learning & Machine Learning System Design
(1) Advice for applying machine learning Deciding what to try next 现在我们已学习了线性回归.逻辑回归.神经网络等机器学习算法,接下来 ...
随机推荐
- js_layer弹窗的使用和总结
2018-04-10 一张呈现给用户的网页,会有很多种交互,比如连不上网络,用户点击按钮时向后台请求数据不成功等等.像这些情况,用户是看不见的, 要给用户更好的体验,在特定的时间,给客户反馈内容.实时 ...
- Python 模块搜索路径 -- (转)
最近在看<Python源码剖析>,对Python内部运行机制比以前了解的更深入了,感觉自己有机会也可以做个小型的动态脚本语言了,呵呵,当然是吹牛了.目的当然不是创造一个动态语言,目的只有一 ...
- hdu 2717 Catch That Cow(广搜bfs)
题目链接:http://i.cnblogs.com/EditPosts.aspx?opt=1 Catch That Cow Time Limit: 5000/2000 MS (Java/Others) ...
- python近期遇到的一些面试问题(二)
1. 解释什么是栈溢出,在什么情况下可能出现. 栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据足够大的时候,将会溢出缓冲区的范围.在Python中, ...
- CF625D Finals in arithmetic-构造,贪心,细节
题目链接:http://codeforces.com/contest/625/problem/D 题意: 给你一个数字字符串s,长度1e6,算是一个大数吧,让你找到一个x,使得,x加上 逆转(x)= ...
- thinkphp5 消息队列thinkphp-queue扩展
1.简介 thinkphp-queue是thinkphp的一个第三方扩展, 内置了 Redis,Database,Topthink ,Sync这四种驱动,推荐使用redis 2. 下载 和安装 com ...
- ZOJ-3314
CAPTCHA Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %lld , %llu Java class ...
- Simplify Path——简单经典的预处理
Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...
- AC日记——[POI2008]BLO-Blockade 洛谷 [POI2008]BLO-Blockade
[POI2008]BLO-Blockade 思路: tarjan: 代码: #include <bits/stdc++.h> using namespace std; #define ma ...
- 在C#中使用正则表达式筛选出图片URL并下载图片URL中的图片到本地
本功能主要用到的知识点如下: 1.正则表达式 2.C#中下载文件功能的实现 3.泛型集合的使用 4.进程的简单操作(用于结束当前程序) 下面就简单说一下是如何使用这些知识点的.先详细说下这个程序主要实 ...