使用python+sklearn實現度量和評分

2021-03-02 機器學習算法與知識圖譜
估計器評分方法:估計器提供了一種score方法,該方法為其要解決的問題提供默認的評估標準。在此章節上沒有討論該方法的使用,但每個估計器的文檔章節中都對此方法進行了討論。評分參數:使用交叉驗證(例如 model_selection.cross_val_score和 model_selection.GridSearchCV)的模型評估工具依賴於一個內部評分策略。這在「評分參數:定義模型評估規則」的章節中進行了討論。度量函數:metrics實現了一些函數用於以某種特殊目的評估模型預測誤差。這些度量指標在分類度量,多標籤排名(Multilabel ranking)度量,回歸度量和聚類度量的各章節中都有詳細的介紹。最後,虛擬估計器(Dummy estimators)可以用來獲取這些度量的基準值,這對進行隨機預測很有用。也可以看看:對於「成對」度量指標,是在樣本之間的而不是在估計量或者預測值之間,請參閱成對度量,親和力(Affinities)和內核部分。1. scoring 參數:定義模型評估準則模型選擇和評估使用工具,例如 model_selection.GridSearchCV和 model_selection.cross_val_score,接受一個scoring參數,該參數控制著估計器的評估過程中使用什麼樣的度量指標。1.1. 一般情況: 使用預定義的值對於最常見的用例,您可以為scoring參數指定一個評分器對象(scorer object)。下表顯示了所有可能的值。所有評分器對象均遵循以下約定:較高的返回值優先於較低的返回值。因此,度量模型和數據之間的距離度量指標,例如metrics.mean_squared_error可以作為neg_mean_squared_error,返回變負的指標值。

>>> from sklearn import svm, datasets>>> from sklearn.model_selection import cross_val_score>>> X, y = datasets.load_iris(return_X_y=True)>>> clf = svm.SVC(random_state=0)>>> cross_val_score(clf, X, y, cv=5, scoring='recall_macro')array([0.96..., 0.96..., 0.96..., 0.93..., 1.        ])>>> model = svm.SVC()>>> cross_val_score(model, X, y, cv=5, scoring='wrong_choice')Traceback (most recent call last):ValueError: 'wrong_choice' is not a valid scoring value. Use sorted(sklearn.metrics.SCORERS.keys()) to get valid options.

注意:通過ValueError異常列舉出來的那些值對應於度量預測精度的函數,它們會在下面的小節中介紹。用於這些函數的評分器對象被存放在sklearn.metrics.SCORERS字典中。1.2.利用度量函數metric自定義評分策略sklearn.metrics模塊還提供了一組簡單的函數,當給定真值和預測值的時候用來度量一個預測錯誤:以_score結尾的函數返回一個值進行最大化,該值越高代表預測越好。以_error或_loss結尾的函數返回一個值進行最小化,值越低代表預測越好。當我們使用函數make_scorer把這種越小越好的度量轉換成評分對象的時候,就需要設置參數greater_is_better為False(這個參數默認是True,對這個參數下面還會解釋)。以下各節詳細介紹了可用於各種機器學習任務的度量指標。許多度量(metrics)指標沒有被命名以使得它們被用作scoring值,有時是因為它們需要額外的參數,例如fbeta_score。在這種情況下,您需要生成一個適當的評分對象,最簡單方法是調用make_scorer生成一個用於評分的可調用對象。該函數將度量(metrics)指標轉換為可用於模型評估的可調用對象。一個典型的用法是從庫中封裝一個已經存在的具有非默認值參數的度量(metric)函數,例如fbeta_score函數的beta參數:
>>> from sklearn.metrics import fbeta_score, make_scorer>>> ftwo_scorer = make_scorer(fbeta_score, beta=2)>>> from sklearn.model_selection import GridSearchCV>>> from sklearn.svm import LinearSVC>>> grid = GridSearchCV(LinearSVC(), param_grid={'C': [1, 10]},...                     scoring=ftwo_scorer, cv=5)

第二個用法是使用make_scorer,從一個簡單的python函數構建一個完全自定義的評分對象,該函數可以接收多個參數:您想使用的python函數(下面的示例中的my_custom_loss_func )您的python函數返回分數(greater_is_better=True默認值)還是損失(loss)(greater_is_better=False)。如果損失(loss),則評分器對象對python函數的輸出取負號,這符合交叉驗證約定,即評分器返回越高的值預測越好。如果你要定義的是一個分類評分度量(metrics),還要確認您的python函數是否具有連續的決策確定性(decision certainties) (needs_threshold=True)。默認值為False。任意的附加參數,例如f1_score函數中的beta或labels。下面是構建一個自定義評分器的例子,並且使用了參數greater_is_better:
>>> import numpy as np>>> def my_custom_loss_func(y_true, y_pred):...     diff = np.abs(y_true - y_pred).max()...     return np.log1p(diff)...>>> # score將會對my_custom_loss_func函數的返回值取反,>>> # 這將會是 np.log(2), 也就是0.693。>>> # X 和 y 的值的定義在下面。>>> score = make_scorer(my_custom_loss_func, greater_is_better=False)>>> X = [[1], [1]]>>> y = [0, 1]>>> from sklearn.dummy import DummyClassifier>>> clf = DummyClassifier(strategy='most_frequent', random_state=0)>>> clf = clf.fit(X, y)>>> my_custom_loss_func(clf.predict(X), y)0.69...>>> score(clf, X, y)-0.69...

1.3. 實現自己的評分對象您可以從頭開始構建自己的評分對象,而無需使用make_scorer來生成更加靈活的模型評分器(model scorers)。如果一個python可調用對象被叫做評分器(scorer),那麼它需要符合以下兩個規則所指定的協議:可以使用參數(estimator, X, y)來調用它,其中estimator是要被評估的模型,X是驗證數據,y是真實目標變量 (在有監督情況下)或None(在無監督情況下)。它返回一個浮點數,該浮點數作為參考來量化estimator的預測質量。同樣,按照慣例,越高的數字越好, 所以如果您的評分器(scorer)返回損失(loss),那麼這個返回值應該被取負號 。注意: 在n_jobs > 1的函數中使用自定義評分器雖然在定義調用函數的同時,自定義評分函數應該與默認的joblib後端(loky)一起使用,但從另一個模塊導入它將會是更可靠的方法,並且它是獨立於joblib後端工作的。例如,在下面的示例中,要給n_jobs傳入一個大於1的值,custom_scoring_function函數將保存在用戶創建的模塊(custom_scorer_module.py)中並可以這樣導入:
>>> from custom_scorer_module import custom_scoring_function >>> cross_val_score(model,...  X_train,...  y_train,...  scoring=make_scorer(custom_scoring_function, greater_is_better=False),...  cv=5,...  n_jobs=-1)

1.4. 使用多度量(metric)指標評估Scikit-learn還允許在GridSearchCV,RandomizedSearchCV和cross_validate中進行多度量指標的評估。這有兩種方法可以為scoring參數指定多個評分指標:把多個度量(metrics)指標的名字以字符串列表的方式作為參數傳給scoring:
>>> scoring = ['accuracy', 'precision']

以字典的形式把評分器的名稱映射到評分函數上,然後把該字典作為參數傳給scoring:
>>> from sklearn.metrics import accuracy_score>>> from sklearn.metrics import make_scorer>>> scoring = {'accuracy': make_scorer(accuracy_score),...            'prec': 'precision'}

