(六)K-means Clustering and Principal Component Analysis[K-means聚类&主元分析]
来源:互联网 发布:姗姗手帐小铺 淘宝 编辑:程序博客网 时间:2024/06/09 21:06
K-means
之前的都是有监督的,这次是无监督,也就是聚类问题,在没有正确答案的情况下,把samples们进行分类。
大体思路如下:
初始化K个centroids
while(终止条件迭代次数or精度){
计算sample与K个centroids的距离,并分类;
根据新分类重新计算K个centroids;
}
初始化一般随机选择K个samples作为centroids,接下来看看上面的code形式:
for i=1:max_iters % For each example in X, assign it to the closest centroid idx = findClosestCentroids(X, centroids); % Given the memberships, compute new centroids centroids = computeCentroids(X, idx, K);end
其中findClosestCentroids
是分类,idx存放对应sample属于哪个类;computeCentroids
用来计算新的centroids。
先看findClosestCentroids
:
K = size(centroids, 1);idx = zeros(size(X,1), 1);for i = 1:size(X,1) curSample = []; for j = 1:K tmp = X(i,:) - centroids(j,:); curSample = [curSample; tmp]; end g = sum(curSample .^ 2, 2); [C, idx(i)] = min(g);end
上面就是计算
接下来看看computeCentroids
:
for i = 1:K centroids(i,:) = mean(X(idx == i,:));end
就是说把在i类中的samples取平均,得到新的
以图像压缩为例,训练完之后,也就是找到了新的K个centroid,我们怎么把图像复原呢?如下:
idx = findClosestCentroids(X, centroids);X_recovered = centroids(idx,:);
至此,K-means就介绍完了,比较简单~
Principal component Analysis
有时候会有很多的feature,你也不清楚到底哪个才更有用,哪个是冗余的,PCA的就是专门对数据的特征进行降维的。下面以多个人脸图像为例,聊聊PCA。
第一步,feature normalize,这个对于PCA很重要,因为要让这些数据在同一个量级。
mu = mean(X);X_norm = bsxfun(@minus, X, mu);sigma = std(X_norm);X_norm = bsxfun(@rdivide, X_norm, sigma);
第二步,从n维降到k维,关键步骤SVD分解。
comat = 1/m .* X' * X;[U, S, V] = svd(comat)
这里还是贴上图更好理解
SVD简单来讲就是会计算出三个矩阵,其中输入sigma
我们取前36个本征脸U(:, 1:36),也就是权重从高到低排列的脸的特征,如下:
这只是U的信息,对于每个不同的脸(sample),映射的code如下:
Z = X * U(:,1:K);
映射完后得到的信息是一坨,看不出来是什么,这里就不贴了。
那么如何从Z映射回X呢?因为训练的时候降维可以带来更好的效果,但是我们想直观地看看到底损失了多少的信息。code也很简单,如下:
X_rec = Z * U(:, 1:K)';
左下时原图,右下是降维后又映射回X得到的结果,可以看出来有些许差别。这里可是从1024维降到了100维!
这就是PCA,关键要知道SVD分解在干什么,有什么用。后面还有个可视化的降为例子,这里就不展示了。
- (六)K-means Clustering and Principal Component Analysis[K-means聚类&主元分析]
- Stanford ex7: K-means Clustering and Principal Component Analysis
- Machine Learning week 8 programming exercise K-means Clustering and Principal Component Analysis
- Programming Exercise 7:K-means Clustering and Principal Component Analysis 第一部分
- Programming Exercise 7:K-means Clustering and Principal Component Analysis (第二部分PCA)
- Stanford 机器学习 Week8 作业:K-means Clustering and Principal Component Analysis
- Programming Exercise 7: K-means Clustering and Principal Component Analysis Machine Learning
- [Coursera机器学习]K-means Clustering and Principal Component Analysis WEEK8编程作业
- Andrew NG 机器学习 练习7-K-means Clustering and Principal Component Analysis
- Coursera Machine Learning 第八周 quiz Programming Exercise 7 K-means Clustering and Principal Component
- K-Means聚类 K-Means Clustering
- MapReduce and K-Means Clustering
- k-means clustering and pca
- 聚类(1)-- k-means clustering
- 聚类(2)-- Fuzzy k-means clustering
- 聚类(1)-- k-means clustering
- 聚类(2)-- Fuzzy k-means clustering
- Clustering (1): k-means
- eventfd以及epoll原理分析
- spring redis入门
- Android入门:绑定本地服务
- Android开发_DrawerLayout实现抽屉布局
- 虚拟机VmWare 无法连接网络
- (六)K-means Clustering and Principal Component Analysis[K-means聚类&主元分析]
- ifarme使用jquery
- [软件测试]三个相同输入框的内容是否为字母,数字
- 多线程中的wait与notify
- hdu 3593 The most powerful force (树形dp+背包)
- hdu2178猜数字(二分法!!)
- JSP九大内置对象之session
- Android入门:利用MediaRecorder和TelephonyManager实现电话窃听器
- C语言——回文串判断