scikit RandomForestClassifier – 实际结果与预测分数不匹配

我是机器学习的新手,正在尝试使用scikit的RandomForestClassifier对文本进行分类。我的问题是我的测试数据结果与sklearn的分类报告不匹配。训练集大约有25k个样本,其中大约25%被标记为1,75%标记为0。我还有一个额外的1k测试集,用于训练后的测试。

# 训练

    vectorizer = TfidfVectorizer(max_features=40, stop_words=stopwords.words('english'))    X = vectorizer.fit_transform(documents).toarray()    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=0)    classifier = RandomForestClassifier(    n_jobs=-1, bootstrap=False, n_estimators=200, random_state=0)    classifier.fit(X_train, y_train)    y_pred = classifier.predict(X_test)    print(confusion_matrix(y_test, y_pred))    print(classification_report(y_test, y_pred))    print(accuracy_score(y_test, y_pred))               precision    recall  f1-score   support       0       0.98      0.99      0.98      4231       1       0.95      0.90      0.92       883accuracy                           0.97      5114

# 测试

df = pandas.read_csv(input_file, header=None)df.columns = ["data", "target"]df, y = df.data, df.targettest_documents = []for body in range(0, len(df)):    document = str(df[body])    test_documents.append(document)X = vectorizer.fit_transform(test_documents).toarray()prediction = pd.DataFrame(classifier.predict(X))              precision    recall  f1-score   support       0       0.89      0.87      0.88       856       1       0.38      0.42      0.40       154

回答:

我原本希望@某人会添加这个内容,但现在由我来做。

尝试在您的测试代码中使用以下内容:

测试

df = pandas.read_csv(input_file, header=None)df.columns = ["data", "target"]df, y = df.data, df.targettest_documents = []for body in range(0, len(df)):    document = str(df[body])    test_documents.append(document)X = vectorizer.transform(test_documents).toarray()  #这里是变化的地方!prediction = pd.DataFrame(classifier.predict(X))

注意变化…我们现在使用vectorizer的transform方法。我假设您可以将这段测试代码放入与训练代码相同的文件中,这样您的vectorizer对象仍然存在。

您使用transform而不是fit_transform的原因是,您已经使用带有特定词汇表的vectorizer训练了模型,而在测试期间可能会出现新词。使用现有的vectorizer将忽略这些新词/组合,并且有助于保持您的tdif向量一致。相反,使用fit_transform会重新创建您的vectorizer,可能会有小或大的差异。

编辑:您可能也想尝试一下逻辑分类器…有时候它在这类数据上也能取得不错的结果。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注