অসঙ্গতি সনাক্তকরণের বিভিন্ন কৌশল শেখা

অসঙ্গতি সনাক্তকরণের বিভিন্ন কৌশল শেখা

উত্স নোড: 1867449

আমরা আমাদের ডেটা স্বাভাবিক করতে স্ট্যান্ডার্ড স্কেলার ব্যবহার করেছি এবং একটি স্ক্যাটার গ্রাফ তৈরি করেছি।

এখন আমরা ক্লাস্টারগুলিতে পয়েন্ট দেওয়ার জন্য DBSCAN আমদানি করব। এটি ব্যর্থ হলে, এটি -1 দেখাবে।

এখন আমাদের ফলাফল আছে, কিন্তু আমরা কিভাবে পরীক্ষা করব কোন মানটি min, max এবং আমাদের -1 মান আছে কিনা? ক্লাস্টারের ক্ষুদ্রতম মান পরীক্ষা করতে আমরা arg min মান ব্যবহার করব।

আমরা ফলাফল থেকে দেখতে পাচ্ছি ছয়টি মান যা -1।

এখন একটি স্ক্যাটার গ্রাফ প্লট করা যাক।

উপরের পদ্ধতিগুলি আমরা প্রয়োগ করেছি ইউনি-ভেরিয়েট আউটলিয়ারগুলিতে।

মাল্টি-ভেরিয়েট আউটলায়ার সনাক্তকরণের জন্য, আমাদের মাল্টি-ভেরিয়েট আউটলায়ার্স বুঝতে হবে।

উদাহরণস্বরূপ, আমরা গাড়ী রিডিং গ্রহণ করি। আমরা ওডোমিটারের জন্য দুটি রিডিং মিটার দেখেছি, যা গাড়ির গতির গতি রেকর্ড করে বা পরিমাপ করে এবং দ্বিতীয়টি হল আরপিএম রিডিং যা প্রতি মিনিটে গাড়ির চাকা দ্বারা তৈরি ঘূর্ণনের সংখ্যা রেকর্ড করে।

ধরুন ওডোমিটার 0-60 mph এর রেঞ্জে এবং rpm 0-750 এর মধ্যে দেখায়। আমরা অনুমান করি যে আসা সমস্ত মান একে অপরের সাথে সম্পর্কযুক্ত হওয়া উচিত। যদি ওডোমিটার 50 গতি দেখায় এবং আরপিএম 0 ইনটেক দেখায়, রিডিংগুলি ভুল। যদি ওডোমিটার শূন্যের চেয়ে বেশি মান দেখায়, তার মানে গাড়িটি চলছিল, তাই rpm-এর মান বেশি হওয়া উচিত, কিন্তু আমাদের ক্ষেত্রে, এটি একটি 0 মান দেখায়। অর্থাৎ, মাল্টি-ভেরিয়েট আউটলায়ার।

গ. মহালনোবিস দূরত্ব পদ্ধতি

DBSCAN-এ, আমরা ইউক্লিডিয়ান দূরত্ব মেট্রিক্স ব্যবহার করেছি, কিন্তু এই ক্ষেত্রে, আমরা মহালানোবিস দূরত্ব পদ্ধতি সম্পর্কে কথা বলছি। আমরা DBSCAN এর সাথে Mahalanobis দূরত্বও ব্যবহার করতে পারি।

DBSCAN(eps=0.5, min_samples=3, metric='mahalanobis', metric_params={'V':np.cov(X)}, algorithm='brute', leaf_size=30, n_jobs=-1)

কেন ইউক্লিডীয় একে অপরের সাথে সম্পর্কযুক্ত সত্তার জন্য অযোগ্য? ইউক্লিডীয় দূরত্ব দুটি বিন্দু কতটা কাছাকাছি তার সঠিক তথ্য খুঁজে পায় না বা দেবে।

