knnmail.cpp
上传用户:xmhs66
上传日期:2022-07-26
资源大小:989k
文件大小:2k
源码类别:

生物技术

开发平台:

Visual C++

  1. /************************************************************************
  2.  * * filename: knnmail.cpp
  3.  * * description: K邻近算法实现的分类器,用来区分垃圾邮件。
  4.  * * 1. 先对训练集进行随机的分割,2/3的数据作为"学习"集,
  5.  * * 其余的数据作为"测试"集。
  6.  * * 2. 循环K的值从1到sqrt(学习集记录数)求出错误率最少的
  7.  * * K值。
  8.  * * 3. 用求出的K值对真正的训练集和测试集进行KNN分类。
  9.  * * student: Liwanjun
  10.  * * data: 2010-03-29 
  11.  * **********************************************************************/ 
  12. #include "knnctl.h"
  13. #include <iostream>
  14. #include <vector>
  15. using namespace std;
  16. int main()
  17. {
  18. string  studyfile("训练集.data");
  19. string testfile("测试集.data");
  20. Knnctl knn;
  21. //读取训练集记录
  22. knn.readFile(studyfile);
  23. //对训练集进行分割并解析,2/3作为"学习"集,其余作为"测试"集
  24. knn.divideFile();
  25. //将分割的学习集和测试集进行[0,1]区间标准化,并产生名字为st_div_study的文件
  26. knn.standard(knn.studyvec, "st_div_study");
  27. knn.standard(knn.testvec,  "st_div_test");
  28. //利用分割并标准化后的数据和KNN算法求出错误率最小的K值
  29. knn.calKno(knn.studyvec, knn.testvec);
  30. //读取真正的训练集
  31. knn.readFile(studyfile, knn.studyvec, 0);
  32. //读取测试集,并进行标准化
  33. knn.readFile(testfile, knn.testvec, 1);
  34. knn.standard(knn.studyvec, "sstudy");
  35. knn.standard(knn.testvec, "stest");
  36. //计算向量间的距离,默认为欧氏距离;也可以余弦
  37. knn.calSimi(knn.studyvec, knn.testvec);
  38. //进行KNN分类
  39. knn.classification(knn.studyvec, knn.testvec);
  40. return 0;
  41. }