विसंगति का पता लगाने की विभिन्न तकनीकों को सीखना

विसंगति का पता लगाने की विभिन्न तकनीकों को सीखना

स्रोत नोड: 1867449

हमने अपने डेटा को सामान्य बनाने के लिए स्टैंडर्ड स्केलर का इस्तेमाल किया और एक स्कैटर ग्राफ तैयार किया।

अब हम क्लस्टर्स को पॉइंट देने के लिए DBSCAN इम्पोर्ट करेंगे। यदि यह विफल रहता है, तो यह -1 दिखाएगा।

अब हमारे पास परिणाम हैं, लेकिन हम कैसे जांचते हैं कि कौन सा मान न्यूनतम, अधिकतम है और क्या हमारे पास -1 मान हैं? क्लस्टर में सबसे छोटे मान की जांच करने के लिए हम arg min value का उपयोग करेंगे।

हम परिणाम से छह मान देख सकते हैं जो -1 हैं।

आइए अब एक स्कैटर ग्राफ बनाएं।

हमारे द्वारा लागू की गई उपरोक्त विधियाँ यूनी-वैरिएट आउटलेयर पर हैं।

बहु-चर आउटलेयर का पता लगाने के लिए, हमें बहु-चर आउटलेयर को समझने की आवश्यकता है।

उदाहरण के लिए, हम कार रीडिंग लेते हैं। हमने दो रीडिंग मीटर देखे हैं, एक ओडोमीटर के लिए, जो उस गति को रिकॉर्ड या मापता है जिस पर वाहन चल रहा है, और दूसरा आरपीएम रीडिंग है जो कार के पहिये द्वारा प्रति मिनट किए गए घुमावों की संख्या को रिकॉर्ड करता है।

मान लीजिए कि ओडोमीटर 0-60 मील प्रति घंटे और आरपीएम 0-750 की सीमा में दिखाता है। हम मानते हैं कि आने वाले सभी मूल्यों को एक दूसरे के साथ सहसंबद्ध होना चाहिए। यदि ओडोमीटर 50 की गति दिखाता है और आरपीएम 0 इंटेक दिखाता है, तो रीडिंग गलत हैं। यदि ओडोमीटर शून्य से अधिक मान दिखाता है, तो इसका मतलब है कि कार चल रही थी, इसलिए आरपीएम का मान अधिक होना चाहिए, लेकिन हमारे मामले में, यह 0 मान दिखाता है। यानी, बहु-चर आउटलेयर।

C. महालनोबिस दूरी विधि

DBSCAN में, हमने यूक्लिडियन डिस्टेंस मेट्रिक्स का इस्तेमाल किया, लेकिन इस मामले में, हम महालनोबिस डिस्टेंस मेथड के बारे में बात कर रहे हैं। हम 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 माइनस मीन और मानक विचलन द्वारा विभाजित की जाती है। महालनोबिस में, z-स्कोर x ऋण सहप्रसरण मैट्रिक्स द्वारा विभाजित माध्य है।

इसलिए, सहप्रसरण मैट्रिक्स द्वारा विभाजित करने का क्या प्रभाव पड़ता है? यदि आपके डेटासेट में चर अत्यधिक सहसंबद्ध हैं, तो सहप्रसरण मान अधिक होंगे।

इसी तरह, यदि सहप्रसरण मान कम हैं, तो डेटा सहसंबद्ध नहीं होने पर दूरी महत्वपूर्ण रूप से कम नहीं होती है। यह इतना अच्छा करता है कि यह चर के मुद्दों के पैमाने और सहसंबंध दोनों को संबोधित करता है।

कोड

डेटासेट से लिया जा सकता है Anomaly-/caret.csv मुख्य रूप से · aster28/Anomaly- (github.com)

df = pd.read_csv('caret.csv').iloc[:, [0,4,6]] 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 डॉट।

sp def दूरी के रूप में scipy आयात करें (x = कोई नहीं, डेटा = कोई नहीं, cov = कोई नहीं): x_m = x - np.mean (डेटा) यदि नहीं cov: cov = np.cov (data.values.T) inv_cov = sp. linalg.inv(cov) बायां = np.dot(x_m, inv_cov) m_distance = np.dot(बाएं, x_m.T) वापसी m_distance.diagonal() df_g= df[['कैरेट', 'गहराई', 'कीमत' ]].सिर(50) df_g['m_distance'] = दूरी (x=df_g, data=df[['कैरेट', 'गहराई', 'कीमत']]) df_g.head()

