2017-10-13 5 views
1
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') 

上記のPythonコードを使用して、3つの可能な結果(A、B、C)の確率を予測する必要があります。 確率はtest_predictionに保存され、それがとして印刷することができます。predict_proba(np.array(test))のTypeError

Output: [[ 0.82882588 0.08641236 0.08476175]] 

しかし、残りの部分はエラーを与える:

for i in range(test_prediction): 
TypeError: only integer scalar arrays can be converted to a scalar index 

私は最大の確率を見つけたい、その後、あるイベントを表示します最も多く発生する可能性が高い(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') 
+0

問題を解決してくれてありがとう – Enzy

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

その後、あなたがそれらをCONCATことができます。

final_frame = pd.concat([max_prob,predicted_output],axis = 1) 

あなたがエラーの原因となった、forループを使用する必要はありません。この道を。

import operator 
#... 
enum_predict = enumerate(test_prediction) 
res = max(enum_predict, key=operator.itemgetter(1))[0] 

enumerateタプルのリストに変換配列:

+0

実際のプログラムでfloat値のcuzを処理しませんでした TypeError: 'numpy.float64'オブジェクトは呼び出し可能ではありません – Enzy

0

問題この場合range

で配列を使用して、あなたはまた、あなたのコードを簡素化することが、アレイrange(len(test_prediction))

の長さを使用する必要があります(インデックス、アイテム)

key=operator.itemgetter(1) - max関数はseco nd値

+0

実際のプログラムでfloat値のcuzを処理しませんでした TypeError:( "'numpy.float64' object is 「呼び出し可能でない」、「インデックス0で発生」) – Enzy

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で指定されたソリューションは、より正確で効率的なようです。

関連する問題