scikit学习决策树模型评估

时间:2016-08-23 06:55:39

标签: python python-2.7 machine-learning scikit-learn decision-tree

以下是相关的代码和文档,想知道默认cross_val_score没有明确指定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.      ])

的问候, 林

2 个答案:

答案 0 :(得分:3)

来自user guide

  

默认情况下,在每次CV迭代时计算的分数是分数   估算器的方法。可以通过使用来改变这一点   评分参数:

来自DecisionTreeClassifier documentation

  

返回给定测试数据和标签的平均准确度。在   多标签分类,这是一个子集精度   苛刻的指标,因为您需要每个标签集的每个样本   正确预测。

不要被"平均准确性混淆,"它只是常规的方式来计算准确性。点击source的链接:

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

metrics.accuracy_score

source
def accuracy_score(y_true, y_pred, normalize=True, sample_weight=None):
    ...
    # Compute accuracy for each possible representation
    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)

如果你still aren't convinced:

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,因此它只是正确预测的平均数。

答案 1 :(得分:1)

如果未给出评分参数,cross_val_score将默认使用您正在使用的估算工具的.score方法。对于DecisionTreeClassifier,它的平均准确度(如下面的文档字符串所示):

In [11]: DecisionTreeClassifier.score?
Signature: DecisionTreeClassifier.score(self, X, y, sample_weight=None)
Docstring:
Returns the mean accuracy on the given test data and labels.

In multi-label classification, this is the subset accuracy
which is a harsh metric since you require for each sample that
each label set be correctly predicted.

Parameters
----------
X : array-like, shape = (n_samples, n_features)
    Test samples.

y : array-like, shape = (n_samples) or (n_samples, n_outputs)
    True labels for X.

sample_weight : array-like, shape = [n_samples], optional
    Sample weights.

Returns
-------
score : float
    Mean accuracy of self.predict(X) wrt. y.