要注意的是字典的值既可以是評分函數也可以是sklearn預定義的度量(metric)指標的名字字符串。目前,只有那些返回單個得分值的評分函數可以被傳到字典中,那些有多個返回值的評分函數不被允許傳入。如果非要這麼做的話,必須對其進行封裝使其只有單個返回值:
>>> from sklearn.model_selection import cross_validate>>> from sklearn.metrics import confusion_matrix>>> # 一個簡單的toy二分類數據集>>> X, y = datasets.make_classification(n_classes=2, random_state=0)>>> svm = LinearSVC(random_state=0)>>> def tn(y_true, y_pred): return confusion_matrix(y_true, y_pred)[0, 0]>>> def fp(y_true, y_pred): return confusion_matrix(y_true, y_pred)[0, 1]>>> def fn(y_true, y_pred): return confusion_matrix(y_true, y_pred)[1, 0]>>> def tp(y_true, y_pred): return confusion_matrix(y_true, y_pred)[1, 1]>>> scoring = {'tp': make_scorer(tp), 'tn': make_scorer(tn),...            'fp': make_scorer(fp), 'fn': make_scorer(fn)}>>> cv_results = cross_validate(svm.fit(X, y), X, y, cv=5, scoring=scoring)>>> # 獲得測試集true positive的得分>>> print(cv_results['test_tp'])[10  9  8  7  8]>>> # 獲得測試集false negative的得分>>> print(cv_results['test_fn'])[0 1 2 3 2]

2. 分類問題的度量指標sklearn.metrics模塊實現了多種損失(loss),評分(score)和工具(utility)函數,來度量分類器性能。一些度量指標可能需要對正類(positive class),置信度值(confidence values)或二元決策值(binary decisions values)進行概率估計。大多數實現都允許每個樣本通過sample_weight參數為整體得分(overall score)提供加權貢獻(weighted contribution)。這裡面的一部分度量指標僅僅限於在二分類的情況下使用:

下面的這些指標可以用在二分類和多標籤(不是多分類)問題中:

2.1.  從二分類問題到多類或多標籤問題在下面的小節中,我們會逐個講解這些函數,包括一些常用API的註解和度量指標的數學定義。有些度量指標基本上是為二分類任務所服務的(例如f1_score,roc_auc_score)。在這些情況下,默認情況下僅評估正類(positive label),假定把正類標記為1(儘管可以通過pos_label參數進行配置)。將二分類指標擴展應用於多分類或多標籤問題時,數據將被視為二分問題的集合,每個類都有一個二分類指標,然後可以使用多種策略在整個類中計算所有二分類指標的平均值,這些不同的計算平均值的策略在某些特定場景中可能會用到。如果可用,您應該使用average參數來選擇某個平均策略。"macro"簡單地計算二分類指標的平均值,賦予每個類別相同的權重。在不常見的類別是重要的問題上,宏觀平均(macro-averaging)可能是突出其性能的一種方法。另一方面,所有類別同樣重要的假設通常是不真實的, 因此宏觀平均(macro-averaging)將過度強調不常見的類別的典型的低性能。"weighted"通過計算其在真實數據樣本中的存在來對每個類的得分進行加權的二分指標平均值來計算類不平衡。"micro" 使每個樣本類別對總體指標的貢獻均等(樣本權重的結果除外),不是將每個類別的度量指標求和,而是將構成每個類別指標的紅利(dividends)和除數求和,計算總體商。在多標籤設置中,宏觀平均可能是優先選擇的,包括要忽略多數類的多分類。"samples"僅適用於多標籤問題。它不計算每個類別的指標,而是計算評估數據中的每個樣本的真實和預測類別的指標,並返回加權平均。選擇average=None將返回一個數組與每個類的得分。雖然將多類數據作為一個類標籤數組(array of class labels)提供給度量指標,就像二分類目標一樣,但如果多標籤數據指定為標識矩陣(indicator matrix),其中如果樣本i具有標號j ,則[i, j]具有值1,否則為值0。2.2. 準確度得分(Accuracy score)accuracy_score函數計算準確度,也就是計算正確預測的比例(默認)或數量(normalize=False)。在多標籤分類中,該函數返回子集的準確度。對某個樣本的預測標籤的整個集合與該樣本真正的標籤集合嚴格匹配,那么子集準確率就是1.0,反之,子集準確率為0.0。如果
>>> import numpy as np>>> from sklearn.metrics import accuracy_score>>> y_pred = [0, 2, 1, 3]>>> y_true = [0, 1, 2, 3]>>> accuracy_score(y_true, y_pred)0.5>>> accuracy_score(y_true, y_pred, normalize=False)2

>>> accuracy_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2)))0.5

有關使用數據集的排列準確度得分用法的案例,請參閱測試排列對分類得分的重要性。2.3. 平衡準確度得分(Balanced accuracy score)balanced_accuracy_score函數計算平衡準確度,從而避免對不平衡數據集進行過高的性能估計。它是每個類別的召回得分的宏觀平均值,或者是原始準確度,其中,每個樣本均根據其真實類別的逆向流行度(inverse prevalence)進行加權。因此,對於平衡的數據集,該函數的得分與準確度得分是相等的。在二分類情況下,平衡準確度等於靈敏度 (真正率(rue positive rate))和特異性(真負率(true negative rate))的算術平均值 ,或者等於用二分類的預測結果而非分數的ROC曲線下的面積。如果分類器在兩個類上都表現的一樣好,該函數就會退化為傳統的準確度(即正確預測數量除以總的預測數量)。作為對比,如果傳統的準確度比較好,僅僅是因為分類器利用了一個不均衡測試集,此時平衡準確度將會近似地下降到informedness。**注意:**這裡的多類定義似乎是二分類中使用的度量指標的最合理擴展,儘管在文獻中還沒有達成共識:我們的定義:[Mosley2013],[Kelleher2015]和[Guyon2015],其中 [Guyon2015]採用調整後的版本,以確保隨機預測的得分為0,完美的預測得分為1..[Mosley2013]中所描述的類平衡準確度:計算每個類的準確度和召回率之間的最小值。然後將這些值在全部的類上取平均值,以獲得平衡準確度。[Urbanowicz2015]中所描述的平衡準確度:計算每個類別的敏感性和特異性的平均值,然後在全部的類上取平均值。Guyon2015(1,2) I. Guyon, K. Bennett, G. Cawley, H.J. Escalante, S. Escalera, T.K. Ho, N. Macià, B. Ray, M. Saeed, A.R. Statnikov, E. Viegas, Design of the 2015 ChaLearn AutoML Challenge, IJCNN 2015.Mosley2013(1,2) L. Mosley, A balanced approach to the multi-class imbalance problem, IJCV 2010.Kelleher2015 John. D. Kelleher, Brian Mac Namee, Aoife D』Arcy, Fundamentals of Machine Learning for Predictive Data Analytics: Algorithms, Worked Examples, and Case Studies, 2015.Urbanowicz2015 Urbanowicz R.J., Moore, J.H. ExSTraCS 2.0: description and evaluation of a scalable learning classifier system, Evol. Intel. (2015) 8: 89.2.4. Cohen的kappa(Cohen’s kappa)cohen_kappa_score函數計算cohen_kappa_score的統計信息。這個度量指標旨在比較由不同人類標註者給出的標籤,而不是去比較分類器預測和真值。kappa得分(請參閱文檔)是一個介於-1到1之間的數字,得分超過0.8通常被認為是好的一致(good agreement),得分為0或者小於0意味著不一致(no agreement)。Kappa得分既可以用於二分類也可用於多分類,但是不能用於多標籤問題,並且不能針對兩個以上的注釋器(annotators)進行計算該得分。
>>> from sklearn.metrics import cohen_kappa_score>>> y_true = [2, 0, 2, 2, 0, 1]>>> y_pred = [0, 0, 2, 2, 0, 2]>>> cohen_kappa_score(y_true, y_pred)0.4285714285714286

