Python scikit-learn 从说话者的句子中选择最好的单词

标签 python scikit-learn

我正在尝试在包含两个说话者的句子的数据库上使用 scikit-learn 函数 SelectKBest。 我的目标是找到 30 个最好的单词,可以作为区分这两个说话者的特征,我想将其打印到屏幕上。

这些句子存储在一个列表sentences[]中,我有每个句子的说话者是谁的信息(存储在另一个列表speakers[]中) >)

我还需要为这 K 个最佳特征创建向量,并能够在这些向量上使用分类器。

当前代码:(每个说话人的句子包含 10000 个句子,已排序)

speakers = [0] * 10000 + [1] * 10000
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(sentences)

kbest = SelectKBest(chi2, k=30).fit(vectors, speakers)
outcome = kbest.get_support()
for i in range(0,len(sentences)):
    if outcome[i]:
        print (sentences[i])

我不确定它是否找到正确的单词或选择整个句子,并且我不太确定如何打印它找到的单词(如果找到)。 (目前,它显然会打印整个句子,因为我直接打印一个与 SelectKBest 找到的索引匹配的句子)。

我可能需要在特征向量的第 i 个位置找到单词,但我不知道该怎么做。

最佳答案

你的代码是错误的。你正在这样做:

outcome = kbest.get_support()
for i in range(0,len(sentences)):
    if outcome[i]:
        print (sentences[i])

kbest.get_support() 将返回数据特征的 bool 数组,而不是句子。但是您正在句子数组上比较(迭代)它们,这没有任何意义。

SelectKBest 将根据传入的实际特征来决定保留或不保留哪些特征。这些特征以单词(而不是句子)的形式从 TfidfVectorizer 传递到其中。

此外,带有 chi2SelectKBest 只会过滤(删除)那些被发现与类无关的功能。所以剩下的特征对类有一些影响。但要确定这种影响是正面的还是负面的(如你所愿)(找到 30 个最好的单词可以作为区分这两个说话者的特征),这还不够。为此,您需要有一个分类模型,可以为与该类别相对应的那些单词(特征)分配权重。

有关更多详细信息,请参阅此处的示例:

关于Python scikit-learn 从说话者的句子中选择最好的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53696034/

相关文章:

python - 支持向量回归多输出

python - 在数据预处理期间使用 toarray() 和 onehotencoding

python - 使用 for 和 while 循环编写质数函数的最 Pythonic 方法是什么?

python - 在 RandomForestRegressor sklearn 中绘制特征重要性

python - sklearn.model_selection.train_test_split 示例中的 "random-state"是什么?

python - 使用 scikit 学习的线性回归进行时间序列交叉验证

python - 重命名 python 单击参数

python - 我将如何计时这个功能

Python 扭曲 : read from file and send as TCP server

python - PCA 线拟合聚类算法