一、基本概念
機器學習中要實現對數據的預測能力,需要將原始數據集分成訓練集和測試集。訓練集用於訓練模型,測試集用於評估模型的預測能力。在R語言中,使用caTools包的sample.split函數可以將數據集劃分成訓練集和測試集。
二、劃分比例
訓練集和測試集的劃分比例決定了模型的性能,典型的比例是70:30或80:20。我們需要根據數據集的大小和特徵選擇合適的比例。對於小樣本數據集,典型的比例為50:50。在R語言中,sample.split函數可以指定劃分比例。
#劃分比例為70%
library(caTools)
split_ratio <- 0.7
split <- sample.split(data$target, SplitRatio = split_ratio)
train_data <- subset(data, split == TRUE)
test_data <- subset(data, split == FALSE)
三、隨機分層抽樣
在劃分訓練集和測試集時,需要考慮一個因素:如果數據集中某個特徵的取值分布不均勻,那麼在劃分訓練集和測試集的時候,每個集合中這個特徵的分布也會不均勻。要解決這個問題,可以使用隨機分層抽樣。在R語言中,可以通過caret包進行分層抽樣。
#隨機分層抽樣
library(caret)
split_ratio <- 0.7
strata <- data$group #根據group進行分層
split <- createDataPartition(strata, p = split_ratio, list = FALSE,
times = 1)
train_data <- data[split, ]
test_data <- data[-split, ]
四、交叉驗證
交叉驗證是一種評估模型性能的方法,可以用於選擇最佳超參數或比較不同算法的性能。R語言中可以使用caret包的trainControl函數實現交叉驗證。trainControl函數中的method參數可以指定交叉驗證的方法。
#10折交叉驗證
library(caret)
control <- trainControl(method = "cv", number = 10)
model <- train(y ~ ., data = train_data, method = "glm",
trControl = control)
五、分層k折交叉驗證
分層k折交叉驗證是在k折交叉驗證基礎上加入分層抽樣的方法,可以更好地控制測試集和訓練集中特徵的分布。在R語言中可以使用caret包的trainControl函數實現分層k折交叉驗證。
#分層5折交叉驗證
library(caret)
control <- trainControl(method = "repeatedcv",
number = 5, repeats = 3,
classProbs = TRUE,
summaryFunction = twoClassSummary)
model <- train(y ~ ., data = train_data, method = "glm",
trControl = control)
六、總結
劃分訓練集和測試集是機器學習中非常重要的步驟,可以有效評估模型的性能。在R語言中,可以使用不同的方法進行劃分,包括簡單分割、隨機分層抽樣、交叉驗證、分層k折交叉驗證等。我們需要根據數據集的大小和特徵選擇合適的方法和參數,以獲得更好的預測能力。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/248718.html