r - 下采样 R 时训练/测试样本不是随机的
问题描述
我的数据集包含从住院患者那里收集的关于他们对在医院接受的服务的满意度的信息。数据如下(这里只提到一组变量);
$ Advised : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 1 2 2 ...
$ Overall_Rate_Discharge_Process : Factor w/ 5 levels "1","2","3","4",..: 3 4 5 5 4 4 4 4 4 5 ...
$ Rights_Responsibilities : Factor w/ 2 levels "0","1": 1 2 2 2 2 2 2 2 1 2 ...
$ Overall_Care : Factor w/ 5 levels "1","2","3","4",..: 4 4 5 5 4 4 4 3 5 5 ...
$ Recommend_Employees : Factor w/ 2 levels "0","1": 1 1 2 2 2 1 2 1 1 2 ...
$ NPSVal3.1 : Factor w/ 3 levels "Detractor","Passive",..: 3 2 3 3 3 2 2 1 3 3 ...
我的目标是找出影响患者 NPSVal3.1 的因素(使用序数逻辑回归)。NPSVal3.1 列的每个级别的行数不相等;
Detractor Passive Promoter
981 12932 8560
因此,我正在尝试“下采样”方法来选择数据的训练集。下面是我使用的代码(来自库“caret”);
train3.1 <- downSample(mydata3.1, mydata3.1$NPSVal3.1)
当检查训练集的 head() 和 tail() 时,它看起来不是随机的(行 ID 是按顺序排列的)
> head(train3.1)
Discharge_Instructions_Treatment_Plans Advised Overall_Rate_Discharge_Process Rights_Responsibilities Overall_Care
1 1 1 2 1 3
2 1 1 4 0 4
3 1 0 4 0 5
4 1 1 3 1 4
5 1 1 4 0 4
6 1 0 4 1 4
Recommend_Employees NPSVal3.1 Class
1 0 Detractor Detractor
2 0 Detractor Detractor
3 0 Detractor Detractor
4 0 Detractor Detractor
5 0 Detractor Detractor
6 1 Detractor Detractor
此外,当我提取测试集时,它看起来也不是随机的。下面是我使用的代码。
test3.1 <- dplyr::anti_join(mydata3.1, train3.1)
这些数据集是随机的吗?如果是,我怎么知道?如果不是,我怎样才能使训练集和测试集都是随机的?谢谢您的支持!
解决方案
如果一个新员工有相同的机会成为“批评者”、“被动”或“推动者”,那么下采样是有道理的,但我认为你不应该使用下采样来选择你的训练/测试集。我的建议是进行下采样,然后使用caret::createDataPartition
以确保将数据准随机拆分为训练/测试。
下采样有许多需要注意的陷阱/警告。插入符号文档在这一点上有一些很好的讨论:https ://topepo.github.io/caret/subsampling-for-class-imbalances.html
对您的问题的直接回答(测试采样方法的“随机性”)是在下采样之前设置种子,然后查看更改种子是否会更改每个数据帧中包含/排除的员工,例如
set.seed(123)
train3.1_v1 <- caret::downSample(mydata3.1, mydata3.1$NPSVal3.1)
set.seed(300)
train3.1_v2 <- caret::downSample(mydata3.1, mydata3.1$NPSVal3.1)
dplyr::anti_join(train3.1_v1, train3.1_v2)
推荐阅读
- javascript - 使用物化吐司时的错误消息
- swift - 使用 didset 函数更新 UIImageView
- reactjs - 服务器端的条件渲染
- scala - Spark Shell 允许重新声明相同的不可变变量
- python - 当属性位于根标记内时,如何将 XML 转换为 CSV?
- python-3.x - 具有多个元素的数组的真值是不明确的。在图像分类问题中使用 a.any() 或 a.all()
- excel - EXCEL 如何在另一个工作表的单行中连接多行的值?
- jira - 如何找到没有任何测试的测试集?
- php - 如何进行数据库检查并根据结果更新或插入(不断收到 HTTP 500 错误)
- javascript - 如何在javascript中验证对象