scikit learn决策树模型评估

这里是相关的代码和文档,我想知道在没有明确指定score参数的情况下,默认的cross_val_score输出的数组表示的是精确度、AUC还是其他一些指标?

使用Python 2.7和miniconda解释器。

http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html

>>> from sklearn.datasets import load_iris>>> from sklearn.cross_validation import cross_val_score>>> from sklearn.tree import DecisionTreeClassifier>>> clf = DecisionTreeClassifier(random_state=0)>>> iris = load_iris()>>> cross_val_score(clf, iris.data, iris.target, cv=10)...                             ...array([ 1.     ,  0.93...,  0.86...,  0.93...,  0.93...,        0.93...,  0.93...,  1.     ,  0.93...,  1.      ])

此致,林


回答:

用户指南中得知:

默认情况下,每次交叉验证迭代计算的分数是估计器的score方法。可以通过使用scoring参数来更改这一点:

从DecisionTreeClassifier的文档中得知:

返回给定测试数据和标签的平均准确率。在多标签分类中,这是子集准确率,这是一个严格的指标,因为你需要每个样本的每个标签集都被正确预测。

不要被“平均准确率”所迷惑,这只是计算准确率的常规方式。请查看源码

    from .metrics import accuracy_score    return accuracy_score(y, self.predict(X), sample_weight=sample_weight)

现在是metrics.accuracy_score源码

def accuracy_score(y_true, y_pred, normalize=True, sample_weight=None):    ...    # 为每种可能的表示计算准确率    y_type, y_true, y_pred = _check_targets(y_true, y_pred)    if y_type.startswith('multilabel'):        differing_labels = count_nonzero(y_true - y_pred, axis=1)        score = differing_labels == 0    else:        score = y_true == y_pred    return _weighted_sum(score, sample_weight, normalize)

如果你仍然不相信:

def _weighted_sum(sample_score, sample_weight, normalize=False):    if normalize:        return np.average(sample_score, weights=sample_weight)    elif sample_weight is not None:        return np.dot(sample_score, sample_weight)    else:        return sample_score.sum()

注意:对于accuracy_score,normalize参数默认设置为True,因此它只是返回布尔numpy数组的np.average,因此它只是正确预测的平均数。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注