特征工程(三):特征缩放,从词袋到 TF

  • 时间:
  • 浏览:1

两者之间的一5个多小区别是,tf-idf可不都可以“拉伸”字数以及“压缩”它。 换句话说,它使就是我数字更大,就是我数字更接近 归零。 就是我,tf-idf可不都可以完整篇 消除无意义的单词。

就是我的像是“magnificently,” “gleamed,” “intimidated,” “tentatively,” 和“reigned,”你一种生活辅助奠定段落基调的词也是很好的选则 。它们表示情绪,这对数据科学家来说将会是非常有价值的信息。 就是我,理想请况下,大伙会倾向突出对有意义单词的表示。





适当的调整提高了所有价值形式集的准确性,就是我所有价值形式集在正则化后进行逻辑回归得到了相近的准确率。tf-idf模型准确率略高,但这点差异将会那么统计学意义。 你一种生活结果是完整篇 神秘的。 将会价值形式缩放效果不如vanilla词袋的效果好,那为你一种生活要那么做呢? 将会tf-idf那么做任何事情,为你一种生活时不必到那么折腾? 大伙将在本章的其余累积中探索答案。

列缩放操作如可影响数据矩阵的列空间和空间? 答案是“是是否是是就是我”。就是我在tf-idf和L2归一化之间一5个多多小小的差别。



该函数将输入的实数x转换为一5个多0到1之间的数。它有一组参数w,表示围绕中点0.5增加的斜率。截距项b表示函数输出穿过中点的输入值。将会sigmoid输出大于0.5,则逻辑分类器将预测为正例,就是我为反例。通过改变w和b,可不都可以控制决策的改变,以及决策响应该点付近输入值变化的时延单位。

测试集上进行价值形式缩放

价值形式缩放的一5个多细微之处是它不到了解大伙在实践中很将会问你的价值形式统计,累似 均值,方差,文档频率,L2范数等。为了计算tf-idf表示,大伙不得不根据训练数据计算逆文档频率,并使用你一种生活统计量来调整训练和测试数据。在Scikit-learn中,将价值形式变换拟合到训练集上最少分派相关统计数据。就是我可不都可以将拟合过的变换应用于测试数据。

你一种生活故事很好地说明了在一般请况下分析价值形式工程的影响的难度。 更改价值形式会影响训练过程和就是我的模型。 线性模型是容易理解的模型。 然而,它仍然不到非常谨慎的实验法子 和小量的深刻的数学知识来区分理论和实际的影响。 对于更僵化 的模型或价值形式转换来说,这是不将会的。

使用python加载和清洗Yelp评论数据集



建立分类数据集

让大伙看看是是是否是是可不都可以使用评论来区分餐厅或夜生活场所。为了节省训练时间,仅使用一累积评论。你一种生活5个多类别之间的评论数目有很大差异。这是所谓的类不平衡数据集。对于构建模型来说,不平衡的数据集处于着一5个多你一种生活的问题:你一种生活模型会把大累积精力花费在比重更大的类上。将会大伙在你一种生活5个多类别是是否是是小量的数据,处里你一种生活你一种生活的问题的一5个多比较好法子 是将数目较大的类(餐厅)进行下采样,使之与数目较小的类(夜生活)数目大致相同。下面是一5个多示例工作流程。

逻辑回归的大多数实现允许正则化。为了使用你一种生活功能,不到指定一5个多正则化参数。正则化参数是在模型训练过程中未自动学习的超参数。相反,大伙不到手动进行调整,并将其提供给训练算法。你一种生活过程称为超参数调整。(有关如可评估机器学习模型的完整篇 信息,请参阅评估机器学习模型(Evaluating Machine Learning Models)).调整超参数的你一种生活基本法子 称为网格搜索:指定一5个多超参数值网格,就是我调谐器以编程法子 在网格中搜索最佳超参数设置 格。 找到最佳超参数设置后,使用该设置对整个训练集进行训练,并比较测试集上你一种生活累似 最佳模型的性能。

价值形式缩放法子 本质上是对数据矩阵的列操作。有点的,tf-idf和L2归一化都将整列(累似 n-gram价值形式)乘上一5个多常数。

