未验证 提交 a798bd80 编写于 作者: Hhhy云帆's avatar Hhhy云帆 提交者: GitHub

Update 4.特征缩放的效果:从词袋到 TF-IDF.md

上级 10e574b1
# 第四章 特征缩放的效果:从词袋到 TF-IDF
字袋易于生成,但远非完美。假设我们平等的统计所有单词,有些不需要的词也会被强调。在第三章提过一个例子,Emma and the raven。我们希望在文档表示中能强调两个主要角色。示例中,“Eama”和“raven”都出现了3词,但是“the”的出现高达8次,“and”出现了次,另外“it”以及“was”也都出现了4词。仅仅通过简单的频率统计,两个主要角色并不突出。这是有问题的。
词袋易于生成,但在某些场景下还不是很完美。假设我们平等的统计所有单词,有些不需要的词也会被强调。在第三章提过一个例子,Emma和那只乌鸦。我们希望在文档表示中能强调两个主要角色。示例中“Eama”和“raven”都出现了3次,但是“the”的出现高达8次,“and”出现了5次,另外“it”以及“was”也都出现了4词。仅仅通过简单的频率统计,两个主要角色在其中并不突出。这样表述是有问题的。
其他的像是“magnificently,” “gleamed,” “intimidated,” “tentatively,” 和“reigned,”这些辅助奠定段落基调的词也是很好的选择。它们表示情绪,这对数据科学家来说可能是非常有价值的信息。 所以,理想情况下,我们会倾向突出对有意义单词的表示。
挑选出像“magnificently,” “gleamed,” “intimidated,” “tentatively,” 和“reigned,”这些辅助奠定段落基调的词也是不错的选择。它们表示情绪,这对数据科学家来说可能是非常有价值的信息。 所以,在理想情况下,我们会倾向并突出对有意义单词的表示。
## Tf-Idf: 词袋的小转折
Tf-Idf 是词袋的一个小小的转折。它表示词频-逆文档频。tf-idf不是查看每个文档中每个单词的原始计数,而是查看每个单词计数除以出现该单词的文档数量的标准化计数。
Tf-Idf 是词袋的一个小小的转折。它表示词频-逆文本频率指数。tf-idf不是查看每个文档中每个单词的原始计数,而是查看每个单词计数除以出现该单词的文档数量的标准化计数。
![](../images/chapter4/latex1.png)
N代表数据集中所有文档的数量。分数![](../images/chapter4/latex2.png)就是所谓的逆文频率。如果一个单词出现在许多文档中,则其逆文档频率接近1。如果单词出现在较少文档中,则逆文档频率要高得多。
N代表数据集中所有文档的数量。分数![](../images/chapter4/latex2.png)就是所谓的逆文频率。如果一个单词出现在许多文档中,则其逆文档频率接近1。如果单词出现在较少文档中,则逆文档频率要高得多。
或者,我们可以对原始逆文档频率进行对数转换,可以将1变为0,并使得较大的数字(比1大得多)变小。(稍后更多内容)
......@@ -35,7 +35,7 @@ N代表数据集中所有文档的数量。分数![](../images/chapter4/latex2.p
## Tf-Idf的含义
Tf-idf使罕见的单词更加突出,并有效地忽略了常见单词。
Tf-idf使稀有词更加突出,并有效地忽略了常见单词。
## 测试
......@@ -108,11 +108,11 @@ test_data.shape
这个实验的目标是比较词袋,tf-idf以及L2归一化对于线性分类的作用。注意,做tf-idf接着做L2归一化和单独做L2归一化是一样的。所以我们需要只需要3个特征集合:词袋,tf-idf,以及逐词进行L2归一化后的词袋。
在这个例子中,我们将使用Scikit-learn的CountVectorizer将评论文本转化为词袋。所有的文本特征化方法都依赖于标记器(tokenizer),该标记器能够将文本字符串转换为标记(词)列表。在这个例子中,Scikit-learn的默认标记模式是查找2个或更多字母数字字符的序列。标点符号被视为标记分隔符。
在这个例子中,我们将使用scikit-learn的CountVectorizer将评论文本转化为词袋。所有的文本特征化方法都依赖于标记器(tokenizer),该标记器能够将文本字符串转换为标记(词)列表。在这个例子中,scikit-learn的默认标记模式是查找2个或更多字母数字字符的序列。标点符号被视为标记分隔符。
## 测试集上进行特征缩放
特征缩放的一个细微之处是它需要了解我们在实践中很可能不知道的特征统计,例如均值,方差,文档频率,L2范数等。为了计算tf-idf表示,我们不得不根据训练数据计算逆文档频率,并使用这些统计量来调整训练和测试数据。在Scikit-learn中,将特征变换拟合到训练集上相当于收集相关统计数据。然后可以将拟合过的变换应用于测试数据。
特征缩放的一个细微之处是它需要了解我们在实践中很可能不知道的特征统计,例如均值,方差,文档频率,L2范数等。为了计算tf-idf表示,我们不得不根据训练数据计算逆文档频率,并使用这些统计量来调整训练和测试数据。在scikit-learn中,将特征变换拟合到训练集上相当于收集相关统计数据。然后可以将拟合过的变换应用于测试数据。
### 样例4-3:特征变换
......@@ -135,7 +135,7 @@ X_tr_l2 = preproc.normalize(X_tr_bow, axis=0)
X_te_l2 = preproc.normalize(X_te_bow, axis=0)
```
当我们使用训练统计来衡量测试数据时,结果看起来有点模糊。测试集上的最小-最大比例缩放不再整齐地映射到零和一。L2范数,平均数和方差统计数据都将显得有些偏离。这比缺少数据的问题好一点。例如,测试集可能包含训练数据中不存在的单词,并且对于新的单词没有相应的文档频。通常的解决方案是简单地将测试集中新的单词丢弃。这似乎是不负责任的,但训练集上的模型在任何情况下都不会知道如何处理新词。一种稍微不太好的方法是明确地学习一个“垃圾”单词,并将所有罕见的频率单词映射到它,即使在训练集中也是如此,正如“罕见词汇”中所讨论的那样。
当我们使用训练统计来衡量测试数据时,结果看起来有点模糊。测试集上的最小-最大比例缩放不再整齐地映射到0和1。L2范数,平均数和方差统计数据都将显得有些偏离。这比缺少数据的问题要好一点。例如,测试集可能包含训练数据中不存在的单词,并且对于新的单词没有相应的文档频。通常的解决方案是简单地将测试集中新的单词丢弃。这似乎是不负责任的,但训练集上的模型在任何情况下都不会知道如何处理新词。一种稍微不太好的方法是明确地学习一个“垃圾”单词,并将所有罕见的频率单词映射到它,即使在训练集中也是如此,正如“稀有词”中所讨论的那样。
## 使用逻辑回归进行分类
......@@ -171,7 +171,7 @@ m3 = simple_logistic_classify(X_tr_tfidf, y_tr, X_te_tfidf, y_te, 'tf-idf')
逻辑回归有些华而不实。 当特征的数量大于数据点的数量时,找到最佳模型的问题被认为是欠定的。 解决这个问题的一种方法是在训练过程中增加额外的约束条件。 这就是所谓的正则化,技术细节将在下一节讨论。
逻辑回归的大多数实现允许正则化。为了使用这个功能,必须指定一个正则化参数。正则化参数是在模型训练过程中未自动学习的超参数。相反,他们必须手动进行调整,并将其提供给训练算法。这个过程称为超参数调整。(有关如何评估机器学习模型的详细信息,请参阅评估机器学习模型(Evaluating Machine Learning Models)).调整超参数的一种基本方法称为网格搜索:指定一个超参数值网格,并且调谐器以编程方式在网格中搜索最佳超参数设置 格。 找到最佳超参数设置后,使用该设置对整个训练集进行训练,并比较测试集上这些同类最佳模型的性能。
逻辑回归的大多数实现允许正则化。为了使用这个功能,必须指定一个正则化参数。正则化参数是在模型训练过程中并没有自动学习的超参数。相反,他们必须手动进行调整,并将其提供给训练算法。这个过程称为超参数调整。(有关如何评估机器学习模型的详细信息,请参阅评估机器学习模型(Evaluating Machine Learning Models)).一种基本调整超参数的方法称为网格搜索:指定一个超参数值网格,并且调谐器以编程方式在网格中搜索最佳超参数设置格。 找到最佳超参数设置后,使用该设置对整个训练集进行训练,并比较测试集上这些同类最佳模型的性能。
## 重点:比较模型时调整超参数
......@@ -376,17 +376,16 @@ Tf-idf和L2归一化都是数据矩阵上的列操作。 正如附录A所讨论
结果并不如预期。Tf-idf和L2归一化不会提高最终分类器的准确度,而不会超出纯词袋。 在获得了一些统计建模和线性代数处理知识之后,我们意识到了为什么:他们都没有改变数据矩阵的列空间。
两者之间的一个小区别是,tf-idf可以“拉伸”字数以及“压缩”它。 换句话说,它使一些数字更大,其他数字更接近
归零。 因此,tf-idf可以完全消除无意义的单词。
两者之间的一个小区别是,tf-idf可以“拉伸”字数以及“压缩”它。 换句话说,它使一些数字更大,其他数字更接近零。 因此,tf-idf可以完全消除无意义的单词。
我们还发现了另一个特征缩放效果:它改善了数据矩阵的条件数,使线性模型的训练速度更快。 L2标准化和tf-idf都有这种效果。
总而言之,正确的特征缩放可以有助于分类。 正确的缩放突出了信息性词语,并降低了常见单词的权重。 它还可以改善数据矩阵的条件数。 正确的缩放并不一定是统一的列缩放。
这个故事很好地说明了在一般情况下分析特征工程的影响的难度。 更改特征会影响训练过程和随后的模型。 线性模型是容易理解的模型。 然而,它仍然需要非常谨慎的实验方法和大量的深刻的数学知识来区分理论和实际的影响。 对于更复杂的模型或特征转换来说,这是不可能的。
这个故事很好地说明了在一般情况下来分析影响特征工程的难度。 更改特征会影响训练过程和随后的模型。 线性模型是容易理解的模型。 然而,它仍然需要非常谨慎的实验方法和大量的深刻的数学知识来区分理论和实际的影响。 对于更复杂的模型或特征转换来说,这是不可能的。
参考书目
Strang, Gilbert. 2006. Linear Algebra and Its Applications. Brooks Cole Cengage, fourth edition.
$^1$ 严格地说,矩阵矩阵的行空间和列空间不能都是满秩的。 两个子空间的最大秩是m(行数)和n(列数)中的较小者。 这就是我们所说的满秩。
$^1$ 严格地说,矩阵的行空间和列空间不能都是满秩的。 两个子空间的最大秩是m(行数)和n(列数)中的较小者。 这就是我们所说的满秩。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册