吴恩达机器学习ex7

第一部分 K-means聚类

这一部分实现K-means聚类方法并用于图像压缩。

1.实现K-means

K-mean算法是一种自动将相似数据聚类到一起的方法。该算法是一个迭代的过程,开始时随机设定一个质心,之后重复地将数据点分配到离其最近的质心,再重新计算质心。
算法过程就是重复以下两个步骤:
1)将每个样本点分配到最近的质心
2)重新计算每个类的均值作为新的质心
由于一开始选定的随机质心对结果有很大的影响,因此通常用随机化质心运行多次。最后选择代价函数最低的值作为解。

1.1 最近邻质心

代价函数(距离公式):
在这里插入图片描述
c(i)为质心的索引,μ(j)为第j个质心的坐标。
代码思路就是计算每个样本点到每个质心的距离,选择距离最小的作为最近邻质心。

for i = 1: size(X,1)
	minError = sum((X(i,:) - centroids(1,:)) .^ 2);
	minIdx = 1;	
	for j = 2: K
		error = sum((X(i,:) - centroids(j,:)) .^ 2);
		if error  < minError
			minError = error;
			minIdx = j;
		end
	idx(i) = minIdx;
	end
end

1.2 计算质心

在这里插入图片描述
C(k)为属于第k类的数据集,如果x(3)和x(5)属于第2类,那么μ(2)=(x(3)+ x(5))/ 2

for i = 1: K
   s = sum(idx == i);
   if (s ~= 0)
   	centroids(i, :) = mean(X(find(idx == i), :))
   else
   	centroids(i, :) = zeros(1, n);
   end
end

2.图像压缩

这一部分使用使用K-means进行图像压缩。将数千种颜色的图像压缩为16种颜色。
对于一张128×128,使用RGB表示的图像,每个点用24位表示,需要存储的像素点为128×128×24 = 393216,压缩为16种颜色(4位表示)后只需要128 × 128 × 4 + 24 × 16 = 65920,基本为原图像的六分之一,我们需要使用K-means选出最适合的16种颜色。

第二部分 PCA降维

这一部分应用主成分分析降维。

1.实现PCA

计算步骤:
1)计算数据的协方差矩阵
在这里插入图片描述
2)使用SVD计算本征矢量U1,U2,…,Un,对应于数据变换的主要成分。
在使用PCA之前,通常需要对数据进行归一化处理。

Sigma = (X' * X) / m;
[U, S, V] = svd(Sigma);

2.降维

计算出主成分之后就可以通过将数据映射到低纬度的方法,降低特征维度。
将数据集X映射到主成分U中的前K个成分。

Ureduce = U(:, 1:K);
Z = X * Ureduce;

3.重构数据的近似值

降维后可以将数据映射回原本维度

Ureduce = U(:, 1:K);
X_rec = Z * Ureduce';

结果:

图中蓝色点表示原始数据,红色圆圈表示映射后的数据。

你可能感兴趣的:(机器学习)