استخدمنا Standard Scaler لجعل بياناتنا طبيعية ورسمنا رسمًا بيانيًا مبعثرًا.
الآن سنقوم باستيراد DBSCAN لإعطاء نقاط للمجموعات. إذا فشل ، سيظهر -1.
الآن لدينا النتائج ، ولكن كيف نتحقق من القيمة الدنيا ، والحد الأقصى ، وما إذا كان لدينا قيم -1؟ سنستخدم قيمة arg min للتحقق من أصغر قيمة في المجموعة.
يمكننا أن نرى من النتيجة ست قيم وهي -1.
دعنا الآن نرسم رسم بياني مبعثر.
الأساليب المذكورة أعلاه التي طبقناها هي على القيم المتطرفة أحادية التباين.
بالنسبة لاكتشافات القيم المتطرفة متعددة المتغيرات ، نحتاج إلى فهم القيم المتطرفة متعددة المتغيرات.
على سبيل المثال ، نأخذ قراءات السيارة. لقد رأينا اثنين من عدادات القراءة ، أحدهما لعداد المسافات ، والذي يسجل أو يقيس السرعة التي تتحرك بها السيارة ، والثاني هو قراءة rpm التي تسجل عدد الدورات التي تقوم بها عجلة السيارة في الدقيقة.
افترض أن عداد المسافات يظهر في نطاق 0-60 ميل في الساعة و rpm في 0-750. نحن نفترض أن جميع القيم التي تأتي يجب أن ترتبط ببعضها البعض. إذا أظهر عداد المسافات سرعة 50 وأظهر عدد الدورات في الدقيقة 0 مآخذ ، فإن القراءات غير صحيحة. إذا أظهر عداد المسافات قيمة أكبر من الصفر ، فهذا يعني أن السيارة كانت تتحرك ، لذلك يجب أن يكون لعدد الدورات في الدقيقة قيم أعلى ، ولكن في حالتنا ، فإنه يظهر قيمة 0. على سبيل المثال ، القيم المتطرفة متعددة المتغيرات.
طريقة مسافة ماهالانوبيس
في DBSCAN ، استخدمنا مقاييس المسافة الإقليدية ، ولكن في هذه الحالة ، نتحدث عن طريقة Mahalanobis للمسافة. يمكننا أيضًا استخدام مسافة 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)
لماذا الإقليدية غير مناسبة للكيانات المرتبطة ببعضها البعض؟ لا يمكن للمسافة الإقليدية العثور أو ستعطي بيانات غير صحيحة حول مدى قرب النقطتين.
تستخدم طريقة ماهالانوبيس المسافة بين النقاط وتوزيع البيانات النظيفة. غالبًا ما تكون المسافة الإقليدية بين نقطتين ، ويتم حساب الدرجة z الخاصة بها بواسطة x ناقص المتوسط وتقسيمها على الانحراف المعياري. في Mahalanobis ، تكون الدرجة z هي x ناقص المتوسط مقسومًا على مصفوفة التغاير.
لذلك ، ما هو تأثير القسمة على مصفوفة التغاير؟ ستكون قيم التغاير عالية إذا كانت المتغيرات في مجموعة البيانات الخاصة بك شديدة الارتباط.
وبالمثل ، إذا كانت قيم التباين المشترك منخفضة ، فلن يتم تقليل المسافة بشكل كبير إذا كانت البيانات غير مرتبطة. إنه يعمل بشكل جيد لدرجة أنه يعالج كلاً من المقياس والارتباط لقضايا المتغيرات.
رمز
يمكن الحصول على مجموعة البيانات من Anomaly- / caret.csv at main · aster28 / Anomaly- (github.com)
df = pd.read_csv ('caret.csv'). iloc [:، [0,4,6،XNUMX،XNUMX]] df.head ()
حددنا مسافة الوظيفة على أنها x = لا شيء ، والبيانات = لا شيء ، والتغاير = لا شيء. داخل الدالة ، أخذنا متوسط البيانات واستخدمنا قيمة التباين المشترك للقيمة هناك. وإلا ، فسنحسب مصفوفة التغاير. 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 نقطة كوسيلة لضرب المصفوفة.
استيراد scipy كمسافة sp def (x = لا شيء ، البيانات = لا شيء ، cov = لا شيء): x_m = x - np.mean (البيانات) إن لم يكن cov: cov = np.cov (data.values.T) inv_cov = sp. linalg.inv (cov) left = np.dot (x_m، inv_cov) m_distance = np.dot (left، x_m.T) إرجاع m_distance.diagonal () df_g = df [['قيراط' ، 'عمق' ، 'السعر' ]]. head (50) df_g ['m_distance'] = المسافة (x = df_g، data = df [['قيراط'، 'عمق'، 'سعر']]) df_g.head ()
B. طريقة Tukey للكشف عن الخارجة
غالبًا ما تسمى طريقة Tukey أيضًا طريقة Box and Whisker أو Box plot.
تستخدم طريقة Tukey النطاق العلوي والسفلي.
النطاق الأعلى = 75 المئوية -k * IQR
النطاق الأدنى = النسبة المئوية الخامسة والعشرون + k * IQR
دعونا نرى بيانات تايتانيك مع متغير العمر باستخدام مخطط مربع.
sns.boxplot (قيم عملاقة ['Age'].)
يمكننا أن نرى في الصورة أن البقعة الصندوقية التي أنشأها Seaborn تُظهر أن العديد من النقاط بين سن 55 و 80 هي قيم متطرفة ليست ضمن الربعية. سنكتشف النطاق الأدنى والأعلى من خلال عمل دالة outliers_detect.
def outliers_detect (x، k = 1.5): x = np.array (x) .copy (). astype (float) first = np.quantile (x، .25) third = np.quantile (x، .75) # حساب IQR iqr = الثالث - الأول # النطاق العلوي والنطاق الأدنى الأدنى = الأول - (k * iqr) العلوي = الثالث + (k * iqr) يعود إلى الأسفل ، العلوي
outliers_detect (titanic ['age'] ، k = 1.5)
(2.5، 54.5)
D. الكشف عن طريق PyCaret
سنستخدم نفس مجموعة البيانات للكشف عن طريق PyCaret.
من استيراد pycaret.anomaly * setup_anomaly_data = الإعداد (df)
Pycaret هو تعلم آلي مفتوح المصدر يستخدم نموذجًا تعليميًا غير خاضع للإشراف لاكتشاف القيم المتطرفة. لديها طريقة get_data لاستخدام مجموعة البيانات في pycaret نفسها ، set_up لمهمة المعالجة المسبقة قبل الاكتشاف ، عادةً ما تأخذ إطار بيانات ولكن لديها أيضًا العديد من الميزات الأخرى مثل ignore_features ، إلخ.
طرق أخرى create_model لاستخدام الخوارزمية. سنستخدم غابة العزل أولاً.
ifor = create_model ("iforest") plot_model (ifor) ifor_prediction = Forecast_model (ifor، data = df) print (ifor_prediction) ifor_anomaly = ifor_prediction [ifor_prediction ["Anomaly"] == 1] print (ifor_anomaly.head) ifor_anomaly.shape)
يشير الشذوذ 1 إلى القيم المتطرفة ، بينما لا يُظهر الشذوذ 0 القيم المتطرفة.
يشير اللون الأصفر هنا إلى القيم المتطرفة.
الآن دعونا نرى خوارزمية أخرى ، K Nearest Neighbours (KNN)
knn = create_model ("knn") plot_model (knn) knn_pred = Forecast_model (knn، data = df) print (knn_pred) knn_anomaly = knn_pred [knn_pred ["Anomaly"] == 1] knn_anomaly.head () knn_omaly.sha ()
الآن سوف نستخدم خوارزمية التجميع.
clus = create_model ("الكتلة") plot_model (clus) clus_pred = Forecast_model (clus، data = df) print (clus_pred) clus_anomaly = clus_prediction [clus_pred ["Anomaly"] == 1] print (clus_anomaly.head (). شكل
E. الكشف عن الشذوذ بواسطة PyOD
PyOD هي مكتبة بيثون للكشف عن القيم المتطرفة في البيانات متعددة المتغيرات. إنه جيد للتعلم الخاضع للإشراف وغير الخاضع للإشراف.
من pyod.models.iforest استيراد IForest من pyod.models.knn استيراد KNN
قمنا باستيراد المكتبة والخوارزمية.
من استيراد pyod.utils.data create_data من pyod.utils.data استيراد قيم_طباعة من pyod.utils.example استيراد تصور قطار = 300 اختبار = 100 ملوث = 0.1 X_train ، X_test ، y_train ، y_test = إنشاء_ بيانات (n_train = قطار ، n_test = اختبار ، n_features = 2 ، تلوث = تلوث ، عشوائي_حالة = 42)
cname_alg = 'KNN' # اسم الخوارزمية هو K أقرب الجيران c = KNN () c.fit (X_train) # تناسب الخوارزمية y_trainpred = c.labels_ y_trainscores = c.decision_scores_ y_testpred = c.predict (X_test) yestscores = c. y_trainpred ، y_testpred ، show_figure = True ، save_figure = True)
سوف نستخدم خوارزمية IForest.
fname_alg = 'IForest' # اسم الخوارزمية هو K أقرب الجيران f = IForest () f.fit (X_train) # تناسب الخوارزمية y_train_pred = c.labels_ y_train_scores = c.decision_scores_ y_test_pred = c.predict (X_test) y_test_pred = c. c.decision_function (X_test) print ("Training Data:") Evaluation_print (fname_alg، y_train_pred، y_train_scores) print ("Test Data:") Evaluation_print (fname_alg، y_test_pred، y_test_scores) تصور (fname_alg، X_tprrain، y_train، X_ted y_train_pred ، y_test_pred ، show_figure = صحيح ، save_figure = True)
و. كشف الشذوذ بالنبي
سوف نستخدم مجموعة بيانات الركاب جواً مع سلاسل زمنية النبي / example_air_passengers.csv at main · aster28 / prophet (github.com)
استيراد النبي من النبي استيراد المتنبئ من النبي استيراد النبي م = النبي ()
data = pd.read_csv ('air_pass.csv') data.head ()
data.columns = ['ds'، 'y'] البيانات ['y'] = np.where (data ['y']! = 0، np.log (data ['y'])، 0)
لا يتيح سجل العمود y أي قيمة سالبة. نقوم بتقسيم بياناتنا إلى قطار واختبار وتخزين التنبؤ في التنبؤ المتغير.
القطار ، الاختبار = train_test_split (البيانات ، random_state = 42) m.fit (القطار [['ds'، 'y']]) التوقعات = m.predict (الاختبار) def اكتشاف (التنبؤ): التنبؤ = التنبؤ [['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.
وفي الختام
تسمى عملية العثور على القيم المتطرفة في مجموعة بيانات معينة اكتشاف الانحراف. القيم المتطرفة هي كائنات بيانات تبرز عن باقي قيم الكائن في مجموعة البيانات ولا تتصرف بشكل طبيعي.
يمكن لمهام الكشف عن الشذوذ استخدام طرق التجميع القائمة على المسافة والكثافة لتحديد القيم المتطرفة كمجموعة.
نناقش هنا الطرق المختلفة لاكتشاف الشذوذ وشرحها باستخدام الكود الموجود في ثلاث مجموعات بيانات من تيتانيك ، وركاب طيران ، وعلامة الإقحام إلى
النقاط الرئيسية
1. يمكن الكشف عن القيم المتطرفة أو الكشف عن الشذوذ باستخدام طريقة Box-Whisker أو عن طريق DBSCAN.
2. يتم استخدام طريقة المسافة الإقليدية مع العناصر غير المرتبطة.
3. يتم استخدام طريقة Mahalanobis مع القيم المتطرفة متعددة المتغيرات.
4. جميع القيم أو النقاط ليست القيم المتطرفة. بعضها ضوضاء يجب أن تكون قمامة. القيم المتطرفة هي بيانات صالحة تحتاج إلى تعديل.
5. استخدمنا PyCaret لاكتشاف القيم المتطرفة باستخدام خوارزميات مختلفة حيث يكون الشذوذ واحدًا ، ويظهر باللون الأصفر ، ولا توجد قيم متطرفة حيث يكون الشذوذ 0.
6. استخدمنا PyOD ، وهي مكتبة الكشف عن Python Outlier. لديها أكثر من 40 خوارزمية. يتم استخدامه تقنيات خاضعة للإشراف وغير خاضعة للإشراف.
7. استخدمنا النبي وحددنا وظيفة الكشف لتحديد القيم المتطرفة.
الوسائط الموضحة في هذه المقالة ليست مملوكة لـ Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.
- محتوى مدعوم من تحسين محركات البحث وتوزيع العلاقات العامة. تضخيم اليوم.
- بلاتوبلوكشين. 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
- المصدر المفتوح
- أخرى
- وإلا
- الخطوط العريضة
- مملوكة
- أفلاطون
- الذكاء افلاطون البيانات
- أفلاطون داتا
- نقاط
- تنبؤ
- السعر
- عملية المعالجة
- بايثون
- عشوائية
- نطاق
- نادي القراءة
- حقيقي
- تسجيل
- عقار مخفض
- REST
- نتيجة
- النتائج
- عائد أعلى
- نفسه
- حجم
- سيبورن
- الثاني
- الشكل
- ينبغي
- إظهار
- أظهرت
- يظهر
- بشكل ملحوظ
- SIX
- حجم
- So
- بعض
- سرعة
- انقسم
- موقف
- معيار
- المدرجات
- تخزين
- أخذ
- يأخذ
- الحديث
- مهمة
- المهام
- تقنيات
- تجربه بالعربي
- •
- هناك.
- الثالث
- ثلاثة
- الوقت
- إلى
- قطار
- قادة الإيمان
- فهم
- تعليم غير مشرف عليه
- us
- تستخدم
- عادة
- يستخدم
- قيمنا
- القيم
- مختلف
- المثالية
- ابحث عن
- تذكار لعبة العجلة
- سواء
- التي
- سوف
- في غضون
- X
- حل متجر العقارات الشامل الخاص بك في جورجيا
- زفيرنت
- صفر