Mahalanobis পদ্ধতি বিন্দু এবং বিতরণের মধ্যে দূরত্ব ব্যবহার করে যা পরিষ্কার ডেটা। ইউক্লিডীয় দূরত্ব প্রায়শই দুটি বিন্দুর মধ্যে থাকে এবং এর জেড-স্কোর x বিয়োগ গড় দ্বারা গণনা করা হয় এবং প্রমিত বিচ্যুতি দ্বারা ভাগ করা হয়। Mahalanobis-এ, z-স্কোর হল x বিয়োগ গড়কে কোভেরিয়েন্স ম্যাট্রিক্স দ্বারা ভাগ করা হয়।

অতএব, কোভেরিয়েন্স ম্যাট্রিক্স দ্বারা ভাগ করলে কী প্রভাব পড়ে? যদি আপনার ডেটাসেটের ভেরিয়েবলগুলি অত্যন্ত পারস্পরিক সম্পর্কযুক্ত হয় তবে সহভরিতার মানগুলি বেশি হবে৷

একইভাবে, যদি কোভেরিয়েন্সের মান কম হয়, যদি ডেটা পারস্পরিক সম্পর্ক না থাকে তবে দূরত্ব উল্লেখযোগ্যভাবে হ্রাস পায় না। এটি এত ভাল কাজ করে যে এটি ভেরিয়েবলের সমস্যাগুলির স্কেল এবং পারস্পরিক সম্পর্ক উভয়কেই সম্বোধন করে।

কোড

ডেটাসেট থেকে নেওয়া যেতে পারে Anomaly-/caret.csv at main · aster28/Anomaly- (github.com)

df = pd.read_csv('caret.csv').iloc[:, [0,4,6]] df.head()

আমরা ফাংশনের দূরত্বকে x= None, data= None, এবং Covariance = None হিসাবে সংজ্ঞায়িত করেছি। ফাংশনের ভিতরে, আমরা ডেটার গড় নিয়েছি এবং সেখানে মানের কোভেরিয়েন্স মান ব্যবহার করেছি। অন্যথায়, আমরা কোভারিয়েন্স ম্যাট্রিক্স গণনা করব। T এর অর্থ হল ট্রান্সপোজ।

উদাহরণস্বরূপ, যদি অ্যারের আকার পাঁচ বা ছয় হয় এবং আপনি এটি দুটি ভেরিয়েবলের মধ্যে রাখতে চান, তাহলে আমাদের ম্যাট্রিক্স স্থানান্তর করতে হবে।

np.random.multivariate_normal(mean, cov, size = 5)
array([[ 0.0509196, 0.536808 ], [ 0.1081547, 0.9308906], [ 0.4545248, 1.4000731], [ 0.9803848, 0.9660610], [ 0.8079491 , 0.9687909]])
np.random.multivariate_normal(mean, cov, size = 5).T
array([[ 0.0586423, 0.8538419, 0.2910855, 5.3047358, 0.5449706], [ 0.6819089, 0.8020285, 0.7109037, 0.9969768, -0.7155739]])

আমরা sp.linalg ব্যবহার করেছি, যা লিনিয়ার বীজগণিত এবং রৈখিক বীজগণিতের জন্য বিভিন্ন ফাংশন রয়েছে। ম্যাট্রিক্সের ইনভার্সশনের জন্য এটিতে inv ফাংশন রয়েছে। ম্যাট্রিক্সের গুণনের মাধ্যম হিসাবে NumPy ডট।

sp def দূরত্ব হিসেবে scipy আমদানি করুন(x=None, data=None, cov=None): x_m = x - np.mean(data) যদি cov না হয়: cov = np.cov(data.values.T) inv_cov = sp। linalg.inv(cov) left = np.dot(x_m, inv_cov) m_distance = np.dot(বাম, x_m.T) ফেরত m_distance.diagonal() df_g= df[['ক্যারেট', 'গভীরতা', 'দাম' ]].head(50) df_g['m_distance'] = দূরত্ব(x=df_g, data=df[['carat', 'depth', 'price']]) df_g.head()

