格式化和组合词频与其他数据机器学习python

Posted

技术标签:

【中文标题】格式化和组合词频与其他数据机器学习python【英文标题】:Formatting and combining word frequency with other data machine learning python 【发布时间】:2017-03-26 16:34:51 【问题描述】:

我是机器学习算法的新手。我广泛阅读了 scikit learn 网站和其他 SO 帖子,这使我使用 RandomForestClassifier 和 LinearSVC 构建了我的第一个机器学习算法。

我正在写病历。患者的每次住院都与(或不)与并发症(出血、感染、心脏病发作......)相对应的代码相关联(或不相关)

使用注释,使用 Countvectorizer 和 tfidfTransformer 进行拟合和转换,我可以准确地预测大部分代码。但是,我想在我的训练数据集中添加更多数据:住院时间、手术次数、手术名称、ICU 住院时间……等等……

在解析网络和 SO 之后,我最终将所有连续/二进制/缩放值添加到我的词频数组中。

例如:[0,0,0.34,0,0.45,0, 2, 45](最后 2 个数字是相加数据,而前一个数字匹配 countvectorizer 和 tfdif.fit_transform(train_set)

但是,在我看来,这似乎是一种粗略的数据组合方式,大量的单词可能会掩盖其他数据。

我尝试将我的数据设置为:[[0,0,0.34,0,0.45,0],[2],[45]],但它不起作用。

我搜索了网络,但没有真正的线索,即使我可能不是第一个遇到这个问题的人......:p

感谢您的帮助

编辑:

感谢您提供详细的宝贵答案。我真的很感激。但是,0-1 的范围究竟是什么:它是 predict_proba 值 (http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier.predict) 吗?我明白分数是预测模型的准确性。然后,当您根据每个变量进行所有预测时,您是否对所有预测进行平均?最终,我正在处理多个输出,我想这不是问题,因为我可以得到每个输出的预测(顺便说一句 predict_proba(X) 给我一个像 [array([[0.,1.]] ), array ([[0.2,0.8]]).....] 带有随机森林树分类器。我猜其中一个数字是输出的概率,但我还没有探索过这个!)

【问题讨论】:

【参考方案1】:

您的第一个解决方案是添加到列表中是正确的解决方案。但是,您应该考虑一下这意味着什么。如果您有 100 个单词并添加了两个附加功能,则每个特定单词将获得与添加的功能相同的“权重” - IE - 您添加的功能在模型中不会受到非常强烈的对待。此外,您是说最后一个值为 45 的特征是从末尾算起第 4 个特征的值 (0.45) 的 100 倍。

解决此问题的一种常见方法是使用集成模型。与其将这些特征添加到您的单词列表中并进行预测,不如先构建一个仅使用这些单词的预测模型。该预测将在 0-1 范围内,并将捕捉文章的“情绪”。然后,缩放其他变量(最小最大缩放器、正态分布等)。最后,将单词的分数与最后两个缩放变量结合起来,并在这样的列表上运行另一个预测 [.86,.2,.65]。通过这种方式,您已将所有单词转换为情感分数,您可以将其用作特征。

希望对您有所帮助。

根据以上更新进行编辑

是的,在这种情况下,您可以使用 predict_proba,但实际上,如果一切都正确缩放,并且您使用 1/0 作为您不需要 predict_proba 的类的目标。这个想法是从单词中获取预测并将其与其他变量结合起来。你不平均预测,你从预测中做出预测!这称为集成学习。使用您的预测输出作为特征来训练另一个模型。这是您需要做的流程。

【讨论】:

感谢您详细的宝贵回答。我真的很感激。我编辑了第一篇关于预测数组的问题。 非常感谢,我添加了另一个答案(如下)。我真的不明白你是如何计算“情绪”的!【参考方案2】:

感谢您的宝贵时间和详细的回答。我想我明白了。简而言之:

    基于单词的预测,对于训练集 (t1) 的每一包单词,你拉出一个“情绪” 使用情绪和其他值为每个训练集行创建一个新数组->新训练集 (t2) 根据 t2 进行预测。 将之前的步骤应用于测试。

还有一个问题!

什么是“情绪”值?!对于每个词袋,我有一个稀疏矩阵(countvectorizer+tf_idf)。那么如何计算情绪呢?您是否在测试的其余部分再次运行测试的每一行?你的情绪是 clf.predict(X) 值吗?

【讨论】:

情绪只是你所预测的一切的简写。如果您正在预测心力衰竭,那么您的模型对给定的词袋案例预测心力衰竭的信心。您可以通过输入矩阵作为案例来预测情绪,如果在这种情况下存在心力衰竭或不存在“分类器 1”,则提供一个长度为 0 或 1 的单独列表。这可能是任何类型的分类器,但您提到了随机森林和线性svc。 好的,我明白你的意思。我想不通的是:我有一个带有单词的训练数据集和一个事件(1/0)。正确的。我训练我的数据集对新的词袋进行预测,并根据词袋得到事件的预测概率。正确的。但是在您的模式中,我知道您对训练数据集的每一行都有预测。因此,您暗示对于您正在训练数据集的每一行,您正在运行您的预测模型以获取每个词袋的情绪(即预测)。您之前定义为“您根据预测做出预测”。

以上是关于格式化和组合词频与其他数据机器学习python的主要内容,如果未能解决你的问题,请参考以下文章

机器学习案例 特征组合——高帅富 冷启动——从微博等其他渠道搜集数据进行机器学习 用户年龄——线性分段处理

[机器学习与scikit-learn-43]:特征工程-特征提取(编码)-2-什么是特征提取以及文本词频向量

机器学习之路: python 实践 提升树 XGBoost 分类器

组合数据类型,英文词频统计 python

机器学习入门-贝叶斯统计语料库的词频.groupby() collections

python机器学习——自适应线性神经元