2016-12-30 7 views
0

私のPandas DataFrameは、機械学習問題の可能なすべてのクラスを列に保持しますが、エントリに割り当てられた値は確率の意味を持ちます。予想されるクラスに応じてPandas Dataframeに追加する方法

次に、電車の場合のクラス予測を行う機械学習モデルがあります。

は今、私は効率的にパンダDATAFRAMEに予測したクラスに依存して追加することができますどのように予測したクラスに割り当てられた列の値が1

を取得し、すべての予測、新しい行を追加したいですエレガントな方法?

これは私が何をしたいんいくつかの最小限のサンプルコードです:

import pandas as pd 
import numpy as np 

predictions = np.array(['classB', 'classB', 'classC']) 
data = pd.DataFrame(columns=['classA', 'classB', 'classC']) 

print "Data before:" 
print data 

for i in range(len(predictions)): 
    if predictions[i] == "classA": 
     data.loc[i] = [1, 0, 0] 
    if predictions[i] == "classB": 
     data.loc[i] = [0, 1, 0] 
    if predictions[i] == "classC": 
     data.loc[i] = [0, 0, 1] 

print "Data after:" 
print data 

を入力:

Empty Dataframe, prediction = ['classB', 'classB', 'classC'] 

出力:

classA classB classC 
0  0.0  1.0  0.0 
1  0.0  1.0  0.0 
2  0.0  0.0  1.0 

答えて

1

あなたは検討する必要がありますを使用して0 forおよびif構成体を取り除く。

クラスを確率(たとえば、 'classA':[1,0,0])にマッピングするpandasデータフレームを作成します。その後、このマッピングを予測クラスとマージします。

例:

import pandas as pd 
import numpy as np 

classes = ['classA', 'classB', 'classC'] 

predictionProbabilityMapping = pd.DataFrame(index=classes, columns=classes, data=[ 
     [1, 0, 0], 
     [0, 1, 0], 
     [0, 0, 1], 
]) 

def convertProbabilities(predictions): 
    predictionsDf = pd.DataFrame(columns=['classification'], data=predictions) 
    return pd.merge(predictionsDf, 
        predictionProbabilityMapping, 
        left_on='classification', right_index=True)[classes] 

predictions = np.array(['classB', 'classB', 'classC']) 
print convertProbabilities(predictions) 

得られます。あなたが答えるため

 classA classB classC 
0  0  1  0 
1  0  1  0 
2  0  0  1 
+0

感謝を! – johannesmik

関連する問題