sample
আপনি যদি পুনরুত্পাদনযোগ্য ফলাফলের সন্ধান করেন তবে বিভাজন সম্পর্কে সতর্ক থাকুন । যদি আপনার ডেটা আরও সামান্য পরিবর্তিত হয় তবে আপনি ব্যবহার করলেও বিভাজন পৃথক হবে set.seed
। উদাহরণস্বরূপ, আপনার ডেটা অনুসারে বাছাই করা তালিকাটি ডেটা 1 এবং 10 এর মধ্যে থাকা সমস্ত সংখ্যা imagine
বিকল্প পদ্ধতি হ'ল কয়েকটি সিডো এলোমেলো সংখ্যায় আইডি ম্যাপ করতে একটি হ্যাশ ফাংশন ব্যবহার করা এবং তারপরে এই সংখ্যাগুলির মোডে নমুনা। এই নমুনাটি আরও স্থিতিশীল কারণ অ্যাসাইনমেন্টটি এখন প্রতিটি পর্যবেক্ষণের হ্যাশ দ্বারা নির্ধারিত হয়, তার সম্পর্কিত অবস্থানের দ্বারা নয়।
উদাহরণ স্বরূপ:
require(openssl) # for md5
require(data.table) # for the demo data
set.seed(1) # this won't help `sample`
population <- as.character(1e5:(1e6-1)) # some made up ID names
N <- 1e4 # sample size
sample1 <- data.table(id = sort(sample(population, N))) # randomly sample N ids
sample2 <- sample1[-sample(N, 1)] # randomly drop one observation from sample1
# samples are all but identical
sample1
sample2
nrow(merge(sample1, sample2))
[1] 9999
# row splitting yields very different test sets, even though we've set the seed
test <- sample(N-1, N/2, replace = F)
test1 <- sample1[test, .(id)]
test2 <- sample2[test, .(id)]
nrow(test1)
[1] 5000
nrow(merge(test1, test2))
[1] 2653
# to fix that, we can use some hash function to sample on the last digit
md5_bit_mod <- function(x, m = 2L) {
# Inputs:
# x: a character vector of ids
# m: the modulo divisor (modify for split proportions other than 50:50)
# Output: remainders from dividing the first digit of the md5 hash of x by m
as.integer(as.hexmode(substr(openssl::md5(x), 1, 1)) %% m)
}
# hash splitting preserves the similarity, because the assignment of test/train
# is determined by the hash of each obs., and not by its relative location in the data
# which may change
test1a <- sample1[md5_bit_mod(id) == 0L, .(id)]
test2a <- sample2[md5_bit_mod(id) == 0L, .(id)]
nrow(merge(test1a, test2a))
[1] 5057
nrow(test1a)
[1] 5057
নমুনার আকার হুবহু 5000 নয় কারণ অ্যাসাইনমেন্টটি সম্ভাব্যতাযুক্ত, তবে বড় সংখ্যার আইনের কারণে এটি বড় নমুনাগুলিতে ধন্যবাদ হওয়া উচিত নয়।
আরও দেখুন: http://blog.richardweiss.org/2016/12/25/hash-splits.html
এবং /crypto/20742/statistical-properties-of-hash-funtions- যখন -calculating-মডিউল
x
আপনার সূচক (সারি / কর্ণ নম্বর বলতে পারেন) হতে পারেdata
।size
হতে পারে0.75*nrow(data)
।sample(1:10, 4, replace = FALSE, prob = NULL)
এটি কী করে তা দেখার চেষ্টা করুন ।