[特征工程]Chap4. 特征缩放:TF-IDF

本文探讨了TF-IDF作为BOW的变种如何通过特征缩放提升文本分类效果。TF-IDF通过逆文档频率赋予词语权重,降低常见词汇的影响。实验表明,TF-IDF在分类准确率上略有优势,但不会显著提升。深入分析揭示,特征缩放有助于减轻维度灾难,尤其是在稀疏矩阵中减少冗余信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章通过BOW 到tf-idf的变化,讨论 feature scaling 的效果.

TF-IDF: BOW的变种

tf-idf可以说就是BOW基础上的变种, 全称: term frequency- inverse document frequency ,中文: 词频-逆文件频率.

BOW记录文件中的词频, 明显的问题就是会强调一些没意义的词, 如英文中的 'the' 'and' 'it' 等等词频会很高, 而一些带有关键信息的词却没有被强调出来. 而逆文件频率就很好的解决了这一问题, 这个算法有意思的就是在于以一种高效自动的方式给 各种词的重要性 赋权重.

基础公式如下:

bow(w,b) = #times word w appears in document d

tf-idf(w,d) = bow(w,d) * N/ (#documents in which word w appears)

其中 N 是数据集中文档的数量,  N/(#documents in which word w appears) 就是IDF, 逆文档频率. 若 idf 接近1, 意味着这个词w出现在大部分文档中; 若词w仅出现在几个文档中, idf 就会很高.

当然, log transform 是更好的选择:

tf-idf(w,d) = bow(w,d) * log N/ (#documents in which word w appears)

总结一下: tf-idf makes rare words more prominent and effectively ignores common words. 这类似上一章讲的手工取除高频词, 但是在数学比人工设定个阈值要精致的多. 

验证tf-idf的效果

直觉上理解起来tf-idf的效果应该比BOW要好的多, 但是, 实践出真知. 所以简单的方式是拿一个数据集用BOW, BOW的正则化, tf-idf 做一个文本分类来对比一下效果

简单说一下步骤吧, 这里时间原因略写.

  1. 选择, 划分数据集
  2. 提取特征:  BOW        BOW+l2 norm         tf-idf
  3. 特征缩放 (tf-idf本质上就是BOW的特征缩放)这里有几点值得一提: 我们是使用训练集的概率统计来对测试集的数据进行缩放, 这会是结果有些不好看. Min-max scaling的时候测试集不会被映射到0到1间. 对于测试集中新出现的词, 没有对应的文档频率统计, 通常方法是直接不要了, 或者像上一章解决rare word时将这种低频词全都映射进一个专门的'garbage'词类中.
  4. 简单的LR分类+ regularization
  5. 调参, 要对几种方式分别调参到最有结果再进行模型比较

直接看结果吧:


事实证明, tf-idf的分类准确率仅稍微高一点点, 难道特征缩放不比普通的BOW好吗? 那为什么还有加个权重呢...接下来就深入分析一下

深入分析

首先, BOW这类的特征形式一个稀疏的, 每个文档对应的'fixed-length flat vector' 定长扁平向量中, 大部分都是0(因为大部分文档只含有全部可能词的很小的子集). 数据集因此构成了 [document , term] 的 稀疏矩阵.

其次, 特征缩放本质上是对数据矩阵的列变换, tf-idf 和 l2 normalization 都是对列向量乘以常数.

下面来一点线性代数的知识了.先看一下我们的data matrix, size是 [n = #documents, m = #features], 显而易见, 不同词的数量肯定是多余文档数量的, 一般来说有n<m. 那我们的矩阵就是一个 宽而扁的长方形. 

这就导致了 rank deficiencyWhat is rank deficiency, and how to deal with it? (这也是维度灾难的表现吗?)

首先, n(n<m)个数据点肯定是无法描绘m维的向量空间的, 而且在n个数据点中还存在类似/重复的点(线性相关性), 这些都导致了rank deficiency. 其次, 数据的中心化和标准化可以帮助减少rank deficiency的问题(如对一个full rank 矩阵全部entries加1e12, 矩阵就变奇异了,待深入).

也就是这个原因影响了模型的效果, 那么特征缩放能不能帮助解决rank deficiency呢?

特征缩放不会改变列空间的rank, 也不会改变null space 的rank. 但是, 但标量为0时, 一整列的entries都变0,相当于变相减少了列空间维度. 而这正是tf-idf的关键, 通过将这些接近为0的列剪去, 能让模型找重心转向特征空间的其他方向 而找到更好的解. 但是,准确率不会提升明显,  因为剪去的列向量不会有什么噪音.


总结

正确的特征缩放可以

  1. 提升分类水平
  2. 强调有含义的词, 轻视常见的词
  3. 改善一下维度灾难的影响
-- A start job for unit iscsi.service has finished with a failure. -- -- The job identifier is 2343 and the job result is failed. Apr 01 15:59:31 iscsi systemd[1]: Starting Login and scanning of iSCSI devices... -- Subject: A start job for unit iscsi.service has begun execution -- Defined-By: systemd -- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- A start job for unit iscsi.service has begun execution. -- -- The job identifier is 2537. Apr 01 15:59:31 iscsi iscsiadm[22805]: iscsiadm: default: 1 session requested, but 1 already present. Apr 01 15:59:31 iscsi iscsiadm[22805]: iscsiadm: default: 1 session requested, but 1 already present. Apr 01 15:59:31 iscsi iscsiadm[22805]: iscsiadm: default: 1 session requested, but 1 already present. Apr 01 15:59:31 iscsi iscsiadm[22805]: iscsiadm: default: 1 session requested, but 1 already present. Apr 01 15:59:31 iscsi iscsiadm[22805]: iscsiadm: Could not log into all portals Apr 01 15:59:31 iscsi systemd[1]: iscsi.service: Main process exited, code=exited, status=15/n/a -- Subject: Unit process exited -- Defined-By: systemd -- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- An ExecStart= process belonging to unit iscsi.service has exited. -- -- The process' exit code is 'exited' and its exit status is 15. Apr 01 15:59:31 iscsi systemd[1]: iscsi.service: Failed with result 'exit-code'. -- Subject: Unit failed -- Defined-By: systemd -- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- The unit iscsi.service has entered the 'failed' state with result 'exit-code'. Apr 01 15:59:31 iscsi systemd[1]: Failed to start Login and scanning of iSCSI devices. -- Subject: A start job for unit iscsi.service has failed -- Defined-By: systemd -- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel -- -- A start job for unit iscsi.service has finished with a failure. -- -- The job identifier is 2537 and the job result is failed.
最新发布
04-02
<think>好的,我现在要解决用户提到的iscsi.service启动失败的问题,错误信息是exit-code 15,并且提示iscsiadm无法登录所有门户。首先,我需要回顾一下用户提供的引用内容,特别是引用[2]和[3],因为它们涉及iscsiadm命令和ACL配置。 首先,引用[2]显示用户曾经成功登出iscsi目标,但问题现在发生在启动时登录失败。可能的原因包括目标不可达、认证问题或配置错误。引用[3]提到不同主机验证不通过时需要将主机的initiatorname.iscsi中的WWNN添加到目标的ACL列表中,这可能是一个关键点。 接下来,我需要考虑可能的原因和对应的检查步骤。首先检查网络连通性,确保iSCSI目标IP和端口可达。然后检查iscsiadm的配置是否正确,包括目标IQN、IP和端口。接着,检查ACL设置,确认initiator的WWNN是否被允许访问目标。此外,查看日志文件,如journalctl或/var/log/messages,以获取更详细的错误信息。 另外,系统单元启动失败可能有依赖性问题,检查iscsi.service的依赖是否正确安装和启动,比如iscsid.service。最后,可能需要重新发现目标或更新节点信息,以确保配置是最新的。 需要逐步指导用户执行这些检查步骤,确保每一步都清晰易懂,并针对可能的错误提供解决方案。同时,结合用户提供的引用内容,强调ACL配置的重要性,并提醒检查initiatorname.iscsi文件中的名称是否正确,以及是否正确添加到目标的ACL中。</think>### iSCSI服务启动失败解决方案 针对iscsi.service启动失败并报错"exit-code 15"的问题,按照以下步骤排查: 1. **检查网络连通性** - 使用命令验证目标端口可达性: ```bash telnet 172.25.254.238 3260 ``` 若连接失败,需检查防火墙规则: ```bash firewall-cmd --list-all | grep 3260 ``` 若未开放端口,需执行: ```bash firewall-cmd --add-service=iscsi-target --permanent firewall-cmd --reload ``` 2. **验证iSCSI配置** - 检查发现门户配置: ```bash iscsiadm -m discovery -t st -p 172.25.254.238 ``` 输出应包含类似内容: ``` 172.25.254.238:3260,1 iqn.2018-06.com.example:storagel ``` 3. **检查ACL配置** 根据引用[3],确认客户端启动器名称已添加到目标服务器ACL: - 查看本机启动器名称: ```bash cat /etc/iscsi/initiatorname.iscsi ``` 输出示例: ``` InitiatorName=iqn.2023-09.com.example:client1 ``` - 在目标服务器配置中添加该IQN到ACL列表 4. **手动登录验证** 使用引用[2]中的命令测试手动登录: ```bash iscsiadm -m node -T iqn.2018-06.com.example:storagel -p 172.25.254.238 -l ``` 若失败,观察具体报错: - CHAP认证失败:检查`/etc/iscsi/iscsid.conf`中的用户名密码 - 目标不存在:确认目标IQN正确性 5. **查看详细日志** ```bash journalctl -u iscsi.service -xe ``` 重点关注包含"Could not log into all portals"的上下文信息 6. **服务依赖检查** 验证依赖服务状态: ```bash systemctl status iscsid.service ``` 若未运行,需先启动: ```bash systemctl start iscsid && systemctl enable iscsid ``` **典型解决方案流程**: ```bash # 刷新节点信息 iscsiadm -m node --op=delete -T iqn.2018-06.com.example:storagel iscsiadm -m discovery -t st -p 172.25.254.238 iscsiadm -m node -T iqn.2018-06.com.example:storagel -p 172.25.254.238 -l # 确认成功后重启服务 systemctl restart iscsi ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值