将会几块愿因 ,数据矩阵的零空间将会很大。 首先,就是我数据集含晒 彼此非常累似 的数据点。 这使得有效的行空间与数据集中数据的数量相比较小。 其次,价值形式的数量可不都可以远大于数据的数量。 词袋有点擅长创造巨大的价值形式空间。 在大伙的Yelp例子中,训练集含晒 29K条评论,但有47K条价值形式。 就是我,不同单词的数量通常随着数据集中文档的数量而增长。 就是我,去掉 更多的文档不如果降低价值形式与数据比率或减少零空间。

使用默认参数训练逻辑回归分类器



矛盾的是,结果表明最准确的分类器是使用BOW价值形式的分类器。出乎意料大伙之外。事实证明,造成你一种生活请况的愿因 是那么很好地“调整”分类器,这是比较分类器时一5个多常见的错误。

最终的训练和测试步骤来比较不同的价值形式集

在你一种生活例子中,大伙将使用Scikit-learn的CountVectorizer将评论文本转化为词袋。所有的文本价值形式化法子 都依赖于标记器(tokenizer),该标记器才能将文本字符串转换为标记(词)列表。在你一种生活例子中,Scikit-learn的默认标记模式是查找一5个多或更多字母数字字符的序列。标点符号被视为标记分隔符。



使用正则化调整逻辑回归

逻辑回归就是我华而不实。 当价值形式的数量大于数据点的数量时,找到最佳模型的你一种生活的问题被认为是欠定的。 处里你一种生活你一种生活的问题的你一种生活法子 是在训练过程中增加额外的约束条件。 这就是我所谓的正则化,技术细节将在下一节讨论。

使用网格搜索调整逻辑回归超参数









L2归一化后的价值形式结果看起来非常糟糕。 但太少被蒙蔽了 。准确率低是将会正则化参数设置不恰当造成的 - 实际证明次优超参数会得到相当错误的结论。 将会大伙使用每个价值形式集的最佳超参数设置来训练模型,则不同价值形式集的测试精度非常接近。

总而言之,正确的价值形式缩放可不都可以有助分类。 正确的缩放突出了信息性词语,并降低了常见单词的权重。 它可不都可以改善数据矩阵的条件数。 正确的缩放太少一定是统一的列缩放。

大伙还发现了那我价值形式缩放效果:它改善了数据矩阵的条件数,使线性模型的训练时延单位很快。 L2标准化和tf-idf是是否是是你一种生活效果。

本次实践, 大伙依旧采用了Yelp评论数据集。Yelp数据集挑战赛第6轮含晒 在美国5个城市将近一百六十万商业评论。

Tf-idf=列缩放

Tf-idf和L2归一化是是否是是数据矩阵上的列操作。 正如附录A所讨论的那样,训练线性分类器归结为寻找最佳的线性组合价值形式,这是数据矩阵的列向量。 解空间的价值形式是列空间和数据矩阵的空间。训练过的线性分类器的质量直接取决于数据矩阵的零空间和列空间。 大的列空间愿因 价值形式之间几乎那么线性相关性,这通常是好的。 零空间含晒 “新”数据点,不到将其表示为现有数据的线性组合; 大的零空间将会会有你一种生活的问题。(强烈建议希望对诸如线性决策表面,价值形式分解和矩阵的基本子空间等概念进行的回顾的读者阅读附录A。)

创建一5个多分类数据集



用tf-idf转换缩放词袋

你一种生活实验的目标是比较词袋,tf-idf以及L2归一化对于线性分类的作用。注意,做tf-idf接着做L2归一化和单独做L2归一化是一样的。就是我大伙不到只不到5个价值形式集合:词袋,tf-idf,以及逐词进行L2归一化后的词袋。

训练数据包括46,92一5个多不同的单词,这是词袋表示中价值形式的数量。

秩亏行空间和列空间愿因 模型空间预留过度的你一种生活的问题。 线性模型为数据集中的每个价值形式配置权重参数。 将会行和列空间满秩$^1$,那么该模型将允许大伙在输出空间中生成任何目标向量。 当模型不满秩时,模型的自由度比不到的更大。 这使得找出处里方案变得更加棘手。

Tf-Idf: 词袋的小转折

Tf-Idf 是词袋的一5个多小小的转折。它表示词频-逆文档频。tf-idf是是否是是查看每个文档中每个单词的原始计数,就是我查看每个单词计数除以再次出现该单词的文档数量的标准化计数。



