প্রশ্ন উপায়ে ব্যবহার করতে চায় নিকটতম প্রতিবেশীদের মধ্যে শক্তসমর্থ চিহ্নিত করার উপায় এবং সঠিক স্থানীয় outliers। কেন ঠিক তাই না?
পদ্ধতিটি হল একটি শক্তিশালী স্থানীয় মসৃণ গণনা করা, অবশিষ্টাংশগুলি মূল্যায়ন করা এবং খুব বড় যে কোনওটি শূন্য করা। এটি সরাসরি সমস্ত প্রয়োজনীয়তা সন্তুষ্ট করে এবং বিভিন্ন অ্যাপ্লিকেশনগুলিতে সামঞ্জস্য করার জন্য যথেষ্ট নমনীয়, কারণ স্থানীয় প্রতিবেশীর আকার এবং বহিরাগতদের সনাক্ত করার জন্য প্রান্তিকের আকার পৃথক হতে পারে।
(নমনীয়তা এত গুরুত্বপূর্ণ কেন? কারণ এ জাতীয় যে কোনও পদ্ধতিই স্থানীয়ভাবে চিহ্নিত কিছু আচরণকে "বহির্মুখী" হিসাবে চিহ্নিত করার একটি ভাল সম্ভাবনা রয়েছে such যেমন, এই জাতীয় সমস্ত প্রক্রিয়াটি স্মুথার হিসাবে বিবেচনা করা যেতে পারে the তারা আপাতদৃষ্টিতে বিদেশিদের পাশাপাশি কিছু বিশদকে সরিয়ে দেবে The বিশ্লেষক বিশদ বজায় রাখা এবং স্থানীয় বিদেশী সনাক্তকারীদের সনাক্ত করতে ব্যর্থ হওয়ার মধ্যে বাণিজ্য-বন্ধের কিছুটা নিয়ন্ত্রণ প্রয়োজন needs)
এই পদ্ধতির আরেকটি সুবিধা হ'ল এর জন্য মানগুলির একটি আয়তক্ষেত্রাকার ম্যাট্রিক্সের প্রয়োজন হয় না। বাস্তবে, এ জাতীয় ডেটার জন্য উপযুক্ত স্থানীয় স্মুথ ব্যবহার করে এটি অনিয়মিত ডেটাতে প্রয়োগ করা যেতে পারে ।
R
পাশাপাশি বেশিরভাগ পূর্ণ বৈশিষ্ট্যযুক্ত পরিসংখ্যান প্যাকেজগুলিতে বেশ কয়েকটি শক্তিশালী স্থানীয় স্মুথার অন্তর্নির্মিত রয়েছে, যেমন loess
। নিম্নলিখিত উদাহরণটি এটি ব্যবহার করে প্রক্রিয়া করা হয়েছিল। ম্যাট্রিক্সে সারি এবং কলাম রয়েছে - প্রায় এন্ট্রি। এটি একটি জটিল ফাংশনকে উপস্থাপন করে যা বেশ কয়েকটি স্থানীয় অতিরিক্ত এবং একই সাথে পয়েন্টগুলির সম্পূর্ণ লাইন যেখানে এটি পৃথক নয় (একটি "ক্রিজ")। বিন্দুগুলির এর কিছুটা বেশি - যা "বহির্মুখী" বলে বিবেচিত একটি খুব বেশি অনুপাত - গাউসীয় ত্রুটি যুক্ত হয়েছিল যার স্ট্যান্ডার্ড বিচ্যুতিটি মূল ডেটাগুলির স্ট্যান্ডার্ড বিচ্যুতির মাত্র হয়। এই সিন্থেটিক ডেটাসেট এর মাধ্যমে বাস্তবসম্মত তথ্যের চ্যালেঞ্জিং বৈশিষ্ট্যগুলির অনেকগুলি উপস্থাপন করে।49 4000 5 % 1 / 20794940005 %1 / 20
নোট করুন ( R
কনভেনশন অনুসারে) ম্যাট্রিক্স সারিগুলি উল্লম্ব স্ট্রিপ হিসাবে আঁকা হয়। অবশিষ্টগুলি ব্যতীত সমস্ত চিত্রগুলি তাদের মানগুলিতে ছোট পার্থক্য প্রদর্শনে সহায়তা করার জন্য পাহাড়ের শেডযুক্ত। এটি না করে, প্রায় সমস্ত স্থানীয় বিদেশি অদৃশ্য হয়ে যেত!
"রিয়েল" (মূল অনিয়ন্ত্রিত) চিত্রগুলির সাথে "ইমপুটড" (স্থির )টিকে তুলনা করার মাধ্যমে এটি স্পষ্ট হয় যে কমিয়ে (যা নীচে থেকে থেকে ; এটি "অবশিষ্টাংশ" প্লটে হালকা সায়ান এঙ্গেল স্ট্রাইপ হিসাবে প্রকাশিত)।( 49 , 30 )( 0 , 79 )( 49 , 30 )
"রেসিডুয়ালস" প্লটের স্পেকলগুলি সুস্পষ্ট বিচ্ছিন্ন স্থানীয় বিদেশী দেখায়। এই প্লটটি অন্তর্নিহিত ডেটার সাথে যুক্ত অন্যান্য কাঠামো (যেমন that তির্যক স্ট্রাইপ) হিসাবেও প্রদর্শন করে। ডেটাগুলির একটি স্থানিক মডেল ( ভূ-তাত্ত্বিক পদ্ধতিগুলির মাধ্যমে ) ব্যবহার করে কেউ এই পদ্ধতির উন্নতি করতে পারে তবে তার বিবরণ দিয়ে ও বর্ণনা করে আমাদের এখানে খুব বেশি দূরত্বে নিয়ে যাবে।
1022003600
#
# Create data.
#
set.seed(17)
rows <- 2:80; cols <- 2:50
y <- outer(rows, cols,
function(x,y) 100 * exp((abs(x-y)/50)^(0.9)) * sin(x/10) * cos(y/20))
y.real <- y
#
# Contaminate with iid noise.
#
n.out <- 200
cat(round(100 * n.out / (length(rows)*length(cols)), 2), "% errors\n", sep="")
i.out <- sample.int(length(rows)*length(cols), n.out)
y[i.out] <- y[i.out] + rnorm(n.out, sd=0.05 * sd(y))
#
# Process the data into a data frame for loess.
#
d <- expand.grid(i=1:length(rows), j=1:length(cols))
d$y <- as.vector(y)
#
# Compute the robust local smooth.
# (Adjusting `span` changes the neighborhood size.)
#
fit <- with(d, loess(y ~ i + j, span=min(1/2, 125/(length(rows)*length(cols)))))
#
# Display what happened.
#
require(raster)
show <- function(y, nrows, ncols, hillshade=TRUE, ...) {
x <- raster(y, xmn=0, xmx=ncols, ymn=0, ymx=nrows)
crs(x) <- "+proj=lcc +ellps=WGS84"
if (hillshade) {
slope <- terrain(x, opt='slope')
aspect <- terrain(x, opt='aspect')
hill <- hillShade(slope, aspect, 10, 60)
plot(hill, col=grey(0:100/100), legend=FALSE, ...)
alpha <- 0.5; add <- TRUE
} else {
alpha <- 1; add <- FALSE
}
plot(x, col=rainbow(127, alpha=alpha), add=add, ...)
}
par(mfrow=c(1,4))
show(y, length(rows), length(cols), main="Data")
y.res <- matrix(residuals(fit), nrow=length(rows))
show(y.res, length(rows), length(cols), hillshade=FALSE, main="Residuals")
#hist(y.res, main="Histogram of Residuals", ylab="", xlab="Value")
# Increase the `8` to find fewer local outliers; decrease it to find more.
sigma <- 8 * diff(quantile(y.res, c(1/4, 3/4)))
mu <- median(y.res)
outlier <- abs(y.res - mu) > sigma
cat(sum(outlier), "outliers found.\n")
# Fix up the data (impute the values at the outlying locations).
y.imp <- matrix(predict(fit), nrow=length(rows))
y.imp[outlier] <- y[outlier] - y.res[outlier]
show(y.imp, length(rows), length(cols), main="Imputed")
show(y.real, length(rows), length(cols), main="Real")