[问题] 平均分布分割测试与训练资料

楼主: shirley7483 (Shirley)   2017-06-21 17:43:40
[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
透过logit model,用各个商品的属性及是否阅读商品评论,预测消费者会购买哪种商品
为了实作predit()要分割资料集
已知caret package的createDataPartition能将训练与测试集的商品依比例平均分布
但资料集为long format,每四列为一个单位(一个受测者产生四列资料,为四个商品)
使用createDataPartition后,资料被打散了,不再是每四列为一单位
该如何保持资料每四列一个单位,但训练与测试集中的商品还是可以按比例分布呢?
ps被购买的商品比例本来就不平均,但希望训练集与测试集的比例相同,例如10:5:2:1
[程式范例]:
共有432名受测者,1728列资料,long format资料集如图 http://imgur.com/pWhvNCF
各商品被购买的比例大约为
HighJ HighU LowJ LowU
272 80 60 20
library(caret)
Train <- createDataPartition(mydata$purchase, p=0.6, list=FALSE)
training <- mydata[ Train, ]
testing <- mydata[ -Train, ]
照上述程式码跑无错误讯息,但是资料被打散
推测可能是用来取index的mydate$purchase有问题,不知道该怎么改才好@@
[环境叙述]:
R version: 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32
Running under: Windows >= 10
[关键字]:
作者: f496328mm (为什么会流泪)   2017-06-21 18:06:00
有id就好办了,去sample,然后 %in% 就可以抓出来了sample(nrow(data)/4,train.amount)上面是取 train 的 id,之后去抓相同的id即可data[ subject_id %in% train_id ]
作者: obarisk (OSWALT)   2017-06-21 18:54:00
我们的google不一样?https://www.google.com.tw/search?q=r+%25in%25&ie=utf-8&oe=utf-8&gws_rd=cr&ei=RFBKWYHnJ4S20ATg3oz4BQhttps://tinyurl.com/yapu9sbe我贴网址的能力有问题https://stackoverflow.com/questions/10385863/the-r-in-operator?`%in%`
作者: f496328mm (为什么会流泪)   2017-06-21 22:24:00
mydata[ "subject_id" %in% "train_id" ] 把引号拿掉如果会有error 那把mydata转成data.table型态
楼主: shirley7483 (Shirley)   2017-06-22 08:33:00
成功!使用data.table好快速啊,马上笔记起来,感谢~
作者: celestialgod (天)   2017-06-22 20:07:00
楼楼上只是少一个,所以才出错
作者: f496328mm (为什么会流泪)   2017-06-22 20:32:00
原来不是引号的问题QQ
作者: celestialgod (天)   2017-06-22 20:36:00
data.table可以不用,,但data.frame, matrix一定要

Links booklink

Contact Us: admin [ a t ] ucptt.com