2.5. 混淆矩陣(Confusion matrix)confusion_matrix函數通過計算混淆矩陣來評估分類結果的準確度。混淆矩陣的每一行對應於真實類< https://en.wikipedia.org/wiki/Confusion_matrix >(維基百科和其他參考文獻可能對軸(axes)有不同的約定。)根據定義,在混淆矩陣中,
>>> from sklearn.metrics import confusion_matrix>>> y_true = [2, 0, 2, 2, 0, 1]>>> y_pred = [0, 0, 2, 2, 0, 2]>>> confusion_matrix(y_true, y_pred)array([[2, 0, 0],       [0, 0, 1],       [1, 0, 2]])

plot_confusion_matrix可以用來直觀地表示一個混淆矩陣,如混淆矩陣案例所示,它創建了下圖:該normalize參數允許報告(report)比率而不是計數。可以用3種不同的方式對混淆矩陣進行歸一化:'pred','true'和'all',然後將計數除以每個列,行或整個矩陣的總和。
>>> y_true = [0, 0, 0, 1, 1, 1, 1, 1]>>> y_pred = [0, 1, 0, 1, 0, 1, 0, 1]>>> confusion_matrix(y_true, y_pred, normalize='all')array([[0.25 , 0.125],       [0.25 , 0.375]])

對於二分類問題, 我們可以得到真負(true negatives),假正(false positives),假負(false negatives)和真正(true positives) 的數量:
>>> y_true = [0, 0, 0, 1, 1, 1, 1, 1]>>> y_pred = [0, 1, 0, 1, 0, 1, 0, 1]>>> tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()>>> tn, fp, fn, tp(2, 1, 2, 3)

有關使用混淆矩陣評估分類器輸出質量的案例,請參見混淆矩陣。有關使用混淆矩陣對手寫數字進行分類的案例,請參閱手寫數字識別。有關使用混淆矩陣對文本文檔進行分類的案例,請參見使用稀疏特徵對文本文檔進行分類。2.6. 分類報告(Classification report)classification_report函數生成一個文本報告,其中顯示了主要的分類指標。這是一個帶有自定義target_names 標籤和推斷標籤(inferred labels)的小示例:
>>> from sklearn.metrics import classification_report>>> y_true = [0, 1, 2, 2, 0]>>> y_pred = [0, 0, 2, 1, 0]>>> target_names = ['class 0', 'class 1', 'class 2']>>> print(classification_report(y_true, y_pred, target_names=target_names))              precision    recall  f1-score   support
class 0 0.67 1.00 0.80 2 class 1 0.00 0.00 0.00 1 class 2 1.00 0.50 0.67 2
accuracy 0.60 5 macro avg 0.56 0.50 0.49 5weighted avg 0.67 0.60 0.59 5

有關手寫數字識別的分類報告用法的案例,請參閱識別手寫數字。有關文本文檔分類報告用法的案例,請參閱使用稀疏特徵分類文本文檔。有關使用嵌套交叉驗證的網格搜索的分類報告用法案例,請參閱使用帶有交叉驗證的網格搜索進行參數估計。2.7. 漢明損失(Hamming loss)hamming_loss計算兩組樣本之間的平均漢明損失或漢明距離。如果
>>> from sklearn.metrics import hamming_loss>>> y_pred = [1, 2, 3, 4]>>> y_true = [2, 2, 3, 4]>>> hamming_loss(y_true, y_pred)0.25

>>> hamming_loss(np.array([[0, 1], [1, 1]]), np.zeros((2, 2)))0.75

在多分類中,漢明損失相當於y_true和y_pred之間的漢明距離,這於零一損失(Zero one loss)函數類似。但是,雖然零一損失懲罰的是不與真值集合嚴格匹配的預測集合,但是漢明損失懲罰的是獨立的標籤(individual labels)。因此,漢明損失以零一損失為上界,其取值區間在[0, 1]。預測真實標籤的一個合適的子集或超集將會給出一個範圍在(0,1)之間的漢明損失。2.8. 精度,召回率和F度量指標(Precision, recall and F-measures)直觀地講,精度(precision)指的是分類器不會把負樣本標記為正樣本的能力,召回率(recall)指的是分類器找到數據集中所有的正樣本的能力。在 F度量指標 (

注意,precision_recall_curve函數只能在二分類的情形下使用。average_precision_score函數僅適用於二進位分類和多標籤指示器(multilabel indicator)的情況。plot_precision_recall_curve函數繪製的精度調用如下圖所示。
示例:有關在文本稀疏分類中使用f1_score的案例,請參見使用稀疏特徵對文本文檔進行分類。有關在帶有交叉驗證的網格搜索的參數估計中使用precision_score和recall_score的案例,請參見使用帶有交叉驗證的網格搜索的參數估計。有關在評估分類器輸出質量中使用precision_recall_curve案例,請參見精度-召回(Precision-Recall)。Manning2008 C.D. Manning, P. Raghavan, H. Schütze, Introduction to Information Retrieval, 2008.Everingham2010 M. Everingham, L. Van Gool, C.K.I. Williams, J. Winn, A. Zisserman, The Pascal Visual Object Classes (VOC) Challenge, IJCV 2010.Davis2006 J. Davis, M. Goadrich, The Relationship Between Precision-Recall and ROC Curves, ICML 2006.Flach2015 P.A. Flach, M. Kull, Precision-Recall-Gain Curves: PR Analysis Done Right, NIPS 2015.2.8.1. 二分類在一個二分類任務中,詞語『』正(positive)』』和『』負(negative)』』指的是分類器的預測,詞語『』真(true)』』和『』假(false)』』指的是預測是否和來自外部判斷相互對應。有了上述詞彙的定義,我們就可以給出下面這個表:

在這種情況下,我們可以定義精度(precision),召回率(recall)和F量度指標(F-measure)的概念:
>>> from sklearn import metrics>>> y_pred = [0, 1, 0, 0]>>> y_true = [0, 1, 0, 1]>>> metrics.precision_score(y_true, y_pred)1.0>>> metrics.recall_score(y_true, y_pred)0.5>>> metrics.f1_score(y_true, y_pred)0.66...>>> metrics.fbeta_score(y_true, y_pred, beta=0.5)0.83...>>> metrics.fbeta_score(y_true, y_pred, beta=1)0.66...>>> metrics.fbeta_score(y_true, y_pred, beta=2)0.55...>>> metrics.precision_recall_fscore_support(y_true, y_pred, beta=0.5)(array([0.66..., 1.        ]), array([1. , 0.5]), array([0.71..., 0.83...]), array([2, 2]))

>>> import numpy as np>>> from sklearn.metrics import precision_recall_curve>>> from sklearn.metrics import average_precision_score>>> y_true = np.array([0, 0, 1, 1])>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])>>> precision, recall, threshold = precision_recall_curve(y_true, y_scores)>>> precisionarray([0.66..., 0.5 , 1. , 1. ])>>> recallarray([1. , 0.5, 0.5, 0. ])>>> thresholdarray([0.35, 0.4 , 0.8 ])>>> average_precision_score(y_true, y_scores)0.83...

