Coursera机器学习 week8 assignment

findClosestCentroids.m:

K_temp = zeros(K, 1);

for i = 1:size(idx, 1)  %遍历所有样本
  for j = 1:K   %遍历所有K值
    K_temp(j) = sum(( X(i,:) - centroids(j,:) ).^2);

  end
  mini = min(K_temp); %找出最小值
  %idx(i) = find( K_temp == mini ); %最小的的索引
  [value,idx(i)] = min(K_temp,[],1); 
  
end



computeCentroids.m:

for i = 1:K
  all_k = 0;
  count = sum(idx(:) == i);   %分配到centroids(i)中的X的元素总数
  temp_meet = find(idx==i);   %找出分配到centroids(i)中的所有X的行索引 (1*p)
  for j = 1:numel(temp_meet)
    all_k = all_k + X(temp_meet(j), :);  %(1*n)
  end
  centroids(i, :) = all_k / count;
end

%另一种解法,代码更简洁
%for i = 1:K
%    %X' * (idx == i) ——>使X中不是对应i的其他无关行置0,从而使挑出的X(i)行对应相加,最后变为(1*2)  
%    centroids(i,:) = (X' * (idx == i)) / sum(idx == i);   
%end 



kMeansInitCentroids.m:

rand_idx = randperm(size(X, 1));
centroids = X(rand_idx(1:K), :);



pca.m:

sigma = (X'*X)./m;  %协方差矩阵
[U, S, V] = svd(sigma);  %奇异值分解



projectData.m:

U_reduce = U(:, 1:K);  %(n*k)

for i = 1:size(X, 1)
  x = X(i, :);  %(1*n)
  Z(i, :) = x * U_reduce;  %(1*k)

end



recoverData.m:

%  Z————>(n*k)  U————>(n*n)
for i = 1:size(Z, 1)
  X_rec(i, :) = Z(i, :) * U(:, 1:K)';  %(1*n)

end







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值