बी Tukey की विधि बाहरी पहचान के लिए

Tukey मेथड को अक्सर बॉक्स एंड व्हिस्कर या बॉक्स प्लॉट मेथड भी कहा जाता है।

Tukey पद्धति ऊपरी और निचली श्रेणी का उपयोग करती है।

अपर रेंज = 75वां पर्सेंटाइल -k*IQR

निचली श्रेणी = 25वां प्रतिशतक + k* IQR

आइए हम अपने टाइटैनिक डेटा को एक बॉक्स प्लॉट का उपयोग करके आयु चर के साथ देखें।

एसएनएस.बॉक्सप्लॉट (टाइटैनिक ['उम्र']। मान)

हम छवि में देख सकते हैं कि सीबॉर्न द्वारा बनाए गए बॉक्स ब्लॉट में 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 (टाइटैनिक ['उम्र'], के = 1.5)
(2.5, 54.5)

D. PyCaret द्वारा जांच

हम PyCaret द्वारा पता लगाने के लिए समान डेटासेट का उपयोग करेंगे।

pycaret.anomaly आयात से * setup_anomaly_data = सेटअप (df)

Pycaret एक ओपन-सोर्स मशीन लर्निंग है जो आउटलेर्स का पता लगाने के लिए एक अनसुनी लर्निंग मॉडल का उपयोग करता है। इसमें pycaret में डेटासेट का उपयोग करने के लिए get_data विधि है, पता लगाने से पहले प्रीप्रोसेसिंग कार्य के लिए set_up, आमतौर पर डेटा फ़्रेम लेता है, लेकिन इसमें कई अन्य विशेषताएं भी होती हैं जैसे ign_features, आदि।

एल्गोरिथम का उपयोग करने के लिए अन्य विधियाँ create_model। हम सबसे पहले आइसोलेशन फॉरेस्ट का इस्तेमाल करेंगे।

ifor = create_model ("iforest") प्लॉट_मॉडल (ifor) ifor_predictions = भविष्यवाणी_मॉडल (ifor, डेटा = df) प्रिंट (ifor_predictions) ifor_anomaly = ifor_predictions [ifor_predictions ["विसंगति"] == 1] प्रिंट (ifor_anomaly.head ()) प्रिंट ( ifor_anomaly.shape)

अनोमली 1 आउटलेयर को इंगित करता है, और एनोमली 0 कोई आउटलेयर नहीं दिखाता है।

यहाँ पीला रंग आउटलेयर को दर्शाता है।

अब हम एक और एल्गोरिथ्म देखते हैं, K निकटतम पड़ोसी (KNN)

knn = create_model ("knn") प्लॉट_मॉडल (knn) knn_pred = भविष्यवाणी_मॉडल (knn, डेटा = df) प्रिंट (knn_pred) knn_anomaly = knn_pred [knn_pred ["विसंगति"] == 1] knn_anomaly.head () knn_anomaly.shape

अब हम एक क्लस्टरिंग एल्गोरिथम का उपयोग करेंगे।

clus = create_model ("क्लस्टर") प्लॉट_मॉडल (clus) clus_pred = भविष्यवाणी_मॉडल (clus, डेटा = df) प्रिंट (clus_pred) clus_anomaly = clus_predictions [clus_pred ["विसंगति"] == 1] प्रिंट (clus_anomaly.head ()) clus_anomaly। आकार

ई। पीओडी द्वारा विसंगति का पता लगाना

PyOD बहुभिन्नरूपी डेटा में आउटलेयर का पता लगाने के लिए एक पायथन लाइब्रेरी है। यह पर्यवेक्षित और अनुपयोगी शिक्षा दोनों के लिए अच्छा है।

pyod.models.iforest से pyod.models.knn आयात KNN से IForest आयात करें 

हमने पुस्तकालय और एल्गोरिथम आयात किया।

pyod.utils.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, संदूषण=दूषित,random_state=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) y_testscores = c.decision_function (X_test) प्रिंट ("प्रशिक्षण डेटा:") मूल्यांकन_प्रिंट (cname_alg, y_train, y_train_scores) प्रिंट ("टेस्ट डेटा:") 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. लेबल_ y_train_scores = c.decision_scores_ y_test_pred = c.predict(X_test) y_test_scores = c.decision_function (X_test) प्रिंट ("प्रशिक्षण डेटा:") मूल्यांकन_प्रिंट (fname_alg, y_train_pred, y_train_scores) प्रिंट ("टेस्ट डेटा:") y_train_pred, y_test_pred, show_figure=True, save_figure=True)