2.8.2. 多分類和多標籤分類在多分類和多標籤分類任務中,可以將精度,召回率和F量度指標的概念分別應用於每個標籤。有很多方法可以把所有標籤上的結果組合起來,這可以通過設置參數average為 average_precision_score(僅多標籤),f1_score,fbeta_score,precision_recall_fscore_support,precision_score和recall_score來實現。如所以上所描述的那樣。但請注意如果所有標籤都包括了,在多類分類的設置「micro」 平均策略,將會使產生的精度,召回率和F量度指標都跟準確度(accuracy)一樣。還要注意的是「加權(weighted)」平均策略會產生一個取值範圍不在精度和召回率之間的F量度指標得分。

>>> from sklearn import metrics>>> y_true = [0, 1, 2, 0, 1, 2]>>> y_pred = [0, 2, 1, 0, 0, 1]>>> metrics.precision_score(y_true, y_pred, average='macro')0.22...>>> metrics.recall_score(y_true, y_pred, average='micro')0.33...>>> metrics.f1_score(y_true, y_pred, average='weighted')0.26...>>> metrics.fbeta_score(y_true, y_pred, average='macro', beta=0.5)0.23...>>> metrics.precision_recall_fscore_support(y_true, y_pred, beta=0.5, average=None)(array([0.66..., 0.        , 0.        ]), array([1., 0., 0.]), array([0.71..., 0.        , 0.        ]), array([2, 2, 2]...))

對於帶有一個「negative class」的多分類任務,不包括某些標籤是可能的:
>>> metrics.recall_score(y_true, y_pred, labels=[1, 2], average='micro')... # 除了0, 沒有標籤被正確召回(recalled)。0.0

類似的,可以在宏平均中考慮數據樣本中不存在的標籤。
>>> metrics.precision_score(y_true, y_pred, labels=[0, 1, 2, 3], average='macro')0.166...

2.9. Jaccard相似係數得分(Jaccard similarity coefficient score)jaccard_score函數計算成對的標籤集之間的Jaccard相似係數的平均值,也稱為Jaccard索引。給定第
>>> import numpy as np>>> from sklearn.metrics import jaccard_score>>> y_true = np.array([[0, 1, 1],...                    [1, 1, 0]])>>> y_pred = np.array([[1, 1, 1],...                    [1, 0, 0]])>>> jaccard_score(y_true[0], y_pred[0])0.6666...

在帶有二分類標籤指示器(binary label indicators)的多標籤情況下:
>>> jaccard_score(y_true, y_pred, average='samples')0.5833...>>> jaccard_score(y_true, y_pred, average='macro')0.6666...>>> jaccard_score(y_true, y_pred, average=None)array([0.5, 0.5, 1. ])

將多分類問題進行二值化並像處理多標籤問題一樣處理:
>>> y_pred = [0, 2, 1, 2]>>> y_true = [0, 1, 2, 2]>>> jaccard_score(y_true, y_pred, average=None)array([1. , 0. , 0.33...])>>> jaccard_score(y_true, y_pred, average='macro')0.44...>>> jaccard_score(y_true, y_pred, average='micro')0.33...

2.10. 合頁損失(Hinge loss)hinge_loss函數使用合頁損失(僅考慮預測誤差的單邊獨立指標)來計算模型與數據之間的平均距離 。(在支持向量機等最大間隔分類器中使用了合頁損失。)如果類標籤被編碼為+1和-1,
>>> from sklearn import svm>>> from sklearn.metrics import hinge_loss>>> X = [[0], [1]]>>> y = [-1, 1]>>> est = svm.LinearSVC(random_state=0)>>> est.fit(X, y)LinearSVC(random_state=0)>>> pred_decision = est.decision_function([[-2], [3], [0.5]])>>> pred_decisionarray([-2.18...,  2.36...,  0.09...])>>> hinge_loss([-1, 1, 1], pred_decision)

這是一個例子說明在多分類問題中,如何將hinge_loss函數與svm分類器一起使用:
>>> X = np.array([[0], [1], [2], [3]])>>> Y = np.array([0, 1, 2, 3])>>> labels = np.array([0, 1, 2, 3])>>> est = svm.LinearSVC()>>> est.fit(X, Y)LinearSVC()>>> pred_decision = est.decision_function([[-1], [2], [3]])>>> y_true = [0, 2, 3]>>> hinge_loss(y_true, pred_decision, labels)0.56...

2.11. 對數損失(Log loss)對數損失(Log loss),又被稱為邏輯回歸損失(logistic regression loss)或者交叉熵損失(cross-entropy loss),定義在概率估計上。它通常用於多項式邏輯回歸(multinomial logistic regression)和神經網絡以及期望最大化(expectation-maximization)的一些變體中,並且可用於評估分類器的概率輸出(predict_proba)而不是其離散預測值。對於二分類問題,並伴有真實類標籤
>>> from sklearn.metrics import log_loss>>> y_true = [0, 0, 1, 1]>>> y_pred = [[.9, .1], [.8, .2], [.3, .7], [.01, .99]]>>> log_loss(y_true, y_pred)0.1738...

在y_pred中的第一個預測是[.9, .1],這意味著第一個樣本的標籤是0的概率達到了90%。對數損失是非負的。2.12. 馬修斯相關係數(Matthews correlation coefficient)matthews_corrcoef函數用於計算二分類的馬修斯相關係數(Matthews correlation coefficient)(MCC)。下面引用維基百科的相關解釋:「馬修斯相關係數(Matthews correlation coefficient)在機器學習中用作二分類的質量度量。它以真假正負(true and false positives and negatives)為考慮,並且被廣泛認為是一個均衡的度量,即使是在各個類的樣本集大小差別極大時候也可以使用。MCC本質上是一個取值範圍在-1到+1的相關係數,「0」代表了平均隨機預測,」-1」 代表了反轉預測。該統計信息也稱為phi係數。在二分類情況下,
>>> from sklearn.metrics import matthews_corrcoef>>> y_true = [+1, +1, +1, -1]>>> y_pred = [+1, -1, +1, +1]>>> matthews_corrcoef(y_true, y_pred)-0.33...

2.13. 多標籤混淆矩陣multilabel_confusion_matrix函數計算每個類(默認)或每個樣本(samplewise = True)的多標籤混淆矩陣,以評估分類的準確度。multilabel_confusion_matrix還將多類數據視為多標籤,這是一種轉換,通常用於評估具有二分類指標(例如精度,召回率等)的多類問題(multiclass problems)。在計算每個類的多標籤混淆矩陣
>>> from sklearn.metrics import multilabel_confusion_matrix>>> y_true = np.array([[1, 0, 1],...                    [0, 1, 0]])>>> y_pred = np.array([[1, 0, 0],...                    [0, 1, 1]])>>> multilabel_confusion_matrix(y_true, y_pred)array([[[1, 0],        [0, 1]],
[[1, 0], [0, 1]],
[[0, 1], [1, 0]]])

