(六)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

上面就是计算(xcentroids(i))2,i[1,2,...,K],再看看那个小(离得近)就归在哪一类。

接下来看看computeCentroids

for i = 1:K    centroids(i,:) = mean(X(idx == i,:));end

就是说把在i类中的samples取平均,得到新的centroids(i)

以图像压缩为例,训练完之后,也就是找到了新的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简单来讲就是会计算出三个矩阵,其中输入sigmaRn×n,那么U, S, VRn×n ,这里n是原来的feature数。S是对角阵,可以理解为重要系数,且递减排列,对应于U中的每一列。如果想从n维降低到k维,我们只要取U的前K列(其中这前K列到底包含了多少的信息,可以S中用前K个值的和与sum(S)相除得到),然后将X与U的前K列相乘就可以了(这里X为m×n矩阵,m是sample总数,n是feature个数)。
我们取前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分解在干什么,有什么用。后面还有个可视化的降为例子,这里就不展示了。

0 0
原创粉丝点击