当前位置: 首页 > 知识库问答 >
问题:

sklearn中带有词包和附加情感特征的文本分类器

贲宏硕
2023-03-14

我试图建立一个分类器,除了袋子的词使用像情感或主题(LDA结果)的特征。我有一个带有文本和标签的熊猫数据frame,并希望添加一个情感值(数字在-5和5之间)和LDA分析的结果(一个带有句子主题的字符串)。

我有一个单词分类器的工作包,它使用sklearn的CountVectorizer,并使用MultinomialNaiveBayes进行分类。

df = pd.DataFrame.from_records(data=data, columns=names)
train, test = train_test_split(
    df,
    train_size=train_ratio,
    random_state=1337
)
train_df = pd.DataFrame(train, columns=names)
test_df = pd.DataFrame(test, columns=names)
vectorizer = CountVectorizer()
train_matrix = vectorizer.fit_transform(train_df['text'])
test_matrix = vectorizer.transform(test_df['text'])
positive_cases_train = (train_df['label'] == 'decision')
positive_cases_test = (test_df['label'] == 'decision')
classifier = MultinomialNB()
classifier.fit(train_matrix, positive_cases_train)

问题是现在。除了单词袋技术之外,我如何将其他功能引入我的分类器?

提前感谢,如果你需要更多的信息,我很高兴提供那些。

  (0, 322)  0.0917594575712
  (0, 544)  0.196910480455
  (0, 556)  0.235630958238
  (0, 706)  0.137241420774
  (0, 1080) 0.211125349374
  (0, 1404) 0.216326271935
  (0, 1412) 0.191757369869
  (0, 2175) 0.128800602511
  (0, 2176) 0.271268708356
  (0, 2371) 0.123979845513
  (0, 2523) 0.406583720526
  (0, 3328) 0.278476810585
  (0, 3752) 0.203741786877
  (0, 3847) 0.301505063552
  (0, 4098) 0.213653538407
  (0, 4664) 0.0753937554096
  (0, 4676) 0.164498844366
  (0, 4738) 0.0844966331512
  (0, 4814) 0.251572721805
  (0, 5013) 0.201686066537
  (0, 5128) 0.21174469759
  (0, 5135) 0.187485844479
  (1, 291)  0.227264696182
  (1, 322)  0.0718526940442
  (1, 398)  0.118905396285
  : :
  (2553, 3165)  0.0985290985889
  (2553, 3172)  0.134514497354
  (2553, 3217)  0.0716087169489
  (2553, 3241)  0.172404983302
  (2553, 3342)  0.145912701013
  (2553, 3498)  0.149172538211
  (2553, 3772)  0.140598133976
  (2553, 4308)  0.0704700896603
  (2553, 4323)  0.0800039075449
  (2553, 4505)  0.163830579067
  (2553, 4663)  0.0513678549359
  (2553, 4664)  0.0681930862174
  (2553, 4738)  0.114639856277
  (2553, 4855)  0.140598133976
  (2553, 4942)  0.138370066422
  (2553, 4967)  0.143088901589
  (2553, 5001)  0.185244190321
  (2553, 5008)  0.0876615764151
  (2553, 5010)  0.108531807984
  (2553, 5053)  0.136354534152
  (2553, 5104)  0.0928665728295
  (2553, 5148)  0.171292088292
  (2553, 5152)  0.172404983302
  (2553, 5191)  0.104762377866
  (2553, 5265)  0.123712025565

共有1个答案

宇文修筠
2023-03-14

一种选择是将这两个新特性作为列添加到CountVectorizer矩阵中。

由于不执行任何tf-idf,计数矩阵将用整数填充,因此可以将新列编码为int值。

您可能需要尝试几种编码,但可以从以下内容开始:

    null
dense_matrix = train_matrix.todense() # countvectorizer returns a sparse matrix
np.insert(dense_matrix,dense_matrix.shape[1],[val1,...,valN],axis=1)

即使它不再是一个严格意义上的单词包(因为不是所有列都代表词频),只要添加这两列就会增加您想要包含的额外信息。朴素贝叶斯分类器认为每个特征都独立地贡献于概率,所以我们在这里没问题。

更新:最好使用“一个热的”编码器来编码分类功能(http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.onehotencoder.html)。通过这种方式,您可以通过为新特性分配整数值来防止奇怪的行为(也许您仍然可以使用情感来这样做,因为在从0到10的情感等级中,您假设9的情感更接近于情感10的样本,而不是情感0的样本)。但是对于分类特性,您最好进行一热编码。假设您有3个主题,那么您可以使用添加列的相同技术,现在您只需要添加3个而不是一个[topic1,topic2,Topic3]。这样,如果您有一个属于topic1的示例,您将把它编码为[1,0,0],如果是topic3,您的表示形式是[0,0,1](您用1标记与主题对应的列)

 类似资料:
  • 这个例子展示了如何使用 scikit-learn 中的单词包方法,根据主题对文档进行分类。本例使用scipy.sparse中的矩阵来存储特征,并演示各种能够有效处理稀疏矩阵的分类器。 本例中使用的数据集是20条新闻组数据集。通过scikit-learn可以自动下载该数据集,并进行缓存。 下述条形图展示了各个不同分类器,其信息包括精度、训练时间(已归一化)和测试时间(已归一化)。 import lo

  • 问题内容: 我目前正在研究一个项目,一个 简单的情感分析器,* 这样在 单独的情况下 将有 2和3个类 。我使用的 语料库 在 唯一词方面 非常 丰富 (大约200.000)。我用 袋的词 方法用于 特征选择 和以减少的数量 独特特征 ,进行消除由于一个进行 阈值 的 出现频率 。在 最后一组的功能 包括围绕20.000的功能,这实际上是一个 90%的下降 ,但 还不够 用于预期 的测试预测 *准

  • 但是,我还没能在Stanford CorenLP中找到任何文本分类的注释器。我有什么办法可以实现我的想法。更好的是,有没有更好的方法来实现我想要实现的目标。 提前谢了。

  • 我正在研究一个文本分类问题,其中多个文本特征和需要建立一个模型来预测工资范围。请参考示例数据集,大多数资源/教程只处理一列的特征提取,然后预测目标。我了解了文本预处理、特征提取(CountVectorizer或TF-IDF)以及应用算法等过程。 在这个问题中,我有多个输入文本特性。当涉及多个特征时,如何处理文本分类问题?这些是我已经尝试过的方法,但我不确定这些是否是正确的方法。请提供您的意见/建议

  • 我想使用斯坦福分类器进行文本分类。我的特征主要是文本特征,但也有一些数字特征(例如句子的长度)。 我从ClassifierExample开始,并用一个简单的实值特性替换当前特性,如果停止灯,则值,否则,这将导致以下代码(除了第10-16行的函数之外,这只是原始ClassifierExample类的代码): 根据我对线性分类器的理解,特性应该使分类任务变得非常容易--毕竟,我们只需要检查的值是否大于

  • 我使用Stanford NLP文本分类器(ColumnDataClassifier)从我的Java代码。我有两个主要问题。