- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
scikit-learn 的 DecisionTreeClassifier
支持通过 predict_proba()
函数预测每个类的概率。 DecisionTreeRegressor
中不存在这一点:
AttributeError: 'DecisionTreeRegressor' object has no attribute 'predict_proba'
我的理解是,决策树分类器和回归器之间的基 native 制非常相似,主要区别在于回归器的预测是作为潜在叶子的平均值来计算的。所以我希望能够提取每个值的概率。
是否有其他方法来模拟这个,例如通过处理tree structure ? code对于 DecisionTreeClassifier
的 predict_proba
不能直接转移。
最佳答案
此函数改编自 hellpanderr's answer 的代码提供每个结果的概率:
from sklearn.tree import DecisionTreeRegressor
import pandas as pd
def decision_tree_regressor_predict_proba(X_train, y_train, X_test, **kwargs):
"""Trains DecisionTreeRegressor model and predicts probabilities of each y.
Args:
X_train: Training features.
y_train: Training labels.
X_test: New data to predict on.
**kwargs: Other arguments passed to DecisionTreeRegressor.
Returns:
DataFrame with columns for record_id (row of X_test), y
(predicted value), and prob (of that y value).
The sum of prob equals 1 for each record_id.
"""
# Train model.
m = DecisionTreeRegressor(**kwargs).fit(X_train, y_train)
# Get y values corresponding to each node.
node_ys = pd.DataFrame({'node_id': m.apply(X_train), 'y': y_train})
# Calculate probability as 1 / number of y values per node.
node_ys['prob'] = 1 / node_ys.groupby(node_ys.node_id).transform('count')
# Aggregate per node-y, in case of multiple training records with the same y.
node_ys_dedup = node_ys.groupby(['node_id', 'y']).prob.sum().to_frame()\
.reset_index()
# Extract predicted leaf node for each new observation.
leaf = pd.DataFrame(m.decision_path(X_test).toarray()).apply(
lambda x:x.to_numpy().nonzero()[0].max(), axis=1).to_frame(
name='node_id')
leaf['record_id'] = leaf.index
# Merge with y values and drop node_id.
return leaf.merge(node_ys_dedup, on='node_id').drop(
'node_id', axis=1).sort_values(['record_id', 'y'])
示例(请参阅 this notebook ):
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
X, y = load_boston(True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
# Works better with min_samples_leaf > 1.
res = decision_tree_regressor_predict_proba(X_train, y_train, X_test,
random_state=0, min_samples_leaf=5)
res[res.record_id == 2]
# record_id y prob
# 25 2 20.6 0.166667
# 26 2 22.3 0.166667
# 27 2 22.7 0.166667
# 28 2 23.8 0.333333
# 29 2 25.0 0.166667
关于python - DecisionTreeRegressor 的 Predict_proba 的等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53586860/
我正在使用 DecisionTreeRegressor 调整模型。 tuned_parameters = [{'splitter': ['best'], 'max_leaf_nodes': [2,
我的理解是: 在回归树中:每个叶子的目标值计算为在训练期间到达该叶子的实例的目标值的平均值。 在模型树中:每个叶子的值都是使用特征子集的线性函数,通过对训练期间到达该叶子的实例执行线性回归来确定。 s
我的理解是: 在回归树中:每个叶子的目标值计算为在训练期间到达该叶子的实例的目标值的平均值。 在模型树中:每个叶子的值都是使用特征子集的线性函数,通过对训练期间到达该叶子的实例执行线性回归来确定。 s
我正在尝试使用以下代码计算 DecisionTreeRegressor 的分数: from sklearn import preprocessing from sklearn.model_select
我正在尝试评估特征的相关性,并且我正在使用DecisionTreeRegressor() 相关部分代码如下: # TODO: Make a copy of the DataFrame, using t
我一直在尝试分析我在 sklearn 中训练的 DecisionTreeRegressor。我发现http://scikit-learn.org/stable/auto_examples/tree/p
我想使用 DecisionTreeRegressor 进行多输出回归,但我想为每个输出使用不同的“重要性”权重(例如,准确预测 y1 的重要性是预测 y2 的两倍)。 有没有办法将这些权重直接包含在
scikit-learn 的 DecisionTreeClassifier 支持通过 predict_proba() 函数预测每个类的概率。 DecisionTreeRegressor 中不存在这一点
有什么区别:DecisionTreeRegressor(splitter='random') 和 DecisionTreeRegressor(splitter='best') 如果两者似乎都抛出随机预
我试图弄清楚决策树回归预测是如何生成的。我所介绍的文档中没有对此进行详细解释。 来自sklearn DecisionTreeRegressor documentation关于预测函数: For a c
我遇到了一个需要我们使用多维 Y 的 ML 问题。现在我们正在这个输出的每个维度上训练独立的模型,它没有利用来自事实输出相关的附加信息. 我一直在读this了解更多关于已真正扩展以处理多维输出的少数
(1) 运行 Windows 8(2) 下载并安装,Anaconda for Windows, PYTHON 2.7 (3) 来自 Anaconda 提示符: conda install scikit
默认情况下,scikit-learn DecisionTreeRegressor 返回给定叶节点中训练集中所有目标值的平均值。 但是,我有兴趣从我的训练集中取回落入预测叶节点的目标值列表。这将使我能够
我正在学习机器学习并完成波士顿房价预测任务。我有以下代码: from sklearn.metrics import fbeta_score, make_scorer from sklearn.mode
我想这是可能的,因为在 fit 函数的定义中 it says : X : array-like, shape = [n_samples, n_features] 现在我有, 我当然可以生成决策树的字符
目前,我可以检索我在训练样本上生长的每个节点的 ID,我的测试样本的每一行最有可能属于: tree.tree_.apply(np.array(X_test).astype(np.float32)) 其
正在阅读本文great paper并尝试实现这一点: ...我们对待每一个人树作为一个分类特征,以实例最终落入的叶子的索引。我们使用 1-此类特征的 of-K 编码。例如,考虑图 1 中的提升树模型有
我目前正在研究一个预测问题,当我遇到以下问题时,我试图用 scikit-learns DecisionTreeRegressor 解决这个问题: When fitting a tree specify
我是一名优秀的程序员,十分优秀!