• VS2017+OpenCV4.5.5 K近邻算法-评价纸巾的好坏


    K近邻算法

    K近邻算法(K-Nearest Neighbors,KNN)既可以处理分类问题,也可以处理回归问题。
    KNN算法原理:
    在训练样本集中,每个样本都是一个具有 n n n个特征属性的向量,即 x = ( x 1 , x 2 , . . . , x n ) x= (x_1, x_2, ..., x_n) x=(x1,x2,...,xn), 因此可认为每个样本在 n n n特征空间或度量空间分布;同时,每个样本还有一个唯一属于他的标签 y y y机器学习的目的就要是找到一个函数满足 y = f ( x ) y=f(x) y=f(x),这样,当有一个新样本 u u u时,将其特征属性代入该目标函数即可确定他的标签。
    KNN的任务就是,在训练样本集中,依据距离测度找到与测试样本最相似的那K个训练样本。
    对于“分类”问题,我们多采用“多数表决”的方式来确定新样本 u u u的最终分类,即这K个训练样本中,哪个分类的样本数最多, u u u就属于哪个分类。
    对于“回归”问题, u u u的预测值 v v v为:
    v = ∑ i = 1 K y i / K v = {\sum_{i=1}^{K}y_i}/K v=i=1Kyi/K

    测试用例-评价纸巾好坏

    #include
    #include
    #include
    #include
    #include
    using namespace std;
    using namespace cv;
    using namespace cv::ml;
    int main(int argc, char *argv[])
    {
    	//训练样本:耐酸性、强度、分类(好:1,差:-1)
    	float trainData[24][2] = { {4,3}, {1,3},{3,3},{3,7},{3,4},{4,1},{1,4},{3,6},{3,7},{6,2},
    		{4,6}, {4,4},{5,8},{7,8},{7,7},{10,5},{7,6},{4,10},{9,7},{5,4},{8,5},{6,6},{7,4}, {8,8}
    	};
    	Mat trainDataMat(24, 2, CV_32FC1, trainData);
    	//cout << trainDataMat << endl;
    	//训练样本的响应值,1代表G  -1代表B    
    	int labels[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,-1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1};
    	Mat labelsMat(24, 1, CV_32SC1, labels);
    	//cout << labelsMat << endl;
    
    	//创建KNN分类器
    	Ptr<KNearest> knn_model = KNearest::create();;
    
    	//创建TrainData并进行训练
    	Ptr<TrainData> tData = TrainData::create(trainDataMat, ROW_SAMPLE, labelsMat);
    	knn_model->train(tData);
    
    	float myData[2] = {10,8};//测试样本
    	Mat myDataMat(1, 2, CV_32FC1, myData);
    
    	//利用训练好的分类器进行测试样本预测
    	//int res = knn_model->predict(myDataMat);
    
    	int K = 7;
    	vector<float> predictions;
    	;
    	int res = knn_model->findNearest(myDataMat, K, predictions);
    	for (size_t i = 0; i < K; i++)
    	{
    		cout << " " << predictions[i];
    	}
    
    	cout << endl << "The result is :  " << res << endl;
    	knn_model.release();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    预测结果为-1.

  • 相关阅读:
    Python 中格式化字符串及 format 函数用法
    基于关联规则的多样化推荐技术应用研究
    Python基础内容补充
    即兴发言怎样避免语无伦次?记住这个即兴发言万能公式
    奈奎斯特定理、香农定理
    SpringBoot与安全(Spring security)
    Kafka 架构
    java线上投保的设计计算机毕业设计源码
    Redis底层数据结构之IntSet
    以escalate靶机为例学习linux的提权方式-linux提权学习笔记(1)
  • 原文地址:https://blog.csdn.net/zfjBIT/article/details/128069025