বি. আউটলিয়ার সনাক্তকরণের জন্য টুকির পদ্ধতি

Tukey পদ্ধতিকে প্রায়শই বক্স এবং হুইকার বা বক্স প্লট পদ্ধতিও বলা হয়।

Tukey পদ্ধতি উচ্চ এবং নিম্ন পরিসীমা ব্যবহার করে.

ঊর্ধ্ব পরিসর = 75তম পারসেন্টাইল -k*IQR

নিম্ন পরিসর = 25তম পারসেন্টাইল + k* IQR

আসুন একটি বক্স প্লট ব্যবহার করে বয়স পরিবর্তনশীল সহ আমাদের টাইটানিক ডেটা দেখি।

sns.boxplot(titanic['age'].values)

আমরা ছবিটিতে দেখতে পাচ্ছি যে সিবোর্ন দ্বারা তৈরি বক্স ব্লট দেখায় যে 55 থেকে 80 বছর বয়সের মধ্যে অনেকগুলি বিন্দু চতুর্ভুজের মধ্যে নয়। আমরা একটি ফাংশন outliers_detect তৈরি করে নিম্ন এবং উপরের পরিসীমা সনাক্ত করব।

def outliers_detect(x, k = 1.5): x = np.array(x).copy().astype(float) first = np.quantile(x, .25) তৃতীয় = np.quantile(x, .75) # IQR গণনা iqr = তৃতীয় - প্রথম #উর্ধ্ব পরিসর এবং নিম্ন পরিসীমা নিম্ন = প্রথম - (k * iqr) উচ্চ = তৃতীয় + (k * iqr) নিম্ন, উচ্চতর রিটার্ন
outliers_detect(টাইটানিক ['বয়স'], k = 1.5)
(2.5, 54.5)

D. পাইক্যারেট দ্বারা সনাক্তকরণ

PyCaret দ্বারা সনাক্তকরণের জন্য আমরা একই ডেটাসেট ব্যবহার করব।

pycaret.anomaly থেকে আমদানি * setup_anomaly_data = সেটআপ(df)

পাইকারেট হল একটি ওপেন-সোর্স মেশিন লার্নিং যা বহিরাগতদের সনাক্ত করতে একটি তত্ত্বাবধানহীন শিক্ষার মডেল ব্যবহার করে। pycaret-এ ডেটাসেট ব্যবহার করার জন্য এটির একটি get_data পদ্ধতি রয়েছে, সনাক্তকরণের আগে প্রিপ্রসেসিং টাস্কের জন্য সেট-আপ রয়েছে, সাধারণত ডেটা ফ্রেম নেয় কিন্তু এছাড়াও আরও অনেক বৈশিষ্ট্য রয়েছে যেমন ignore_features ইত্যাদি।

একটি অ্যালগরিদম ব্যবহার করার জন্য অন্যান্য পদ্ধতি create_model। আমরা প্রথমে আইসোলেশন ফরেস্ট ব্যবহার করব।

ifor = create_model("iforest") plot_model(ifor) ifor_predictions = predict_model(ifor, data = df) print(ifor_predictions) ifor_anomaly = ifor_predictions[ifor_predictions["Anomaly"] == 1]ma print(ifor) ifor_anomaly.shape)

অসংগতি 1 বহিরাগতদের নির্দেশ করে, এবং অসংগতি 0 কোন আউটলার দেখায় না।

এখানে হলুদ রঙ বহিরাগতদের নির্দেশ করে।

এখন আসুন আমরা আরেকটি অ্যালগরিদম দেখি, K Nearest Neighbours (KNN)

knn = create_model("knn") plot_model(knn) knn_pred = predict_model(knn, data = df) print(knn_pred) knn_anomaly = knn_pred[knn_pred["Anomaly"] == 1] knn_anomaly.head() knn_shanomaly

এখন আমরা একটি ক্লাস্টারিং অ্যালগরিদম ব্যবহার করব।

