যদি আমার কাছে এমন ডেটা সেট থাকে যা নীচের মতো গ্রাফ তৈরি করে তবে আমি কীভাবে আলগোরিদিমভাবে দেখানো শিখরের এক্স-মানগুলি নির্ধারণ করব (এই ক্ষেত্রে তিনটি):
যদি আমার কাছে এমন ডেটা সেট থাকে যা নীচের মতো গ্রাফ তৈরি করে তবে আমি কীভাবে আলগোরিদিমভাবে দেখানো শিখরের এক্স-মানগুলি নির্ধারণ করব (এই ক্ষেত্রে তিনটি):
উত্তর:
একটি সাধারণ পদ্ধতির ডেটা মসৃণ করা এবং তারপরে মসৃণতার সাথে স্থানীয় সর্বাধিক ফিল্টারের তুলনা করে শিখর সন্ধান করা । ইন R
:
argmax <- function(x, y, w=1, ...) {
require(zoo)
n <- length(y)
y.smooth <- loess(y ~ x, ...)$fitted
y.max <- rollapply(zoo(y.smooth), 2*w+1, max, align="center")
delta <- y.max - y.smooth[-c(1:w, n+1-1:w)]
i.max <- which(delta <= 0) + w
list(x=x[i.max], i=i.max, y.hat=y.smooth)
}
এর রিটার্ন মানটিতে স্থানীয় ম্যাক্সিমার ( x
) - যা প্রশ্নের উত্তর দেয় - এবং x- এবং y- অ্যারেগুলিতে সূচকগুলি যেখানে এই স্থানীয় ম্যাক্সিমাটি ঘটে i
) অন্তর্ভুক্ত করে ( )।
পরিস্থিতিতে দুটি টি পরামিতি সুর করতে হবে: w
স্থানীয় সর্বাধিক গণনা করতে ব্যবহৃত উইন্ডোর অর্ধ প্রস্থ। (এর মান ডেটার অ্যারের দৈর্ঘ্যের অর্ধেকের চেয়ে কম হওয়া উচিত)) ছোট মানগুলি ছোট ছোট স্থানীয় চাপগুলিকে বেছে নেবে যেখানে বৃহত্তর মানগুলি সেগুলির উপরে চলে যাবে। আরেকটি - এই কোডটিতে স্পষ্ট নয় - span
এটি loess
মসৃণতার যুক্তি । (এটি সাধারণত শূন্য এবং একের মধ্যে থাকে; এটি এক্স মানের মানের পরিসীমা হিসাবে একটি উইন্ডো প্রস্থকে প্রতিবিম্বিত করে।) বৃহত্তর মানগুলি ডেটাটিকে আরও আক্রমণাত্মকভাবে মসৃণ করবে, স্থানীয় ঝাঁকগুলি পুরোপুরি অদৃশ্য হয়ে যাবে।
এই টিউনিংটি কার্যকরভাবে দেখতে, আসুন ফলাফলগুলি প্লট করার জন্য একটি সামান্য পরীক্ষা ফাংশন তৈরি করুন:
test <- function(w, span) {
peaks <- argmax(x, y, w=w, span=span)
plot(x, y, cex=0.75, col="Gray", main=paste("w = ", w, ", span = ", span, sep=""))
lines(x, peaks$y.hat, lwd=2) #$
y.min <- min(y)
sapply(peaks$i, function(i) lines(c(x[i],x[i]), c(y.min, peaks$y.hat[i]),
col="Red", lty=2))
points(x[peaks$i], peaks$y.hat[peaks$i], col="Red", pch=19, cex=1.25)
}
এখানে কিছু কৃত্রিম, কিছুটা গোলমাল করা ডেটা প্রয়োগ করা হয়েছে exper
x <- 1:1000 / 100 - 5
y <- exp(abs(x)/20) * sin(2 * x + (x/5)^2) + cos(10*x) / 5 + rnorm(length(x), sd=0.05)
par(mfrow=c(3,1))
test(2, 0.05)
test(30, 0.05)
test(2, 0.2)
হয় একটি প্রশস্ত উইন্ডো (মাঝের প্লট) বা আরও আক্রমণাত্মক মসৃণ (নীচের প্লট) উপরের প্লটটিতে সনাক্ত করা স্থানীয় ম্যাক্সিমাকে দূর করে। এখানে সর্বোত্তম সংমিশ্রণটি সম্ভবত প্রশস্ত উইন্ডো এবং কেবল মৃদু স্মুথিং, কারণ আক্রমণাত্মক স্মুথিংয়ের ফলে এই শিখরগুলি স্থানান্তরিত হয় (নীচের চক্রান্তের মধ্য এবং ডান পয়েন্টগুলি দেখুন এবং কাঁচা তথ্যের আপাত শিখরের সাথে তাদের অবস্থানগুলি তুলনা করুন)। এই উদাহরণে w=50
এবং span=0.05
একটি দুর্দান্ত কাজ করে (দেখানো হয়নি)।
লক্ষ্য করুন এন্ড পয়েন্ট স্থানীয় ম্যাক্সিমা হয় না সনাক্ত হয়েছে। এগুলি পৃথকভাবে পরিদর্শন করা যেতে পারে। (এটি সমর্থন করার জন্য, argmax
স্মুথড ই-মানগুলি প্রদান করে))
সাধারণ উদ্দেশ্যে কাজের জন্য আরও আনুষ্ঠানিক মডেলিংয়ের চেয়ে এই পদ্ধতির বিভিন্ন সুবিধা রয়েছে:
এটি ডেটার কোনও প্রাক-ধারণিত মডেল গ্রহণ করে না।
এটি ডেটা বৈশিষ্ট্যের সাথে মানিয়ে নিতে পারে।
এটিতে আগ্রহী যে ধরণের শিখর রয়েছে তা সনাক্ত করতে এটি রূপান্তর করা যেতে পারে।
w
এবং span
, এবং এছাড়াও যে উচ্চতর মান আবিষ্কার span
পীক নাড়াচাড়া করা হয়। এমনকি এই পদক্ষেপগুলি স্বয়ংক্রিয়ভাবে চালিত হতে পারে বলে মনে হচ্ছে। উদাহরণস্বরূপ, প্রথম ইস্যুর জন্য, যদি আমরা আবিষ্কার করা শৃঙ্গগুলির মানটি মূল্যায়ন করতে পারি তবে আমরা optimize
পরামিতিগুলিতে চলতে পারি ! দ্বিতীয় ইস্যুটির জন্য, যেমন আবিষ্কৃত শীর্ষের উভয় পাশের একটি উইন্ডো চয়ন করুন এবং উচ্চতর মানগুলির সন্ধান করুন।
আমি মন্তব্যে উল্লেখ করেছি যে সময় সিরিজ পর্যায়ক্রমিকভাবে ফিটিং হিসাবে উপস্থিত মনে হয় যদি কোনও সুরেলা মডেলটি প্রথম এবং দ্বিতীয় ডেরিভেটিভ টেস্ট প্রয়োগ করে ফাংশনটি মসৃণ করতে এবং শিখর সনাক্ত করতে একটি উপায় সরবরাহ করে har হুবার একটি ননপ্যারমেট্রিক টেস্টের দিকে ইঙ্গিত করেছে যা একাধিক শৃঙ্গ রয়েছে এবং ফাংশনটি পর্যায়ক্রমিকভাবে অগত্যা হয় না এমন সুবিধা রয়েছে। তবে ফ্রি লাঞ্চ নেই। যদিও তার পদ্ধতির সুবিধাগুলি রয়েছে যা তিনি উল্লেখ করেছেন যে কোনও প্যারামেট্রিক মডেল উপযুক্ত হলে অসুবিধাগুলি থাকতে পারে। ননপ্যারমেট্রিক কৌশলগুলি ব্যবহার করার ক্ষেত্রে এটি সর্বদা ফ্লিপ দিক। যদিও এটি প্যারামেট্রিক অনুমানগুলি এড়িয়ে যায়, প্যারামমিত্রিক অনুমানগুলি যথাযথ হলে প্যারামিমেট্রিক পদ্ধতিটি আরও ভাল better তার পদ্ধতিটি ডেটাতে টাইম সিরিজ কাঠামোর পুরো সুবিধা নেয় না।
আমি মনে করি যে প্রস্তাবিত পদ্ধতির সুবিধাগুলি চিহ্নিত করা যথাযথ হলেও সম্ভাব্য অসুবিধাগুলি চিহ্নিত করাও গুরুত্বপূর্ণ। আমার দৃষ্টিভঙ্গি এবং হুবারের উভয়ই দক্ষ পদ্ধতিতে শিখরগুলি খুঁজে পায়। তবে আমি মনে করি যে স্থানীয় নির্ধারিত সর্বোচ্চ পর্বতের চেয়ে স্থানীয় সর্বাধিক কম হলে তার পদ্ধতিটি আরও কিছুটা বেশি কাজ করে work
সিগন্যাল প্রসেসিংয়ে একটি ক্লাসিক শিখর সনাক্তকরণ পদ্ধতি নিম্নরূপ:
আরেকটি পদ্ধতি যা কাজ করে তা হ'ল ভারী স্মুথড (লো-পাস বা মিডিয়ান ফিল্টারড) এর বিরুদ্ধে তীব্রভাবে হাইপাস ফিল্টার করা সংকেতটির তুলনা করা এবং পদক্ষেপ 3 প্রয়োগ করা।
আশাকরি এটা সাহায্য করবে.