10-গুণ ক্রস বৈধতা করতে ডেটা সেটকে কীভাবে ভাগ করবেন


14

এখন আমার কাছে একটি Rডেটা ফ্রেম রয়েছে (প্রশিক্ষণ), কেউ আমাকে কীভাবে এলোমেলোভাবে 10-ভাঁজ ক্রস বৈধকরণ করতে এই ডেটা সেটটি বিভক্ত করতে পারেন?


2
সন্তোষজনক নির্ভুলতা অর্জনের জন্য পুরো প্রক্রিয়াটি 100 বার পুনরাবৃত্তি করতে ভুলবেন না।
ফ্রাঙ্ক হ্যারেল

নমুনা কেস এবং স্যাম্পল পৃথকভাবে নিয়ন্ত্রণ করতে ভুলবেন না এবং তারপরে প্রতিটি ব্লকের সাথে তাদের একত্রিত করুন।
শিচেং গুও

আপনি যদি ক্যারেট :: ট্রেন ব্যবহার করেন তবে আপনার এটির যত্ন নেওয়াও প্রয়োজন হবে না। এটি অভ্যন্তরীণভাবে করা হবে, আপনি ভাঁজ পরিমাণ চয়ন করতে পারেন। যদি আপনি "হাত দ্বারা" এটি করার জন্য জোর করেন তবে ক্যারেট :: ক্রিয়েটফোল্ডগুলিতে প্রয়োগ করা হিসাবে শ্রেণীর স্ট্রেটিভড নমুনা ব্যবহার করুন।
মার্বেল

আমি এই থ্রেডটি লক করে রেখেছি কারণ প্রচুর উত্তরের প্রতিটি একে সাধারণ পরিসংখ্যানগত আগ্রহের পরিবর্তে কেবল কোডিং প্রশ্ন হিসাবে বিবেচনা করে treat
হোবার

উত্তর:


22

caret এর জন্য একটি ফাংশন রয়েছে:

require(caret)
flds <- createFolds(y, k = 10, list = TRUE, returnTrain = FALSE)
names(flds)[1] <- "train"

তারপরে প্রতিটি উপাদান fldsহ'ল প্রতিটি ডেটাসেটের জন্য সূচকের তালিকা। যদি আপনার ডেটাসেট কল করা হয় dat, তবে dat[flds$train,]আপনি প্রশিক্ষণ সেট পান, dat[ flds[[2]], ]দ্বিতীয় ভাঁজ সেট পাবেন ইত্যাদি gets


12

কোনও প্যাকেজ ব্যবহার করে 10-গুণ সম্পাদন করার জন্য এখানে একটি সহজ উপায়:

#Randomly shuffle the data
yourData<-yourData[sample(nrow(yourData)),]

#Create 10 equally size folds
folds <- cut(seq(1,nrow(yourData)),breaks=10,labels=FALSE)

#Perform 10 fold cross validation
for(i in 1:10){
    #Segement your data by fold using the which() function 
    testIndexes <- which(folds==i,arr.ind=TRUE)
    testData <- yourData[testIndexes, ]
    trainData <- yourData[-testIndexes, ]
    #Use the test and train data partitions however you desire...
}

-1: ক্যারেট ফাংশন স্ট্রেইটেড স্যাম্পলিং করে যা আপনি করছেন না। যদি কেউ আপনার জন্য জিনিসগুলি সহজ করে তুলেছে তবে ওয়েলটি পুনরায় উদ্ভাবনের কী বিষয়?
মার্বেল

10
তুমি কি মজা করছ? উত্তরের পুরো উদ্দেশ্যটি সম্পূর্ণ ক্যারেট প্যাকেজটি ইনস্টল না করেই 10-গুণ করা। আপনি কেবল ভাল পয়েন্টটি করেন তা হ'ল লোকেরা তাদের কোডটি আসলে কী তা বোঝে। তরুণ ফড়িং, স্তরযুক্ত নমুনা সর্বদা সেরা পদ্ধতির হয় না approach উদাহরণস্বরূপ, এটি আরও উপাত্ত সহ সাবগ্রুপগুলিকে আরও বেশি গুরুত্ব দেয় যা সর্বদা কাম্য নয়। (এসপ যদি আপনি জানেন না যে এটি হচ্ছে)। এটি আপনার ডেটার জন্য সেরা পদ্ধতির ব্যবহার সম্পর্কে। সাবধানতার সাথে আমার বন্ধুটিকে ট্রল করুন :)
জ্যাক ড্রু

@ জ্যাকড্রু আমি বুঝতে পেরেছি যে এটি এখন একটি পুরানো পোস্ট, তবে প্রতিটি পুনরুক্তির জন্য কোনও ভিআর (পি) মডেলের গড় গড় ত্রুটি পেতে পরীক্ষা এবং ট্রেনের ডেটা কীভাবে ব্যবহার করতে হয় সে সম্পর্কে কিছু গাইডেন্স জিজ্ঞাসা করা সম্ভব হবে?
yourodreadthis এই