>>> multilabel_confusion_matrix(y_true, y_pred, samplewise=True)array([[[1, 0],        [1, 1]],<BLANKLINE>       [[1, 1],        [0, 1]]])

這是一個示例來說明如何使用多類(multiclass)作為輸入的multilabel_confusion_matrix 函數:
>>> y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]>>> y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]>>> multilabel_confusion_matrix(y_true, y_pred,...                             labels=["ant", "bird", "cat"])array([[[3, 1],        [0, 2]],
[[5, 0], [1, 0]],
[[2, 1], [1, 2]]])

以下是一些示例說明如何使用多標籤指標矩陣作為輸入的multilabel_confusion_matrix函數來計算每個類別的召回率(或靈敏度),特異性(specificity),失敗率(fall out)和未命中率(miss rate)。計算每個類別的召回率(也稱為true positive rate或靈敏度):
>>> y_true = np.array([[0, 0, 1],...                    [0, 1, 0],...                    [1, 1, 0]])>>> y_pred = np.array([[0, 1, 0],...                    [0, 0, 1],...                    [1, 1, 0]])>>> mcm = multilabel_confusion_matrix(y_true, y_pred)>>> tn = mcm[:, 0, 0]>>> tp = mcm[:, 1, 1]>>> fn = mcm[:, 1, 0]>>> fp = mcm[:, 0, 1]>>> tp / (tp + fn)array([1. , 0.5, 0. ])

計算每個類別的特異性(specificity )(也稱為true negative rate):
>>> tn / (tn + fp)array([1. , 0. , 0.5])

計算每個類別的失敗(fall out)率(也稱為false positive rate):
>>> fp / (fp + tn)array([0. , 1. , 0.5])

計算每個類別的未命中率(miss rate)(也稱為false negative rate):
>>> fn / (fn + tp)array([0. , 0.5, 1. ])

2.14. ROC(Receiver operating characteristic)roc_curve函數計算ROC曲線。引用維基百科:「一個接收器工作特性(ROC),或簡單點叫做ROC曲線,是一幅圖,這幅圖展示了一個二分類器系統在它的判別閾值不斷變化時D 性能。這條曲線上坐標點的縱軸取值是真正的正樣本的比例(TPR= true positive rate)。這條曲線上坐標點的橫軸取值是負樣本中假的正樣本的比例(FPR = false positive rate)。當不斷改變二分類器的閾值的時候,上述TPR和FPR就會跟著發生變化。這樣每一個閾值都會對應一對坐標點(TPR,FPR),只要不斷改變閾值就會產生一條曲線。TPR也被稱之為靈敏度(sensitivity),而FPR是1減去特異性(specificity)或TNR」此函數需要真實的二進位值和目標分數,它們可以是正類的概率估計值,置信度值或二元決策(binary decisions)。這是一個有關如何使用roc_curve函數的小例子:
>>> import numpy as np>>> from sklearn.metrics import roc_curve>>> y = np.array([1, 1, 2, 2])>>> scores = np.array([0.1, 0.4, 0.35, 0.8])>>> fpr, tpr, thresholds = roc_curve(y, scores, pos_label=2)>>> fprarray([0. , 0. , 0.5, 0.5, 1. ])>>> tprarray([0. , 0.5, 0.5, 1. , 1. ])>>> thresholdsarray([1.8 , 0.8 , 0.4 , 0.35, 0.1 ])

roc_auc_score函數計算ROC曲線下的面積,該面積也用AUC或AUROC表示。通過計算ROC曲線下的面積,可將曲線信息匯總為一個數值。有關更多信息,請參閱Wikipedia上的AUC文章。
>>> import numpy as np>>> from sklearn.metrics import roc_auc_score>>> y_true = np.array([0, 0, 1, 1])>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])>>> roc_auc_score(y_true, y_scores)0.75

在多標籤分類中,roc_auc_score函數被擴展到計算所有標籤上的平均值,如上所述。與子集準確度,漢明損失或F1得分等度量指標相比,ROC不需要為每個標籤優化閾值。roc_auc_score函數也可以用於多分類。當前支持兩種平均策略:「一對一(one-vs-one)」算法計算成對的ROC AUC得分的平均值,「一對多(one-vs-rest)」算法計算每個類別相對於所有其他類別的ROC AUC得分的平均值。在這兩種情況下,預測標籤都以數組的形式提供,該數組的值範圍為0到n_classes,並且得分對應於樣本屬於特定類別的概率估計。一對一(OvO)和一對多(OvR)算法支持統一加權(average='macro')和流行度(prevalence)(average='weighted')。一對一(One-vs-one)算法:計算類的所有可能成對組合的平均AUC。[HT2001]定義了一個統一加權的多類AUC度量指標:其中,一對多(One-vs-rest)算法 :計算每個類相對於其他類的AUC[PD2000]。該算法在功能上與多標籤情況相同。要啟用此算法,請將關鍵字參數multiclass設置為'ovr'。像OvO一樣,OvR支持兩種平均類型:'macro' [F2006]和 'weighted' [F2001]。在false positive rate不被容忍的情況下,roc_auc_score函數的參數max_fpr可被用來把ROC曲線累加到一個給定的限制。有關使用ROC評估分類器輸出質量的案例,請參閱接收器工作特性(ROC)。有關使用ROC使用交叉驗證來評估分類器輸出質量的案例,請參閱具有交叉驗證的接收器工作特性(ROC)。有關使用ROC對物種分布進行建模的案例,請參閱物種分布建模。HT2001(1,2) Hand, D.J. and Till, R.J., (2001). A simple generalisation of the area under the ROC curve for multiple class classification problems. Machine learning, 45(2), pp.171-186.[FC2009] Ferri, Cèsar & Hernandez-Orallo, Jose & Modroiu, R. (2009). An Experimental Comparison of Performance Measures for Classification. Pattern Recognition Letters. 30. 27-38.[PD2000] Provost, F., Domingos, P. (2000). Well-trained PETs: Improving probability estimation trees (Section 6.2), CeDER Working Paper #IS-00-04, Stern School of Business, New York University.[F2006] Fawcett, T., 2006. An introduction to ROC analysis. Pattern Recognition Letters, 27(8), pp. 861-874.[F2001] Fawcett, T., 2001. Using rule sets to maximize ROC performance In Data Mining, 2001. Proceedings IEEE International Conference, pp. 131-138.2.15. 零一損失(Zero one loss)zero_one_loss函數在
>>> from sklearn.metrics import zero_one_loss>>> y_pred = [1, 2, 3, 4]>>> y_true = [2, 2, 3, 4]>>> zero_one_loss(y_true, y_pred)0.25>>> zero_one_loss(y_true, y_pred, normalize=False)

在帶有二元標籤指示器(binary label indicators)的多標籤情況下,第一個標籤集[0,1]出現錯誤:
>>> zero_one_loss(np.array([[0, 1], [1, 1]]), np.ones((2, 2)))0.5
>>> zero_one_loss(np.array([[0, 1], [1, 1]]), np.ones((2, 2)), normalize=False)1

