返回置信度的分类算法?

机器算法验证 scikit-学习
2022-03-05 05:14:45

给定一个建立在 scikit-learn 之上的机器学习模型,我如何对新实例进行分类,然后只选择那些置信度最高的实例?我们如何定义对机器学习的信心以及如何生成它(如果不是由 scikit-learn 自动生成的话)?如果我有 2 个以上的潜在课程,我应该在这种方法中改变什么?

这是我到目前为止所做的:

# load libraries
from sklearn import neighbors
# initialize NearestNeighbor classifier
knn = neighbors.KNeighborsClassifier(n_neighbors=3)
# train model
knn.fit([[1],[2],[3],[4],[5],[6]], [0,0,0,1,1,1])
# predict ::: get class probabilities
print(knn.predict_proba(1.5))
print(knn.predict_proba(37))
print(knn.predict_proba(3.5))
2个回答

三个问题:

  1. “我们如何定义对机器学习的信心以及如何生成它(如果不是由 scikit-learn 自动生成的话)?” 这是关于机器学习中不同类型的置信度度量的一个很好的总结。使用的具体指标取决于您生成的算法/模型。

  2. “我如何对新实例进行分类,然后只选择置信度最高的实例?并且,

  3. “如果我有超过 2 个潜在课程,我应该在这种方法中改变什么?”

这是一个快速脚本,您可以使用它扩展您开始使用的内容,因此您可以了解如何处理任意数量的类并为每个预测示例找到可能的类。我喜欢 numpy 和 pandas(如果你使用 sklearn,你可能会使用它们)。

from sklearn import neighbors
import pandas as pd
import numpy as np
number_of_classes = 3  # number of possible classes
number_of_features = 2 # number of features for each example
train_size = 20        # number of training examples
predict_size = 5       # number of examples to predict
# Generate a random 2-variable training set with random classes assigned
X = np.random.randint(100, size=(train_size, 2))
y = np.random.randint(number_of_classes, size=train_size)
# initialize NearestNeighbor classifier
knn = neighbors.KNeighborsClassifier(n_neighbors=3)
# train model
knn.fit(X, y)
# values to predict classes for
predict = np.random.randint(100, size=(predict_size, 2))
print "generated examples to predict:\n",predict,"\n"
# predict class probabilities for each class for each value and convert to DataFrame
probs = pd.DataFrame(knn.predict_proba(predict))
print "all probabilities:\n", probs, "\n"
for c in range(number_of_classes):
    likely=probs[probs[c] > 0.5]
    print "class" + str(c) + " probability > 0.5:\n", likely
    print "indexes of likely class" + str(c) + ":", likely.index.tolist(), "\n"

如果你想要分类结果的置信度,你有两种方法。首先是使用将输出概率分数的分类器,如逻辑回归;第二种方法是使用校准,例如 svm 或 CART 树。你可以在 scikit-learn 中找到相关的模块。