在我的分类问题中,y=’late_or_ahead’。值为1表示提前,值为0表示晚到。
log_reg.predict_proba(X_test)的结果是
array([[0.92537486, 0.07462514], [0.24936417, 0.75063583], [0.6222988 , 0.3777012 ], [0.29020199, 0.70979801], .... [0.93961168, 0.06038832]]
输入: log_reg.classes_
返回 array([0,1])
如果我理解正确的话,这意味着数组的左侧部分表示Y=0的概率,数组的右侧部分表示Y=1的概率。如果我在这方面理解错误,请纠正我。
基于这个假设:
proba = pd.DataFrame(log_reg.predict_proba(X_test)) #将数组转换为数据框proba.columns = ['probability_late','probability_ahead']proba probability_late probability_ahead0 0.925375 0.0746251 0.249364 0.7506362 0.622299 0.3777013 0.290202 0.7097984 0.939612 0.060388... ... ...
现在,当我使用下面的代码将这两个列(probability_late和probability_ahead)与X_test合并时:
proba.reset_index(drop=True)test_with_proba=X_testtest_with_proba.reset_index(drop=True)test_with_proba['probability_late']=proba['probability_late']test_with_proba['probability_ahead']=proba['probability_ahead']test_with_proba[['probability_late','probability_ahead']]
结果如下:
367 NaN NaN219 NaN NaN72 0.167852 0.83214855 0.338693 0.661307371 NaN NaN... ... ...
这里的问题是什么?
回答:
假设你有:
df1:
a b1 2 34 2 5
df2:
a b1 6 35 2 8
df1['c'] = df2['a']
df1:
a b c1 2 3 6.04 2 5 NaN
如你所见,分配时会进行左连接。
df1
的索引是 [1,4]
,但 df2
的索引是 [1,5]
在分配时,只有df1的索引1与df2的索引匹配。
所以索引4将会有NaN值。
那么如何解决这个问题呢?
只需使用 .reset_index(drop=True)
重置索引
df1 = df1.reset_index(drop=True)df2 = df2.reset_index(drop=True)
df1['c'] = df2['a']
df1:
a b c0 2 3 61 2 5 2