【发布时间】:2020-02-20 01:47:31
【问题描述】:
我是机器学习的新手,我正在尝试使用 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
【问题讨论】:
-
1.对于测试数据集,您不需要
fit_transform。 2. 检查你的模型是否过拟合 -
@Mr_U4913 谢谢。跟进问:1)我应该如何重写那行? 2. 如何测试我的模型中的过度拟合?
-
1.
transform而不是fit_transform2. 如果测试准确度接近训练准确度,那么您的模型正好适合。如果测试 acc 远低于训练 acc,那么您的模型过度拟合。如果测试 acc 优于 train acc,则您的模型欠拟合并训练更复杂的模型 -
只需详细说明 Mr_U4913 所说的内容:在您的“#test”代码中,使用您在“#train”代码中制作的现有矢量化器转换您的数据......并调用转换方法,而不是fit_transform
-
@Swier 非常感谢,这真的很有用。在我在这里发布之前,我做了一些程序员的雨舞,其中一行错误的代码会产生随机结果,我不断调整每个参数,希望看到积极的效果。我现在将再次开始应用逻辑。干杯!
标签: python machine-learning scikit-learn