我有这样的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)
然后适合验证并执行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)
我的问题:如何在附加列中添加不良值= 1的逻辑回归的概率?我应该采取什么措施?
非常感谢任何帮助!
答案 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)