您的位置:首页 > 其它

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: