K-近邻(K-Nearest Neighbors, KNN)是一种很好理解的分类算法,简单说来就是从训练样本中找出K个与其最相近的样本,然后看这K个样本中哪个类别的样本多,则待判定的值(或说抽样)就属于这个类别。
KNN算法的步骤
- 计算已知类别数据集中每个点与当前点的距离;
- 选取与当前点距离最小的K个点;
- 统计前K个点中每个类别的样本出现的频率;
- 返回前K个点出现频率最高的类别作为当前点的预测分类。
OpenCV中使用CvKNearest
OpenCV中实现CvKNearest类可以实现简单的KNN训练和预测。
int main()
{
float labels[10] = {0,0,0,0,0,1,1,1,1,1};
Mat labelsMat(10, 1, CV_32FC1, labels);
cout<<labelsMat<<endl;
float trainingData[10][2];
srand(time(0));
for(int i=0;i<5;i++){
trainingData[i][0] = rand()%255+1;
trainingData[i][1] = rand()%255+1;
trainingData[i+5][0] = rand()%255+255;
trainingData[i+5][1] = rand()%255+255;
}
Mat trainingDataMat(10, 2, CV_32FC1