Cursera: machine learning ex7.
This commit is contained in:
64
machine_learning/mlclass-ex7-008/mlclass-ex7/runkMeans.m
Executable file
64
machine_learning/mlclass-ex7-008/mlclass-ex7/runkMeans.m
Executable file
@@ -0,0 +1,64 @@
|
||||
function [centroids, idx] = runkMeans(X, initial_centroids, ...
|
||||
max_iters, plot_progress)
|
||||
%RUNKMEANS runs the K-Means algorithm on data matrix X, where each row of X
|
||||
%is a single example
|
||||
% [centroids, idx] = RUNKMEANS(X, initial_centroids, max_iters, ...
|
||||
% plot_progress) runs the K-Means algorithm on data matrix X, where each
|
||||
% row of X is a single example. It uses initial_centroids used as the
|
||||
% initial centroids. max_iters specifies the total number of interactions
|
||||
% of K-Means to execute. plot_progress is a true/false flag that
|
||||
% indicates if the function should also plot its progress as the
|
||||
% learning happens. This is set to false by default. runkMeans returns
|
||||
% centroids, a Kxn matrix of the computed centroids and idx, a m x 1
|
||||
% vector of centroid assignments (i.e. each entry in range [1..K])
|
||||
%
|
||||
|
||||
% Set default value for plot progress
|
||||
if ~exist('plot_progress', 'var') || isempty(plot_progress)
|
||||
plot_progress = false;
|
||||
end
|
||||
|
||||
% Plot the data if we are plotting progress
|
||||
if plot_progress
|
||||
figure;
|
||||
hold on;
|
||||
end
|
||||
|
||||
% Initialize values
|
||||
[m n] = size(X);
|
||||
K = size(initial_centroids, 1);
|
||||
centroids = initial_centroids;
|
||||
previous_centroids = centroids;
|
||||
idx = zeros(m, 1);
|
||||
|
||||
% Run K-Means
|
||||
for i=1:max_iters
|
||||
|
||||
% Output progress
|
||||
fprintf('K-Means iteration %d/%d...\n', i, max_iters);
|
||||
if exist('OCTAVE_VERSION')
|
||||
fflush(stdout);
|
||||
end
|
||||
|
||||
% For each example in X, assign it to the closest centroid
|
||||
idx = findClosestCentroids(X, centroids);
|
||||
|
||||
% Optionally, plot progress here
|
||||
if plot_progress
|
||||
plotProgresskMeans(X, centroids, previous_centroids, idx, K, i);
|
||||
previous_centroids = centroids;
|
||||
fprintf('Press enter to continue.\n');
|
||||
pause;
|
||||
end
|
||||
|
||||
% Given the memberships, compute new centroids
|
||||
centroids = computeCentroids(X, idx, K);
|
||||
end
|
||||
|
||||
% Hold off if we are plotting progress
|
||||
if plot_progress
|
||||
hold off;
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user