E034

orsci-dm中常使用kNN进行分类。kNN的调用,可以直接从矩阵开始或者给定训练样本。这里假设使用两个矩阵。

 

#include "stdafx.h"

#include "orsci.h"
#include "orsciDM.h"

using namespace orsci;
using namespace dm;


Demo_KNN()
{
cout << "orsci: kNN demo..." << endl;
cout << endl;
mdouble A = "1.14, 1.78; 1.18, 1.96; 1.20, 1.86; 1.26, 2.00; 1.28, 2.00; 1.30, 1.96";
mdouble B = "1.24, 1.72; 1.36, 1.74; 1.38, 1.64; 1.38, 1.82; 1.38, 1.90; 1.40, 1.70; 1.48, 1.82; 1.54, 1.82; 1.56, 2.08";

rowdouble x0 = "1.24, 1.80"; //book
rowdouble x1 = "1.50, 2.10"; //book
rowdouble x2 = "1.28, 1.86"; //练习题。

cout << "A= " << endl;
cout << A << endl;
cout << "B= " << endl;
cout << B << endl;

dm::TClassifier_kNN mModel;
list_mdouble mDataList;
mDataList.resize(2, false);
mDataList[0] = A;
mDataList[1] = B;
mModel.train(mDataList);

cout << "test ... " << endl;
vint mCatList;
vdouble mDistList;
mModel.compute_dist_Euclid(x0, mCatList, mDistList, true);
for (int k = 0; k < mCatList.size(); ++ k)
{
cout << "[" << k << "]\t" << mCatList[k] << "\t" << mDistList[k] << endl;
}

mdouble testset = A.conn_push_back_row(B); //将B追加到A的末尾形成测试集。
colint pred = mModel.test_dist_Euclid(testset, 3, 5, 0.3);
cout << pred.T() << endl;

}


int main(int argc, _TCHAR* argv[])
{
Demo_KNN();
cout << endl;
cout << "press any key to stop..." << endl;
char pp;
cin >> pp;
return 0;
}

输出

(一)运行过程

orsci: kNN demo...

A=
rowCount = 6 colCount = 2
1.14 1.78
1.18 1.96
1.2 1.86
1.26 2
1.28 2
1.3 1.96

B=
rowCount = 9 colCount = 2
1.24 1.72
1.36 1.74
1.38 1.64
1.38 1.82
1.38 1.9
1.4 1.7
1.48 1.82
1.54 1.82
1.56 2.08

test ...
[0] 0 0.072111
[1] 1 0.08
[2] 0 0.10198
[3] 1 0.134164
[4] 1 0.141421
[5] 0 0.17088
[6] 0 0.17088
[7] 1 0.172047
[8] 1 0.18868
[9] 0 0.200998
[10] 0 0.203961
[11] 1 0.212603
[12] 1 0.240832
[13] 1 0.300666
[14] 1 0.425206
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1

press any key to stop...


(二)说明:

(1)在数据挖掘或者文本分析中,经常使用kNN模型。

(2)如果kNN使用样本文件输入,则样本文件假设格式为:左侧为分组号(分类号);右侧为样本数据,可以使用grid_wstring_Horizon利用网格读取数据便于抽取组号和数据。

(3)orsci-dm包支持数据分析和数据挖掘计算,提供kNN算法,可下载配套软件orsci应用。

书籍 姜维. 《数据分析与数据挖掘》、《文本分析与文本挖掘》、《数据分析与数据挖掘建模与工具》。
软件 orsci-dm开发包(C++语言、Delphi语言和C语言)。