有關在交叉驗證進行遞歸特徵消除中使用零一損失的案例,請參見使用交叉驗證進行遞歸特徵消除。2.16. Brier得分損失brier_score_loss函數計算二分類的Brier得分。引用維基百科:Brier得分是一個用於度量概率性預測準確率的合適的評分函數。它可以被用到某些任務中,在這些任務裡面預測必須分配概率到一個由互斥離散輸出組成的集合上。該函數返回實際輸出和可能輸出預測概率之間的平均平方差得分。實際輸出必須是1或0(true或false),而實際輸出的預測概率可以是一個介於0和1之間的數。Brier得分損失也是一個介於0到1之間的數,而且得分越低(也就是平均平方誤差)則預測越精確。它可被認為是對一組概率性預測「校準(calibration)」的度量。
>>> import numpy as np>>> from sklearn.metrics import brier_score_loss>>> y_true = np.array([0, 1, 1, 0])>>> y_true_categorical = np.array(["spam", "ham", "ham", "spam"])>>> y_prob = np.array([0.1, 0.9, 0.8, 0.4])>>> y_pred = np.array([0, 1, 1, 0])>>> brier_score_loss(y_true, y_prob)0.055>>> brier_score_loss(y_true, 1 - y_prob, pos_label=0)0.055>>> brier_score_loss(y_true_categorical, y_prob, pos_label="ham")0.055>>> brier_score_loss(y_true, y_prob > 0.5)0.0

有關使用Brier分數損失來執行分類器概率校準的示例,請參閱分類器的概率校準。G. Brier, Verification of forecasts expressed in terms of probability, Monthly weather review 78.1 (1950)3. 多標籤排名指標(ranking metrics)在多標籤學習中,每個樣本可以有任意個與之相關聯的真實標籤。目標是給予真實標籤更高的分數和更好的排名。3.1. 覆蓋誤差coverage_error函數計算最終預測中必須包含的標籤平均數量,以便預測所有真實標籤。如果你想知道你平均需要預測多少最高分的標籤(top-scored-labels)而不漏掉任何一個真實標籤,這個函數是很有用的。因此,這個指標的最佳值是真實標籤的平均數量。我們的實現得分比Tsoumakas等人2010年給出的得分高1分。這將擴展處理一個實例具有0個真標籤的退化情況。
>>> import numpy as np>>> from sklearn.metrics import coverage_error>>> y_true = np.array([[1, 0, 0], [0, 0, 1]])>>> y_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1]])>>> coverage_error(y_true, y_score)2.5

3.2. 標籤排名平均精度(Label ranking average precision)label_ranking_average_precision_score 函數實現 label ranking average precision(LRAP)。此度量與average_precision_score 函數相關,但基於標籤排名的概念,而不是精確度和召回率。標籤排名平均精度(LRAP)在樣本上的平均值回答了以下問題:對於每個真實標籤,高排名標籤中的哪一部分是真標籤?如果您能夠給與每個樣本相關聯的標籤更好的排名,則此性能指標將更高。得到的分數總是嚴格大於0,最佳值為1。如果每個樣本只有一個相關標籤,則標籤排名平均精度等於平均倒數排名。
>>> import numpy as np>>> from sklearn.metrics import label_ranking_average_precision_score>>> y_true = np.array([[1, 0, 0], [0, 0, 1]])>>> y_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1]])>>> label_ranking_average_precision_score(y_true, y_score)0.416...

3.3. 排名損失(Ranking loss)label_ranking_loss函數在樣本上計算平均錯誤排序的標籤對數量的排序損失,即真標籤的得分低於假標籤,由假和真標籤的排序對的數量倒數加權。可實現的最低排名損失為零。其中
>>> import numpy as np>>> from sklearn.metrics import label_ranking_loss>>> y_true = np.array([[1, 0, 0], [0, 0, 1]])>>> y_score = np.array([[0.75, 0.5, 1], [1, 0.2, 0.1]])>>> label_ranking_loss(y_true, y_score)0.75...>>> # 隨著接下來的預測,我們有一個完美並且最小的損失(loss)>>> y_score = np.array([[1.0, 0.1, 0.2], [0.1, 0.2, 0.9]])>>> label_ranking_loss(y_true, y_score)0.0

Tsoumakas, G., Katakis, I., & Vlahavas, I. (2010). Mining multi-label data. In Data mining and knowledge discovery handbook (pp. 667-685). Springer US.3.4. 標準化折扣累積收益(Normalized Discounted Cumulative Gain)折扣累積收益(DCG)和標準化折扣累積收益(NDCG)是排名指標(ranking metrics);它們比較預測順序與真實值得分,例如答案與查詢的相關性。從Wikipedia頁面獲取折扣累計收益相關描述:「折扣累積收益(DCG)是衡量排名質量的一個指標。在信息檢索中,它經常被用來衡量web搜尋引擎算法或相關應用程式的有效性。DCG使用搜尋引擎結果集中文檔的分級關聯度,根據文檔在結果列表中的位置來衡量文檔的有用性或收益。收益是從結果列表的頂部到底部累積起來的,每個結果的收益在較低等級時被打折。」DCG按照預測的順序排列真實目標(例如查詢答案的相關性),然後將它們乘以對數衰減(logarithmic decay),並對結果進行求和。在第一個K結果之後,總和可以被截斷,在這種情況下我們稱之為DCG@K.NDCG,或者NDCG@K是DCG除以完美預測得到的DCG,所以它總是在0和1之間。通常,NDCG比DCG更受歡迎。與排名損失相比,NDCG可以考慮相關性得分,而不是ground-truth排名。因此,如果ground-truth僅包含一個排序,則應優先考慮排名損失;如果ground-truth包含實際有用性得分(例如,0表示不相關,1表示相關,2表示非常相關),則可以使用NDCG。對於一個樣本,給定每個目標
>>> from sklearn.metrics import explained_variance_score>>> y_true = [3, -0.5, 2, 7]>>> y_pred = [2.5, 0.0, 2, 8]>>> explained_variance_score(y_true, y_pred)0.957...>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]>>> y_pred = [[0, 2], [-1, 2], [8, -5]]>>> explained_variance_score(y_true, y_pred, multioutput='raw_values')array([0.967..., 1.        ])>>> explained_variance_score(y_true, y_pred, multioutput=[0.3, 0.7])0.990...

4.2. 最大誤差(Max error)max_error函數計算最大剩餘誤差(residual error),這是一個度量,用於捕獲預測值和真值之間最壞情況的誤差。在完全擬合的單輸出回歸模型中,訓練集上的max_error將為0 ,儘管在現實世界中這是極不可能的,但此度量顯示了模型擬合時的誤差程度。如果
>>> from sklearn.metrics import max_error>>> y_true = [3, 2, 7, 1]>>> y_pred = [9, 2, 7, 1]>>> max_error(y_true, y_pred)6

4.3. 平均絕對誤差(Mean absolute error)mean_absolute_error函數計算 mean absolute error,是與絕對誤差損失或
>>> from sklearn.metrics import mean_absolute_error>>> y_true = [3, -0.5, 2, 7]>>> y_pred = [2.5, 0.0, 2, 8]>>> mean_absolute_error(y_true, y_pred)0.5>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]>>> y_pred = [[0, 2], [-1, 2], [8, -5]]>>> mean_absolute_error(y_true, y_pred)0.75>>> mean_absolute_error(y_true, y_pred, multioutput='raw_values')array([0.5, 1. ])>>> mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])0.85...

