模型驗(yàn)證方法一覽
名稱 | 模塊 |
---|---|
通過交叉驗(yàn)證計(jì)算得分 | model_selection.cross_val_score(estimator, X) |
對(duì)每個(gè)輸入點(diǎn)產(chǎn)生交叉驗(yàn)證估計(jì) | model_selection.cross_val_predict(estimator, X) |
計(jì)算并繪制模型的學(xué)習(xí)率曲線 | model_selection.learning_curve(estimator, X, y) |
計(jì)算并繪制模型的驗(yàn)證曲線 | model_selection.validation_curve(estimator, ...) |
通過排序評(píng)估交叉驗(yàn)證defender重要性 | model_selection.permutation_test_score(...) |
通過交叉驗(yàn)證計(jì)算得分
cross_val_score(estimator, X, y=None, groups=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs')
參數(shù):
- estimator: 實(shí)現(xiàn)了'fit'函數(shù)的學(xué)習(xí)器
- X: array-like,需要學(xué)習(xí)的數(shù)據(jù)渴丸,可以是列表或者2d數(shù)組
- y: 可選的煞檩,默認(rèn)是None啥寇,監(jiān)督學(xué)習(xí)中樣本特征向量的真實(shí)目標(biāo)值
- scroing: srting,callable or None,可選的,默認(rèn)是None衰絮,
一個(gè)字符串或者一個(gè)scorer可調(diào)用對(duì)象或者函數(shù)磷醋,必須實(shí)現(xiàn)scorer(estimator, X, y) - cv: int,交叉驗(yàn)證生成器或者一個(gè)迭代器淌友,可選的震庭,默認(rèn)是None你雌,決定交叉驗(yàn)證劃分策略
cv的可選項(xiàng)有以下的幾種
- None: 使用默認(rèn)的3-fold交叉驗(yàn)證
- Interger:指定在(Stratified)kfold中使用的‘折’的數(shù)量
- 可以用作交叉驗(yàn)證生成器的一個(gè)對(duì)象
- 一個(gè)能夠產(chǎn)生train/test劃分的迭代器對(duì)象
對(duì)于integer/None類型的輸入婿崭,如果estimator是一個(gè)分類器并且y是對(duì)應(yīng)的類標(biāo)簽,則默認(rèn)使用StratifiedKFold,其他的情況默認(rèn)使用kfold
返回值:
- scores:浮點(diǎn)數(shù)組千元, shape=(len(list(cv)),)每一次交叉驗(yàn)證得分弄成一個(gè)數(shù)組幸海,默認(rèn)是三次,三個(gè)得分物独。
from sklearn.model_selection import cross_val_score
import numpy as np
from sklearn import datasets, svm
digits = datasets.load_digits()
X = digits.data
y = digits.target
svc = svm.SVC(kernel='linear') # C 結(jié)構(gòu)因子最小化因子
C_s = np.logspace(-10, 0, 10)
print('參數(shù)列表長(zhǎng)度:', len(C_s))
scores = list()
scores_std = list()
for C in C_s:
svc.C = C
this_scores = cross_val_score(svc, X, y, n_jobs=4) # 指定并行數(shù)量
scores.append(np.mean(this_scores))
scores_std.append(np.std(this_scores))
# 繪制交叉驗(yàn)證曲線
import matplotlib.pyplot as plt
plt.figure(1, figsize=(4,3))
plt.clf()
plt.semilogx(C_s, scores)
plt.semilogx(C_s, np.array(scores) + np.array(scores_std) , 'b--')
plt.semilogx(C_s, np.array(scores) - np.array(scores_std) , 'b--')
locs, labels= plt.yticks()
plt.yticks(locs, list(map(lambda x: "%g" %x, locs)))
plt.ylabel('CV score')
plt.xlabel('Parameter C')
plt.ylim(0, 1.1)
plt.show()
image
對(duì)每個(gè)輸入點(diǎn)產(chǎn)生交叉驗(yàn)證估計(jì)
cross_val_predict(estimator, X, y=None, groups=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch='2*n_jobs', method='predict')
參數(shù):
- method 字符串婉陷,可選秽澳,默認(rèn)是'predict'
返回值:
- predictions: ndarray 預(yù)測(cè)結(jié)果
計(jì)算并繪制模型的學(xué)習(xí)率曲線
learning_curve(estimator, X, y, groups=None, train_sizes=array([ 0.1 , 0.325, 0.55 , 0.775, 1. ]), cv=None, scoring=None, exploit_incremental_learning=False, n_jobs=1, pre_dispatch='all', verbose=0)
參數(shù):
- train_sizes: array-like, shape(n_ticks,), dtype=float or int 用于指定訓(xùn)練樣本子集的相對(duì)數(shù)量或者絕對(duì)數(shù)量担神,如果是浮點(diǎn)數(shù)始花,將會(huì)被視作整體訓(xùn)練集最大數(shù)量的百分比酷宵,所以必須在(0,1)之間炕置,如果是int整型男韧,就是絕對(duì)的數(shù)量煌抒,不能超過整體訓(xùn)練集的樣本量。對(duì)于分類問題贩疙,訓(xùn)練子集的大小必須能夠保證每個(gè)類至少有一個(gè)樣本况既。
返回值:
- train_sizes_abs
- train_scores
- test_scores
學(xué)習(xí)率曲線:
計(jì)算指定的學(xué)習(xí)器模型在不同大小的訓(xùn)練集上經(jīng)過交叉驗(yàn)證的訓(xùn)練得分和測(cè)試得分棒仍。
首先莫其,用一個(gè)交叉驗(yàn)證生成器劃分整體數(shù)據(jù)集K次耸三,每一次都有一個(gè)訓(xùn)練集和測(cè)試集仪壮,然后從第k次的訓(xùn)練集中拿出若干個(gè)數(shù)量不斷增長(zhǎng)的子集胳徽,在這些子訓(xùn)練集上訓(xùn)練模型。然后在計(jì)算模型在對(duì)應(yīng)的子訓(xùn)練集和測(cè)試集上的得分养盗。最后往核,對(duì)于在每種子訓(xùn)練集大小下,將K次訓(xùn)練集和測(cè)試集得分分別進(jìn)行平均。
image
計(jì)算并繪制模型的驗(yàn)證曲線
validation_curve(estimator, X, y, param_name, param_range, groups=None, cv=None, scoring=None, n_jobs=1, pre_dispatch='all', verbose=0)
返回值:
- train_scores array.shape(n_ticks, n_cv_folds)
- test_scores
驗(yàn)證曲線:
當(dāng)某個(gè)參數(shù)不斷變化的時(shí)候薄货,在每一個(gè)取值上計(jì)算出的模型在訓(xùn)練集和測(cè)試集上得分谅猾,在一個(gè)不斷變化的參數(shù)上計(jì)算學(xué)習(xí)器模型的得分税娜。這類似于只有一個(gè)參數(shù)的網(wǎng)格搜索藏研。但是這個(gè)函數(shù)也會(huì)計(jì)算訓(xùn)練集上的得分蠢挡。