Cross-validation\cross_val_score\魯棒性

一、什麼是交叉驗證法Cross-validation ?

  有時我們挑出的模型在測試集上的效果ok,但是在新的數據集上就沒那麼ok了,行話叫做魯棒性(robust)不強。目前普遍的做法,是使用cross_validation來評估模型以及挑選模型。
  它的基本思想就是將原始數據(dataset)進行分組,一部分做爲訓練集來訓練模型,另一部分做爲測試集來評價模型。
  劃分數據集的目的,就是爲了更好的評測模型。交叉驗證是在機器學習建立模型和驗證模型參數時常用的方法。交叉驗證就是重複使用數據,把得到的樣本數據進行切分,組合爲不同的訓練集和測試集,用訓練集來訓練模型,用測試集來評估模型預測的好壞。在此基礎上可以得到多組不同的訓練集和測試集,某次訓練集中的某樣本在下次可能成爲測試集中的樣本,即所謂的‘交叉’。

二、爲什麼用交叉驗證法?

  • 交叉驗證用於評估模型的預測性能,尤其是訓練好的模型在新數據上的表現,可以在一定程度上減小過擬合。
  • 還可以從有限的數據中獲取儘可能多的有效信息。

三、主要有哪些方法?

詳見https://blog.csdn.net/u010986753/article/details/98069124

四、Cross_val_score 函數和多度量評估

  • cross_validate 函數與 cross_val_score 在下面的兩個方面有些不同 -

  • 它允許指定多個指標進行評估.
    除了測試得分之外,它還會返回一個包含訓練得分,擬合次數, score-times (得分次數)的一個字典。

sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch=2*n_jobs’)

參數

  • estimator:數據對象
  • X:數據
  • y:預測數據
  • soring:調用的方法
  • cv:交叉驗證生成器或可迭代的次數
  • n_jobs:同時工作的cpu個數(-1代表全部)
  • verbose:詳細程度
  • fit_params:傳遞給估計器的擬合方法的參數
  • pre_dispatch:控制並行執行期間調度的作業數量。減少這個數量對於避免在CPU發送更多作業時CPU內存消耗的擴大是有用的。該參數可以是:

  1. 沒有,在這種情況下,所有的工作立即創建併產生。將其用於輕量級和快速運行的作業,以避免由於按需產生作業而導致延遲
  2. 一個int,給出所產生的總工作的確切數量
  3. 一個字符串,給出一個表達式作爲n_jobs的函數,如’2 * n_jobs’
返回
  交叉驗證每次運行的評分數組

from sklearn import datasets, linear_model
from sklearn.cross_validation import cross_val_score
diabetes = datasets.load_diabetes()
X = diabetes.data[:150]
y = diabetes.target[:150]
lasso = linear_model.Lasso()
print(cross_val_score(lasso, X, y))  

# [ 0.33150734  0.08022311  0.03531764]

五、Cross_validate()

sklearn.model_selection.cross_validate(estimator, X, y=None, groups=None, scoring=None, cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch=2*n_jobs’, return_train_score=’warn’)

參數:
estimator: 必須是含有fit method的對象,可以是自己定義的Pipline

X: 參與cross_validate 的featrues

y: 默認爲None,訓練集標籤(在監督學習的情況下)

groups: array, shape(n_samples) ,這個用法很神奇,比如說你的train set 有350個就像本例,那麼當你設置
[1,1,….2,2] 一共350個1和2的時候,在訓練集中就相當於2折。1的爲一組,2的爲1組。

cv: int,需要劃分成幾折。分類的情況下是SratiediedKFold,其他情況下是KFold

n_jobs: int CPUs使用數量

fit_params: dict, optional 傳入estimator fit method的參數

pre_dispatch: int, 控制並行計算的jobs,減少數量,可以避免內存爆炸

return_train_score: 是否返回訓練評估參數,默認是True 在0.21版本後會改爲False,建議改爲False減少計算量
返回:
  **scores:**dict,包含test_score,train_score,fit_time,score_time

在這裏插入代碼片

有趣的事,Python永遠不會缺席

歡迎關注小婷兒的博客

    文章內容來源於小婷兒的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解

    如需轉發,請註明出處:小婷兒的博客python    https://www.cnblogs.com/xxtalhr/

博客園 https://www.cnblogs.com/xxtalhr/

CSDN https://blog.csdn.net/u010986753

有問題請在博客下留言或加作者:
     微信:tinghai87605025 聯繫我加微信羣
     QQ :87605025
     python QQ交流羣:py_data 483766429

培訓說明

OCP培訓說明連接 https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

OCM培訓說明連接 https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA

     小婷兒的python正在成長中,其中還有很多不足之處,隨着學習和工作的深入,會對以往的博客內容逐步改進和完善噠。重要的事多說幾遍。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章