4.4. 均方誤差(Mean squared error)mean_squared_error函數 mean square error,即與平方(二次)誤差或損失的期望值相對應的風險度量(risk metric)。如果
>>> from sklearn.metrics import mean_squared_error>>> y_true = [3, -0.5, 2, 7]>>> y_pred = [2.5, 0.0, 2, 8]>>> mean_squared_error(y_true, y_pred)0.375>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]>>> y_pred = [[0, 2], [-1, 2], [8, -5]]>>> mean_squared_error(y_true, y_pred)0.7083...

有關評估梯度增強回歸的均方誤差使用示例,請參見 梯度增強回歸。4.5. 均方對數誤差(Mean squared logarithmic error)mean_squared_log_error函數計算與平方對數(二次)誤差或損失的期望值相對應的風險度量(risk metric)。如果
>>> from sklearn.metrics import mean_squared_log_error>>> y_true = [3, 5, 2.5, 7]>>> y_pred = [2.5, 5, 4, 8]>>> mean_squared_log_error(y_true, y_pred)0.039...>>> y_true = [[0.5, 1], [1, 2], [7, 6]]>>> y_pred = [[0.5, 2], [1, 2.5], [8, 8]]>>> mean_squared_log_error(y_true, y_pred)0.044...

4.6. 中位數絕對誤差(Median absolute error)median_absolute_error特別有趣,因為它對離群值具有魯棒性。損失的計算方法是取目標和預測之間所有絕對差異的中位數。如果
>>> from sklearn.metrics import median_absolute_error>>> y_true = [3, -0.5, 2, 7]>>> y_pred = [2.5, 0.0, 2, 8]>>> median_absolute_error(y_true, y_pred)0.5

4.7. R² score, 決定係數(coefficient of determination)r2_score 函數計算 coefficient of determination,通常表示為R²。它表示由模型中的獨立變量解釋(independent variables)的方差 (of y)比例。它提供了擬合優度的指示,因此通過解釋方差的比例來衡量模型預測未見過的樣本性能。由於這種方差依賴於數據集,因此不同數據集之間的R²可能沒有可比性。最好的分數是1.0,並且它可能是負的(因為模型可能會隨意變差)。如果一個常數模型總是預測y的期望值,而不考慮輸入特徵,則R²得分為0.0。如果
>>> from sklearn.metrics import r2_score>>> y_true = [3, -0.5, 2, 7]>>> y_pred = [2.5, 0.0, 2, 8]>>> r2_score(y_true, y_pred)0.948...>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]>>> y_pred = [[0, 2], [-1, 2], [8, -5]]>>> r2_score(y_true, y_pred, multioutput='variance_weighted')0.938...>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]>>> y_pred = [[0, 2], [-1, 2], [8, -5]]>>> r2_score(y_true, y_pred, multioutput='uniform_average')0.936...>>> r2_score(y_true, y_pred, multioutput='raw_values')array([0.965..., 0.908...])>>> r2_score(y_true, y_pred, multioutput=[0.3, 0.7])0.925...

參見 Lasso and Elastic Net for Sparse Signals 以獲取在稀疏信號上評估 Lasso and Elastic Net 的 R² score 使用示例。4.8. 平均泊松、伽馬和二次偏差(Mean Poisson, Gamma, and Tweedie deviances)mean_tweedie_deviance 函數用一個power參數(p)計算 mean Tweedie deviance error。這是一個度量,可以得出回歸目標的預期值。當power=0時,等於 mean_squared_error(均方誤差).當power=1時,等於 mean_poisson_deviance(平均泊松偏差).當power=2時,等於 mean_gamma_deviance(平均伽馬偏差).如果
>>> from sklearn.metrics import mean_tweedie_deviance>>> mean_tweedie_deviance([1.0], [1.5], power=0)0.25>>> mean_tweedie_deviance([100.], [150.], power=0)2500.0

>>> mean_tweedie_deviance([1.0], [1.5], power=1)0.18...>>> mean_tweedie_deviance([100.], [150.], power=1)18.9...

>>> mean_tweedie_deviance([1.0], [1.5], power=2)0.14...>>> mean_tweedie_deviance([100.], [150.], power=2)0.14...

我們會得到相同的錯誤。因此,當power=2時的偏差僅對相對誤差(relative errors)敏感。5. 聚類度量(Clustering metrics)sklearn.metrics 模塊實現了幾個loss、score 和 utility 函數。有關更多信息,請參閱聚類性能評估部分,例如聚類和用於二分聚類的二分聚類評估部分。6. 虛擬(Dummy)估計器在進行有監督的學習時,一個簡單的完整性檢查(sanity check)包括比較估計器和簡單的經驗法則。DummyClassifier 實現了幾種簡單的分類策略:stratified 根據訓練集的類分布生成隨機預測。most_frequent預測訓練集中最常見的標籤。prior給出最大化類先驗概率(class prior)(如most_frequent)的預測,predict_proba 返回類先驗概率。當正類比較少時,這種方法的一個主要動機是 F1-scoring。注意,在所有這些策略中,predict 方法完全忽略了輸入數據!為了說明DummyClassifier,我們首先創建一個不平衡的數據集:
>>> from sklearn.datasets import load_iris>>> from sklearn.model_selection import train_test_split>>> X, y = load_iris(return_X_y=True)>>> y[y != 1] = -1>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

接下來,讓我們比較SVC 和most_frequent的準確率:
>>> from sklearn.dummy import DummyClassifier>>> from sklearn.svm import SVC>>> clf = SVC(kernel='linear', C=1).fit(X_train, y_train)>>> clf.score(X_test, y_test)0.63...>>> clf = DummyClassifier(strategy='most_frequent', random_state=0)>>> clf.fit(X_train, y_train)DummyClassifier(random_state=0, strategy='most_frequent')>>> clf.score(X_test, y_test)0.57...

我們看到SVC 並沒有比虛擬(dummy)分類器做得更好。現在,讓我們更改內核:
>>> clf = SVC(kernel='rbf', C=1).fit(X_train, y_train)>>> clf.score(X_test, y_test)0.94...

我們看到準確率提高到了幾乎100%。如果CPU成本不高,建議使用交叉驗證策略以更好地估計準確性。有關更多信息,請參閱交叉驗證:評估估計器性能部分。此外,如果要在參數空間上進行優化,強烈建議使用適當的方法;有關詳細信息,請參閱調整估計器的超參數部分。通常,當一個分類器的準確率太接近隨機性時,它可能意味著出了問題:特徵沒有幫助,超參數沒有得到正確調整,類不平衡導致分類器出現問題等…DummyRegressor還為回歸實現了四個簡單的經驗法則:quantile 預測用戶提供的訓練目標的分位數(quantile)。在所有這些策略中,predict 方法完全忽略了輸入數據☆☆☆為方便大家查閱,小編已將scikit-learn學習路線專欄文章統一整理到公眾號底部菜單欄,同步更新中,關注公眾號,點擊左下方「系列文章」,如圖:

或點擊下方「閱讀原文」,進入scikit-learn專欄,即可查看系列文章。


