将概率添加到预测值

Adding Probability to the predicted value

我有一个这样的 testDF 并尝试进行二元分类 [0;1]:

我也有一个 trainDF,它具有相同的结构并在其中填充了用于训练目的的错误值。

我从 trainDF 制作目标和训练集:

target = trainDF.bad.values
train = trainDF.drop('bad', axis=1).values

然后我追加逻辑回归模型并进行交叉验证:

model=[]
model.append (linear_model.LogisticRegression(C=1e5))
TRNtrain, TRNtest, TARtrain, TARtest = train_test_split(train, target,test_size=0.3, random_state=0)

然后进行验证并执行预测:

model.fit(TRNtrain, TARtrain)
pred_scr = model.predict_proba(TRNtest)[:, 1]

然后拟合整个集合并预测错误值:

model.fit(train, target)
test = testDF.drop('bad', axis=1).values
testDF.bad=model.predict(test)

我收到一个带有填充值的 df:

我的问题:如何在附加列中添加错误值 = 1 的逻辑回归概率?为此我应该采取什么步骤?

如有任何帮助,我们将不胜感激!

.predict 方法为您的输入选择最可能的分配。如果你想访问你可以使用的概率:

log_prob = model.predict_log_proba(test)  # Log of probability estimates.
prob = model.predict_proba(test)   # Probability estimates.

您可以通过列分配将其中任何一个直接添加到数据框中。

testDF['bad_prob'] = model.predict_proba(test)

上述解决方案给出了一个错误,它掩盖了 predict_proba 中存在的错误!

给出错误的结果:

y_pred_prob_df = pd.DataFrame(model.predict_proba(test))
testDF['Prob_0'] = y_pred_prob_df[0]
testDF['Prob_1'] = y_pred_prob_df[1]
print test.shape

验证:

predicted = test.loc[y_pred_test == 1]
predicted.reset_index(inplace=True)
prob_predicted = y_pred_prob_df.loc[y_pred_test == 1]
prob_predicted.reset_index(inplace=True)

Concat_all 显示索引是否匹配。 简单地进行赋值会将 non-matching 数据放在同一行! 做一个 concat 可以清楚地显示错误,并且可以处理。

concat_all = pd.concat([predicted, prob_predicted], axis=1)  
print shape.concat_all

concat_all['a']=concat_all[0]+concat_all[1]
concat_all=concat_all[-concat_all['a'].isnull()]

print shape.concat_all