人工智能实验TF-IDF矩阵
目录
人工智能实验TF-IDF矩阵 1
一、 TF-IDF矩阵表示 1
- 算法原理 1
- 伪代码 2
- 代码展示 4
- 实验结果及分析 7
二、 KNN分类任务 8 - 算法原理 8
- 伪代码 8
- 代码展示 10
- 创新点 14
- 实验结果及分析 16
三、 KNN回归任务 19 - 算法原理 19
- 伪代码 20
- 代码展示 21
- 实验结果及分析 24
- 思考题 27
二、 KNN分类任务 - 算法原理
首先对训练集进行学习。在本题中,训练集的每个数据由两部分组成:文档和标签。文档是一句话,含有多个单词,标签是一个描述情绪的单词,是需要用文档预测的结果。使用KNN进行分类的基本过程是:将文档进行编码,统计文档中的单词。在测试时比较测试样本和训练样本的距离,选取若干个距离最近的训练样本,由这几个训练样本的标签来判断测试样本的标签。具体算法如下:
首先使用TF-IDF矩阵形式编码文档,具体做法参见上文。
同样,读入测试集后,每个测试集样本也用TF-IDF编码表述为向量形式。需要注意的是测试集在计算TF-IDF矩阵时使用的IDF向量应该是通过训练集的出来的IDF,从而保证每个单词在整个文档中的重要程度的一致。将测试样本和训练集样本一一比较,并且选择距离最小的几个。具体选择几个记为变量K,K的取值不同会对模型产生影响,这会在之后的实验结果分析部分讨论。描述训练集和测试集样本距离的方式是Lp距离:
该公式表示向量
x
i
x_i
xi和
x
j
x_j
xj之间的Lp距离,公式内的l表示向量的维度。将两个向量各个维度对应的数值相减后求q次方,再把各个维度的结果加和,最后再开p次方根,就得到了Lp距离的结果。这里的p也是一个可以调整大小的变量,取值在之后的实验结果分析进行讨论。
在找出了K个和测试样本最近的训练样本后,由训练样本的标签决定测试样本的标签。这里采用多数投票的方法,即选取K个训练样本中出现次数最多的那个标签作为结果。
首先要将训练集进行TF-IDF编码。具体做法和上文一样。
在对文档进行编码的同时,也要将文档对应的标签给记录下来:
emt = {}
/* emt即emotion,记录情绪标签。emt为字典,如emt[5]='sad'表示5号文档的标签为sad */
for eachEmt in 全部文档:
emt[当前文档编号] = eachEmt
end
这样一来,就能记录各个文档的TF-IDF编码以及对应的标签emt了。
在测试时,将测试样本进行TF-IDF编码可以不需要读入整个训练集再计算。因为使用的IDF向量已经由训练集得到,每次读取一行,即一个测试样本,直接对其进行距离运算即可。
for i in 全部的训练样本 /* 和全部的训练样本进行比较 */
diff = 0.0 /* diff表示样本距离 */
for eachWord in tf_idf: /* 检索每个单词,如果在当前训练样本或测试样本中出现则更新diff */
if eachWord出现在测试样本或当前训练样本中
then diff += 因eachWord增加的Lp距离项
end
diff = diff ^ (1/p)
end