马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
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() 方法,传入你的训练数据来举行模型训练。
- 评估模型:可以通过交织验证或者在独立的测试集上评估模型性能。
- 猜测新数据:利用训练好的模型对新的未见过的数据举行猜测,并获取其所属种别的概率分布或回归值。
代码示例
- include <iostream>
- #include <opencv2/ml.hpp>
- #include <opencv2/opencv.hpp>
- using namespace cv;
- using namespace cv::ml;
- using namespace std;
- int main()
- {
- // 准备训练数据
- Mat samples = ( Mat_< float >( 4, 2 ) << 0.5, 1.0, 1.0, 1.5, 2.0, 0.5, 1.5, 0.0 );
- Mat responses = ( Mat_< int >( 4, 1 ) << 0, 0, 1, 1 );
- // 创建并配置 KNearest 模型
- Ptr< KNearest > knn_model = KNearest::create();
- knn_model->setDefaultK( 3 ); // 设置默认的邻居数量为3
- knn_model->setIsClassifier( true ); // 设置为分类模式
- // 训练模型
- bool ok = knn_model->train( samples, ROW_SAMPLE, responses );
- if ( ok )
- {
- // 保存模型
- knn_model->save( "knn_model.yml" );
- // 对新样本进行预测
- Mat sample = ( Mat_< float >( 1, 2 ) << 1.6, 0.7 );
- Mat result, neighborResponses, dist;
- float response = knn_model->findNearest( sample, 3, result, neighborResponses, dist );
- cout << "The predicted response for the sample is: " << response << endl;
- cout << "Neighbor responses: " << neighborResponses << endl;
- cout << "Distances: " << dist << endl;
- }
- else
- {
- cerr << "Training failed!" << endl;
- }
- return 0;
- }
复制代码 运行结果
- The predicted response for the sample is: 1
- Neighbor responses: [1, 1, 0]
- Distances: [0.19999997, 0.49999997, 1]
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |