- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 scikit-learn 中的 DecisionTreeClassifier 对一些数据进行分类。我还使用其他算法,并使用精确召回指标下的面积来比较它们。问题是 DecisionTreeClassifier 的 AUPRC 形状是正方形,而不是您对该指标期望的通常形状。
以下是我计算 DecisionTreeClassifier 的 AUPRC 的方法。我在计算时遇到了一些麻烦,因为 DecisionTreeClassifer 没有像 LogisticRegression 这样的其他分类器那样的 decision_function()
这些是我得到的 SVM、Logistic 回归和 DecisionTreeClassifier 的 AUPRC 结果
这是我计算 DecisionTreeClassifier 的 AUPRC 的方法
def execute(X_train, y_train, X_test, y_test):
tree = DecisionTreeClassifier(class_weight='balanced')
tree_y_score = tree.fit(X_train, y_train).predict(X_test)
tree_ap_score = average_precision_score(y_test, tree_y_score)
precision, recall, _ = precision_recall_curve(y_test, tree_y_score)
values = {'ap_score': tree_ap_score, 'precision': precision, 'recall': recall}
return values
以下是我计算 SVM 的 AUPRC 的方法:
def execute(X_train, y_train, X_test, y_test):
svm = SVC(class_weight='balanced')
svm.fit(X_train, y_train.values.ravel())
svm_y_score = svm.decision_function(X_test)
svm_ap_score = average_precision_score(y_test, svm_y_score)
precision, recall, _ = precision_recall_curve(y_test, svm_y_score)
values = {'ap_score': svm_ap_score, 'precision': precision, 'recall': recall}
return values
以下是我计算 LogisticRegression 的 AUPRC 的方法:
def execute(X_train, y_train, X_test, y_test):
lr = LogisticRegression(class_weight='balanced')
lr.fit(X_train, y_train.values.ravel())
lr_y_score = lr.decision_function(X_test)
lr_ap_score = average_precision_score(y_test, lr_y_score)
precision, recall, _ = precision_recall_curve(y_test, lr_y_score)
values = {'ap_score': lr_ap_score, 'precision': precision, 'recall': recall}
return values
然后我将它们称为方法并绘制结果,如下所示:
import LogReg_AP_Harness as lrApTest
import SVM_AP_Harness as svmApTest
import DecTree_AP_Harness as dtApTest
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import label_binarize
import matplotlib.pyplot as plt
def do_work(df):
X = df.ix[:, df.columns != 'Class']
y = df.ix[:, df.columns == 'Class']
y_binarized = label_binarize(y, classes=[0, 1])
n_classes = y_binarized.shape[1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3, random_state=0)
_, _, y_train_binarized, y_test_binarized = train_test_split(X, y_binarized, test_size=.3, random_state=0)
print('Executing Logistic Regression')
lr_values = lrApTest.execute(X_train, y_train, X_test, y_test)
print('Executing Decision Tree')
dt_values = dtApTest.execute(X_train, y_train_binarized, X_test, y_test_binarized)
print('Executing SVM')
svm_values = svmApTest.execute(X_train, y_train, X_test, y_test)
plot_aupr_curves(lr_values, svm_values, dt_values)
def plot_aupr_curves(lr_values, svm_values, dt_values):
lr_ap_score = lr_values['ap_score']
lr_precision = lr_values['precision']
lr_recall = lr_values['recall']
svm_ap_score = svm_values['ap_score']
svm_precision = svm_values['precision']
svm_recall = svm_values['recall']
dt_ap_score = dt_values['ap_score']
dt_precision = dt_values['precision']
dt_recall = dt_values['recall']
plt.step(svm_recall, svm_precision, color='g', alpha=0.2,where='post')
plt.fill_between(svm_recall, svm_precision, step='post', alpha=0.2, color='g')
plt.step(lr_recall, lr_precision, color='b', alpha=0.2, where='post')
plt.fill_between(lr_recall, lr_precision, step='post', alpha=0.2, color='b')
plt.step(dt_recall, dt_precision, color='r', alpha=0.2, where='post')
plt.fill_between(dt_recall, dt_precision, step='post', alpha=0.2, color='r')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.ylim([0.0, 1.05])
plt.xlim([0.0, 1.0])
plt.title('SVM (Green): Precision-Recall curve: AP={0:0.2f}'.format(svm_ap_score) + '\n' +
'Logistic Regression (Blue): Precision-Recall curve: AP={0:0.2f}'.format(lr_ap_score) + '\n' +
'Decision Tree (Red): Precision-Recall curve: AP={0:0.2f}'.format(dt_ap_score))
plt.show()
在 do_work()
方法中,我必须对 y
进行二值化,因为 DecisionTreeClassifier 没有 descision_function()
。我采用了 here 的方法.
这是情节:
我想归根结底是我错误地计算了 DecisionTreeClassifier 的 AUPRC。
最佳答案
对于DecisionTreeClassifier
,将predict
替换为pred_proba
;后者的作用与决策函数相同。
关于python - DecisionTreeClassifier 的精确召回曲线下的面积是一个正方形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49632828/
我正在制作一个交互式建模工具。这个想法是用决策树生成变量。然而,这个变量需要具有经济意义(我希望能够删除理论上没有意义的分割)。因此,我用plotly绘制了一棵树,以便能够监听用户点击的位置。我在下面
我正在尝试对具有多个级别的对象进行分类。我解释它的最好方法是用一个例子: 我可以做到这一点: from sklearn import tree features = ['Hip Hop','Bosto
我正在使用 scikit-learn 中的 DecisionTreeClassifier 对一些数据进行分类。我还使用其他算法,并使用精确召回指标下的面积来比较它们。问题是 DecisionTreeC
有没有办法计算 decision tree 中两片叶子之间的距离? . 距离是指从一片叶子到另一片叶子的节点数。 例如,在此示例图中: distance(leaf1, leaf2) == 1 dist
我有两个学习过的sklearn.tree.tree.DecisionTreeClassifier。两者都使用相同的训练数据进行训练。两者都为决策树学习了不同的最大深度。 decision_tree_m
我正在使用 sklearn.tree.DecisionTreeClassifier 来训练 3-class 分类问题。 3个类的记录数如下: A: 122038 B: 43626 C: 6678 当我
我正在使用 python sklearn RandomForestClassifier 并尝试导出决策树。 基本代码如下: from sklearn import tree with open(dot
我正在尝试使用 DataFrame(pandas)从 sklearn 实现 DecisionTreeClassifier,但在分割数据时它返回一些奇怪的值。我的数据集包含 3 列,其 PIL 逊相关系
我一直在玩 sklearn 并使用虹膜数据在线遵循一些简单的示例。 我现在开始使用一些其他数据。我不确定这种行为是否正确,而且我有误解,但每次我调用 fit(x,y) 时,我都会得到完全不同的树数据。
使用 DecisionTreeClassifier I visualized it using graphviz 时,我不得不说,令我惊讶的是,它似乎采用分类数据并将其用作连续数据。 我的所有特征都是
我正在训练一个 sklearn.tree.DecisionTreeClassifier。我从 pandas.core.frame.DataFrame 开始。这个数据框的一些列是真正应该是分类的字符串。
我正在尝试使用字符串中的参数的 DecisionTreeClassifier。 print d # d= 'max_depth=100' clf = DecisionTreeClassifi
我有一个数据集,其中的类是不平衡的。这些类是 0、1 或 2。 如何计算每个类别的预测误差,然后在 scikit-learn 中相应地重新平衡权重? 最佳答案 如果你想完全平衡(将每个类视为同等重要)
我是机器学习新手 - 特别是分类技术。 我已经在线阅读了一些教程,并且正在使用 iris data set 。我尝试使用 将数据集拆分为训练和测试 train, test = train_test_s
如何告诉 ml.DecisionTreeClassifier 对连续特征而不是分类特征进行评分,而无需使用 Bucketizer 或 QuantileDiscretizer 方法? 下面是我将连续特征
我正在使用这个数据集Weath Based on age并且文档指出准确度应在 84% 左右。不幸的是,我的程序的准确率是 25% 为了处理数据,我执行了以下操作: 1. Loaded the .tx
假设我有一个数据集: X y 20 0 22 0 24 1 27 0 30 1 40 1 20
我有一个来自 sklearn 的决策树分类器,我使用 pydotplus 来展示它。然而,当我的演示文稿(熵、样本和值)的每个节点上有很多信息时,我真的不喜欢。 为了更容易向人们解释,我只想保留决定和
我已经安装了 DecisionTreeClassifier 的实例,并且正在尝试提取每个节点的预测概率。我需要这个来创建类似于下面所示的自定义决策树可视化。 我可以导出每个节点的特征和阈值。 dtc.
我使用 sklearn.tree.DecisionTreeClassifier 构建决策树。通过最佳参数设置,我得到了一棵有不必要叶子的树(参见下面的示例图片 - 我不需要概率,所以用红色标记的叶子节
我是一名优秀的程序员,十分优秀!