允许它分成简单的步骤来分析:
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(主分支)抛出一个错误。
编辑:更新了LGBMClassifier
2)model.predict_proba(X[1])
这相当于:
X_new = X[1]
model.predict_proba(X_new)
这里你仅选择第二行这导致形状[n_features, ]
。但是LGBMClassifier要求二维数据的形状为[n_samples, n_features]
。如上所述,这可能是一个可能的错误来源。您可以重塑定的数组有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)
这也是大多与第二个相同,只是X_new
现在是一个列表而不是numpy数组,并且自动处理为单行(与第二种情况下的X[1].reshape(1, -1)
相同),而不是抛出错误。
因此,考虑上面的例子中,输出将是唯一的,
For sample2 [0.8, 0.2],
感谢。尽管#3给出了与#1不同的答案,我仍然困惑不解。 – ndrue
@ndrue因为它们是两个不同的数量。首先是所有测试数据X中唯一的类别1(在0类,0类,2类......)中的可用性。第三是数据第二行(索引1,只有一行)的所有类的概率。我编辑了包含示例的答案。 –