Halcon学习之K最近邻分类

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;

}

你可能感兴趣的:(knn,halcon)