OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNear ...

打印 上一主题 下一主题

主题 1735|帖子 1735|积分 5215

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  • 操纵系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11
算法描述

cv::ml::KNearest 是 OpenCV 机器学习模块中的一部门,它提供了实现 k-近邻算法(k-Nearest Neighbors, KNN)的方法。KNN 是一种简单但功能强大的分类和回归算法,基于实例的学习方法,即根据最近邻的种别来猜测新样本的种别。
主要特点



  • 分类与回归:既可以用于分类使命也可以用于回归使命。
  • 参数设置:可以指定邻居的数目(k)、是否利用投票机制(对于分类)或平均值(对于回归)等。
  • 距离度量:支持不同的距离度量方式,默认为欧几里得距离。
常用成员函数

以下是一些常用的 cv::ml::KNearest 类成员函数:


  • 创建模型实例:
    create():创建一个新的 KNearest 模型实例。
  • 训练模型:

    • train(const Ptr& trainData, int flags=0):利用提供的训练数据举行训练。
    • train(const Mat& samples, int layout, const Mat& responses):另一种形式的训练函数,直接继承样本和响应矩阵作为输入。

  • 猜测:
  • findNearest(InputArray samples, int k, OutputArray results, OutputArray neighborResponses=noArray(), OutputArray dist=noArray()) -
    -const:找到最近的 k 个邻居,并返回结果、邻居的响应及距离(可选)。
  • 保存与加载模型:

    • save(const String& filename):将模型保存到文件。
    • load(const String& filename):从文件加载模型。

利用步调



  • 准备数据:准备好你的训练数据集,包罗特征向量及其对应的标签(对于分类使命)或目标值(对于回归使命)。
  • 初始化 KNearest 模型:利用 cv::ml::KNearest::create() 创建一个新的 KNearest 模型实例,并根据必要设置参数。
  • 训练模型:调用 train() 方法,传入你的训练数据来举行模型训练。
  • 评估模型:可以通过交织验证或者在独立的测试集上评估模型性能。
  • 猜测新数据:利用训练好的模型对新的未见过的数据举行猜测,并获取其所属种别的概率分布或回归值。
代码示例

  1. include <iostream>
  2. #include <opencv2/ml.hpp>
  3. #include <opencv2/opencv.hpp>
  4. using namespace cv;
  5. using namespace cv::ml;
  6. using namespace std;
  7. int main()
  8. {
  9.     // 准备训练数据
  10.     Mat samples = ( Mat_< float >( 4, 2 ) << 0.5, 1.0, 1.0, 1.5, 2.0, 0.5, 1.5, 0.0 );
  11.     Mat responses = ( Mat_< int >( 4, 1 ) << 0, 0, 1, 1 );
  12.     // 创建并配置 KNearest 模型
  13.     Ptr< KNearest > knn_model = KNearest::create();
  14.     knn_model->setDefaultK( 3 );         // 设置默认的邻居数量为3
  15.     knn_model->setIsClassifier( true );  // 设置为分类模式
  16.     // 训练模型
  17.     bool ok = knn_model->train( samples, ROW_SAMPLE, responses );
  18.     if ( ok )
  19.     {
  20.         // 保存模型
  21.         knn_model->save( "knn_model.yml" );
  22.         // 对新样本进行预测
  23.         Mat sample = ( Mat_< float >( 1, 2 ) << 1.6, 0.7 );
  24.         Mat result, neighborResponses, dist;
  25.         float response = knn_model->findNearest( sample, 3, result, neighborResponses, dist );
  26.         cout << "The predicted response for the sample is: " << response << endl;
  27.         cout << "Neighbor responses: " << neighborResponses << endl;
  28.         cout << "Distances: " << dist << endl;
  29.     }
  30.     else
  31.     {
  32.         cerr << "Training failed!" << endl;
  33.     }
  34.     return 0;
  35. }
复制代码
运行结果

  1. The predicted response for the sample is: 1
  2. Neighbor responses: [1, 1, 0]
  3. Distances: [0.19999997, 0.49999997, 1]
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表