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

时间:2016-11-12 16:32:01

标签: python machine-learning scikit-learn

我是机器学习算法的新手。我广泛阅读了scikit学习网站和其他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)?我明白分数是预测模型的准确性。然后,当你根据每个变量得到所有预测时,你是否平均所有这些变量?最后,我正在使用多个输出,我猜它不是问题,因为我可以得到每个输出的预测(btw predict_proba(X)给我一个类似[array([[0 。,1。]]),数组([[0.2,0.8]]).....]随机森林树分类器。我猜其中一个数字是输出的概率,但我没有' t探索了这个!)

2 个答案:

答案 0 :(得分:0)

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

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

希望有所帮助。

按上述更新编辑

是的,在这种情况下你可以使用predict_proba,但是如果一切都正确缩放,并且你使用1/0作为你的目标,你不需要predict_proba。我们的想法是从单词中进行预测并将其与其他变量结合起来。您没有对预测进行平均,您可以根据预测做出预测!这称为集合学习。使用预测输出作为特征训练另一个模型。以下是您需要做的事情。enter image description here

答案 1 :(得分:0)

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

  1. 根据单词进行预测,并且对于训练集(t1)的每个单词包,你都会得出一个"情感"
  2. 为每个训练集行创建一个新数组,其中包含情绪和其他值 - >新训练集(t2)
  3. 根据t2进行预测。
  4. 将之前的步骤应用于测试。
  5. 还有一个问题!

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