clus = create_model("cluster") plot_model(clus) clus_pred = predict_model(clus, data = df) print(clus_pred) clus_anomaly = clus_predictions[clus_pred["Anomaly"] == 1] print(clus_anomaly) আকৃতি

E. PyOD দ্বারা অসঙ্গতি সনাক্তকরণ

PyOD হল একটি পাইথন লাইব্রেরি যা মাল্টিভেরিয়েট ডেটাতে বহিরাগতদের সনাক্তকরণের জন্য। এটি তত্ত্বাবধানে এবং তত্ত্বাবধানহীন শিক্ষা উভয়ের জন্যই ভালো।

pyod.models.iforest থেকে IForest আমদানি pyod.models.knn থেকে KNN আমদানি 

আমরা লাইব্রেরি এবং অ্যালগরিদম আমদানি করেছি।

pyod.utils.data থেকে pyod.utils.data আমদানি generate_data থেকে pyod.utils.data থেকে evaluate_print আমদানি করুন , n_features=300,contamination=contaminate,random_state=100)
cname_alg = 'KNN' # অ্যালগরিদমের নাম হল K Nearest Neighbours c = KNN() c.fit(X_train) # অ্যালগরিদম ফিট করুন y_trainpred = c.labels_ y_trainscores = c.decision_scores_ y_testpred = c.testcoresy() c.decision_function(X_test) print("Training Data:") evaluate_print(cname_alg, y_train, y_train_scores) প্রিন্ট("Test Data:") evaluate_print(cname_alg, y_test, y_test_scores, X_test_scores, X_train_scores, X_train_scores) , y_পরীক্ষা, y_trainpred,y_testpred, show_figure=True, save_figure=True)

আমরা IForest অ্যালগরিদম ব্যবহার করব।

fname_alg = 'IForest' # অ্যালগরিদমের নাম হল K Nearest Neighbours f = IForest() f.fit(X_train) # অ্যালগরিদম ফিট করুন y_train_pred = c.labels_ y_train_scores = c.decision_scores_ y_test_pred = (c_t_pred) c.decision_function(X_test) print("Training Data:") evaluate_print(fname_alg, y_train_pred, y_train_scores) print("Test Data:") evaluate_print(fname_alg, y_test_pred, y_fname, y_fname, y_train_scores) ইন, X_test, y_test_pred, y_train_pred,y_test_pred, show_figure=True, save_figure=True)

এফ. নবীর দ্বারা অসঙ্গতি সনাক্তকরণ

আমরা টাইম সিরিজ সহ বিমান যাত্রী ডেটাসেট ব্যবহার করব prophet/example_air_passengers.csv এ প্রধান · aster28/prophet (github.com)

নবী থেকে নবী আমদানি করুন নবী থেকে পূর্বাভাসকারী আমদানি করুন নবী আমদানি করুন m = নবী()
data = pd.read_csv('air_pass.csv') data.head()
data.columns = ['ds', 'y'] data['y'] = np.where(data['y'] != 0, np.log(data['y']), 0)

y কলামের লগ কোনো ঋণাত্মক মান সক্ষম করে না। আমরা আমাদের ডেটা ট্রেনে বিভক্ত করি, পরীক্ষা করি এবং ভেরিয়েবল পূর্বাভাসে ভবিষ্যদ্বাণী সংরক্ষণ করি।

ট্রেন, পরীক্ষা= train_test_split(ডেটা, random_state =42) m.fit(train[['ds','y']]) forecast = m.predict(test) def detect(forecast): forcast = forecast[['ds ', 'yhat', 'yhat_lower', 'yhat_upper']].copy() forcast['real']= data['y'] forcast['anomaly'] =0 forcast.loc[forcast['real'] > forcast['yhat_upper'], 'anomaly']=1 forcast.loc[forcast['real']< forcast['yhat_lower'], 'anomaly']=-1 forcast['imp']=0 in_range = forcast ['yhat_upper']-forcast['yhat_lower'] forcast.loc[forcast['anomaly']==1, 'imp'] = forcast['real']-forcast['yhat_upper']/in_range forcast.loc[ forcast['anomaly']==-1, 'imp']= forcast['yhat_lower']-forcast['real']/in_range return forcast
সনাক্ত (পূর্বাভাস)

