機器學習:數據集劃分(包含交叉驗證)

1.留出法

  • 原始數據分成訓練集、驗證集和測試集,並且保持數據分佈的一致性,可以使用shuffle
  • 缺點:只進行了一次劃分,數據結果具有偶然性
from sklearn.model_selection import train_test_split
'''
(1)random_state不填或者爲0時,每次都不同;其餘值表示不同隨機數
(2)shuffle表示是否在分割之前對數據進行洗牌(默認True)
'''
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.30,random_state=42,shuffle=True)

2.交叉驗證法
在這裏插入圖片描述

  • 數據量大時,k設置小一些 / 數據量小時,k設置大一些
  • 優點:降低由一次隨機劃分帶來的偶然性,提高其泛化能力,提高對數據的使用效率。
  • 缺點:可能存在一種情況:數據集有5類,抽取出來的也正好是按照類別劃分的5類,也就是說第一折全是0類,第二折全是1類,等等;這樣的結果就會導致,模型訓練時。沒有學習到測試集中數據的特點,從而導致模型得分很低,甚至爲0,
from sklearn.model_selection import KFold
kf = KFold(n_splits=2)
for train_index, test_index in kf.split(X):
    print('X_train:%s ' % X[train_index])
    print('X_test: %s ' % X[test_index])

3.交叉驗證法—留一法

  • 即K = 樣本數
  • 優點:不存在數據分佈不一致
  • 缺點:耗時
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
for train_index, test_index in loo.split(X):
    print('X_train:%s ' % X[train_index])
    print('X_test: %s ' % X[test_index])

4.分層交叉驗證
在這裏插入圖片描述

from sklearn.model_selection import KFold,StratifiedKFold
kf = StratifiedKFold(n_splits=4,random_state=0,shuffle=False)
for train_index,test_index in kf.split(X):
    print("Stratified X_train:",X[train_index])
    print("Stratified X_test:",X[test_index])
```python
#交叉驗證的分數
from sklearn.model_selection import cross_val_score
score = cross_val_score(model,X,y,cv=kf)

在這裏插入圖片描述

from sklearn.model_selection import ShuffleSplit,cross_val_score
# n_splits表示迭代次數,可以存在既不在訓練集中,也不在測試集中的數據
kf = ShuffleSplit(train_size=0.5,test_size=0.4,n_splits=8) 
scores = cross_val_score(model,data,target,cv=kf)

5.自助法
(1)優點:

  • 在數據集較小、難以劃分時很有用
  • 能從D中產生不同的S,對集成學習等方法有好處

(2)缺點:

  • 產生的S改變了D的分佈,會引入估計偏差
    在這裏插入圖片描述
import numpy as np
import pandas as pd
import random
data = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))
data['y'] = [random.choice([0,1]) for i in range(10)]
train = data.sample(frac=1.0,replace=True) # 有放回隨機採樣
test = data.loc[data.index.difference(train.index)].copy() # 將未採樣的樣本作爲測試集
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章