【问题标题】:How to increase the presicion of text classification with the RBM?如何使用 RBM 提高文本分类的精度?
【发布时间】:2015-04-03 10:29:35
【问题描述】:

我正在学习文本分类,并使用我自己的语料库进行线性回归分类如下:

from sklearn.linear_model.logistic import LogisticRegression
classifier = LogisticRegression(penalty='l2', C=7)
classifier.fit(training_matrix, y_train)
prediction = classifier.predict(testing_matrix)

我想使用 scikit-learn 提供的受限玻尔兹曼机来增加分类报告,从 documentation 我读到这可以用来提高分类召回率、f1 分数、准确度等。有人可以吗帮助我增加这是我迄今为止尝试过的,在此先感谢:

vectorizer = TfidfVectorizer(max_df=0.5,
                             max_features=None,
                             ngram_range=(1, 1),
                             norm='l2',
                             use_idf=True)


X_train = vectorizer.fit_transform(X_train_r)
X_test = vectorizer.transform(X_test_r)


from sklearn.pipeline import Pipeline
from sklearn.neural_network import BernoulliRBM
logistic = LogisticRegression()
rbm= BernoulliRBM(random_state=0, verbose=True)
classifier = Pipeline(steps=[('rbm', rbm), ('logistic', logistic)])
classifier.fit(X_train, y_train)

【问题讨论】:

    标签: python python-2.7 machine-learning nlp scikit-learn


    【解决方案1】:

    有几件事可能是错误的。

    1.您没有正确校准RBM

    查看Scikit-Learning网站上的示例:http://scikit-learn.org/stable/auto_examples/plot_rbm_logistic_classification.html

    特别是,这些线条:
    rbm.learning_rate = 0.06
    rbm.n_iter = 20
    # More components tend to give better prediction performance, but larger
    # fitting time
    rbm.n_components = 100
    

    你没有设置这些地方。在该示例中,通过使用网格搜索通过交叉验证获得这些。您应该这样做并尝试获取(靠近)为您自己的问题获得最佳参数。

    另外,您可能希望尝试使用交叉验证来确定其他参数,例如ngram范围(使用更高级别的ngrams,通常可以帮助,如果您能提供内存和执行时间。对于某些问题,字符级别ngrams做得好比单词级别更好)和逻辑回归参数。

    2。你只是不幸的

    在中间步骤中使用RBM没有什么可以改善任何性能措施。它可以,但这不是一个规则,它可能对你的问题做得很好或很少。你必须为此做好准备。

    值得尝试,因为它不应该需要长时间实现,但准备必须在其他地方看。

    还看看SGDClassifierPassiveAggressiveClassifier。这些可能 em>提高性能。

    【讨论】:

    • 所以你建议我尝试使用sgdclassifier和pac?你认为这是什么参数,对此加上TFIDF是最好的吗?我尝试过两个分类器,我的所有指标都下降了。感谢您的帮助!
    • @ johndoe - 与什么相比之下?我不知道参数最好的参数,这是依赖的非常问题。您必须使用交叉验证或网格搜索调整它们,直到您获得您满意的东西。 span>
    • 与Scikit学习实施的其他估计器相比。另一件事所致我的思想......要素矢量是否需要执法?谢谢你的反馈 span>
    • @ johndoe - 我会说不,你不应该二十进制。但我可能是错的,你真的要测试并使用交叉验证来选择最有效的东西。 span>
    • 但是是一个beronoulli分布,数据需要二值化吗?..我尝试二值化TFIDF矢量化器并仍然“作品”。为什么不二十列式?感谢您的帮助
    【解决方案2】:

    首先,您必须了解这里的概念。 RBM 可以看作是一种强大的聚类算法,聚类算法是无监督的,即它们不需要标签。 也许,在您的问题中使用 RBM 的最佳方法是,首先训练一个 RBM(它只需要没有标签的数据),然后使用 RBM 权重来初始化一个神经网络。要在输出中获得逻辑回归,您必须添加一个带有逻辑 reg 的输出层。这个神经网络的成本函数并训练这个神经网络。此设置可能会提高性能。

    【讨论】:

      猜你喜欢
      • 2020-04-29
      • 2017-05-17
      • 2014-03-21
      • 2019-08-11
      • 2021-02-07
      • 2017-12-14
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多