逻辑回归 - 如何在另一个数据集上使用模型并获取概率值
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)
【讨论】:
以上是关于逻辑回归 - 如何在另一个数据集上使用模型并获取概率值的主要内容,如果未能解决你的问题,请参考以下文章