2017-04-21 78 views
0

我想了解爲什麼sklearn預測的輸出在放入函數時不同。Sklearn概率函數內部不同

我已經訓練了文字樸素貝葉斯分類器,當我做我的預測是這樣

examples = ['my favorite sport is probably baseball'] 
predictions = vec_clf.predict(examples)[0] 
probs = vec_clf.predict_proba(examples) 
m = np.max(probs) 

print predictions,m 

我得到正確的預測結果。但是,如果我寫一個函數來做到這一點

def classify(input): 

    predictions = vec_clf.predict(input)[0] 
    probs = vec_clf.predict_proba(input) 
    m = np.max(probs) 

    return predictions,m 

classify('my favorite sport is probably baseball') 

它返回不同的信心和類別標籤完全不同,非常錯誤的結果。爲什麼會這樣做?

回答

1

在第一次嘗試,你傳遞字符串的列表model.predict_probamodel.predict(這是預期),在後者的嘗試,要傳遞一個字符串。相反,通過串一個列表:

classify(['my favorite sport is probably baseball']) 

或列表中的包裹input自己的函數中:

def classify(input): 
    input = [input] 
    predictions = vec_clf.predict(input)[0] 
    probs = vec_clf.predict_proba(input) 
    m = np.max(probs) 

    return predictions,m 

發生了什麼事時,你只傳遞一個字符串的是,每個人性格被解釋爲文件。所以,試試看:

vec_clf.predict('my favorite sport is probably baseball') 

爲了更好地看看發生了什麼。