Độ lệch chuẩn là thước đo của phương sai i. e. bao nhiêu điểm dữ liệu riêng lẻ được trải ra từ giá trị trung bình
Ví dụ, hãy xem xét hai bộ dữ liệu
27 23 25 22 23 20 20 25 29 29
Và
12 31 31 16 28 47 9 5 40 47
Cả hai đều có cùng một trung bình 25. Tuy nhiên, tập dữ liệu đầu tiên có giá trị gần với giá trị trung bình hơn và tập dữ liệu thứ hai có giá trị trải rộng hơn
Nói chính xác hơn, độ lệch chuẩn cho tập dữ liệu đầu tiên là 3. 13 và cho bộ thứ hai là 14. 67
Tuy nhiên, thật không dễ dàng để xoay quanh những con số như 3. 13 hoặc 14. 67. Hiện tại, chúng ta chỉ biết tập dữ liệu thứ hai “dàn trải” hơn tập dữ liệu thứ nhất
Hãy đưa cái này vào một ứng dụng thiết thực hơn
Phân phối bình thường là gì?
Khi chúng tôi thực hiện phân tích, chúng tôi thường bắt gặp dữ liệu tuân theo một mẫu với các giá trị tập hợp xung quanh giá trị trung bình và có kết quả gần như bằng nhau bên dưới và bên trên nó. g
- chiều cao của người,
- giá trị huyết áp
- điểm kiểm tra
Các giá trị như vậy tuân theo phân phối chuẩn
Theo bài viết trên Wikipedia về phân phối chuẩn, khoảng 68% giá trị rút ra từ phân phối chuẩn nằm trong một độ lệch chuẩn σ so với giá trị trung bình; . 7% nằm trong ba độ lệch chuẩn
Thực tế này được gọi là 68-95-99. Quy tắc 7 [theo kinh nghiệm] hoặc quy tắc 3-sigma
Loại bỏ các ngoại lệ bằng cách sử dụng phân phối chuẩn và độ lệch chuẩn
Tôi đã áp dụng thành công quy tắc này khi phải dọn sạch dữ liệu từ hàng triệu thiết bị IoT tạo ra dữ liệu về thiết bị sưởi ấm. Mỗi điểm dữ liệu chứa mức sử dụng điện tại một thời điểm
Tuy nhiên, đôi khi các thiết bị không chính xác 100% và sẽ cho giá trị rất cao hoặc rất thấp
Chúng tôi cần xóa các giá trị ngoại lệ này vì chúng làm cho tỷ lệ trên biểu đồ của chúng tôi không thực tế. Thách thức là số lượng các giá trị ngoại lệ này không bao giờ cố định. Đôi khi, chúng tôi sẽ nhận được tất cả các giá trị hợp lệ và đôi khi những lần đọc sai này chiếm tới 10% số điểm dữ liệu
Cách tiếp cận của chúng tôi là loại bỏ các điểm khác biệt bằng cách loại bỏ bất kỳ điểm nào ở trên [Trung bình + 2*SD] và bất kỳ điểm nào bên dưới [Trung bình - 2*SD] trước khi vẽ biểu đồ tần số
Tuy nhiên, bạn không cần phải sử dụng 2, bạn có thể tinh chỉnh nó một chút để có công thức phát hiện ngoại lệ tốt hơn cho dữ liệu của mình
Đây là một ví dụ sử dụng lập trình Python. Tập dữ liệu là một phân phối chuẩn cổ điển nhưng như bạn có thể thấy, có một số giá trị như 10, 20 sẽ làm xáo trộn phân tích của chúng tôi và làm hỏng tỷ lệ trên biểu đồ của chúng tôi
Như bạn thấy, chúng tôi đã loại bỏ các giá trị ngoại lệ và nếu chúng tôi vẽ biểu đồ tập dữ liệu này, thì biểu đồ của chúng tôi sẽ đẹp hơn nhiều
[386, 479, 627, 523, 482, 483, 542, 699, 535, 617, 577, 471, 615, 583, 441, 562, 563, 527, 453, 530, 433, 541, 585, 704, 443, 569, 430, 637, 331, 511, 552, 496, 484, 566, 554, 472, 335, 440, 579, 341, 545, 615, 548, 604, 439, 556, 442, 461, 624, 611, 444, 578, 405, 487, 490, 496, 398, 512, 422, 455, 449, 432, 607, 679, 434, 597, 639, 565, 415, 486, 668, 414, 665, 557, 304, 404, 454, 689, 610, 483, 441, 657, 590, 492, 476, 437, 483, 529, 363, 711, 543]
Như bạn có thể thấy, chúng tôi đã có thể loại bỏ các giá trị ngoại lệ. Tuy nhiên, tôi không khuyến nghị phương pháp này cho tất cả các phân tích thống kê, các ngoại lệ có chức năng nhập trong thống kê và chúng ở đó là có lý do
Nhưng trong trường hợp của chúng tôi, các ngoại lệ rõ ràng là do lỗi trong dữ liệu và dữ liệu ở dạng phân phối chuẩn nên độ lệch chuẩn có ý nghĩa
Sự hiện diện của các ngoại lệ trong tập dữ liệu phân loại hoặc hồi quy có thể dẫn đến hiệu suất mô hình dự đoán kém phù hợp và thấp hơn
Việc xác định và loại bỏ các giá trị ngoại lệ là một thách thức đối với các phương pháp thống kê đơn giản đối với hầu hết các bộ dữ liệu máy học với số lượng lớn các biến đầu vào. Thay vào đó, các phương pháp phát hiện ngoại lệ tự động có thể được sử dụng trong quy trình lập mô hình và được so sánh, giống như các biến đổi chuẩn bị dữ liệu khác có thể được áp dụng cho tập dữ liệu
Trong hướng dẫn này, bạn sẽ khám phá cách sử dụng tính năng phát hiện và loại bỏ ngoại lệ tự động để cải thiện hiệu suất mô hình dự đoán của máy học
Sau khi hoàn thành hướng dẫn này, bạn sẽ biết
- Các mô hình phát hiện ngoại lệ tự động cung cấp giải pháp thay thế cho các kỹ thuật thống kê với số lượng biến đầu vào lớn hơn với các mối quan hệ qua lại phức tạp và chưa biết
- Cách áp dụng chính xác phát hiện và loại bỏ ngoại lệ tự động cho tập dữ liệu huấn luyện chỉ để tránh rò rỉ dữ liệu
- Cách đánh giá và so sánh các quy trình lập mô hình dự đoán với các giá trị ngoại lệ đã bị xóa khỏi tập dữ liệu huấn luyện
Bắt đầu dự án của bạn với cuốn sách mới của tôi Chuẩn bị dữ liệu cho học máy, bao gồm hướng dẫn từng bước và tệp mã nguồn Python cho tất cả các ví dụ
Bắt đầu nào
Phát hiện và loại bỏ ngoại lệ dựa trên mô hình trong Python
Ảnh của Zoltán Vörös, bảo lưu một số quyền
Hướng dẫn tổng quan
Hướng dẫn này được chia thành ba phần;
- Phát hiện và loại bỏ ngoại lệ
- Cơ sở dữ liệu và hiệu suất
- Bộ dữ liệu hồi quy giá nhà
- Hiệu suất mô hình cơ sở
- Tự động phát hiện ngoại lệ
- Rừng cách ly
- Yếu tố quyết định hiệp phương sai tối thiểu
- Yếu tố ngoại lệ cục bộ
- SVM một lớp
Phát hiện và loại bỏ ngoại lệ
Ngoại lệ là các quan sát trong tập dữ liệu không phù hợp theo một cách nào đó
Có lẽ loại ngoại lệ phổ biến hoặc quen thuộc nhất là các quan sát ở xa phần còn lại của các quan sát hoặc trung tâm của các quan sát
Điều này dễ hiểu khi chúng ta có một hoặc hai biến và chúng ta có thể trực quan hóa dữ liệu dưới dạng biểu đồ tần suất hoặc biểu đồ phân tán, mặc dù điều này trở nên rất khó khăn khi chúng ta có nhiều biến đầu vào xác định không gian đặc trưng đầu vào nhiều chiều
Trong trường hợp này, các phương pháp thống kê đơn giản để xác định các ngoại lệ có thể bị phá vỡ, chẳng hạn như các phương pháp sử dụng độ lệch chuẩn hoặc phạm vi liên vùng
Điều quan trọng là phải xác định và loại bỏ các giá trị ngoại lệ khỏi dữ liệu khi huấn luyện các thuật toán học máy cho mô hình dự đoán
Các ngoại lệ có thể làm sai lệch các phép đo thống kê và phân phối dữ liệu, cung cấp một biểu diễn sai lệch về dữ liệu cơ bản và các mối quan hệ. Loại bỏ các ngoại lệ khỏi dữ liệu đào tạo trước khi lập mô hình có thể dẫn đến dữ liệu phù hợp hơn và do đó, các dự đoán khéo léo hơn
Rất may, có nhiều phương pháp dựa trên mô hình tự động để xác định các giá trị ngoại lệ trong dữ liệu đầu vào. Điều quan trọng là mỗi phương pháp tiếp cận định nghĩa về ngoại lệ theo những cách hơi khác nhau, cung cấp các cách tiếp cận thay thế để chuẩn bị tập dữ liệu huấn luyện có thể được đánh giá và so sánh, giống như bất kỳ bước chuẩn bị dữ liệu nào khác trong quy trình lập mô hình
Trước khi chúng tôi đi sâu vào các phương pháp phát hiện ngoại lệ tự động, trước tiên hãy chọn một tập dữ liệu máy học tiêu chuẩn mà chúng tôi có thể sử dụng làm cơ sở cho cuộc điều tra của mình
Bạn muốn bắt đầu với việc chuẩn bị dữ liệu?
Tham gia khóa học xử lý sự cố email miễn phí trong 7 ngày của tôi ngay bây giờ [có mã mẫu]
Nhấp để đăng ký và cũng nhận được phiên bản PDF Ebook miễn phí của khóa học
Tải xuống khóa học nhỏ MIỄN PHÍ của bạn
Cơ sở dữ liệu và hiệu suất
Trong phần này, trước tiên chúng ta sẽ chọn một tập dữ liệu máy học tiêu chuẩn và thiết lập đường cơ sở về hiệu suất trên tập dữ liệu này
Điều này sẽ cung cấp bối cảnh để khám phá phương pháp chuẩn bị dữ liệu nhận dạng và loại bỏ ngoại lệ trong phần tiếp theo
Bộ dữ liệu hồi quy giá nhà
Chúng tôi sẽ sử dụng bộ dữ liệu hồi quy giá nhà
Bộ dữ liệu này có 13 biến đầu vào mô tả các thuộc tính của ngôi nhà và vùng ngoại ô và yêu cầu dự đoán giá trị trung bình của những ngôi nhà ở vùng ngoại ô tính bằng nghìn đô la
Bạn có thể tìm hiểu thêm về tập dữ liệu tại đây
- Bộ dữ liệu giá nhà [nhà ở. csv]
- Mô tả bộ dữ liệu giá nhà ở [nhà ở. tên]
Không cần tải xuống tập dữ liệu vì chúng tôi sẽ tự động tải xuống như một phần của các ví dụ đã làm việc của chúng tôi
Mở tập dữ liệu và xem lại dữ liệu thô. Một vài hàng dữ liệu đầu tiên được liệt kê bên dưới
Chúng ta có thể thấy rằng đó là một bài toán mô hình hóa dự báo hồi quy với các biến đầu vào là số, mỗi biến có các thang đo khác nhau
1
2
3
4
5
6
0. 00632,18. 00,2. 310,0,0. 5380,6. 5750,65. 20,4. 0900.1.296. 0,15. 30,396. 90,4. 98,24. 00
0. 02731,0. 00,7. 070,0,0. 4690,6. 4210,78. 90,4. 9671,2,242. 0,17. 80,396. 90,9. 14,21. 60
0. 02729,0. 00,7. 070,0,0. 4690,7. 1850,61. 10,4. 9671,2,242. 0,17. 80.392. 83,4. 03,34. 70
0. 03237,0. 00,2. 180,0,0. 4580,6. 9980,45. 80,6. 0622.3.222. 0,18. 70,394. 63,2. 94,33. 40
0. 06905,0. 00,2. 180,0,0. 4580,7. 1470,54. 20,6. 0622.3.222. 0,18. 70,396. 90,5. 33,36. 20
...
Tập dữ liệu có nhiều biến số đầu vào có mối quan hệ phức tạp và không xác định. Chúng tôi không biết rằng có tồn tại ngoại lệ trong tập dữ liệu này, mặc dù chúng tôi có thể đoán rằng có thể có một số ngoại lệ
Ví dụ bên dưới tải tập dữ liệu và chia nó thành các cột đầu vào và đầu ra, chia nó thành tập dữ liệu huấn luyện và kiểm tra, sau đó tóm tắt hình dạng của các mảng dữ liệu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# tải và tóm tắt tập dữ liệu
từ gấu trúc nhập read_csv
từ sklearn. model_selection nhập train_test_ tách
# tải tập dữ liệu
url = 'https. // thô. githubusercontent. com/jbrownlee/Datasets/master/housing. csv'
df = read_csv[url, header=None]
# truy xuất mảng
dữ liệu = df. giá trị
# chia thành các yếu tố đầu vào và đầu ra
X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]
# tóm tắt hình dạng của tập dữ liệu
in[X. hình dạng, y. hình dạng]
# chia thành tập huấn luyện và kiểm tra
X_train, X_test, y_train, y_test = train_test_split[X, y, test_size=0.33, random_state=1]
# tóm tắt hình dạng của đoàn tàu và bộ kiểm tra
in[X_train. hình dạng, X_test. hình dạng, y_train. hình dạng, y_test. hình dạng]
Chạy ví dụ này, chúng ta có thể thấy rằng tập dữ liệu đã được tải chính xác và có 506 hàng dữ liệu với 13 biến đầu vào và một biến mục tiêu
Bộ dữ liệu được chia thành các tập huấn luyện và kiểm tra với 339 hàng được sử dụng để huấn luyện mô hình và 167 để đánh giá mô hình
1
2
[506, 13] [506,]
[339, 13] [167, 13] [339,] [167,]
Tiếp theo, hãy đánh giá một mô hình trên tập dữ liệu này và thiết lập đường cơ sở về hiệu suất
Hiệu suất mô hình cơ sở
Đây là một vấn đề về mô hình dự đoán hồi quy, nghĩa là chúng ta sẽ dự đoán một giá trị số. Tất cả các biến đầu vào cũng là số
Trong trường hợp này, chúng tôi sẽ điều chỉnh thuật toán hồi quy tuyến tính và đánh giá hiệu suất của mô hình bằng cách đào tạo mô hình trên tập dữ liệu thử nghiệm và đưa ra dự đoán về dữ liệu thử nghiệm, đồng thời đánh giá các dự đoán bằng sai số tuyệt đối trung bình [MAE]
Ví dụ đầy đủ về đánh giá mô hình hồi quy tuyến tính trên tập dữ liệu được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# đánh giá mô hình trên tập dữ liệu thô
từ gấu trúc nhập read_csv
từ sklearn. model_selection nhập train_test_split
từ sklearn. linear_model nhập Hồi quy tuyến tính
từ sklearn. số liệu nhập mean_absolute_ lỗi
# tải tập dữ liệu
url = 'https. // thô. githubusercontent. com/jbrownlee/Datasets/master/housing. csv'
df = read_csv[url, header=None]
# truy xuất mảng
dữ liệu = df. giá trị
# chia thành các yếu tố đầu vào và đầu ra
X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]
# chia thành tập huấn luyện và kiểm tra
X_train, X_test, y_train, y_test = train_test_split[X, y, test_size=0.33, random_state=1]
#phù hợp với mô hình
mô hình = Hồi quy tuyến tính[]
mô hình. phù hợp[X_train, y_train]
# đánh giá mô hình
yhat = mô hình. dự đoán[X_test]
# đánh giá dự đoán
mae = mean_absolute_error[y_test, yhat]
in['MAE. %. 3f' % mae]
Chạy ví dụ phù hợp và đánh giá mô hình, sau đó báo cáo MAE
Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình
Trong trường hợp này, chúng ta có thể thấy rằng mô hình đạt được MAE khoảng 3. 417. Điều này cung cấp một đường cơ sở về hiệu suất mà chúng tôi có thể so sánh các quy trình xác định và loại bỏ ngoại lệ khác nhau
1
MAE. 3. 417
Tiếp theo, chúng ta có thể thử loại bỏ các giá trị ngoại lệ khỏi tập dữ liệu huấn luyện
Tự động phát hiện ngoại lệ
Thư viện scikit-learning cung cấp một số phương pháp tự động tích hợp để xác định các giá trị ngoại lệ trong dữ liệu
Trong phần này, chúng ta sẽ xem xét bốn phương pháp và so sánh hiệu suất của chúng trên bộ dữ liệu giá nhà
Mỗi phương thức sẽ được định nghĩa, sau đó khớp với tập dữ liệu huấn luyện. Sau đó, mô hình phù hợp sẽ dự đoán ví dụ nào trong tập dữ liệu huấn luyện là ngoại lệ và mẫu nào không [được gọi là ngoại lệ]. Các ngoại lệ sau đó sẽ bị xóa khỏi tập dữ liệu huấn luyện, sau đó mô hình sẽ phù hợp với các mẫu còn lại và được đánh giá trên toàn bộ tập dữ liệu thử nghiệm
Sẽ không hợp lệ khi khớp phương pháp phát hiện ngoại lệ trên toàn bộ tập dữ liệu huấn luyện vì điều này sẽ dẫn đến rò rỉ dữ liệu. Nghĩa là, mô hình sẽ có quyền truy cập vào dữ liệu [hoặc thông tin về dữ liệu] trong tập kiểm tra không được sử dụng để huấn luyện mô hình. Điều này có thể dẫn đến một ước tính lạc quan về hiệu suất của mô hình
Chúng tôi có thể cố gắng phát hiện các giá trị ngoại lệ trên “dữ liệu mới”, chẳng hạn như bộ thử nghiệm trước khi đưa ra dự đoán, nhưng sau đó chúng tôi sẽ làm gì nếu phát hiện ra các giá trị ngoại lệ?
Một cách tiếp cận có thể là trả về “Không” cho biết mô hình không thể đưa ra dự đoán về các trường hợp ngoại lệ đó. Đây có thể là một tiện ích mở rộng thú vị để khám phá và có thể phù hợp với dự án của bạn
Rừng cách ly
Isolation Forest, hay gọi tắt là iForest, là một thuật toán phát hiện bất thường dựa trên cây
Nó dựa trên việc mô hình hóa dữ liệu bình thường theo cách để cô lập các điểm bất thường vừa ít về số lượng vừa khác nhau trong không gian đặc trưng
… phương pháp đề xuất của chúng tôi tận dụng các đặc tính định lượng của hai dị thường. i] chúng là thiểu số bao gồm ít trường hợp hơn và ii] chúng có thuộc tính-giá trị rất khác so với thuộc tính-giá trị của các trường hợp bình thường
— Khu rừng biệt lập, 2008
Thư viện scikit-learning cung cấp triển khai Isolation Forest trong lớp IsolationForest
Có lẽ siêu tham số quan trọng nhất trong mô hình là đối số “ô nhiễm”, được sử dụng để giúp ước tính số lượng ngoại lệ trong tập dữ liệu. Đây là một giá trị giữa 0. 0 và 0. 5 và theo mặc định được đặt thành 0. 1
1
2
3
4
.. .
# xác định các ngoại lệ trong tập dữ liệu huấn luyện
iso = Rừng cách ly[ô nhiễm=0.1]
yhat = iso. fit_predict[X_train]
Sau khi được xác định, chúng tôi có thể xóa các ngoại lệ khỏi tập dữ liệu huấn luyện
1
2
3
4
.. .
# chọn tất cả các hàng không phải là ngoại lệ
mặt nạ = yhat . = -1
X_train, y_train = X_train[mask, :], y_train[mặt nạ]
Kết hợp điều này lại với nhau, ví dụ hoàn chỉnh về việc đánh giá mô hình tuyến tính trên tập dữ liệu nhà ở với các ngoại lệ được xác định và loại bỏ bằng rừng cách ly được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# đánh giá hiệu suất của mô hình với các ngoại lệ được loại bỏ bằng cách sử dụng rừng cô lập
từ gấu trúc nhập read_csv
từ sklearn. model_selection nhập train_test_split
từ sklearn. linear_model nhập Hồi quy tuyến tính
từ sklearn. tập hợp nhập Rừng cách ly
từ sklearn. số liệu nhập mean_absolute_ lỗi
# tải tập dữ liệu
url = 'https. // thô. githubusercontent. com/jbrownlee/Datasets/master/housing. csv'
df = read_csv[url, header=None]
# truy xuất mảng
dữ liệu = df. giá trị
# chia thành các yếu tố đầu vào và đầu ra
X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]
# chia thành tập huấn luyện và kiểm tra
X_train, X_test, y_train, y_test = train_test_split[X, y, test_size=0.33, random_state=1]
# tóm tắt hình dạng của tập dữ liệu huấn luyện
in[X_train. hình dạng, y_train. hình dạng]
# xác định các ngoại lệ trong tập dữ liệu huấn luyện
iso = Rừng cách ly[ô nhiễm=0.1]
yhat = iso. fit_predict[X_train]
# chọn tất cả các hàng không phải là ngoại lệ
mặt nạ = yhat . = -1
X_train, y_train = X_train[mask, :], y_train[mặt nạ]
# tóm tắt hình dạng của tập dữ liệu huấn luyện được cập nhật
in[X_train. hình dạng, y_train. hình dạng]
#phù hợp với mô hình
mô hình = Hồi quy tuyến tính[]
mô hình. phù hợp[X_train, y_train]
# đánh giá mô hình
yhat = mô hình. dự đoán[X_test]
# đánh giá dự đoán
mae = mean_absolute_error[y_test, yhat]
in['MAE. %. 3f' % mae]
Chạy ví dụ phù hợp và đánh giá mô hình, sau đó báo cáo MAE
Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình
Trong trường hợp này, chúng ta có thể thấy rằng mô hình đó đã xác định và loại bỏ 34 điểm ngoại lệ và đạt được MAE khoảng 3. 189, một sự cải thiện so với đường cơ sở đạt được số điểm khoảng 3. 417
1
2
3
[339, 13] [339,]
[305, 13] [305,]
MAE. 3. 189
Yếu tố quyết định hiệp phương sai tối thiểu
Nếu các biến đầu vào có phân phối Gaussian thì có thể sử dụng các phương pháp thống kê đơn giản để phát hiện các giá trị ngoại lệ
Ví dụ: nếu tập dữ liệu có hai biến đầu vào và cả hai đều là Gaussian, thì không gian đặc trưng tạo thành một Gaussian đa chiều và kiến thức về phân phối này có thể được sử dụng để xác định các giá trị ở xa phân phối
Cách tiếp cận này có thể được khái quát hóa bằng cách xác định một siêu cầu [ellipsoid] bao phủ dữ liệu thông thường và dữ liệu nằm ngoài hình dạng này được coi là ngoại lệ. Việc triển khai hiệu quả kỹ thuật này cho dữ liệu đa biến được gọi là Yếu tố quyết định hiệp phương sai tối thiểu hoặc viết tắt là MCD
Phương pháp xác định hiệp phương sai tối thiểu [MCD] là một công cụ ước tính rất mạnh về vị trí và phân tán đa biến, có sẵn thuật toán nhanh. […] Nó cũng phục vụ như một công cụ thuận tiện và hiệu quả để phát hiện ngoại lệ
— Yếu tố quyết định hiệp phương sai tối thiểu và phần mở rộng, 2017
Thư viện scikit-learning cung cấp quyền truy cập vào phương thức này thông qua lớp EllipticEnvelope
Nó cung cấp đối số “sự nhiễm bẩn” để xác định tỷ lệ kỳ vọng của các giá trị ngoại lai được quan sát thấy trong thực tế. Trong trường hợp này, chúng tôi sẽ đặt nó thành giá trị 0. 01, được tìm thấy với một chút thử và sai
1
2
3
4
.. .
# xác định các ngoại lệ trong tập dữ liệu huấn luyện
ee = EllipticEnvelope[ô nhiễm=0.01]
yhat = ee. fit_predict[X_train]
Sau khi được xác định, các ngoại lệ có thể được xóa khỏi tập dữ liệu huấn luyện như chúng ta đã làm trong ví dụ trước
Kết hợp điều này lại với nhau, ví dụ hoàn chỉnh về việc xác định và loại bỏ các giá trị ngoại lệ khỏi bộ dữ liệu nhà ở bằng phương pháp đường bao elip [xác định hiệp biến tối thiểu] được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# đánh giá hiệu suất của mô hình với các ngoại lệ được loại bỏ bằng cách sử dụng đường bao hình elip
từ gấu trúc nhập read_csv
từ sklearn. model_selection nhập train_test_split
từ sklearn. linear_model nhập Hồi quy tuyến tính
từ sklearn. hiệp phương sai nhập Phong bì Elliptic
từ sklearn. số liệu nhập mean_absolute_ lỗi
# tải tập dữ liệu
url = 'https. // thô. githubusercontent. com/jbrownlee/Datasets/master/housing. csv'
df = read_csv[url, header=None]
# truy xuất mảng
dữ liệu = df. giá trị
# chia thành các yếu tố đầu vào và đầu ra
X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]
# chia thành tập huấn luyện và kiểm tra
X_train, X_test, y_train, y_test = train_test_split[X, y, test_size=0.33, random_state=1]
# tóm tắt hình dạng của tập dữ liệu huấn luyện
in[X_train. hình dạng, y_train. hình dạng]
# xác định các ngoại lệ trong tập dữ liệu huấn luyện
ee = EllipticEnvelope[ô nhiễm=0.01]
yhat = ee. fit_predict[X_train]
# chọn tất cả các hàng không phải là ngoại lệ
mặt nạ = yhat . = -1
X_train, y_train = X_train[mask, :], y_train[mặt nạ]
# tóm tắt hình dạng của tập dữ liệu huấn luyện được cập nhật
in[X_train. hình dạng, y_train. hình dạng]
#phù hợp với mô hình
mô hình = Hồi quy tuyến tính[]
mô hình. phù hợp[X_train, y_train]
# đánh giá mô hình
yhat = mô hình. dự đoán[X_test]
# đánh giá dự đoán
mae = mean_absolute_error[y_test, yhat]
in['MAE. %. 3f' % mae]
Chạy ví dụ phù hợp và đánh giá mô hình, sau đó báo cáo MAE
Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình
Trong trường hợp này, chúng ta có thể thấy rằng phương pháp đường bao elip chỉ xác định và loại bỏ 4 giá trị ngoại lệ, dẫn đến giảm MAE từ 3. 417 với đường cơ sở là 3. 388
1
2
3
[339, 13] [339,]
[335, 13] [335,]
MAE. 3. 388
Yếu tố ngoại lệ cục bộ
Một cách tiếp cận đơn giản để xác định các giá trị ngoại lệ là xác định vị trí các ví dụ ở xa các ví dụ khác trong không gian đặc trưng
Điều này có thể hoạt động tốt đối với các không gian đối tượng có số chiều thấp [ít tính năng], mặc dù nó có thể trở nên kém tin cậy hơn khi số lượng đối tượng tăng lên, được gọi là lời nguyền của chiều
Yếu tố ngoại lai cục bộ, hay viết tắt là LOF, là một kỹ thuật cố gắng khai thác ý tưởng về các hàng xóm gần nhất để phát hiện ngoại lệ. Mỗi ví dụ được chỉ định một điểm về mức độ biệt lập hoặc khả năng nó là ngoại lệ dựa trên quy mô của vùng lân cận địa phương của nó. Những ví dụ có số điểm lớn nhất có nhiều khả năng là ngoại lệ
Chúng tôi giới thiệu một ngoại lệ cục bộ [LOF] cho từng đối tượng trong tập dữ liệu, cho biết mức độ ngoại lệ của nó
— LOF. Xác định các ngoại lệ cục bộ dựa trên mật độ, 2000
Thư viện scikit-learning cung cấp cách triển khai phương pháp này trong lớp LocalOutlierFactor
Mô hình cung cấp đối số “sự ô nhiễm”, đó là tỷ lệ phần trăm ngoại lệ dự kiến trong tập dữ liệu, được chỉ định và mặc định là 0. 1
1
2
3
4
.. .
# xác định các ngoại lệ trong tập dữ liệu huấn luyện
lof = LocalOutlierFactor[]
yhat = lof. fit_predict[X_train]
Kết hợp điều này lại với nhau, ví dụ hoàn chỉnh về việc xác định và loại bỏ các giá trị ngoại lệ khỏi bộ dữ liệu nhà ở bằng phương pháp hệ số ngoại lệ cục bộ được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# đánh giá hiệu suất của mô hình với các ngoại lệ đã bị loại bỏ bằng cách sử dụng hệ số ngoại lệ cục bộ
từ gấu trúc nhập read_csv
từ sklearn. model_selection nhập train_test_split
từ sklearn. linear_model nhập Hồi quy tuyến tính
từ sklearn. hàng xóm nhập LocalOutlierFactor
từ sklearn. số liệu nhập mean_absolute_ lỗi
# tải tập dữ liệu
url = 'https. // thô. githubusercontent. com/jbrownlee/Datasets/master/housing. csv'
df = read_csv[url, header=None]
# truy xuất mảng
dữ liệu = df. giá trị
# chia thành các yếu tố đầu vào và đầu ra
X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]
# chia thành tập huấn luyện và kiểm tra
X_train, X_test, y_train, y_test = train_test_split[X, y, test_size=0.33, random_state=1]
# tóm tắt hình dạng của tập dữ liệu huấn luyện
in[X_train. hình dạng, y_train. hình dạng]
# xác định các ngoại lệ trong tập dữ liệu huấn luyện
lof = LocalOutlierFactor[]
yhat = lof. fit_predict[X_train]
# chọn tất cả các hàng không phải là ngoại lệ
mặt nạ = yhat . = -1
X_train, y_train = X_train[mask, :], y_train[mặt nạ]
# tóm tắt hình dạng của tập dữ liệu huấn luyện được cập nhật
in[X_train. hình dạng, y_train. hình dạng]
#phù hợp với mô hình
mô hình = Hồi quy tuyến tính[]
mô hình. phù hợp[X_train, y_train]
# đánh giá mô hình
yhat = mô hình. dự đoán[X_test]
# đánh giá dự đoán
mae = mean_absolute_error[y_test, yhat]
in['MAE. %. 3f' % mae]
Chạy ví dụ phù hợp và đánh giá mô hình, sau đó báo cáo MAE
Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình
Trong trường hợp này, chúng ta có thể thấy rằng phương pháp nhân tố ngoại lai cục bộ đã xác định và loại bỏ 34 ngoại lệ, cùng số lượng với rừng cô lập, dẫn đến MAE giảm từ 3. 417 với đường cơ sở là 3. 356. Tốt hơn, nhưng không tốt bằng rừng cô lập, cho thấy một nhóm các yếu tố ngoại lai khác đã được xác định và loại bỏ
1
2
3
[339, 13] [339,]
[305, 13] [305,]
MAE. 3. 356
SVM một lớp
Máy vectơ hỗ trợ, hoặc SVM, thuật toán được phát triển ban đầu để phân loại nhị phân có thể được sử dụng để phân loại một lớp
Khi lập mô hình một lớp, thuật toán nắm bắt mật độ của lớp đa số và phân loại các ví dụ về các điểm cực trị của hàm mật độ là các giá trị ngoại lai. Việc sửa đổi SVM này được gọi là SVM một lớp
… một thuật toán tính toán một hàm nhị phân được cho là nắm bắt các vùng trong không gian đầu vào nơi mật độ xác suất tồn tại [hỗ trợ của nó], tức là một hàm sao cho hầu hết dữ liệu sẽ nằm trong vùng mà hàm khác không
— Ước tính sự hỗ trợ của phân phối chiều cao, 2001
Mặc dù SVM là một thuật toán phân loại và SVM một lớp cũng là một thuật toán phân loại, nhưng nó có thể được sử dụng để khám phá các giá trị ngoại lệ trong dữ liệu đầu vào cho cả bộ dữ liệu hồi quy và phân loại
Thư viện scikit-learning cung cấp triển khai SVM một lớp trong lớp OneClassSVM
Lớp này cung cấp đối số “nu” chỉ định tỷ lệ gần đúng của các giá trị ngoại lệ trong tập dữ liệu, mặc định là 0. 1. Trong trường hợp này, chúng tôi sẽ đặt nó thành 0. 01, được tìm thấy với một chút thử và sai
1
2
3
4
.. .
# xác định các ngoại lệ trong tập dữ liệu huấn luyện
ee = OneClassSVM[nu=0.01]
yhat = ee. fit_predict[X_train]
Liên kết điều này lại với nhau, ví dụ hoàn chỉnh về việc xác định và loại bỏ các giá trị ngoại lệ khỏi bộ dữ liệu nhà ở bằng phương pháp SVM một lớp được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# đánh giá hiệu suất mô hình với các ngoại lệ được loại bỏ bằng một lớp SVM
từ gấu trúc nhập read_csv
từ sklearn. model_selection nhập train_test_split
từ sklearn. linear_model nhập Hồi quy tuyến tính
từ sklearn. svm nhập OneClassSVM
từ sklearn. số liệu nhập mean_absolute_ lỗi
# tải tập dữ liệu
url = 'https. // thô. githubusercontent. com/jbrownlee/Datasets/master/housing. csv'
df = read_csv[url, header=None]
# truy xuất mảng
dữ liệu = df. giá trị
# chia thành các yếu tố đầu vào và đầu ra
X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]
# chia thành tập huấn luyện và kiểm tra
X_train, X_test, y_train, y_test = train_test_split[X, y, test_size=0.33, random_state=1]
# tóm tắt hình dạng của tập dữ liệu huấn luyện
in[X_train. hình dạng, y_train. hình dạng]
# xác định các ngoại lệ trong tập dữ liệu huấn luyện
ee = OneClassSVM[nu=0.01]
yhat = ee. fit_predict[X_train]
# chọn tất cả các hàng không phải là ngoại lệ
mặt nạ = yhat . = -1
X_train, y_train = X_train[mask, :], y_train[mặt nạ]
# tóm tắt hình dạng của tập dữ liệu huấn luyện được cập nhật
in[X_train. hình dạng, y_train. hình dạng]
#phù hợp với mô hình
mô hình = Hồi quy tuyến tính[]
mô hình. phù hợp[X_train, y_train]
# đánh giá mô hình
yhat = mô hình. dự đoán[X_test]
# đánh giá dự đoán
mae = mean_absolute_error[y_test, yhat]
in['MAE. %. 3f' % mae]
Chạy ví dụ phù hợp và đánh giá mô hình, sau đó báo cáo MAE
Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình
Trong trường hợp này, chúng ta có thể thấy rằng chỉ có ba ngoại lệ được xác định và loại bỏ và mô hình đạt được MAE khoảng 3. 431, không tốt hơn mô hình cơ sở đã đạt được 3. 417. Có lẽ hiệu suất tốt hơn có thể đạt được với nhiều điều chỉnh hơn
1
2
3
[339, 13] [339,]
[336, 13] [336,]
MAE. 3. 431
Đọc thêm
Phần này cung cấp nhiều tài nguyên hơn về chủ đề này nếu bạn muốn tìm hiểu sâu hơn
Hướng dẫn liên quan
- Thuật toán phân loại một lớp cho bộ dữ liệu không cân bằng
- Cách loại bỏ các giá trị ngoại lai cho Machine Learning
giấy tờ
- Khu Rừng Cách Ly, 2008
- Yếu tố quyết định hiệp phương sai tối thiểu và phần mở rộng, 2017
- LOF. Xác định các ngoại lệ cục bộ dựa trên mật độ, 2000
- Ước tính sự hỗ trợ của phân phối chiều cao, 2001
API
- Phát hiện mới lạ và bất thường, hướng dẫn sử dụng scikit-learning
- sklearning. hiệp phương sai. API EllipticEnvelope
- sklearning. svm. API OneClassSVM
- sklearning. người hàng xóm. LocalOutlierFactor API
- sklearning. hòa tấu. Cách lyForest API
Tóm lược
Trong hướng dẫn này, bạn đã khám phá cách sử dụng tính năng phát hiện và loại bỏ ngoại lệ tự động để cải thiện hiệu suất mô hình dự đoán của máy học