knnmail.cpp
资源名称:Knn.rar [点击查看]
上传用户:xmhs66
上传日期:2022-07-26
资源大小:989k
文件大小:2k
源码类别:
生物技术
开发平台:
Visual C++
- /************************************************************************
- * * filename: knnmail.cpp
- * * description: K邻近算法实现的分类器,用来区分垃圾邮件。
- * * 1. 先对训练集进行随机的分割,2/3的数据作为"学习"集,
- * * 其余的数据作为"测试"集。
- * * 2. 循环K的值从1到sqrt(学习集记录数)求出错误率最少的
- * * K值。
- * * 3. 用求出的K值对真正的训练集和测试集进行KNN分类。
- * * student: Liwanjun
- * * data: 2010-03-29
- * **********************************************************************/
- #include "knnctl.h"
- #include <iostream>
- #include <vector>
- using namespace std;
- int main()
- {
- string studyfile("训练集.data");
- string testfile("测试集.data");
- Knnctl knn;
- //读取训练集记录
- knn.readFile(studyfile);
- //对训练集进行分割并解析,2/3作为"学习"集,其余作为"测试"集
- knn.divideFile();
- //将分割的学习集和测试集进行[0,1]区间标准化,并产生名字为st_div_study的文件
- knn.standard(knn.studyvec, "st_div_study");
- knn.standard(knn.testvec, "st_div_test");
- //利用分割并标准化后的数据和KNN算法求出错误率最小的K值
- knn.calKno(knn.studyvec, knn.testvec);
- //读取真正的训练集
- knn.readFile(studyfile, knn.studyvec, 0);
- //读取测试集,并进行标准化
- knn.readFile(testfile, knn.testvec, 1);
- knn.standard(knn.studyvec, "sstudy");
- knn.standard(knn.testvec, "stest");
- //计算向量间的距离,默认为欧氏距离;也可以余弦
- knn.calSimi(knn.studyvec, knn.testvec);
- //进行KNN分类
- knn.classification(knn.studyvec, knn.testvec);
- return 0;
- }