Unix k-最近邻(fitchnn或knncn)

Unix k-最近邻(fitchnn或knncn),unix,Unix,我有3个不同大小的数据数组(类): d1=[-3.34,0.11,1.07,0.82,-0.51,-1.24,4.0,1.15,1.29,-3.38,-1.12,1.35,-0.14,1.21,-2.11,0.48,2.16,0.91,-0.78,1.13,1.32]; d2=[3.27,4.57,4.12,4.99,4.40,4.08,5.96,3.37,4.0,3.56,4.81,3.02,3.01,2.62,3.77,7.01,2.84,2.79,4.41,2.08,6.66,6.65,4

我有3个不同大小的数据数组(类):

d1=[-3.34,0.11,1.07,0.82,-0.51,-1.24,4.0,1.15,1.29,-3.38,-1.12,1.35,-0.14,1.21,-2.11,0.48,2.16,0.91,-0.78,1.13,1.32];
d2=[3.27,4.57,4.12,4.99,4.40,4.08,5.96,3.37,4.0,3.56,4.81,3.02,3.01,2.62,3.77,7.01,2.84,2.79,4.41,2.08,6.66,6.65,4.65,5.78,5.81,5.65,3.73,4.31,4.84,3.70,4.73,2.98,3.95,3.58];
d3=[3.66,6.16,10.07,7.17,8.17,7.33,6.24,7.02,6.52,7.27,7.86,9.27,11.58,5.12,10.12,9.07,11.57,9.12,9.88,6.71,8.18,9.29,6.56,10.40,7.39,8.30,10.87,11.79,8.77,11.08,8.66,7.78,10.00,6.14,8.74];
我需要根据
k=1
k=3
对测试值
[-2,0,2,4,6,8,10]
进行分类

我正试图用
fitchnn
来做这件事。但是对于
fitchnn
,我不确定使用参数来构建k1Model和k3Model的正确方法


;;我检查了一下,发现“KNN分类”在这里不合适,因为它需要矩阵。

假设d1、d2和d3是三类:

% data values
d1=[-3.34,0.11,1.07,0.82,-0.51,-1.24,4.0,1.15,1.29,-3.38,-1.12,1.35,-0.14,1.21,-2.11,0.48,2.16,0.91,-0.78,1.13,1.32];
d2=[3.27,4.57,4.12,4.99,4.40,4.08,5.96,3.37,4.0,3.56,4.81,3.02,3.01,2.62,3.77,7.01,2.84,2.79,4.41,2.08,6.66,6.65,4.65,5.78,5.81,5.65,3.73,4.31,4.84,3.70,4.73,2.98,3.95,3.58];
d3=[3.66,6.16,10.07,7.17,8.17,7.33,6.24,7.02,6.52,7.27,7.86,9.27,11.58,5.12,10.12,9.07,11.57,9.12,9.88,6.71,8.18,9.29,6.56,10.40,7.39,8.30,10.87,11.79,8.77,11.08,8.66,7.78,10.00,6.14,8.74];

% re-arrange data to a format as expected by fitcknn
% your predictors
X = vertcat(d1', d2', d3');
% your labels
Y = vertcat(repmat({'d1'}, length(d1), 1), repmat({'d2'}, length(d2), 1), repmat({'d3'}, length(d3), 1));

% fit a model with k (the number of neighbors) equal to 1:
k1Model = fitcknn(X,Y,'NumNeighbors',1,'Standardize',1);
% alternatively with k (the number of neighbors) equal to 3:
k3Model = fitcknn(X,Y,'NumNeighbors',3,'Standardize',1);

% get predictions on the test points by passing the trained model and your test values to
% the 'predict' function

testValues = [-2,0,2,4,6,8,10]';

k1Predictions = predict(k1Model, testValues);
k3Predictions = predict(k3Model, testValues);

1) 我会使用fitcknn,因为KNncClassify计划在未来的MATLAB版本中删除。2) KNN需要为您的数据添加标签。您的数据排列是否正确,例如“d1”向量中的值应带有标签“d1”,等等?非常感谢!它起作用了。起初,我将我的文件命名为“fitcknn.m”,这就是系统消息很棒的原因!如果答案能解决问题,请“接受”正确答案。