吴恩达机器学习 - 无监督学习――K-means算法

匿名 (未验证) 提交于 2019-12-03 00:34:01

题目链接:点击打开链接




function idx = findClosestCentroids(X, centroids) %FINDCLOSESTCENTROIDS computes the centroid memberships for every example %   idx = FINDCLOSESTCENTROIDS (X, centroids) returns the closest centroids %   in idx for a dataset X where each row is a single example. idx = m x 1  %   vector of centroid assignments (i.e. each entry in range [1..K]) %  % Set K K = size(centroids, 1);  % You need to return the following variables correctly. idx = zeros(size(X,1), 1);  % ====================== YOUR CODE HERE ====================== % Instructions: Go over every example, find its closest centroid, and store %               the index inside idx at the appropriate location. %               Concretely, idx(i) should contain the index of the centroid %               closest to example i. Hence, it should be a value in the  %               range 1..K % % Note: You can use a for-loop over the examples to compute this. %  m = size(X,1); dis = zeros(m,K);       %(m,k)位置表示第m个样本和第K个聚类中心的距离的平方 for i=1:m     for j=1:K         dis(i,j) = X(i,:)*X(i,:)' + centroids(j,:)*centroids(j,:)' - ...             X(i,:)*centroids(j,:)'*2;     end end [~, idx] = min(dis,[],2);       %寻找每一行中最小的元素索引  % =============================================================  end
function centroids = computeCentroids(X, idx, K) %COMPUTECENTROIDS returns the new centroids by computing the means of the  %data points assigned to each centroid. %   centroids = COMPUTECENTROIDS(X, idx, K) returns the new centroids by  %   computing the means of the data points assigned to each centroid. It is %   given a dataset X where each row is a single data point, a vector %   idx of centroid assignments (i.e. each entry in range [1..K]) for each %   example, and K, the number of centroids. You should return a matrix %   centroids, where each row of centroids is the mean of the data points %   assigned to it. %  % Useful variables [m n] = size(X);  % You need to return the following variables correctly. centroids = zeros(K, n);  % ====================== YOUR CODE HERE ====================== % Instructions: Go over every centroid and compute mean of all points that %               belong to it. Concretely, the row vector centroids(i, :) %               should contain the mean of the data points assigned to %               centroid i. % % Note: You can use a for-loop over the centroids to compute this. %  for i=1:K     index = find(idx == i);     centroids(i,:) = mean(X(index,:)); end  % =============================================================  end








剩下的基本不怎么变啦~

Code(kMeansInitCentroids.m):
function centroids = kMeansInitCentroids(X, K) %KMEANSINITCENTROIDS This function initializes K centroids that are to be  %used in K-Means on the dataset X %   centroids = KMEANSINITCENTROIDS(X, K) returns K initial centroids to be %   used with the K-Means on the dataset X %  % You should return this values correctly centroids = zeros(K, size(X, 2));  % ====================== YOUR CODE HERE ====================== % Instructions: You should set centroids to randomly chosen examples from %               the dataset X %  % Randomly reorder the indices of examples randidx = randperm(size(X, 1)); % Take the first K examples as centroids centroids = X(randidx(1:K), :);  % =============================================================  end

另外最后还给了个例子,是关于图像颜色压缩的,也是用的K-means算法,并不是很难,自己看看了解一下就好~

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!