2016-12-30 2 views
0

팬더 데이터 프레임은 열에서 가능한 모든 기계 학습 문제 클래스를 보유하므로 항목에 할당 된 값은 확률을 의미합니다.예상 클래스에 따라 팬더 데이터 프레임에 추가하는 방법

다음으로 기차 케이스에 대한 클래스 예측을 제공하는 기계 학습 모델이 있습니다.

지금 내가 효율적으로 팬더 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 forif 구조를 제거하십시오.

클래스를 해당 확률 (예 : 'classA': [1,0,0])에 매핑하는 팬더 데이터 프레임을 만듭니다. 나중에이 매핑을 예측 된 클래스와 병합하십시오.

예 :

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

관련 문제