让大伙看就是我图片来了解它的具体内容。图4-1展示了一5个多含晒 一5个多的话的简单样例:“it is a puppy,” “it is a cat,” “it is a kitten,” 以及 “that is a dog and this is a pen.” 大伙将你一种生活的话绘制在“puppy”,“cat”以及“is”一5个多词的价值形式空间上。

现在让大伙看看对逆文档频进行对数变换如果,相同5个的话的tf-idf表示。 图4-2显示了相应价值形式空间中的文档。可不都可以注意到,单词“is”被有效地消除,将会它再次出现在该数据集中的所有的话中。另外,单词“puppy”和“cat”都只再次出现在5个的话中的一5个多的话中,就是我现在你一种生活5个多词计数得比如果更高(log(4)=1.38...>1)。就是我tf-idf使罕见词语更加突出,并有效地忽略了常见词汇。它与第3章中基于频率的滤波法子 密切相关,但比放置严格截止阈值更具数学优雅性。

sigmoid函数

当时人面,如图4-2所示,Tf-idf可不都可以生成接近零的缩放因子。 当你一种生活词再次出现在训练集中的小量文档中时,会处于你一种生活请况。 那我的话有将会与目标向量那么很强的相关性。 修剪它可不都可以使模型专注于列空间中的就是我方向并找到更好的处里方案。 准确度的提高将会不必很大,将会很少有噪声方向可不都可以通过你一种生活法子 修剪。

原文发布时间为:2018-12-16

本文作者:机器学习AI算法工程

本文来自云栖社区合作伙伴“ 机器学习AI算法工程”,了解相关信息可不都可以关注“datayx”微信公众号

深入:处于了你一种生活?

为了明白结果身后隐含着你一种生活,大伙不到考虑模型是如可使用价值形式的。对于累似 逻辑回归你一种生活线性模型来说,是通过所谓的数据矩阵的底下对象来实现的。 数据矩阵含晒 以固定长度平面向量表示的数据点。 根据词袋向量,数据矩阵也被称为文档词汇矩阵。 图3-1显示了一5个多向量形式的词袋向量,图4-1显示了价值形式空间中的5个词袋向量。 要形成文档词汇矩阵,只需将文档向量取出,平放,就是我将它们堆叠在一齐。 你一种生活列表示词汇表中所有将会的单词。 将会大多数文档只含晒 所有将会单词的一小累积,就是我该矩阵中的大多数是是否是是零,是一5个多稀疏矩阵。



Tf-Idf的含义

在本例中,大伙手动将逻辑正则化参数的搜索网格设置为{1e-5,0.001,0.1,1,10,1000}。 上限和下限花费了几块尝试来缩小范围。 表4-1给出了每个价值形式集合的最优超参数设置。

将数据集分成比例为7:3的训练集和测试集。在你一种生活例子里,训练集包括29,264条评论,测试集有12542条。

结果太少如预期。Tf-idf和L2归一化不必提高最终分类器的准确度,而不必超出纯词袋。 在获得了就是我统计建模和线性代数处里知识如果,大伙意识到了为你一种生活:大伙都那么改变数据矩阵的列空间。

关于猫和狗的5个的话

通过重采样估计方差

现代统计法子 假设底层数据是随机分布的。 数据导出模型的性能测量也受到随机噪声的影响。 在你一种生活请况下,基于累似 数据的数据集,不止一次进行测量无缘无故比较好的。 这给了大伙一5个多测量的置信区间。 K折交叉验证就是我那我你一种生活策略。 重采样是另你一种生活从相同底层数据集生成多个小样本的技术。 有关重采样的更多完整篇 信息,请参见评估机器学习模型。

价值形式变换



当大伙使用训练统计来衡量测试数据时,结果看起来有点模糊。测试集上的最小-最大比例缩放不再整齐地映射到零和一。L2范数,平均数和方差统计数据都将显得就是我累积。这比缺少数据的你一种生活的问题好就是我。累似 ,测试集将会含晒 训练数据中不处于的单词,就是我对于新的单词那么相应的文档频。通常的处里方案是简单地将测试集中新的单词丢弃。这似乎是不负责任的,但训练集上的模型在任何请况下是是否是是会知道如可处里新词。你一种生活稍微不太好的法子 是明确地学习一5个多“垃圾”单词,并将所有罕见的频率单词映射到它,即使在训练集中也是那么,正如“罕见词汇”中所讨论的那样。

随机抽取10%夜生活场所评论以及2.1%的餐厅评论(选则 最少的百分比使得每个种类的数目大致一样)

