2

下面是相關的代碼和文檔,想知道默認cross_val_score沒有明確指定score,輸出數組意味着精度,AUC或一些其他指標?scikit學習決策樹模型評估

使用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.  ]) 

問候, 林

回答

1

user guide

默認情況下,在每個CV的迭代中計算的得分是估計器的得分 方法。它是可以通過使用 得分參數可以改變:

從DecisionTreeClassifier documentation

返回給定的測試數據和標籤的平均準確度。在 多標籤分類中,這是子集精度,這是一個嚴格的度量標準,因爲您需要對每個標籤集合爲 的每個樣本正確預測。

不要被「平均準確度」所迷惑,它只是計算準確度的常規方法。按照鏈接到source

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

現在sourcemetrics.accuracy_score

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規範化參數默認爲True,因此只需b。返回np.average oolean numpy數組,因此它只是正確預測的平均數量。

+0

謝謝juanpa.arrivillaga,如果它是一個兩類分類問題,每個預測是正確的或錯誤的。混淆意味着什麼意思? –

+1

@ LinMa看我的編輯 - 它只是準確性。 –

+0

感謝juanpa耐心回答,將您的答覆標記爲答案。 –

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. 
+0

感謝Randy,如果是兩類分類問題,那麼每個預測都是正確的或者錯誤的。混淆意味着什麼意思? –

+1

假設您預測爲0/1,這只是兩類分類問題的正確分類的百分比。如果你預測概率,它將是每個預測的(1預測誤差)的平均值。 –

+0

感謝蘭迪。 :) –