एफ। पैगंबर द्वारा विसंगति का पता लगाना

हम समय श्रृंखला के साथ हवाई यात्री डाटासेट का उपयोग करेंगे भविष्यवक्ता/example_air_passengers.csv मुख्य पर · aster28/prophet (github.com)

नबी से आयात नबी नबी से आयात भविष्यवक्ता आयात पैगंबर एम = पैगंबर ()
डेटा = pd.read_csv ('air_pass.csv') data.head ()
data.columns = ['ds', 'y'] data ['y'] = np.where (डेटा ['y']! = 0, np.log (डेटा ['y']), 0)

वाई कॉलम का लॉग कोई नकारात्मक मान सक्षम नहीं करता है। हम अपने डेटा को ट्रेन, परीक्षण में विभाजित करते हैं, और भविष्यवाणी को चर पूर्वानुमान में संग्रहीत करते हैं।

ट्रेन, टेस्ट = ट्रेन_टेस्ट_स्प्लिट (डेटा, रैंडम_स्टेट = 42) एम.फिट (ट्रेन [['डीएस', 'वाई']]) पूर्वानुमान = एम.प्रीडिक्ट (परीक्षण) डेफ डिटेक्ट (पूर्वानुमान): पूर्वानुमान = पूर्वानुमान [['डीएस'] ', 'yhat', 'yhat_lower', 'yhat_upper']] कॉपी () 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['विसंगति']==-1, 'imp']= forcast['yhat_lower']-forcast['real']/in_range वापसी का पूर्वानुमान
पता लगाएँ (पूर्वानुमान)

हमने विसंगति को -1 के रूप में लिया।

निष्कर्ष

किसी दिए गए डेटासेट में आउटलेयर खोजने की प्रक्रिया को विसंगति का पता लगाना कहा जाता है। आउटलेयर डेटा ऑब्जेक्ट होते हैं जो डेटासेट में शेष ऑब्जेक्ट मानों से अलग होते हैं और सामान्य रूप से व्यवहार नहीं करते हैं।

विसंगति का पता लगाने के कार्य एक क्लस्टर के रूप में आउटलेर्स की पहचान करने के लिए दूरी-आधारित और घनत्व-आधारित क्लस्टरिंग विधियों का उपयोग कर सकते हैं।

हम यहां विसंगति का पता लगाने के विभिन्न तरीकों पर चर्चा करते हैं और उन्हें टाइटैनिक, हवाई यात्रियों और कैरेट के तीन डेटासेट पर कोड का उपयोग करके समझाते हैं।

प्रमुख बिंदु

1. बॉक्स-व्हिस्कर विधि या DBSCAN द्वारा आउटलेयर या विसंगति का पता लगाया जा सकता है।

2. यूक्लिडियन दूरी विधि का उपयोग उन मदों के साथ किया जाता है जो सहसंबद्ध नहीं हैं।

3. महालनोबिस पद्धति का उपयोग बहुभिन्नरूपी आउटलेयर के साथ किया जाता है।

4. सभी मान या बिंदु आउटलेयर नहीं हैं। कुछ शोर हैं जो कचरा होना चाहिए। आउटलेयर वैध डेटा हैं जिन्हें समायोजित करने की आवश्यकता है।

5. हमने अलग-अलग एल्गोरिदम का उपयोग करके आउटलेयर का पता लगाने के लिए PyCaret का उपयोग किया, जहां विसंगति एक है, पीले रंग में दिखाया गया है, और कोई आउटलेयर नहीं है जहां आउटलेयर 0 है।

6. हमने पीओओडी का इस्तेमाल किया, जो कि पायथन आउटलेयर डिटेक्शन लाइब्रेरी है। इसमें 40 से अधिक एल्गोरिदम हैं। पर्यवेक्षित और अनुपयोगी तकनीकों का उपयोग किया जाता है।

7. हमने पैगंबर का इस्तेमाल किया और आउटलेयर को रेखांकित करने के लिए फंक्शन डिटेक्शन को परिभाषित किया।

इस लेख में दिखाया गया मीडिया एनालिटिक्स विद्या के स्वामित्व में नहीं है और इसका उपयोग लेखक के विवेक पर किया जाता है।

समय टिकट:

से अधिक एनालिटिक्स विधा