逻辑回归 - 如何在另一个数据集上使用模型并获取概率值

Posted

技术标签:

【中文标题】逻辑回归 - 如何在另一个数据集上使用模型并获取概率值【英文标题】:Logistic Regression - How to use model on another dataset and get probability values 【发布时间】:2020-02-16 08:48:05 【问题描述】:

我正在制作我的第一个 ML 模型,我需要一些关于在第二个数据集上使用模型的帮助。

所以我有两组:“train_full.csv”和“test_full.csv”。两个集合具有完全相同的结构。

唯一不同的是,在“train_full.csv”列中,“target”用 0 和 1 填充,而在“test_set.csv”中,该列是空的,我想预测这些值。

您可以在下面找到我基于“train_full.csv”的模型。为了代码的清晰,我跳过了数据清理的整个部分:

df2 = pd.read_csv("train_full.csv", sep = ';')
test_set = pd.read_csv("test_full.csv", sep = ';')
#Dataset cleaning

#my y is column named "target", and my x's are the remaining column

X_train, X_test, y_train, y_test = train_test_split(df2.drop('target',axis=1), 
           df2['target'], test_size=0.35, 
            random_state=101)

#Creating Logistic Regression Model

logmodel = LogisticRegression()
result = logmodel.fit(X_train, y_train)

#Making predictions
Predictions = logmodel.predict(X_test)

print(metrics.confusion_matrix(y_test, Predictions))

print(metrics.classification_report(y_test,Predictions)) #Accuracy: 78%

auc = metrics.roc_auc_score(y_test, y_pred_proba) #AUC: ~0.695

现在我想在第二个数据集上使用该模型,我已经在第二行代码中导入了该模型,但是我不再需要将数据集拆分为训练和测试子集。我想在整个“test_full.csv”集上使用上面的模型。我该怎么做?

另外,有没有办法添加一个计算概率的列?所以我的输出将是一个看起来像这样的熊猫数据框:

Id probability target
0 0.75 1
1 0.78 1
2 0.34 0
3 0.84 1
4 0.13 0
5 0.34 0

亲切的问候

【问题讨论】:

尝试类似Predictions2 = logmodel.predict_proba(test_set)[1] 的概率为 1。 嘿,我已经尝试过您的解决方案(必须删除 test_set = test_set.drop(columns = 'target'),因为它包含我想预测的空值。您的行的结果是:array([0.8072, 0.1927])。我将其更改为:@ 987654326@ 并返回一个 0 和 1 的数组。这是您预测二进制变量的方式吗?如果我将此数组视为我想要计算的“目标”,我会犯错吗?概率值的结果应该是 - 作为据我所知 - 为每一行计算一个值,并基于该值计算“目标”(如果概率 > 0.5 则为 1”,esle:0) 我的行应该是Predictions2 = logmodel.predict_proba(test_set)[:, 1] - 它选择列“1”,前一行选择行“1”。 Predict_proba 返回概率数组,例如,如果您有 5 个类要预测,那么将是 5 列,每行总和为 1。阈值 0.5 是默认值,但您可以针对特定指标优化其值,例如f1. 【参考方案1】:

这很简单。

您只需要从test_set 中删除目标列并需要使用 logmodel.predict() 用于分类,logmodel.predict_proba() 用于概率。这是相同的示例 =>

test_set = test_set.drop(['target'],axis=1)

==> 下面 2 行将在 test_set 数据框中添加一列,这是与预测相关的概率和分类

test_set['prob'] = logmodel.predict_proba(test_set)
test_set['classification'] = logmodel.predict(test_set)

【讨论】:

以上是关于逻辑回归 - 如何在另一个数据集上使用模型并获取概率值的主要内容,如果未能解决你的问题,请参考以下文章

如何将逻辑回归和kmeans pmml文件导入r

逻辑回归模型

使用逻辑回归进行特征选择

在另一个数据集上测试模型?

机器学习6逻辑回归算法

逻辑回归返回错误,但在减少的数据集上运行正常