当前位置: 首页 > 面试题库 >

以安全正确的方式使用RandomForestClassifier的predict_proba()函数

令狐宏伟
2023-03-14
问题内容

我正在使用Scikit-learn在数据集上应用机器学习算法。有时我需要具有标签/类的概率,而不是标签/类本身的概率。我不希望将垃圾邮件/非垃圾邮件作为电子邮件的标签,而仅希望举例说明:给定电子邮件为垃圾邮件的概率为0.78。

为此,我使用predict_proba()RandomForestClassifier如下:

clf = RandomForestClassifier(n_estimators=10, max_depth=None,
    min_samples_split=1, random_state=0)
scores = cross_val_score(clf, X, y)
print(scores.mean())

classifier = clf.fit(X,y)
predictions = classifier.predict_proba(Xtest)
print(predictions)

我得到了那些结果:

 [ 0.4  0.6]
 [ 0.1  0.9]
 [ 0.2  0.8]
 [ 0.7  0.3]
 [ 0.3  0.7]
 [ 0.3  0.7]
 [ 0.7  0.3]
 [ 0.4  0.6]

第二列用于分类:垃圾邮件。但是,我对结果有两个主要问题,对此我不确定。第一个问题是结果代表标签的概率,而不受我的数据大小的影响吗?第二个问题是结果仅显示一位数字,在某些情况下0.701的概率与0.708的差异非常大。例如,是否可以获取下一个5位数字?


问题答案:
  1. 结果中得到的位数不止一个,您确定不是由于您的数据集引起的吗?(例如,使用非常小的数据集将产生简单的决策树,从而产生“简单”的概率)。否则,它可能只能是显示一位数字的显示屏,而是尝试打印predictions[0,0]

  2. 我不确定您的意思是“概率不受数据大小的影响”。如果您担心自己不想预测垃圾邮件,例如太多垃圾邮件,通常要做的是使用一个阈值t,使您预测1 if proba(label==1) > t。这样,您可以使用阈值来平衡预测,例如限制垃圾邮件的全球概率。如果你想在全球范围内分析模型,我们通常计算面积受试者工作特征(ROC)曲线的曲线(AUC)下(参见维基百科的文章在这里)。基本上,ROC曲线是根据阈值对您的预测的描述t

希望能帮助到你!



 类似资料:
  • 问题内容: 我一直在努力,但是我不明白。我是编程新手,所以几乎每个新步骤都是一个实验。尽管在没有参数/返回值的情况下调度正常的闭包没有问题,但到目前为止,我还不了解如何处理带有(多个)参数并最终返​​回的函数。 为了弄清楚适当的“解决方法”的逻辑,如果有人可以发布一个实际的示例,这样我就可以确定自己是否正确,那就太好了。我将非常感谢您提供的任何帮助…如果其他一些实际示例以更好的方式说明了该主题,请

  • 本文向大家介绍Tesserocr库的正确安装方式,包括了Tesserocr库的正确安装方式的使用技巧和注意事项,需要的朋友参考一下 win10,直接使用 pip install tesserocr 的命令 如果输出如下错误提示: 直接用Anaconda 重装Python 使用命令行输入: conda install -c simonflueckiger tesserocr 安装的结果即为: tes

  • 即;每个可调用方调用progressBarUpdate(): 每个doSomeStuff()都有自己的异常处理,如果发生错误或抛出异常,则返回一个空值。这就是为什么返回类型是List,并且在这种情况下返回null的原因。调用项和它们返回的文件列表之间没有交叉,它们都维护自己的文件列表。 我发现它工作得很好,但偶尔会抛出窗体的InterruptedException: 我修改了代码,使条件nv>=m

  • 下面我分享了我的代码,我试图使用线程安全的Nashorn作为脚本引擎来评估简单的数学公式。公式将类似于“a*b/2”,其中a 我需要知道这种方法是否有助于使Nashorn线程在这个用例中安全。我在Attila的回答中读到,我们可以在线程之间共享脚本引擎对象,因为它们是线程安全的。 对于bindings和eval,因为我们正在为每次执行evaluate创建新线程,每个线程都有自己的bindings对

  • 本文向大家介绍Javascript中parseInt的正确使用方式,包括了Javascript中parseInt的正确使用方式的使用技巧和注意事项,需要的朋友参考一下 定义和用法 parseInt() 函数可解析一个字符串,并返回一个整数。 语法 parseInt(string, radix) 当参数radix的值为 0,或没有设置该参数时,parseInt()会根据 string来判断数字的基数

  • 我搜索一个好的方法来复制一个文件(二进制或文本)。我写了几个样本,每个人都工作。但我想听听经验丰富的程序员的意见。 我错过了好的例子,并搜索了一种与C++一起工作的方法。 ANSI-C方式 POSIX方法(K&R在“C编程语言”中使用该方法,更低级别) Kiss-C++-StreamBuffer-Way 复制-算法-C++-方法 Own-Buffer-C++-Way LINUX-WAY//需要ke