เราใช้ Standard Scaler เพื่อทำให้ข้อมูลของเราเป็นปกติและวางแผนกราฟกระจาย
ตอนนี้เราจะนำเข้า DBSCAN เพื่อให้คะแนนกับคลัสเตอร์ หากล้มเหลวจะแสดง -1
ตอนนี้เราได้ผลลัพธ์แล้ว แต่เราจะตรวจสอบได้อย่างไรว่าค่าใดเป็น min, max และมีค่า -1 หรือไม่ เราจะใช้ค่า arg min เพื่อตรวจสอบค่าที่น้อยที่สุดในคลัสเตอร์
เราสามารถดูได้จากผลลัพธ์ 1 ค่าคือ -XNUMX
ตอนนี้ให้พล็อตกราฟกระจาย
วิธีการข้างต้นที่เราใช้นั้นใช้ค่าผิดปกติที่ไม่แปรผัน
สำหรับการตรวจจับค่าผิดปกติหลายตัวแปร เราจำเป็นต้องเข้าใจค่าผิดปกติหลายตัวแปร
ตัวอย่างเช่น เราอ่านค่ารถยนต์ เราได้เห็นการอ่านมาตรวัดสองค่า หนึ่งสำหรับมาตรวัดระยะทาง ซึ่งบันทึกหรือวัดความเร็วที่รถเคลื่อนที่ และอย่างที่สองคือการอ่านค่า rpm ซึ่งบันทึกจำนวนการหมุนของล้อรถยนต์ต่อนาที
สมมติว่ามาตรวัดระยะทางแสดงในช่วง 0-60 ไมล์ต่อชั่วโมงและรอบต่อนาทีใน 0-750 เราคิดว่าค่าทั้งหมดที่ได้มาควรสัมพันธ์กัน หากมาตรวัดระยะทางแสดงความเร็ว 50 และรอบต่อนาทีแสดงการสูบเข้าเป็น 0 แสดงว่าการอ่านค่าไม่ถูกต้อง ถ้ามาตรวัดระยะทางแสดงค่ามากกว่าศูนย์ แสดงว่ารถกำลังเคลื่อนที่ ดังนั้น rpm ควรมีค่าสูงกว่า แต่ในกรณีของเรา แสดงค่าเป็น 0 เช่น ค่าผิดปกติหลายตัวแปร
ค. วิธีหาระยะมหาลาโนบิส
ใน DBSCAN เราใช้เมตริกระยะทางแบบยุคลิด แต่ในกรณีนี้ เรากำลังพูดถึงวิธีวัดระยะทาง Mahalanobis เรายังสามารถใช้ Mahalanobis Distance กับ 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 คือ x ลบค่าเฉลี่ยหารด้วยเมทริกซ์ความแปรปรวนร่วม
ดังนั้นการหารด้วยเมทริกซ์ความแปรปรวนร่วมมีผลอย่างไร? ค่าความแปรปรวนร่วมจะสูงหากตัวแปรในชุดข้อมูลของคุณมีความสัมพันธ์กันสูง
ในทำนองเดียวกัน หากค่าความแปรปรวนร่วมต่ำ ระยะทางจะไม่ลดลงอย่างมีนัยสำคัญหากข้อมูลไม่มีความสัมพันธ์กัน มันทำได้ดีมากที่จัดการทั้งสเกลและความสัมพันธ์ของปัญหาตัวแปร
รหัส
ชุดข้อมูลสามารถนำมาจาก Anomaly-/caret.csv ที่ main · aster28/Anomaly- (github.com)
df = pd.read_csv('caret.csv').iloc[:, [0,4,6]] df.head()
เรากำหนดระยะของฟังก์ชันเป็น x=ไม่มี ข้อมูล=ไม่มี และความแปรปรวนร่วม=ไม่มี ภายในฟังก์ชัน เราหาค่าเฉลี่ยของข้อมูลและใช้ค่าความแปรปรวนร่วมของค่าตรงนั้น มิฉะนั้น เราจะคำนวณเมทริกซ์ความแปรปรวนร่วม T ย่อมาจากทรานสโพส
ตัวอย่างเช่น ถ้าขนาดอาร์เรย์คือ XNUMX หรือ XNUMX และคุณต้องการให้อยู่ในสองตัวแปร เราก็จำเป็นต้องเปลี่ยนเมทริกซ์
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 dot เป็นวิธีคูณเมทริกซ์
นำเข้า scipy เป็นระยะทาง sp def (x=ไม่มี, data=ไม่มี, 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) return 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
ช่วงล่าง = เปอร์เซ็นไทล์ที่ 25 + k* IQR
ให้เราดูข้อมูลไททานิคพร้อมตัวแปรอายุโดยใช้โครงเรื่อง
sns.boxplot(ไททานิก['อายุ'].ค่า)
เราเห็นได้จากภาพว่าบ็อกซ์บ็อตที่สร้างโดย 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) คืนค่าล่าง บน
ค่าผิดปกติ (ไททานิก ['อายุ'], k = 1.5)
(2.5, 54.5)
ง. การตรวจจับโดย PyCaret
เราจะใช้ชุดข้อมูลเดียวกันสำหรับการตรวจจับโดย PyCaret
จาก pycaret.anomaly นำเข้า * setup_anomaly_data = การตั้งค่า (df)
Pycaret เป็นการเรียนรู้ของเครื่องแบบโอเพ่นซอร์สซึ่งใช้รูปแบบการเรียนรู้แบบไม่มีผู้ดูแลเพื่อตรวจจับค่าผิดปกติ มีเมธอด get_data สำหรับใช้ชุดข้อมูลใน pycaret เอง, set_up สำหรับงานประมวลผลล่วงหน้าก่อนการตรวจจับ, มักจะใช้ data frame แต่ยังมีคุณสมบัติอื่น ๆ อีกมากมายเช่น forget_features เป็นต้น
วิธีอื่น create_model สำหรับการใช้อัลกอริทึม ก่อนอื่นเราจะใช้ Isolation Forest
ifor = create_model("iforest") plot_model(ifor) ifor_predictions = Predict_model(ifor, data = df) พิมพ์(ifor_predictions) ifor_anomaly = ifor_predictions[ifor_predictions["ความผิดปกติ"] == 1] พิมพ์(ifor_anomaly.head()) พิมพ์( ifor_anomaly.shape)
ความผิดปกติ 1 บ่งชี้ถึงค่าผิดปกติ และความผิดปกติ 0 บ่งชี้ว่าไม่มีค่าผิดปกติ
สีเหลืองในที่นี้หมายถึงค่าผิดปกติ
ตอนนี้ให้เราดูอัลกอริทึมอื่น K Nearest Neighbors (KNN)
knn = create_model("knn") plot_model(knn) knn_pred = Predict_model(knn, data = df) พิมพ์(knn_pred) knn_anomaly = knn_pred[knn_pred["ความผิดปกติ"] == 1] knn_anomaly.head() knn_anomaly.shape
ตอนนี้เราจะใช้อัลกอริทึมการจัดกลุ่ม
clus = create_model("คลัสเตอร์") plot_model(clus) clus_pred = Predict_model(clus, data = df) print(clus_pred) clus_anomaly = clus_predictions[clus_pred["Anomaly"] == 1] print(clus_anomaly.head()) clus_anomaly รูปร่าง
E. การตรวจจับความผิดปกติโดย PyOD
PyOD เป็นไลบรารี่สำหรับตรวจจับค่าผิดปกติในข้อมูลหลายตัวแปร เป็นสิ่งที่ดีทั้งสำหรับการเรียนรู้ภายใต้การดูแลและไม่มีผู้ดูแล
จาก pyod.models.iforest นำเข้า IForest จาก pyod.models.knn นำเข้า KNN
เรานำเข้าไลบรารีและอัลกอริทึม
จาก pyod.utils.data นำเข้า create_data จาก pyod.utils.data นำเข้า evaluation_print จาก pyod.utils.example นำเข้าภาพ train= 300 test=100 contaminate = 0.1 X_train, X_test, y_train, y_test = create_data(n_train=train, n_test=test , n_features=2,contamination=contaminate,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) print("Training Data:") evaluation_print(cname_alg, y_train, y_train_scores) print("Test Data:") evaluation_print(cname_alg, y_test, y_test_scores) visualize(cname_alg, X_train, y_train, X_test, y_test, y_trainpred, y_testpred, show_figure=จริง, save_figure=จริง)
เราจะใช้อัลกอริทึม 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_scores = 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) visualize(fname_alg, X_train, y_train, X_test, y_test_pred, y_train_pred,y_test_pred, show_figure=จริง, save_figure=จริง)
F. การตรวจจับความผิดปกติโดยศาสดา
เราจะใช้ชุดข้อมูลผู้โดยสารทางอากาศกับอนุกรมเวลา Prophet/example_air_passengers.csv ที่ main · 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 ทำให้ไม่มีค่าลบ เราแบ่งข้อมูลของเราออกเป็นการฝึก ทดสอบ และจัดเก็บการคาดคะเนในการพยากรณ์แบบแปรผัน
รถไฟ, test= train_test_split(ข้อมูล, Random_state =42) m.fit(รถไฟ[['ds','y']]) พยากรณ์ = m.predict(ทดสอบ) def ตรวจจับ(พยากรณ์): forcast = คาดการณ์[['ds ', 'yhat', 'yhat_lower', 'yhat_upper']].copy() forcast['real']= data['y'] forcast['anomaly'] =0 forcast.loc[forcast['ของจริง'] > 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 คือออบเจกต์ข้อมูลที่โดดเด่นจากค่าออบเจกต์อื่นๆ ในชุดข้อมูล และไม่ทำงานตามปกติ
งานตรวจจับความผิดปกติสามารถใช้วิธีการจัดกลุ่มตามระยะทางและตามความหนาแน่นเพื่อระบุค่าผิดปกติเป็นคลัสเตอร์
ในที่นี้เราจะพูดถึงวิธีการต่างๆ ของการตรวจจับสิ่งผิดปกติและอธิบายโดยใช้โค้ดในชุดข้อมูล XNUMX ชุดของไททานิค ผู้โดยสารทางอากาศ และแคเร็ต
ประเด็นสำคัญ
1. สามารถตรวจจับค่าผิดปกติหรือความผิดปกติได้โดยใช้วิธี Box-Whisker หรือโดย DBSCAN
2. วิธีระยะทางแบบยุคลิดใช้กับรายการที่ไม่สัมพันธ์กัน
3. วิธี Mahalanobis ใช้กับค่าผิดปกติหลายตัวแปร
4. ค่าหรือคะแนนทั้งหมดไม่ใช่ค่าผิดปกติ บ้างก็เป็นเสียงที่ควรจะเป็นขยะ Outliers เป็นข้อมูลที่ถูกต้องซึ่งจำเป็นต้องปรับเปลี่ยน
5. เราใช้ PyCaret ในการตรวจจับค่าผิดปกติโดยใช้อัลกอริธึมที่แตกต่างกัน โดยที่ค่าผิดปกติคือค่าเดียว แสดงเป็นสีเหลือง และไม่มีค่าค่าผิดปกติหากค่าค่าผิดปกติเป็น 0
6. เราใช้ PyOD ซึ่งเป็นไลบรารีการตรวจจับ Python Outlier มีอัลกอริธึมมากกว่า 40 รายการ ใช้เทคนิคที่มีการควบคุมและไม่มีการควบคุม
7. เราใช้ศาสดาและกำหนดฟังก์ชันตรวจจับเพื่อสรุปค่าผิดปกติ
สื่อที่แสดงในบทความนี้ไม่ได้เป็นของ Analytics Vidhya และถูกใช้ตามดุลยพินิจของผู้เขียน
- เนื้อหาที่ขับเคลื่อนด้วย SEO และการเผยแพร่ประชาสัมพันธ์ รับการขยายวันนี้
- เพลโตบล็อคเชน Web3 Metaverse ข่าวกรอง ขยายความรู้. เข้าถึงได้ที่นี่.
- ที่มา: https://www.analyticsvidhya.com/blog/2023/01/learning-different-techniques-of-anomaly-detection/
- 1
- 10
- 11
- 7
- a
- เกี่ยวกับเรา
- ข้างบน
- ที่อยู่
- ปรับ
- AIR
- ขั้นตอนวิธี
- อัลกอริทึม
- ทั้งหมด
- การวิเคราะห์
- การวิเคราะห์ วิทยา
- และ
- การตรวจจับความผิดปกติ
- อื่น
- ประยุกต์
- แถว
- บทความ
- ก่อน
- ระหว่าง
- กล่อง
- คำนวณ
- ที่เรียกว่า
- ไม่ได้
- รถ
- กรณี
- ตรวจสอบ
- ปิดหน้านี้
- Cluster
- การจัดกลุ่ม
- รหัส
- สี
- คอลัมน์
- คอลัมน์
- COM
- อย่างไร
- ความสัมพันธ์
- ที่สร้างขึ้น
- ข้อมูล
- ชุดข้อมูล
- ความลึก
- ตรวจพบ
- การตรวจพบ
- การเบี่ยงเบน
- ต่าง
- ดุลพินิจ
- สนทนา
- ระยะทาง
- การกระจาย
- แบ่งออก
- Dont
- DOT
- แต่ละ
- ผล
- ช่วยให้
- หน่วยงาน
- ฯลฯ
- อีเธอร์ (ETH)
- ตัวอย่าง
- อธิบาย
- ล้มเหลว
- คุณสมบัติ
- หา
- หา
- ชื่อจริง
- ลอย
- พยากรณ์
- ป่า
- FRAME
- ราคาเริ่มต้นที่
- ฟังก์ชัน
- ฟังก์ชั่น
- GitHub
- ให้
- กำหนด
- ดี
- กราฟ
- มีความสุข
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- จุดสูง
- สูงกว่า
- อย่างสูง
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- HTTPS
- แยกแยะ
- ภาพ
- นำเข้า
- in
- บ่งชี้ว่า
- การผกผัน
- ความเหงา
- ปัญหา
- IT
- รายการ
- ตัวเอง
- การเรียนรู้
- ห้องสมุด
- ต่ำ
- เครื่อง
- เรียนรู้เครื่อง
- ทำ
- หลัก
- ทำ
- การทำ
- หลาย
- มดลูก
- แม็กซ์
- วิธี
- มาตรการ
- ภาพบรรยากาศ
- วิธี
- วิธีการ
- ตัวชี้วัด
- แบบ
- โมเดล
- ข้อมูลเพิ่มเติม
- การย้าย
- ชื่อ
- จำเป็นต้อง
- เชิงลบ
- เพื่อนบ้าน
- ปกติ
- ปกติ
- จำนวน
- มึน
- วัตถุ
- วัตถุ
- ONE
- โอเพนซอร์ส
- อื่นๆ
- มิฉะนั้น
- เค้าโครง
- เป็นเจ้าของ
- เพลโต
- เพลโตดาต้าอินเทลลิเจนซ์
- เพลโตดาต้า
- จุด
- คำทำนาย
- ราคา
- กระบวนการ
- หลาม
- สุ่ม
- พิสัย
- การอ่าน
- จริง
- บันทึก
- ลดลง
- REST
- ผล
- ผลสอบ
- กลับ
- เดียวกัน
- ขนาด
- ทะเลบอร์น
- ที่สอง
- รูปร่าง
- น่า
- โชว์
- แสดง
- แสดงให้เห็นว่า
- อย่างมีความหมาย
- หก
- ขนาด
- So
- บาง
- ความเร็ว
- แยก
- ยืน
- มาตรฐาน
- ยืน
- เก็บไว้
- เอา
- ใช้เวลา
- การพูดคุย
- งาน
- งาน
- เทคนิค
- ทดสอบ
- พื้นที่
- ที่นั่น
- ที่สาม
- สาม
- เวลา
- ไปยัง
- รถไฟ
- การฝึกอบรม
- เข้าใจ
- การเรียนรู้โดยไม่ได้รับการดูแล
- us
- ใช้
- มักจะ
- ใช้ประโยชน์
- ความคุ้มค่า
- ความคุ้มค่า
- ต่างๆ
- พาหนะ
- อะไร
- ล้อ
- ว่า
- ที่
- จะ
- ภายใน
- X
- ของคุณ
- ลมทะเล
- เป็นศูนย์