CATEGORY_LAUNCHER
使用上面的python代码,我必须预测3种可能结果(A,B,C)的概率。 概率保存在test_prediction中,可以打印为:
model = LogisticRegression()
model = model.fit(X, y)
test_data = [1,2,3,4,5,6,7,8,9,10,11,12,13]
test_prediction = model.predict_proba(np.array(test_data))
max = -1.0
res = 0
for i in range(test_prediction):
if test_prediction[i]>max:
max = test_prediction[i]
res = i
if res==0:
print('A')
elif res==1:
print('B')
else:
print('C')
但剩下的部分给出了一个错误:
Output: [[ 0.82882588 0.08641236 0.08476175]]
我想找到最大概率,然后显示可能最多发生的事件(A / B / C)。 如何解决这个问题?
答案 0 :(得分:1)
您还可以使用numpy.argmax直接为您提供最大值的索引。
import numpy as np
#test_prediction is most probably np array only
pred = np.array(test_prediction)
classes_val = np.argmax(pred, axis=1)
for res in class_val:
if res==0:
print('A')
elif res==1:
print('B')
else:
print('C')
答案 1 :(得分:0)
您可以这样做:
predict_prob_df = pd.DataFrame(model.predict_proba(test_data))
max_prob = predict_prob_df.apply(max,axis = 1)
predicted_output = pd.DataFrame(model.predict(test_data))
然后你可以连接它们:
final_frame = pd.concat([max_prob,predicted_output],axis = 1)
这样您就不需要使用导致错误的for循环了。
答案 2 :(得分:0)
在range
在这种情况下,您应该使用数组range(len(test_prediction))
的长度
您也可以简化代码:
import operator
#...
enum_predict = enumerate(test_prediction)
res = max(enum_predict, key=operator.itemgetter(1))[0]
enumerate
将数组转换为元组列表(索引,项目)
key=operator.itemgetter(1)
- max函数将按第二个值
答案 3 :(得分:0)
我提出了另一个解决方案:
for i in range(3):
if np.take(test_prediction, i) > max:
max = np.take(test_prediction, i)
res = i
if res==0:
.....
这可以通过使用np.take
访问test_prediction中的索引来实现但@Vivek_Kumar指定的解决方案似乎更正确和有效。