歡迎大家和我一起沿著scikit-learn文檔這條路線,一起鞏固機器學習算法基礎。(添加微信:mthler備註:sklearn學習,一起進【sklearn機器學習進步群】開啟打怪升級的學習之旅。)

相關焦點

  • 使用python+sklearn實現成對度量、相關性和核函數
    sklearn.metrics.pairwise子模塊實現了評估樣本集的成對距離或相關性。此模塊包含距離度量和內核。這裡對這兩個問題作了簡要的總結。
  • 使用python+sklearn實現估計器的調參方法
    GridSearchCV 實例實現估計器API:當將其「擬合」到一個數據集上時,所有可能的參數值組合都將被計算並保留最佳組合。關於數字數據集上的網格搜索計算示例,請參見使用交叉驗證網格搜索的參數估計。指定目標度量(objective metric)默認情況下,參數搜索使用估計器的score 函數來評估參數設置的性能。這些是用於分類的sklearn.metrics.accuracy_score和用於回歸的sklearn.metrics.r2_score。
  • 使用python+sklearn實現交叉驗證
    在scikit-learn中,可以使用train_test_split函數快速將數據集隨機分成訓練集和測試集。計算交叉驗證指標使用交叉驗證的最簡單方法是調用估計器和數據集上的cross_val_score輔助函數。
  • KNN算法(三)-sklearn實現
    在python中sklearn庫可直接實現KNN算法。本篇介紹運用sklearn庫實現KNN算法。sklearn安裝要求Python(>=2.7 or >=3.3)、NumPy (>= 1.8.2)、SciPy (>= 0.13.3)。如果已經安裝NumPy和SciPy,安裝scikit-learn可以使用pip install -U scikit-learn。
  • 特徵工程總結:R與python的比較實現
    當然,網絡上對特徵工程的總結已經非常成熟了(詳見jasonfreak的知乎問答:使用sklearn做單機特徵工程<https://www.zhihu.com/question/29316149>。但本人將依據python代碼的實習,總結用R來實現,以方便對特徵工程全面的總結和理解。
  • 菜鳥學機器學習,Sklearn庫主要模塊功能簡介
    sklearn,全稱scikit-learn,是python中的機器學習庫,建立在numpy、scipy、matplotlib等數據科學包的基礎之上,涵蓋了機器學習中的樣例數據、數據預處理、模型驗證、特徵選擇、分類、回歸、聚類、降維等幾乎所有環節,功能十分強大,目前sklearn版本是0.23。
  • 使用python+sklearn實現單變量特徵選擇
    import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import MinMaxScalerfrom sklearn.svm import LinearSVCfrom sklearn.pipeline import make_pipeline
  • 使用python+sklearn實現模型複雜性的影響
    對於每一類模型,我們通過選擇相關的模型參數來改變模型的複雜度,並測量對計算性能(延遲)和預測能力(MSE或Hamming損失)的影響。 import datasetsfrom sklearn.utils import shufflefrom sklearn.metrics import mean_squared_errorfrom sklearn.svm import NuSVRfrom sklearn.ensemble import GradientBoostingRegressorfrom
  • 使用python+sklearn實現Lasso 模型選擇:交叉驗證/ AIC / BIC
    使用Akaike信息標準(AIC),貝葉斯信息標準(BIC)和交叉驗證來選擇Lasso
  • sklearn子框架系列之一:上篇---sklearn數據前處理
    8 模型評估(度量)包:sklearn.metricssklearn.metrics包含評分方法、性能度量、成對度量和距離計算。 8.2 回歸結果度量explained_varicance_score:可解釋方差的回歸評分函數mean_absolute_error:平均絕對誤差
  • python金融風控評分卡模型和數據分析
    (原創課程,版權所有,項目合作QQ:231469242,微信公眾號:pythonEducation) 課程介紹python金融風控評分卡模型和數據分析微專業課包含《python信用評分卡建模(附代碼)》,《python風控建模實戰lendingClub》,《金融現金貸用戶數據分析和畫像》三套課程系列
  • 使用python+sklearn實現概率校準曲線
    import matplotlib.pyplot as pltfrom sklearn import datasetsfrom sklearn.naive_bayes import GaussianNBfrom sklearn.svm import LinearSVCfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics
  • 運用sklearn進行線性判別分析(LDA)代碼實現
    基於sklearn的線性判別分析(LDA)代碼實現一、前言及回顧本文記錄使用sklearn庫實現有監督的數據降維技術——線性判別分析(LDA)。在上一篇LDA線性判別分析原理及python應用(葡萄酒案例分析),我們通過詳細的步驟理解LDA內部邏輯實現原理,能夠更好地掌握線性判別分析的內部機制。
  • 使用python+sklearn實現保序回歸
    注意:單擊此處https://urlify.cn/nE7Zny下載完整的示例代碼,或通過Binder在瀏覽器中運行此示例本文給出了在合成數據上使用保序回歸
  • 使用python+sklearn實現Logistic回歸中的L1懲罰與稀疏性
    如預期,彈性淨懲罰稀疏度介於L1和L2之間。我們將8x8個數字圖像分為兩類:0-4和5-9。可視化顯示了不同C值下模型的係數。 import LogisticRegressionfrom sklearn import datasetsfrom sklearn.preprocessing import StandardScalerX, y = datasets.load_digits(return_X_y=True)X = StandardScaler().fit_transform
  • 使用python+sklearn實現在20newgroups上進行多類稀疏邏輯回歸
    在輸入特徵的稀疏子集上進行預測的一種更傳統(可能更好)的方法是使用單變量特徵選擇,然後使用傳統的(l2-懲罰)邏輯回歸模型。 import fetch_20newsgroups_vectorizedfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.exceptions import ConvergenceWarning
  • 使用python+sklearn實現噪聲級別估計的高斯過程回歸
    對數邊際似然(LML)情況的圖示說明了存在LML的兩個局部最大值,第一個局部最大值對應於具有高噪聲水平和較大長度範圍(length scale)的模型,該模型解釋了噪聲中數據的所有變化,第二個局部最大值具有較小的噪聲級別和較短的長度範圍(length scale),這就解釋了無噪聲函數關係的大部分變化。
  • 使用python+sklearn實現多標籤分類
    print(__doc__)import numpy as npimport matplotlib.pyplot as pltfrom sklearn.datasets import make_multilabel_classificationfrom sklearn.multiclass import OneVsRestClassifierfrom
  • 使用python+sklearn實現預計算字典進行稀疏編碼
    本示例使用sklearn.decomposition.SparseCoder估計器直觀地比較了不同的稀疏編碼方法。Ricker(也稱為墨西哥帽或高斯的二階導數)並不是一種特別好的內核,無法表示示例中的分段常數信號, 因此我們可以看到,增加不同寬度的原子是很重要的,而且它會激發學習詞典,使之最擬合您的信號類型。右邊較豐富字典為了保持相同的數量級,執行了更重的子採樣。
  • 機器學習之特徵工程Feature-Engineering及sklearn代碼實現
    特徵工程其本質是一項工程活動,目的是最大限度地從原始數據中提取特徵以供算法和模型使用。奧卡姆剃刀原理翻譯成中文:如無必要,勿增實體;個人理解為:做成一件事有很多方式,最簡單的方式就是最好的。這個原理應用到機器學習中,就是在可以很好地解釋訓練數據的模型中,越簡單的模型才是最好的。