python - scikit RandomForestClassifier - 真实结果与预测分数不匹配

标签 python machine-learning scikit-learn

我是机器学习新手,我正在尝试使用 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       883

accuracy                           0.97      5114

# 测试

df = pandas.read_csv(input_file, header=None)
df.columns = ["data", "target"]

df, y = df.data, df.target

test_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

最佳答案

我本来希望 Mr_U4913 会添加这个,但我会添加。

尝试一下您的测试代码:

测试

df = pandas.read_csv(input_file, header=None)
df.columns = ["data", "target"]

df, y = df.data, df.target

test_documents = []
for body in range(0, len(df)):
    document = str(df[body])
    test_documents.append(document)
X = vectorizer.transform(test_documents).toarray()  #here is where change is!
prediction = pd.DataFrame(classifier.predict(X))

请注意更改...我们现在使用矢量化器的变换方法。我假设您可以将此测试代码放入与训练代码相同的文件中,以便您的矢量化器对象仍然存在。

您使用 Transform 而 fit_transform 的原因是您已经使用适合特定词汇的矢量化器训练了模型,并且在测试过程中可能会出现新单词。使用现有的矢量化器将忽略这些新单词/组合,并将有助于保持 tdif 矢量协调。与使用 fit_transform 相反,它会重新创建(可能完全不同)矢量化器,该矢量化器将具有小/大差异。

编辑:您可能还希望尝试逻辑分类器...有时它会对此类数据给出不错的结果。

关于python - scikit RandomForestClassifier - 真实结果与预测分数不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58529185/

相关文章:

python - 在Python中使用相同的整数对不同列中的相同值进行编码

python - 将 scipy 稀疏 csr 转换为 Pandas ?

python - 将您自己的文本数据集加载到 scikit-learn

python - 使用 pandas 中的查询函数返回位于两个列表交集的行

python - Google API - 电子表格

python - 遍历列表,比较值并删除重复项 - Python

machine-learning - libsvm 中的选择参数

machine-learning - 使用 Flux.jl 进行逻辑回归

python - 如何使用 http.server 执行服务器端 python 脚本?

machine-learning - 距离度量启发式信息