KNN分类

一、算法思想

1. 首先分别读取训练集和验证集的csv文件数据,分别将数据传到列表sample_list、validation_list,通过两层循环建立无重复词语列表word_list,分别构建训练集和验证集的one_hot矩阵,对每一行的句子的每一个词语,找出词语在word_list出现的下标,在one_hot矩阵相应的对应位置置为1。

2. 采取不同的度量方式,分别有汉明距离、杰卡德距离、余弦相似度、曼哈顿距离、欧式距离,比较不同度量方式的准确率。对于验证集的每一行句子,采用字典结构存储当前句子与训练集所有句子的距离或余弦相似度,字典的key为训练集句子的下标,value为验证集当前句子与训练集句子的距离或者余弦相似度,利用operator模块对字典进行排序(距离按照从小到大排序,余弦相似度从大到小排序),选出前k个作为最终选取的参考,此时结构为列表,每个元素为一个元组,每个元组包含两个元素,第一个为训练集句子下标,第二个为距离或相似度。

3. 对k个列表,以距离为参考,采用字典统计各种情感的比重,key为情感label,value为比重,考虑到距离越近,说明越接近测试数据,因此应该给予更多的权重,所以将距离的倒数的3次方(经过测试,3次方准确率最高)作为该距离的比重添加到对应的情感label,最后选出情感比重最大的label作为最终的结果。

 

二、流程图

KNN分类_第1张图片

 

三、实现

  1. 构造one_hot矩阵

KNN分类_第2张图片

     2. 距离计算方式

曼哈顿距离

KNN分类_第3张图片

欧式距离

KNN分类_第4张图片

余弦相似度

KNN分类_第5张图片

汉明距离

KNN分类_第6张图片

 

杰卡德距离

KNN分类_第7张图片

 

3. 根据k的推荐值计算出最终的情感结果

KNN分类_第8张图片

 

四、评测指标

KNN分类_第9张图片

KNN分类_第10张图片

你可能感兴趣的:(KNN分类)