Python 如何获得分类模型的预测概率?

Python 如何获得分类模型的预测概率?,python,scikit-learn,Python,Scikit Learn,我正在使用一个二元因变量(已占用/未占用)尝试不同的分类模型。我感兴趣的模型是逻辑回归、决策树和高斯朴素贝叶斯 我的输入数据是一个csv文件,带有日期时间索引(例如2019-01-07 14:00)、三个变量列(“R”、“p”、“C”,包含数值)和因变量列(“值”,包含二进制值) 训练模型不是问题,这一切都很好。所有的模型都以二进制值的形式给出了它们的预测(这当然应该是最终的结果),但我也希望看到预测的概率,这些概率使它们决定了两个二进制值中的任何一个。有没有办法也得到这些值 我已经尝试了所有与

我正在使用一个二元因变量(已占用/未占用)尝试不同的分类模型。我感兴趣的模型是逻辑回归、决策树和高斯朴素贝叶斯

我的输入数据是一个csv文件,带有日期时间索引(例如2019-01-07 14:00)、三个变量列(“R”、“p”、“C”,包含数值)和因变量列(“值”,包含二进制值)

训练模型不是问题,这一切都很好。所有的模型都以二进制值的形式给出了它们的预测(这当然应该是最终的结果),但我也希望看到预测的概率,这些概率使它们决定了两个二进制值中的任何一个。有没有办法也得到这些值

我已经尝试了所有与yellowbrick包一起运行的分类可视化工具(ClassBalance、ROCAUC、ClassificationReport、ClassPredictionError)。但所有这些都没有给我一个图表,显示数据集模型计算出的概率

import pandas as pd
import numpy as np
data = pd.read_csv('testrooms_data.csv', parse_dates=['timestamp'])


from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

##split dataset into test and trainig set
X = data.drop("value", axis=1) # X contains all the features
y = data["value"] # y contains only the label

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.5, random_state = 1)

###model training
###Logistic Regression###
clf_lr = LogisticRegression()

# fit the dataset into LogisticRegression Classifier

clf_lr.fit(X_train, y_train)
#predict on the unseen data
pred_lr = clf_lr.predict(X_test)

###Decision Tree###

from sklearn.tree import DecisionTreeClassifier

clf_dt = DecisionTreeClassifier()
pred_dt = clf_dt.fit(X_train, y_train).predict(X_test)

###Bayes###
from sklearn.naive_bayes import GaussianNB

bayes = GaussianNB()
pred_bayes = bayes.fit(X_train, y_train).predict(X_test)


###visualization for e.g. LogReg
from yellowbrick.classifier import ClassificationReport
from yellowbrick.classifier import ClassPredictionError
from yellowbrick.classifier import ROCAUC

#classificationreport
visualizer = ClassificationReport(clf_lr, support=True)

visualizer.fit(X_train, y_train)  # Fit the visualizer and the model
visualizer.score(X_test, y_test)  # Evaluate the model on the test data
g = visualizer.poof()             # Draw/show/poof the data

#classprediction report
visualizer2 = ClassPredictionError(LogisticRegression())

visualizer2.fit(X_train, y_train) # Fit the training data to the visualizer
visualizer2.score(X_test, y_test) # Evaluate the model on the test data
g2 = visualizer2.poof() # Draw visualization

#(ROC)
visualizer3 = ROCAUC(LogisticRegression())

visualizer3.fit(X_train, y_train)  # Fit the training data to the visualizer
visualizer3.score(X_test, y_test)  # Evaluate the model on the test data
g3 = visualizer3.poof()             # Draw/show/poof the data



例如,最好有一个类似于pred_lr的数组,其中包含为csv文件的每一行计算的概率。可能吗?如果是,我如何获得它?

在大多数sklearn估计器(如果不是全部)中,您有一种方法来获得排除分类的概率,无论是对数概率还是概率

例如,如果您有朴素贝叶斯分类器,并且希望获得概率而不是分类本身,您可以这样做(我在代码中使用了相同的术语):


希望这能有所帮助。

我投票将这个问题作为离题题题来结束,因为答案直接位于等的相关文档中
from sklearn.naive_bayes import GaussianNB

bayes = GaussianNB()
pred_bayes = bayes.fit(X_train, y_train).predict(X_test)

#for probabilities
bayes.predict_proba(X_test)
bayes.predict_log_proba(X_test)