Halcon学习之K最近邻分类
2015-09-24 21:11
387 查看
void testKNearestNeighbors() { //创建K最近邻分类器 //参数说明:NumDim指定特征维度数量 HTuple NumDim = 2; HClassKnn classKnn; classKnn.CreateClassKnn(NumDim); //添加一个样本到k最近邻分类器 //参数说明:Features增加的特征列表,ClassID指定的类别 HTuple Features, ClassID; ClassID = 0; Features = HTuple(1).Append(1); classKnn.AddSampleClassKnn(Features, ClassID); ClassID = 1; Features = HTuple(-1).Append(-1); classKnn.AddSampleClassKnn(Features, ClassID); ClassID = 2; Features = HTuple(1).Append(-1); classKnn.AddSampleClassKnn(Features, ClassID); //创建一个k最近邻分类器的搜索树 //参数说明:GenParamNames调整k最近邻分类器通用参数的名称, GenParamValues调整k最近邻分类器通用参数的值 HTuple GenParamNames = "num_trees", GenParamValues=5; classKnn.TrainClassKnn(GenParamNames, GenParamValues); //设置k最近邻算法中的参数取值 //参数说明:GenParamNames调整k最近邻算法的通用参数名称, GenParamValues调整k最近邻算法的通用参数值 HTuple GenParamNames1 = "k", GenParamValues1 = 1; classKnn.SetParamsClassKnn(GenParamNames1, GenParamValues1); //对于一个给定的特征向量寻找下一个邻居 //参数说明:Features需要被分类的特征向量,Result分类结果,Rating评级结果 HTuple Features1=HTuple(2).Append(-2), Result1, Rating1; Result1 = classKnn.ClassifyClassKnn(Features1, &Rating1); cout <<"特征向量被分到的类别为: " <<(Hlong)Result1 << endl; cout << "评级结果为: " << (double)Rating1 << endl; //将一个k最近邻分类器写入或者读出文件 classKnn.WriteClassKnn("classKnn.gnc"); HClassKnn fileclassKnn; fileclassKnn.ReadClassKnn("classKnn.gnc"); //序列化与反序列化 HSerializedItem item = classKnn.SerializeClassKnn(); HClassKnn serialclassKnn; serialclassKnn.DeserializeClassKnn(item); //获得k最近邻分类器的训练数据 HClassTrainData trainData; trainData.GetClassTrainDataKnn(classKnn); //获得k最近邻分类器的参数 //参数说明: GenParamNames指定要查询的参数名称, GenParamValues指定参数名称的参数值 HTuple GenParamNames2 = "method", GenParamValues2; GenParamValues2 = classKnn.GetParamsClassKnn(GenParamNames2); cout << "使用的检测方法: " << (HString)GenParamValues2 << endl; //从一个k最近邻分类模型中返回一个训练样本 //参数说明: IndexSample训练样本的下标, Features训练样本的特征向量,ClassID训练样本的所属类别 HTuple IndexSample3 = 2, Features3, ClassID3; Features3=classKnn.GetSampleClassKnn(IndexSample3, &ClassID3); cout << "训练样本的所属类别" << (Hlong)ClassID3 << endl; cout << "训练样本的特征向量: " << endl; for (int i = 0; i<Features3.Length(); i++) { cout << (double)Features3[i] << endl; } //返回存储在k最邻近模型的样本数目 Hlong NumSamples = classKnn.GetSampleNumClassKnn(); cout << "所有样本数为: " << NumSamples << endl; }
相关文章推荐
- JavaScript程序编码规范
- Javascript 学习备忘(一)
- 使用git来控制版本 并分享到github上(自学或分享必备)
- Babelfish(二分)
- java 操作excel
- 如何寻找连通域的重心
- cocos2d遍历所有body+判断触摸点是否在动态物体的形状内
- Factorial Trailing Zeroes
- WebAPI 身份认证解决方案——Phenix.NET企业应用软件快速开发平台.使用指南.21.WebAPI服务(一)
- java web总结(JNDI的配置)
- struts2结合spring json序列化问题
- caffe实现RNN(recursive Neural Network, recursive NN)
- poj 2187
- 一篇技术文章合格的标准 --- 一个对博客的理解
- LeetCode 16_3Sum Closest
- 动态规划—最长公共子序列问题
- Android方法数不能超过65K的解决方案
- lca转RMQ
- UVA 1349(二分图匹配)
- HDU 3394 Railway(点双连通分量与桥)