KNN-regression

Posted 2017.03.01 19:47

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' 카테고리의 다른 글

Closest Distance from Point to Line  (0) 2017.07.14
KNN-regression  (0) 2017.03.01
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
Nonparametric Regression and Gaussian Random Paths  (0) 2015.12.23
« PREV : 1 : ··· : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : ··· : 574 : NEXT »