এই প্রোগ্রামটিতে @JakeDrew উভয় উত্তর প্রাপ্য একটি প্যাকেজের সাথে একটি প্লাস 1. এক, কোড সহ অন্যান্য ...
natbusa

2

সম্ভবত সবচেয়ে ভাল উপায় নয়, তবে এটি করার একটি উপায় এখানে। আমি এই মুহূর্তে নিশ্চিত যে আমি এই কোডটি লেখার সময় আমি এখানে অন্য উত্তর থেকে একটি কৌশল নিয়েছিলাম, তবে আমি এটির সাথে লিঙ্কটি খুঁজে পাচ্ছিলাম না।

# Generate some test data
x <- runif(100)*10 #Random values between 0 and 10
y <- x+rnorm(100)*.1 #y~x+error
dataset <- data.frame(x,y) #Create data frame
plot(dataset$x,dataset$y) #Plot the data

#install.packages("cvTools")
library(cvTools) #run the above line if you don't have this library

k <- 10 #the number of folds

folds <- cvFolds(NROW(dataset), K=k)
dataset$holdoutpred <- rep(0,nrow(dataset))

for(i in 1:k){
  train <- dataset[folds$subsets[folds$which != i], ] #Set the training set
  validation <- dataset[folds$subsets[folds$which == i], ] #Set the validation set

  newlm <- lm(y~x,data=train) #Get your new linear model (just fit on the train data)
  newpred <- predict(newlm,newdata=validation) #Get the predicitons for the validation set (from the model just fit on the train data)

  dataset[folds$subsets[folds$which == i], ]$holdoutpred <- newpred #Put the hold out prediction in the data set for later use
}

dataset$holdoutpred #do whatever you want with these predictions

1

দয়া করে আমি ব্যবহার করি এমন কয়েকটি কোডের নীচে সন্ধান করুন (ধার করা এবং অন্য উত্স থেকে অভিযোজিত)। এটিকে কোনও স্ক্রিপ্ট থেকে সরাসরি অনুলিপি করুন যা আমি নিজেকে ব্যবহার করেছি, আরপিআর্ট রুটিনে রেখেছি। অংশটি সম্ভবত বেশিরভাগ আগ্রহ হ'ল ভাঁজগুলি তৈরির লাইন। বিকল্পভাবে - আপনি বুটস্ট্র্যাপ প্যাকেজ থেকে ক্রসওয়াল ফাংশন ব্যবহার করতে পারেন।

#define error matrix
err <- matrix(NA,nrow=1,ncol=10)
errcv=err

#creation of folds
for(c in 1:10){

n=nrow(df);K=10; sizeblock= n%/%K;alea=runif(n);rang=rank(alea);bloc=(rang-1)%/%sizeblock+1;bloc[bloc==K+1]=K;bloc=factor(bloc); bloc=as.factor(bloc);print(summary(bloc))

for(k in 1:10){

#rpart
fit=rpart(type~., data=df[bloc!=k,],xval=0) ; (predict(fit,df[bloc==k,]))
answers=(predict(fit,df[bloc==k,],type="class")==resp[bloc==k])
err[1,k]=1-(sum(answers)/length(answers))

}

err
errcv[,c]=rowMeans(err, na.rm = FALSE, dims = 1)

}
errcv

1
# Evaluate models uses k-fold cross-validation
install.packages("DAAG")
library("DAAG")

cv.lm(data=dat, form.lm=mod1, m= 10, plotit = F)

কোডের এক লাইনে আপনার জন্য সবকিছু করা হয়েছে!

?cv.lm for information on input and output

0

যেহেতু আমি এই তালিকায় আমার পন্থাটি করি নি, তাই আমি ভেবেছিলাম যে আমি এমন লোকদের জন্য অন্য একটি বিকল্প ভাগ করে নিতে পারি যারা দ্রুত ক্রস বৈধতার জন্য প্যাকেজ ইনস্টল করার মতো মনে করেন না

# get the data from somewhere and specify number of folds
data <- read.csv('my_data.csv')
nrFolds <- 10

# generate array containing fold-number for each sample (row)
folds <- rep_len(1:nrFolds, nrow(data))

# actual cross validation
for(k in 1:nrFolds) {
    # actual split of the data
    fold <- which(folds == k)
    data.train <- data[-fold,]
    data.test <- data[fold,]

    # train and test your model with data.train and data.test
}

নোট করুন যে উপরের কোডটি ধরে নিয়েছে যে ডেটা ইতিমধ্যে বদলে গেছে। যদি এটি না হয় তবে আপনি এর মতো কিছু যুক্ত করার বিষয়টি বিবেচনা করতে পারেন

folds <- sample(folds, nrow(data))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.