machine-learning - 多类文本分类(使用 TFIDF 和 SVM)。如何实现一个反馈可能属于多个类的场景?
问题描述
我有一个需要标记(分类)的原始反馈文件,然后作为 SVM 分类器(或任何分类器)的训练输入。
但问题是,我不会将整个反馈分配给某个类别。根据它所谈论的主题,一个反馈可能属于多个类别(提取了名词 n-gram)。所以,我标记的是主题(术语)而不是反馈(文档)。因此,我使用 TFIDF 提取了 n-gram,同时保存了它们的特征,这样我就可以训练我的模型了。问题在于,使用 tfidf,它返回一个文档项矩阵,即 train_x,但另一方面,我有 train_y;分配给每个 n-gram(不是整个文档)的标签。因此,我最终得到了一个文档到频率矩阵,其中包含 x 行数(文档数)与 y 数 n-grams(没有提取的唯一主题)的标签。
下面是数据的样例。蓝色是 n-gram(由 TFIDF 提取),而红色是标签/类别(使用我手动制作的函数为每个 n-gram 计算)。
这是我实现概念的策略,而不是编写代码:
问题在于 TFIDF 产生的那部分x_train = tf.Transform(feedbacks)
,这是一个文档术语矩阵,它作为分类器的输入是没有意义的y_train
,它是术语而不是文档的标签。我试图转置矩阵,它给了我一个错误。我尝试直接输入仅包含术语特征值的一维数组,这也给了我一个错误,因为分类器期望 X 是一种(sample, feature)
格式。我正在使用 Sklearn 的 SVM 和 TfidfVectorizer 版本。
简而言之,我希望能够在术语列表(n-gram)上使用 SVM 分类器对标签列表进行训练以训练模型,然后测试新数据(在清理和提取其 n-gram 之后)以供 SVM 预测其标签。
该解决方案可能是一个非常技术性的事情,例如使用另一个期望不同格式的分类器,或者不使用 TFIDF,因为它以文档为中心(引用)甚至更广泛,方法和概念的整体改变(如果它是错误的)。
如果有人可以提供帮助,我将不胜感激。
解决方案
推荐阅读
- jquery - 打开关闭按钮并显示消息
- javascript - 使用刻度函数的 setTimout 中的 A-FRAME setTimeout
- mysql - SQL字符串转义防止sql注入
- vue.js - 在编辑模式下通过_id跟踪时未选择vue多选
- python - Python3 记忆游戏随机洗牌图像
- spring-session - 使用 Spring Session JDBC 数据库关闭时获取 tomcat 白色错误页面
- javascript - “session.id”在客户端不可用
- neo4j - 我应该如何将此 neo4j Cypher/Apoc 负载转换为 neo4j-admin 导入?
- node.js - 是否可以区分离线服务器/离线服务?
- snowflake-cloud-data-platform - 禁用 Snowflake 的所有数据导出?