scikit RandomForrestClassifier-实际结果与预测分数不匹配

问题描述 投票:0回答:1

我是机器学习的新手,我正在尝试使用scikit RandomForrestClassifier对文本进行分类。我的问题是我的测试数据结果与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 = RandomForrestClassifier(
    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
python machine-learning scikit-learn
1个回答
0
投票

我希望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方法。我假设您可以将此测试代码与您的训练代码放入相同的文件中,以便您的矢量化器对象仍然有效。

您使用transform和not fit_transform的原因是,您已经使用装有特定词汇的矢量化器训练了模型,并且在测试过程中可能会出现新单词。使用现有的矢量化程序将忽略这些新单词/组合,并将使您的tdif矢量保持一致。与使用fit_transform重新创建(可能会有很大不同)的矢量化程序相反,矢量化程序会有小/大差异。

© www.soinside.com 2019 - 2024. All rights reserved.