将概率添加到预测值

时间:2016-08-30 18:30:52

标签: python pandas scikit-learn logistic-regression prediction

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

enter image description here

此外,我还有一个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)

然后适合验证并执行preds:

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:enter image description here

我的问题:如何在附加列中添加不良值= 1的逻辑回归的概率?我应该采取什么措施?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

.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)

答案 1 :(得分:0)

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

给出错误的结果:

{"bar": 20, "foo": 10, "myval": 50}

验证:

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

Concat_all显示索引是否匹配。 简单地进行分配就会将不匹配的数据放在同一行上! 进行concat可以清楚地显示该错误,并且可以解决。

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)