Environment:Ubuntu16.04 + tensorflow1.6 + python3.5 + cuda9.0 + cuDNN7.1 (NVIDIA GeForce GTX 960M)
KNN(K-Nearest Neighbor)算法, KNN算法的训练过程相对比较容易,精度也比较高,对异常值不敏感、无数据输入假定。它的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.
-
训练集和测试集的比例是8:2,因为一般数据量比较小(万以下)的情况下,比较合适的比例是7:3,而HTRU_2数据集共有将近1万8千条数据,故我提高了一些训练集的比例,最终选择尝试4:1的比例.
-
使用panda对cvs文件处理。首先计算训练样本和测试样本中每个样本点的距离,其中,我对距离的定义方式为:两个向量对应的数据相减取绝对值,最后再相加,对上面所有的距离值进行排序,然后取最近的距离。(another way: 两个向量对应的数据相减后平方,再相加)
-
最终运行了多遍程序,得到了准确率96%.
将正负样本分开,因为正样本的数量比较少,取得测试集和训练集的比例是0.15。然后为了检测训练集的正负样本比例对分类系统的影响,将正负样本的比例分别从1:1开始测试,直到1:7,探究正负样本的比例对分类系统的影响.
--------比例是1:1的时候,F1的值约为25%
--------比例是1:2的时候,F1的值约为55%
--------比例是1:3的时候,F1的值约为65%
--------比例是1:4的时候,F1的值约为71%
--------比例是1:5的时候,F1的值约为75%
--------比例是1:6的时候,F1的值约为76%
--------比例是1:7的时候,F1的值约为77%
每一个比例都跑10次,去掉最高和最低的取平均数,做成了一个对比表格,可以发现一开始比例缩小的时候,F1的值提高的很明显,但是缩小到一定程度的时候,F1的值慢慢趋于平稳,保持在77%左右