如何用RBM提高文本分类的预见性



我正在学习文本分类,我用自己的语料库用linnear回归进行分类,如下所示:

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提供的Restricted Boltzman Machine来增加分类报告,从我阅读的文件中可以看出,这可以用来增加分类召回率、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)

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

有几件事可能是错误的。

1.您没有正确校准RBM

查看scikit学习网站上的示例: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范围(如果你能负担得起内存和执行时间,使用更高级别的ngram通常也会有所帮助。对于某些问题,字符级别的ngrams比单词级别的好)和逻辑回归参数。

2.你只是运气不好

没有任何东西表明,在中间步骤中使用RBM肯定会改善任何绩效衡量标准。它可以,但这不是一条规则,它很可能对你的问题没有任何作用或作用很小。你必须为此做好准备。

这是值得尝试的,因为实施起来应该不需要很长时间,但要准备好去别处看看。

还要看SGD分类器和PassiveAggressiveClassifier。这些可能会提高性能。

相关内容

  • 没有找到相关文章

最新更新