Machine learning 返回信任的分类算法?

Machine learning 返回信任的分类算法?,machine-learning,scikit-learn,confidence-interval,Machine Learning,Scikit Learn,Confidence Interval,给定一个建立在scikit learn之上的机器学习模型,我如何对新实例进行分类,然后只选择置信度最高的实例?我们如何定义机器学习的信心以及如何生成它(如果不是由scikit learn自动生成)?如果我有两个以上的潜在类,那么在这种方法中我应该改变什么 这就是我到目前为止所做的: # load libraries from sklearn import neighbors # initialize NearestNeighbor classifier knn = neighbors.KNeig

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

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

# 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))
例如:


假设我们已经使用XYZ机器学习算法创建了一个模型。我们还假设我们正在尝试使用位置、爱好和收入等信息,根据用户的性别对其进行分类。然后,我们有10个要分类的新实例。正常情况下,应用该模型后,我们得到10个输出,M(男性)或F(女性)。到现在为止,一直都还不错。然而,我想以某种方式测量这些结果的精度,然后,通过使用硬编码阈值,忽略那些精度较低的结果。我的问题是如何测量进动。概率(由predict_proba()函数给出)是一个很好的度量吗?例如,我能说如果可能在0.9和1之间,那么“保持”(否则“忽略”)?或者我应该用更复杂的方法来做?正如您所见,我缺乏理论背景,因此非常感谢您的帮助。

虽然这是一个统计问题,但我可以给出与scikit learn相关的答案

机器学习的可信度取决于模型使用的方法。例如,使用3-NN(您使用的),predict_proba(x)将为您提供n/3,其中x是x的3个最近邻居中的“1类”数。你可以很容易地说,如果n/3小于0.5,这意味着最近邻居中的“1类”少于2个,而“0类”多于2个。这意味着你的x更可能来自“0级”。(我想你已经知道了)

对于另一种方法,如SVM,置信度可以是从所考虑的点到超平面的距离,或者对于集合模型,置信度可以是针对某一类的聚合投票数。Scikit learn的predict_proba()使用模型中可用的内容

对于多类问题(假设Y可以等于A、B或C),ypu有两种主要方法,有时在scikit学习中直接考虑

第一种方法是一对一。它基本上将每个新样本作为AvsB AvsC和BvsC模型进行计算,并取最可能值(想象一下,如果A战胜B,战胜C,那么正确的等级很可能是A,恼人的情况可以通过选择在比赛中信心最高的等级来解决。例如,如果A战胜B,B战胜C,C战胜C,如果A战胜B的信心高于其他等级,那么最有可能是A)

第二种方法是OneVsAll,在这一方法中,你计算A对B和C,B对A和C,C对A和B,并通过查看信心分数来选择最有可能的课程

使用scikit learn的predict()将始终根据predict_proba给出的信心分数给出最有可能的类

我建议你仔细阅读

编辑:

啊,我明白你想做什么了。predict_proba()有一个很大的缺陷:假设你在新实例中有一个很大的异常值(例如,爱好电子游戏和枪支的女性,工作是软件开发人员等等),如果你使用例如k-NN,那么你的异常值将在其他类别的点预测云中当实例为女性时,可以为男性给出1作为信心分数。但是,对于不确定的案例(例如,男性或女性,以电子游戏和枪支为嗜好,在托儿所工作),这将很好,因为predict_proba()会给出约0.5的分数


我不知道是否可以使用更好的方法。如果你有足够的训练样本来进行交叉验证,我建议你可以看看ROC和PR曲线来优化你的阈值。

这确实是一个统计问题。看看交叉验证。我已经做过了,但没有人回答……你能链接到你的问题吗ere?回答率通常较低,因为答案通常更复杂,合格的回答者相对较少。很多好问题没有被注意到或没有得到回答。此外,你可能会更幸运地搜索简历;我们会收到很多关于多类分类的问题。这是我的帖子(完全是同一个问题):谢谢,我稍后会看一看,看我是否能帮上忙。谢谢你非常透彻的回答。不过,请注意,就我而言,我只想得到“最有可能的最有可能的”类。我的意思是,我只对那些我的分类器对其决策有90%或以上把握的新实例感兴趣。我如何通过scikit learn实现这一点?你能提供一个真实的示例或应用程序,以便我可以更精确地看到你试图实现的目标吗?谢谢!刚刚添加了一个“示例”我期待着您的意见。