朴素贝叶斯和多类分类器返回整数.数据团队说它们应该是概率



>我有一个包含 100 列的数据集,分为训练集和测试集,分别为 40,000 行和 10,000 行。 我的任务是训练和测试两个分类器,并通过提供包含目标变量(0 或 1)预测的 CSV 文件来报告结果。 我的问题是我的模型返回整数,校长拒绝了我的回答,说数字应该是概率,而不是整数。

我清理了训练集和测试集,将训练集命名为"goodtrain",将测试集命名为"goodtest"。然后,我在 goodtrain 上运行 SelectKBest 来获取 10 个最佳功能,然后使用 train_test_split 将 goodtrain 进一步划分为训练和测试子集。 然后,我使用朴素贝叶斯和多类分类训练了一个模型,并在测试子集上对其进行了测试。 训练分类器后,我在 goodtest 中使用它们并将结果保存为 CSV 文件。

# Naive Bayes, with and without 5-fold cross-validation
# Create a Naive Bayes object
gnb = GaussianNB()
# Train the classifer and form a predictive model
modelNB = gnb.fit(trainX, trainY.values.ravel())
predNB = modelNB.predict(testX)
# Test the model and report the accuracy score
print("Naive-Bayes accuracy: ", round(accuracy_score(testY, predNB, normalize=True)*100, 2), "b%")
# With 5-fold cross-validation
scoreNBcv05 = cross_val_score(modelNB, trainX, trainY.values.ravel(), cv=5)
print("Cross-validated Naive Bayes accuracy, 5 folds: ", round(scoreNBcv05.mean()*100,2), "b%")

朴素贝叶斯准确度:79.92% 交叉验证朴素贝叶斯精度,5 倍:79.52%

# Multi-classification model with logistic regression
# Create a LR object
lr = linear_model.LogisticRegression()
# Train the algorithm and form a predictive model
modelLR = lr.fit(trainX, trainY.values.ravel()) 
predLR = modelLR.predict(testX)
# Test the model and report accuracy score
print("Multi-classification with Logistic Regression accuracy: ", round(accuracy_score(testY, predLR, normalize=True)*100, 2), "b%")
# 5 fold cross-validation:
scoreLRcv05 = cross_val_score(modelLR, trainX, trainY.values.ravel(), cv=5)
print("Cross-validated Multi-class with Logistic Regression accuracy, 5 folds: ", round(scoreLRcv05.mean()*100,2), "b%")

具有逻辑回归的多分类准确率:80.1% 具有逻辑回归精度的交叉验证多类,5 倍:79.59%

# Generate prediction for original test set using Naive Bayes
# Train the classifer and form a predictive model
modelNB = gnb.fit(trainX, trainY)
results1 = modelNB.predict(goodtest)
# Save the results as results1.csv
np.savetxt("results1.csv", results1, delimiter=",")
# Generate prediction for original test set using multi-class logistic regression
# Train the algorithm and form a predictive model
modelLR = lr.fit(trainX, trainY) 
results2 = modelLR.predict(goodtest)
# Save the results as results2.csv
np.savetxt("results2.csv", results2.astype(int), delimiter=",")

我没有收到错误,但模型预测了 0 和 1 的单列,校长说这是不正确的。 我意识到这个问题表明对这些分类器的工作原理缺乏了解,但我希望能深入了解我所忽略的内容。

使用 .predict_proba 而不是 .predict 解决了这个问题。

相关内容

  • 没有找到相关文章

最新更新