2017-12-02 374 views
0

我對SKlearn,機器學習及其相關領域頗爲陌生。我搜索了一天,但仍然無法找出答案。Sklearn LogisticRegression predict_proba結果看起來很奇怪

model = LogisticRegression(C=1) 
model.fit(X, y) 
print(model.predict_proba(X_test)) 
// output 
[[ 1.01555532e-08 2.61926230e-01 7.37740949e-01 3.32810963e-04]] 

我很困惑輸出是否正確。當我嘗試使用相同數據集的SVM時,我得到了[[ 0.21071225 0.42531172 0.01024818 0.35372784]],這看起來像是概率,而這正是我想要的。我怎樣才能讓LogisticRegression模型獲得像SVM一樣的概率風格?我誤解了什麼?

回答

1

這只是印刷風格!

看一看這個演示:

代碼:

import numpy as np 

p = np.array([[ 1.01555532e-08, 2.61926230e-01, 7.37740949e-01, 3.32810963e-04]]) 
print('p: ', p) 
print('sum: ', p.sum())       # approximately a probability-distribution? 

np.set_printoptions(suppress=True) 
print('p: ', p)         # same print as above 
               # but printing-style was changed before! 

輸出:

p: [[1.01555532e-08 2.61926230e-01 7.37740949e-01 3.32810963e-04]] 
sum: 1.0000000001185532 
p: [[0.00000001 0.26192623 0.73774095 0.00033281]] 

numpy的使用了大量的代碼,再決定如何打印您陣列,這取決於裏面的值!在這裏,我們改變了一些東西,使用np.set_printoptions

你的輸出看起來不一樣,因爲你的SVM預測的輸出沒有很小的值,就像另一個那樣!

抑制:BOOL,可選

無論使用壓制科學記數法(默認爲false)小浮點值的打印。

運用科學的記法也適用於Python的類型:

x = 0.00000001 
print(x) 
# 1e-08