প্রথম পন্থা
আপনি ম্যাথামেটিকায় এই পদ্ধতির চেষ্টা করতে পারেন।
আসুন কিছু দ্বিখণ্ডিত ডেটা উত্পন্ন করি:
data = Table[RandomVariate[BinormalDistribution[{50, 50}, {5, 10}, .8]], {1000}];
তারপরে আমাদের এই প্যাকেজটি লোড করা দরকার:
Needs["MultivariateStatistics`"]
এবং এখন:
ellPar=EllipsoidQuantile[data, {0.9}]
একটি আউটপুট দেয় যা 90% আত্মবিশ্বাসের উপবৃত্তকে সংজ্ঞায়িত করে। এই আউটপুট থেকে প্রাপ্ত মানগুলি নিম্নলিখিত ফর্ম্যাটে রয়েছে:
{Ellipsoid[{x1, x2}, {r1, r2}, {{d1, d2}, {d3, d4}}]}
x1 এবং x2 বিন্দুটি নির্দিষ্ট করে যেখানে কেন্দ্রিক, r1 এবং r2 এর উপবৃত্ত আধা-অক্ষ রেডিয়িকে নির্দিষ্ট করে এবং d1, d2, d3 এবং d4 প্রান্তিককরণের দিকটি নির্দিষ্ট করে।
আপনি এটি প্লট করতে পারেন:
Show[{ListPlot[data, PlotRange -> {{0, 100}, {0, 100}}, AspectRatio -> 1], Graphics[EllipsoidQuantile[data, 0.9]]}]
উপবৃত্তের সাধারণ প্যারামেট্রিক ফর্মটি হ'ল:
ell[t_, xc_, yc_, a_, b_, angle_] := {xc + a Cos[t] Cos[angle] - b Sin[t] Sin[angle],
yc + a Cos[t] Sin[angle] + b Sin[t] Cos[angle]}
এবং আপনি এটি এইভাবে চক্রান্ত করতে পারেন:
ParametricPlot[
ell[t, ellPar[[1, 1, 1]], ellPar[[1, 1, 2]], ellPar[[1, 2, 1]], ellPar[[1, 2, 2]],
ArcTan[ellPar[[1, 3, 1, 2]]/ellPar[[1, 3, 1, 1]]]], {t, 0, 2 \[Pi]},
PlotRange -> {{0, 100}, {0, 100}}]
আপনি খাঁটি জ্যামিতিক তথ্যের উপর ভিত্তি করে একটি চেক সম্পাদন করতে পারেন: যদি উপবৃত্তের কেন্দ্র (এলিপার [[১,১]]) এর মধ্যে ইউক্লিডিয়ান দূরত্ব থাকে এবং উপবৃত্তের কেন্দ্র এবং সীমান্তের মধ্যবর্তী দূরত্বের চেয়ে আপনার ডেটা পয়েন্ট বড় হয় উপবৃত্ত (স্পষ্টতই, আপনার পয়েন্টটি যেদিকে একই অবস্থিত), তারপরে সেই ডেটা পয়েন্টটি উপবৃত্তের বাইরে।
দ্বিতীয় পন্থা
এই পদ্ধতির মসৃণ কার্নেল বিতরণের উপর ভিত্তি করে।
এগুলি আপনার ডেটার অনুরূপ উপায়ে বিতরণ করা কিছু ডেটা:
data1 = RandomVariate[BinormalDistribution[{.3, .7}, {.2, .3}, .8], 500];
data2 = RandomVariate[BinormalDistribution[{.6, .3}, {.4, .15}, .8], 500];
data = Partition[Flatten[Join[{data1, data2}]], 2];
আমরা এই ডেটা মানগুলিতে একটি মসৃণ কার্নেল বিতরণ পাই:
skd = SmoothKernelDistribution[data];
আমরা প্রতিটি ডাটা পয়েন্টের জন্য একটি সংখ্যার ফলাফল পাই:
eval = Table[{data[[i]], PDF[skd, data[[i]]]}, {i, Length[data]}];
আমরা একটি থ্রেশহোল্ড ঠিক করি এবং আমরা এই প্রান্তিকের চেয়ে বেশি যে সমস্ত ডেটা নির্বাচন করি:
threshold = 1.2;
dataIn = Select[eval, #1[[2]] > threshold &][[All, 1]];
এই অঞ্চলের বাইরে পড়া ডেটা আমরা এখানে পেয়েছি:
dataOut = Complement[data, dataIn];
এবং এখন আমরা সমস্ত ডেটা প্লট করতে পারি:
Show[ContourPlot[Evaluate@PDF[skd, {x, y}], {x, 0, 1}, {y, 0, 1}, PlotRange -> {{0, 1}, {0, 1}}, PlotPoints -> 50],
ListPlot[dataIn, PlotStyle -> Darker[Green]],
ListPlot[dataOut, PlotStyle -> Red]]
সবুজ বর্ণের পয়েন্টগুলি হ'ল প্রান্তিকের উপরে এবং লাল বর্ণের পয়েন্টগুলি হ'ল প্রান্তিকের নীচে।