5个的话的Tf-idf表示

重点:比较模型时调整超参数

比较模型或价值形式时,调整超参数非常重要。 软件包的默认设置将始终返回一5个多模型。 就是我除非软件在底层进行自动调整,就是我很将会会返回一5个多基于次优超参数设置的次优模型。 分类器性能对超参数设置的敏感性取决于模型和训练数据的分布。 逻辑回归对超参数设置相对稳健(或不敏感)。 即便那么,仍然有必要找到并使用正确的超参数范围。 就是我,一5个多模型相对于那我模型的优点将会仅仅是将会参数的调整,太少能反映模型或价值形式的实际表现。

即使是最好的自动调整软件包仍然不到指定搜索的上限和下限,就是我找到你一种生活限制将会不到几块手动尝试。

在词袋模型中,与价值形式数量相比,列空间相对较小。 在相同的文档中将会会再次出现数目大致相同的词,相应的列向量几乎是线性相关的,这愿因 列空间不像它将会的那样满秩。 这就是我所谓的秩亏。 (就像动物过低维生素B和矿物质一样,矩阵秩亏,输出空间就是我会像应该那样蓬松)。

使用逻辑回归进行分类

逻辑回归是一5个多简单的线性分类器。通过对输入价值形式的加权组合,输入到一5个多sigmoid函数。sigmoid函数将任何实数平滑的映射到介于0和1之间。如图4-3绘制sigmoid函数曲线。将会逻辑回归比较简单,就是我它通常是最先接触的分类器。

测试

Tf-idf通过乘以一5个多常量来转换字数统计价值形式。就是我,它是价值形式缩放的一5个多例子,这是第2章介绍的一5个多概念。价值形式缩贴到 实践中效果有多好? 大伙来比较简单文本分类任务中缩放和未缩放价值形式的表现。 coding时间到!

Tf-idf使罕见的单词更加突出,并有效地忽略了常见单词。

含晒 5个文档7个单词的文档-词汇矩阵

字袋易于生成,但远非完美。假设大伙平等的统计所有单词,就是我不必到的词也会被强调。在第三章提过一5个多例子,Emma and the raven。大伙希望在文档表示中能强调一5个多主要角色。示例中,“Eama”和“raven”都再次出现了3词,就是我“the”的再次出现高达8次,“and”再次出现了次,另外“it”以及“was”也都再次出现了4词。仅仅通过简单的频率统计,一5个多主要角色太少突出。这是有你一种生活的问题的。

在价值形式缩放的请况下,L2和tf-idf对于模型的收敛时延单位我我虽然有有助。 这是该数据矩阵一5个多多更小的条件数的标志。 事实上,L2归一化使得条件数几乎一致。 但请况太少条件数太少,处里方案越好。 在你一种生活实验中,L2归一化收敛比BOW或tf-idf快得多。 但它对过拟合也更敏感:它不到更多的正则化,就是我对优化期间的迭代次数更敏感。

Table4-1.对夜场和餐厅的Yelp评论进行逻辑回归的最佳参数设置



大伙也想测试tf-idf和BOW之间的精度差异是是是否是是是将会噪声造成的。 为此,大伙使用k折交叉验证来模拟具有多个统计独立的数据集。它将数据集分为k个折叠。交叉验证过程通过分割后的数据进行迭代,使用除除去某一折之外的所有内容进行训练,并用那一折验证结果。Scikit-Learn中的GridSearchCV功能通过交叉验证进行网格搜索。 图4-4显示了在每个价值形式集上训练的模型的精度测量分布箱线图。 盒子中线表示中位精度,盒子你一种生活表示四分之一和四分之三分位之间的区域,而线则延伸到剩余的分布。

可不都可以通过价值形式缩放来处里数据矩阵的不满秩你一种生活的问题吗? 让大伙来看看。



将会该向量与目标输出不相关,那么这将有效地修剪掉噪声信号,这是一件好事。 这是tf-idf和L2归一化之间的关键区别。 L2归一化永远不必计算零的范数,除非该向量含晒 全零。 将会向量接近零,那么它的范数也接近于零。 按照小规范划分将突出向量并使其变大。

总结

在本章中,大伙使用tf-idf作为入口点,完整篇 分析价值形式变换如可影响(或不)模型。Tf-idf是价值形式缩放的一5个多例子,就是我大伙将它的性能与那我价值形式缩放法子 -L2标准化进行了对比。