【发布时间】:2018-09-06 14:44:20
【问题描述】:
我正在使用 scikit-learn 的 CalibratedClassifierCV 和 GaussianNB() 对一些数据进行二进制分类。
我已经验证了.fit(X_train, y_train) 中的输入,它们具有匹配的尺寸并且都通过了np.isfinite 测试。
我的问题是当我运行.predict_proba(X_test) 时。
对于一些样本,返回的概率是array([-inf, inf]),我真的不明白为什么。
当我尝试在结果预测上运行 brier_score_loss 时,这一点就曝光了,它抛出了 ValueError: Input contains NaN, infinity or a value too large for dtype('float64')。
我已经向这个Google drive link 添加了一些数据。 它比我想要的要大,但我无法使用较小的数据集进行一致的复制。 复制代码如下。 代码有一些随机性,所以如果没有找到无限,请尝试再次运行它,但根据我的实验,它应该在第一次尝试时找到它们。
from sklearn.naive_bayes import GaussianNB
from sklearn.calibration import CalibratedClassifierCV
from sklearn.model_selection import StratifiedShuffleSplit
import numpy as np
loaded = np.load('data.npz')
X = loaded['X']
y = loaded['y']
num = 2*10**4
sss = StratifiedShuffleSplit(n_splits = 10, test_size = 0.2)
cal_classifier = CalibratedClassifierCV(GaussianNB(), method = 'isotonic', cv = sss)
classifier_fit = cal_classifier.fit(X[:num], y[:num])
predicted_probabilities = classifier_fit.predict_proba(X[num:num+num//4])[:,1]
predicted_probabilities[np.argwhere(~np.isfinite(predicted_probabilities))]
【问题讨论】:
标签: python error-handling scikit-learn naivebayes