Super simple K-NN regression algorithm in MATLAB
main.m
range = 1;
xall = [1 3 5 7 9 11 13 20 21 23 24 25 30]'*range;
yall = [0 3 2 6 1 0 2 4 5 6 10 5 0]';
xs = linspace(0, 30*range, 100)';
k = 5;
func = @(X)(get_knnregression(X, xall, yall, k));
outs = func(xs);
figure(1); clf; hold on;
plot(xall, yall, 'ko', 'MarkerSize', 15, 'LineWidth', 2);
plot(xs, outs, 'b-', 'LineWidth', 2);
title(sprintf('KNN REGRESSION [k:%d]', k), 'FontSize', 14);
get_knnregression.m
function outs = get_knnregression(xs, xall, yall, k)
% KNN REGRESSION
nx = size(xs, 1);
dy = size(yall, 2);
outs = zeros(nx, dy);
for xidx = 1:nx % FOR ALL TRAINING DATA
x = xs(xidx, :);
% FIRST FIND K CLOSEST INDICES
[n, d] = size(xall);
xdiffs = xall - repmat(x, n, 1);
dsq = zeros(n, 1);
for i = 1:d
dsq = dsq + xdiffs(:, i).^2;
end
ds = sqrt(dsq);
[~, indices] = sort(ds, 'ascend');
selidx = indices(1:k);
% COMPUTE WEIGHTS
weights = ds(selidx);
weights = exp(- 5 * weights / max(weights));
weights = weights / sum(weights);
% THEN, SIMPLY AVERAGE THEM
outs(xidx, :) = weights'*yall(selidx, :);
end
'Enginius > Matlab' 카테고리의 다른 글
Handling 'bvh' format from OptiTrack in MATLAB (0) | 2018.06.30 |
---|---|
Closest Distance from Point to Line (0) | 2017.07.14 |
Plot transparent png images at arbitrary locations (0) | 2016.11.21 |
Highway Simulator (0) | 2016.02.23 |
Using MATLAB in script (OS X) (0) | 2016.01.15 |