আমরা অসঙ্গতিটিকে -1 হিসাবে নিয়েছি।

উপসংহার

একটি প্রদত্ত ডেটাসেটে বহিরাগতদের খুঁজে বের করার প্রক্রিয়াটিকে বলা হয় অ্যানোমালি ডিটেকশন। Outliers হল ডেটা অবজেক্ট যা ডেটাসেটের বাকি অবজেক্টের মান থেকে আলাদা এবং স্বাভাবিকভাবে আচরণ করে না।

অসঙ্গতি সনাক্তকরণ কার্যগুলি ক্লাস্টার হিসাবে বহিরাগতদের সনাক্ত করতে দূরত্ব-ভিত্তিক এবং ঘনত্ব-ভিত্তিক ক্লাস্টারিং পদ্ধতি ব্যবহার করতে পারে।

আমরা এখানে অসঙ্গতি সনাক্তকরণের বিভিন্ন পদ্ধতি নিয়ে আলোচনা করি এবং টাইটানিক, বিমান যাত্রী এবং ক্যারেট-এর তিনটি ডেটাসেটে কোড ব্যবহার করে সেগুলি ব্যাখ্যা করি।

গুরুত্বপূর্ণ দিক

1. বক্স-হুইস্কার পদ্ধতি ব্যবহার করে বা DBSCAN দ্বারা আউটলায়ার বা অসঙ্গতি সনাক্তকরণ সনাক্ত করা যেতে পারে।

2. সম্পর্কযুক্ত নয় এমন আইটেমগুলির সাথে ইউক্লিডীয় দূরত্ব পদ্ধতি ব্যবহার করা হয়।

3. Mahalanobis পদ্ধতি মাল্টিভেরিয়েট outliers সঙ্গে ব্যবহার করা হয়.

4. সমস্ত মান বা পয়েন্ট outliers নয়. কিছু আবর্জনা হতে হবে যে আওয়াজ হয়. Outliers হল বৈধ ডেটা যা সামঞ্জস্য করা প্রয়োজন।

5. আমরা বিভিন্ন অ্যালগরিদম ব্যবহার করে আউটলায়ার শনাক্ত করার জন্য পাইক্যারেট ব্যবহার করেছি যেখানে অসঙ্গতি এক, হলুদ রঙে দেখানো হয়েছে, এবং আউটলায়ার 0 যেখানে আউটলায়ার নেই।

6. আমরা PyOD ব্যবহার করেছি, যা Python Outlier সনাক্তকরণ লাইব্রেরি। এটিতে 40 টিরও বেশি অ্যালগরিদম রয়েছে। তত্ত্বাবধানে এবং তত্ত্বাবধানহীন কৌশল এটি ব্যবহার করা হয়।

7. আমরা প্রফেট ব্যবহার করেছি এবং outliers রূপরেখার জন্য সনাক্তকরণ ফাংশন সংজ্ঞায়িত করেছি।

এই নিবন্ধে দেখানো মিডিয়া Analytics বিদ্যার মালিকানাধীন নয় এবং লেখকের বিবেচনার ভিত্তিতে ব্যবহার করা হয়।

সময় স্ট্যাম্প:

থেকে আরো বিশ্লেষণ বিদ্যা

Google ক্লাউডের নতুন জেনারেটিভ এআই টুলের সাথে আপনার এন্টারপ্রাইজকে বিপ্লব করুন: জেন অ্যাপ বিল্ডার এবং ভার্টেক্স এআই আপডেট

উত্স নোড: 2047717
সময় স্ট্যাম্প: এপ্রিল 5, 2023