文章目錄
一、什麼是交叉驗證法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正在成長中,其中還有很多不足之處,隨着學習和工作的深入,會對以往的博客內容逐步改進和完善噠。重要的事多說幾遍。。。。。。