knn还不懂。结果不能解释。
代码如下:
float[] trainFeaturesData =
{
2,2,2,2,
3,3,3,3,
4,4,4,4,
5,5,5,5,
6,6,6,6,
7,7,7,7
};
var trainFeatures = new Mat(6, 4, MatType.CV_32F, trainFeaturesData);
int[] trainLabelsData = { 2, 3, 4, 5, 6, 7 };
var trainLabels = new Mat(1, 6, MatType.CV_32F, trainLabelsData);
var kNearest = KNearest.Create();
kNearest.Train(trainFeatures, SampleTypes.RowSample, trainLabels);
float[] testFeatureData = { 3, 3, 3, 3 };
var testFeature = new Mat(1, 4, MatType.CV_32F, testFeatureData);
const int k = 1;
var results = new Mat();
var neighborResponses = new Mat();
var dists = new Mat();
var detectedClass = (int)kNearest.FindNearest(testFeature, k, results, neighborResponses, dists);
/*
K=1
[3]
[0]
K=4:
[3, 2, 4, 5]
[0, 4, 4, 16]
*/
Console.WriteLine("results: {0},{1},{2},{3}", results.Get<int>(0,0), results.Get<int>(0, 1), results.Get<int>(0, 2), results.Get<int>(0, 3));
//Console.WriteLine("DetectedClass: {0}", detectedClass);
Console.WriteLine("neighborResponses: {0}", neighborResponses);
Console.WriteLine("dists: {0}", dists);
这个代码思路流畅,但结果充满了怪异
程序首先构建了一个训练数据集合trainFeatures ,然后构建了一个标签。然后训练。接着构建待测试矩阵,然后用knn找邻居,
K等于1时results: 3,0,450397088,0
2: results: 2,1,0,0
3:2,1,-2095420776,1
4:2,0,458219152,0
这里的结果让人困惑。同样奇葩的是 int res = (int)kNearest.Predict(testFeature, results);的res始终是0,不知道哪里能得到解释。