English 中文(简体)
Matlab debugging - 起点水平
原标题:Matlab debugging - beginner level

我是马特拉布的一个开端人,试图撰写马特拉布的一些机器人学习书。 如果有人能够帮助我起草这一法典,我会真心感激。

function y = KNNpredict(trX,trY,K,X)
   % trX is NxD, trY is Nx1, K is 1x1 and X is 1xD
   % we return a single value  y  which is the predicted class

% TODO: write this function
% int[] distance = new int[N];
distances = zeroes(N, 1);
examples = zeroes(K, D+2);
i = 0;
% for(every row in trX) { // taking ONE example
for row=1:N, 
 examples(row,:) = trX(row,:);
 %sum = 0.0;
 %for(every col in this example) { // taking every feature of this example
 for col=1:D, 
    % diff = compute squared difference between these points - (trX[row][col]-X[col])^2
    diff =(trX(row,col)-X(col))^2;
    sum += diff;
 end % for
 distances(row) = sqrt(sum);
 examples(i:D+1) = distances(row);
 examples(i:D+2) = trY(row:1);
end % for

% sort the examples based on their distances thus calculated
sortrows(examples, D+1);
% for(int i = 0; i < K; K++) {
% These are the nearest neighbors
pos = 0;
neg = 0;
res = 0;
for row=1:K,
    if(examples(row,D+2 == -1))
        neg = neg + 1;
    else
        pos = pos + 1;
    %disp(distances(row));
    end
end % for

if(pos > neg)
    y = 1;
    return;
else
    y = -1;
    return;
end
end
end

感谢

最佳回答

When working with matrices in MATLAB, it is usually better to avoid excessive loops and instead use vectorized operations whenever possible. This will usually produce faster and shorter code.

就你而言,“k-nearest”邻居算法是简单明了的,可以很好地传承。 2. 审议下列执行情况:

function y = KNNpredict(trX, trY, K, x)
    %# euclidean distance between instance x and every training instance
    dist = sqrt( sum( bsxfun(@minus, trX, x).^2 , 2) );

    %# sorting indices from smaller to larger distances
    [~,ord] = sort(dist,  ascend );

    %# get the labels of the K nearest neighbors
    kTrY = trY( ord(1:min(K,end)) );

    %# majority class vote
    y = mode(kTrY);
end

这里是利用渔业-岛屿数据集进行测试的一个例子:

%# load dataset (data + labels)
load fisheriris
X = meas;
Y = grp2idx(species);

%# partition the data into training/testing
c = cvpartition(Y,  holdout ,1/3);
trX = X(c.training,:);
trY = Y(c.training);
tsX = X(c.test,:);
tsY = Y(c.test);

%# prediction
K = 10;
pred = zeros(c.TestSize,1);
for i=1:c.TestSize
    pred(i) = KNNpredict(trX, trY, K, tsX(i,:));
end

%# validation
C = confusionmat(tsY, pred)

CNN预测与K=10混淆矩阵:

C =
    17     0     0
     0    16     0
     0     1    16
问题回答

暂无回答




相关问题
MATLAB Solving equations problem

I want to solve these equations using MATLAB and I am sure there is a non zero solution. The equations are: 0.7071*x + 0.7071*z = x -0.5*x + 0.7071*y + 0.5*z = y -0.5*x - 0.7071*y +...

Difference between MATLAB s matrix notations

How do you read the following MATLAB codes? #1 K>> [p,d]=eig(A) // Not sure about the syntax. p = 0.5257 -0.8507 -0.8507 -0.5257 d = ...

preventing data from being freed when vector goes out of scope

Is there a way to transfer ownership of the data contained in a std::vector (pointed to by, say T*data) into another construct, preventing having "data" become a dangling pointer after the vector goes ...

Divide two polynomials using MATLAB

I want to divide p(x) by q(x) given that: p(x)=-5x^4+3x^2-6x q(x)=x^2+1 I tried: p=inline( -5*(x^4)+3*(x^2) , x ) p = Inline function: p(x) = -5*(x^4)+3*(x^2) q=inline( x^2+1 , x ) q = ...

matlab deals with Fibbonacci

The Fibonacci series is given as follows: 1, 2, 3, 5, 8, 13, 21, ... How can I write a script which calculates and prints the n-th Fibonacci term (for n>2), where n is inputed by the user. This ...

How do I plot lines between all points in a vector?

I have a vector containing some points in 2-D space. I want MATLAB to plot these points with lines drawn from every point to every other point. Basically, I want a graph with all vertices connected. ...

How do I create a string using a loop variable in MATLAB?

I have a loop like this: for i=1:no %some calculations fid = fopen( c:\out.txt , wt ); %write something to the file fclose(fid); end I want data to be written to different files like ...

热门标签