在模型訓練之前,要首先劃分訓練集與測試集,如何對原始資料集進行訓練集與測試集的劃分?訓練集與測試集的比例各佔多少?如何保證各自內部標籤分布平衡都會影響模型訓練的最終效果。
好在r和python中有現成的資料集分割函式,避免手動寫函式導致劃分比例不合理、訓練集與測試集的樣本的結構與總體不均衡的問題。
r語言中catools包中的sample.split函式可以用來自動將原始資料集分割成訓練集和測試集。
方法一——catools中的sample.split函式
library("catools") set.seed(123) data(iris) table(iris$species) setosa versicolor virginica 50
5050
split = sample.split(iris$species,splitratio = .8) train_data = subset(iris,split == true) test_data = subset(iris,split == false) table(train_data$species) setosa versicolor virginica 40
4040
table(test_data$species) setosa versicolor virginica 10
1010
library("caret")
split1 <- createdatapartition(y=iris$species,p=0.8,list = false)
train_data <- iris[split1,]
table(train_data$species)
setosa versicolor virginica
4040
40test_data <- iris[-split1,]
table(test_data$species)
setosa versicolor virginica
1010
10
可以看到無論是catools包中的sample.split函式還是caret包中的createdatapartition函式,都針對分類標籤做了混合後的分層隨機抽樣,這樣可以保證訓練集與測試集內的各類標籤分布比例與樣本總體的分布比例嚴格一致,否則如果僅僅使用sample函式,無法達到分層隨機抽樣的目的。
python的sk-learn庫中也有現成的資料集分割工具可用。
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import pandas as pd
iris = load_iris()
data = iris['data']
iris_data = pd.dataframe(
data = data,
columns = ['sepal_length','sepal_width','petal_length','petal_width']
)iris_data["species"] = iris[ 'target']
iris_data["species"] = iris_data["species"].map()
iris_data["species"].value_counts()
versicolor 50
virginica 50
setosa 50
name: species, dtype: int64
x,y = iris_data.iloc[:,0:-1],iris_data.iloc[:,-1]
train_data,test_data,train_target,test_target = train_test_split(x,y,test_size = 0.2,stratify = y)
train_target.value_counts()
test_target.value_counts()
這裡有乙個細節,其中train_test_split函式中有兩個特殊的引數:shuffle和stratify。
shuffle引數相當於對原始資料進行混合抽樣,相當於撲克牌發牌前的洗牌,保證隨機性。
stratify引數則可以保證訓練集&測試集中樣本標籤結構比例與指定的總體中樣本標籤結構比例一致,特別是在原始資料中樣本標籤分布不均衡時非常有用,達到分層隨機抽樣的目的。
倘若使用驗證集,則建議保持6:2:2左右的訓練集、驗證集及測試集比例。
原文發布時間為:2018-09-23
機器學習學習筆記(一)之資料集
一 學習階段可用的資料集 1 kaggle 特點 大資料競賽平台 真實資料 資料量巨大 2 uci資料集 特點 收錄了500餘個資料集 覆蓋科學 生活 競技領域 資料量幾十萬 3 scikit learn 特點 資料量較小 方便學習 二 scikit learn工具介紹 安裝 pip install...
學習筆記(資料轉換)
1 object轉換string string str obj obj為null也不影響 string.valueof obj 定義或者初始化的obj傳入 2 object轉換long object string long string str string.valueof obj 定義或者初始化的...
機器學習資料集
ucl機器學習知識庫 包括近300個不同大小和型別的資料集,可用於分類 回歸 聚類和推薦系統任務。資料集列表位於 amazon aws公開資料集 包含的通常是大型資料集,可通過amazon s3訪問。這些資料集包括人類基因組專案 common crawl網頁語料庫 維基百科資料和google boo...