ما از Standard Scaler برای نرمال کردن داده هایمان استفاده کردیم و نمودار پراکندگی را رسم کردیم.
اکنون DBSCAN را وارد می کنیم تا به خوشه ها امتیاز دهیم. اگر شکست بخورد، -1 را نشان می دهد.
حالا ما نتایج را داریم، اما چگونه بررسی کنیم که کدام مقدار min، max است و آیا مقادیر -1 داریم؟ ما از مقدار arg min برای بررسی کوچکترین مقدار در خوشه استفاده خواهیم کرد.
از نتیجه می توانیم شش مقدار را ببینیم که -1 هستند.
اجازه دهید اکنون یک نمودار پراکندگی رسم کنیم.
روش های فوق که ما به کار بردیم بر روی پرت تک متغیره هستند.
برای تشخیص نقاط پرت چند متغیره، باید مقادیر پرت چند متغیره را درک کنیم.
به عنوان مثال، ما قرائت خودرو را در نظر می گیریم. ما دو قرائت متر دیده ایم که یکی برای کیلومترشمار است که سرعت حرکت وسیله نقلیه را ثبت یا اندازه گیری می کند و دومی قرائت دور در دقیقه است که تعداد چرخش های چرخ ماشین را در دقیقه ثبت می کند.
فرض کنید کیلومتر شمار در محدوده 0-60 مایل در ساعت و دور در دقیقه 0-750 را نشان می دهد. ما فرض می کنیم که تمام مقادیری که می آیند باید با یکدیگر همبستگی داشته باشند. اگر کیلومترشمار سرعت 50 و دور در دقیقه 0 ورودی را نشان دهد، خوانش نادرست است. اگر کیلومترشمار مقداری بیش از صفر نشان می دهد، به این معنی است که ماشین در حال حرکت بوده است، بنابراین دور در دقیقه باید مقادیر بالاتری داشته باشد، اما در مورد ما، مقدار 0 را نشان می دهد. به عنوان مثال، پرت چند متغیره.
ج. روش فاصلهگیری ماهالانوبیس
در DBSCAN از متریک های فاصله اقلیدسی استفاده کردیم، اما در این مورد، ما در مورد روش فاصله ماهالانوبیس صحبت می کنیم. همچنین می توانیم از فاصله Mahalanobis با DBSCAN استفاده کنیم.
DBSCAN(eps=0.5, min_samples=3, metric='mahalanobis', metric_params={'V':np.cov(X)}, algorithm='brute', leaf_size=30, n_jobs=-1)
چرا اقلیدسی برای موجودیت های مرتبط با یکدیگر مناسب نیست؟ فاصله اقلیدسی نمی تواند پیدا کند یا داده های نادرستی در مورد نزدیک بودن این دو نقطه به دست می دهد.
روش Mahalanobis از فاصله بین نقاط و توزیع استفاده می کند که داده های تمیز است. فاصله اقلیدسی اغلب بین دو نقطه است و امتیاز z آن با x منهای میانگین محاسبه شده و بر انحراف معیار تقسیم می شود. در Mahalanobis، z-score x منهای میانگین تقسیم بر ماتریس کوواریانس است.
بنابراین، تقسیم بر ماتریس کوواریانس چه تأثیری دارد؟ اگر متغیرهای موجود در مجموعه داده شما همبستگی بالایی داشته باشند، مقادیر کوواریانس بالا خواهد بود.
به طور مشابه، اگر مقادیر کوواریانس پایین باشد، اگر داده ها همبستگی نداشته باشند، فاصله به طور قابل توجهی کاهش نمی یابد. آنقدر خوب عمل می کند که هم به مقیاس و هم همبستگی مسائل متغیرها می پردازد.
رمز
مجموعه داده را می توان از Anomaly-/caret.csv در اصلی · aster28/Anomaly- (github.com)
df = pd.read_csv('caret.csv').iloc[:, [0,4,6]] df.head()
فاصله تابع را x= None، data= None و Covariance= None تعریف کردیم. در داخل تابع، میانگین داده ها را گرفتیم و از مقدار کوواریانس مقدار در آنجا استفاده کردیم. در غیر این صورت ماتریس کوواریانس را محاسبه خواهیم کرد. T مخفف transpose است.
به عنوان مثال، اگر اندازه آرایه پنج یا شش است و می خواهید در دو متغیر باشد، باید ماتریس را جابجا کنیم.
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 به عنوان وسیله ای برای ضرب ماتریس.
وارد کردن scipy به عنوان sp def distance(x=هیچکدام، داده=هیچکدام، cov=هیچکدام): 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، داده=df[['قیراط'، 'عمق'، 'قیمت']]) df_g.head()
ب. روش توکی برای تشخیص پرت
روش Tukey را اغلب Box and Whisker یا Box plot نیز می نامند.
روش Tukey از محدوده بالا و پایین استفاده می کند.
محدوده بالایی = صدک ۷۵ -k*IQR
محدوده پایین = صدک 25 + k* IQR
اجازه دهید دادههای تایتانیک خود را با متغیر سن با استفاده از نمودار جعبه ببینیم.
sns.boxplot(titanic['age'].values)
ما میتوانیم در تصویر ببینیم که باکس بلات ایجاد شده توسط Seaborn نشان میدهد که بسیاری از نقاط بین سنین 55 تا 80، نقاط پرت هستند که در داخل چارکها نیستند. با ایجاد یک تابع outliers_detect، محدوده پایین و بالایی را تشخیص می دهیم.
def outliers_detect(x, k = 1.5): x = np.array(x).copy().atype(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 استفاده خواهیم کرد.
از pycaret.anomaly import * setup_anomaly_data = setup(df)
Pycaret یک یادگیری ماشینی منبع باز است که از یک مدل یادگیری بدون نظارت برای تشخیص موارد پرت استفاده می کند. این یک متد get_data برای استفاده از مجموعه داده در خود pycaret دارد، set_up برای کار پیش پردازش قبل از شناسایی، معمولاً چارچوب داده را می گیرد اما همچنین دارای بسیاری از ویژگی های دیگر مانند ignore_features و غیره است.
روش های دیگر create_model برای استفاده از یک الگوریتم. ابتدا از Isolation Forest استفاده خواهیم کرد.
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] print(ifor_anomaly. head. ifor_anomaly.shape)
ناهنجاری 1 نشان دهنده نقاط پرت است و ناهنجاری 0 هیچ پرت را نشان نمی دهد.
رنگ زرد در اینجا نشان دهنده نقاط پرت است.
حالا اجازه دهید الگوریتم دیگری را ببینیم، K نزدیکترین همسایگان (KNN)
knn = create_model("knn") plot_model(knn) knn_pred = predict_model(knn، داده = df) print(knn_pred) knn_anomaly = knn_pred[knn_pred["Anomaly"] == 1] knheadan_nomaly.shannpe.
اکنون از یک الگوریتم خوشه بندی استفاده خواهیم کرد.
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 import IForest از pyod.models.knn واردات KNN
کتابخانه و الگوریتم را وارد کردیم.
from pyod.utils.data import generate_data from pyod.utils.data import valuevalue_print from pyod.utils.example import visualize train= 300 test=100 contaminate = 0.1 X_train, X_test, y_train, y_test =gene_data(n_traintest=genering_data(n_traintest= , n_features=2, contamination=آلودگی,random_state=42)
cname_alg = 'KNN' # نام الگوریتم K Nearest Neighbors است c = KNN() c.fit(X_train) #براساس الگوریتم y_trainpred = c.labels_ y_trainscores = c.decision_scores_ y_testpred = c.predicty(X_test) c.decision_function(X_test) print("Training Data:") value_print(cname_alg، y_train، y_train_scores) print("Test Data:") value_print(cname_alg, y_test, y_test_scores) visualize(cname_alg, y_test, X_train y_trainpred,y_testpred, show_figure=True, save_figure=True)
ما از الگوریتم IForest استفاده خواهیم کرد.
fname_alg = 'Iforest' # نام الگوریتم K Nearest Neighbors است f = IForest() f.fit(X_train) #Fit the الگوریتم y_train_pred = c.labels_ y_train_scores = c.decision_scores_ y_core_pred_stest c.decision_function(X_test) print("Training Data:") value_print(fname_alg، y_train_pred، y_train_scores) print("Test Data:") value_print(fname_alg، y_test_pred، y_test_scores)g visualize,__train_test, 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)
Log ستون y هیچ مقدار منفی را فعال نمی کند. ما داده های خود را به قطار تقسیم کردیم، آزمایش کردیم و پیش بینی را در پیش بینی متغیر ذخیره کردیم.
train, test= train_test_split(data, 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 بازگشت پیشبینی
تشخیص (پیش بینی)
ناهنجاری را -1 در نظر گرفتیم.
نتیجه
فرآیند یافتن نقاط پرت در یک مجموعه داده معین، تشخیص ناهنجاری نامیده می شود. Outliers اشیاء داده ای هستند که از بقیه مقادیر شی در مجموعه داده متمایز هستند و رفتار عادی ندارند.
کارهای تشخیص ناهنجاری می توانند از روش های خوشه بندی مبتنی بر فاصله و چگالی برای شناسایی نقاط پرت به عنوان یک خوشه استفاده کنند.
ما در اینجا روشهای مختلف تشخیص ناهنجاری را مورد بحث قرار میدهیم و آنها را با استفاده از کد روی سه مجموعه داده تایتانیک، مسافران ایر و کارت توضیح میدهیم.
نکات کلیدی
1. نقاط پرت یا تشخیص ناهنجاری را می توان با استفاده از روش Box-Whisker یا با DBSCAN شناسایی کرد.
2. روش فاصله اقلیدسی با موارد غیر همبسته استفاده می شود.
3. روش Mahalanobis با پرت چند متغیره استفاده می شود.
4. همه مقادیر یا نقاط پرت نیستند. برخی صداهایی هستند که باید زباله باشند. پرت ها داده های معتبری هستند که باید تنظیم شوند.
5. ما از PyCaret برای تشخیص نقاط پرت با استفاده از الگوریتمهای مختلف استفاده کردیم که در آن ناهنجاری یک است که با رنگهای زرد نشان داده شده است، و هیچ نقطه پرت در جایی که نقطه پرت 0 است، وجود ندارد.
6. ما از PyOD استفاده کردیم که کتابخانه تشخیص Python Outlier است. بیش از 40 الگوریتم دارد. از تکنیک های نظارت شده و بدون نظارت استفاده می شود.
7. ما از Prophet استفاده کردیم و تابع detect را برای ترسیم نقاط پرت تعریف کردیم.
رسانه نشان داده شده در این مقاله متعلق به Analytics Vidhya نیست و به صلاحدید نویسنده استفاده می شود.
- محتوای مبتنی بر SEO و توزیع روابط عمومی. امروز تقویت شوید.
- پلاتوبلاک چین. Web3 Metaverse Intelligence. دانش تقویت شده دسترسی به اینجا.
- منبع: https://www.analyticsvidhya.com/blog/2023/01/learning-different-techniques-of-anomaly-detection/
- 1
- 10
- 11
- 7
- a
- درباره ما
- بالاتر
- آدرس
- تنظیم شده
- AIR
- الگوریتم
- الگوریتم
- معرفی
- علم تجزیه و تحلیل
- تجزیه و تحلیل Vidhya
- و
- تشخیص ناهنجاری
- دیگر
- اعمال می شود
- صف
- مقاله
- قبل از
- میان
- جعبه
- محاسبه
- نام
- نمی توان
- ماشین
- مورد
- بررسی
- نزدیک
- خوشه
- خوشه بندی
- رمز
- رنگ
- ستون
- ستون ها
- COM
- بیا
- ارتباط
- ایجاد شده
- داده ها
- مجموعه داده ها
- عمق
- شناسایی شده
- کشف
- انحراف
- مختلف
- اختیار
- بحث و تبادل نظر
- فاصله
- توزیع
- تقسیم شده
- آیا
- DOT
- هر
- اثر
- را قادر می سازد
- اشخاص
- و غیره
- اتر (ETH)
- مثال
- توضیح دهید
- نتواند
- امکانات
- پیدا کردن
- پیدا کردن
- نام خانوادگی
- شناور
- پیش بینی
- جنگل
- FRAME
- از جانب
- تابع
- توابع
- GitHub
- دادن
- داده
- خوب
- گراف
- خوشحال
- اینجا کلیک نمایید
- زیاد
- بالاتر
- خیلی
- چگونه
- HTTPS
- شناسایی
- تصویر
- واردات
- in
- نشان می دهد
- وارونگی
- انزوا
- مسائل
- IT
- اقلام
- خود
- یادگیری
- کتابخانه
- کم
- دستگاه
- فراگیری ماشین
- ساخته
- اصلی
- ساخت
- ساخت
- بسیاری
- ماتریس
- حداکثر
- به معنی
- معیارهای
- رسانه ها
- روش
- روش
- متریک
- مدل
- مدل
- بیش
- متحرک
- نام
- نیاز
- منفی
- همسایه ها
- طبیعی
- به طور معمول
- عدد
- بی حس
- هدف
- اشیاء
- ONE
- منبع باز
- دیگر
- در غیر این صورت
- طرح کلی
- متعلق به
- افلاطون
- هوش داده افلاطون
- PlatoData
- نقطه
- پیش گویی
- قیمت
- روند
- پــایتــون
- تصادفی
- محدوده
- مطالعه
- واقعی
- سوابق
- کاهش
- REST
- نتیجه
- نتایج
- برگشت
- همان
- مقیاس
- متولد دریا
- دوم
- شکل
- باید
- نشان
- نشان داده شده
- نشان می دهد
- به طور قابل توجهی
- شش
- اندازه
- So
- برخی از
- سرعت
- انشعاب
- ایستادن
- استاندارد
- می ایستد
- ذخیره شده
- گرفتن
- طول می کشد
- سخنگو
- کار
- وظایف
- تکنیک
- آزمون
- La
- آنجا.
- سوم
- سه
- زمان
- به
- قطار
- آموزش
- فهمیدن
- یادگیری بدون نظارت
- us
- استفاده کنید
- معمولا
- استفاده می کند
- ارزش
- ارزشها
- مختلف
- وسیله نقلیه
- چی
- چرخ
- چه
- که
- اراده
- در داخل
- X
- شما
- زفیرنت
- صفر