gpt4 book ai didi

python - Scikit Learn 预测单个观察

转载 作者:行者123 更新时间:2023-11-28 22:26:45 25 4
gpt4 key购买 nike

这可能是一个非常愚蠢的问题,但为什么以下给出不同的结果?

X == array([  7.84682988e-01,   3.80109225e-17,   8.06386582e-01,
1.00000000e+00, 5.71428571e-01, 4.44189342e+00])

model.predict_proba(X)[1] # gives array([ 0.35483244, 0.64516756])
model.predict_proba(X[1]) # gives an error
model.predict_proba(list(X[1])) # gives array([[ 0.65059327, 0.34940673]])

Model 是来自 lightgbm 库的 LGBMClassifier

最佳答案

让我们把它分解成简单的步骤来分析:

1) model.predict_proba(X)[1]

这相当于

probas = model.predict_proba(X)
probas[1]

所以这首先输出所有样本的所有类别的概率。因此,假设您的 X 包含 5 行和 4 个特征,具有两个不同的类。

所以 probas 会是这样的:

            Prob of class 0,   prob of class 1  
For sample1 [[0.1, 0.9],
For sample2 [0.8, 0.2],
For sample3 [0.85, 0.15],
For sample4 [0.4, 0.6],
For sample5 [0.01, 0.99]]

probas[1] 将只输出 probas 输出第二列的概率,即。类别 1 的概率。

Output [0.9,     0.2,   0.15,       0.6,       0.99]

其他两行代码取决于如何处理单维数组的实现和版本。例如。 scikit v18 只显示警告并将其视为单行。但是 v19(master 分支)会抛出错误。

编辑:为 LGBMClassifier 更新

2) model.predict_proba(X[1])

这相当于:

X_new = X[1]
model.predict_proba(X_new)

在这里您只选择了第二行,这导致形状 [n_features, ]。但是 LGBMClassifier 要求二维数据的形状为 [n_samples, n_features]。如上所述,这可能是错误的来源。您可以 reshape 给定数组以用 1 代替 n_samples:

model.predict_proba(X[1].reshape(1, -1)) # 会正常工作

3) model.predict_proba(list(X[1]))

这可以分解为:

X_new = list(X[1])
model.predict_proba(X_new)

这也与 2nd 基本相同,只是 X_new 现在是一个列表而不是 numpy 数组,并且自动处理为单行(与 X[1].reshape 相同(1, -1) 在第二种情况下),而不是抛出错误。

所以考虑到上面的例子,输出将只有,

For sample2          [0.8,            0.2],

关于python - Scikit Learn 预测单个观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44558435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com