Cách loại bỏ các giá trị ngoại lệ trong Python

Độ 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

 

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;

  1. Phát hiện và loại bỏ ngoại lệ
  2. Cơ sở dữ liệu và hiệu suất
    1. Bộ dữ liệu hồi quy giá nhà
    2. Hiệu suất mô hình cơ sở
  3. Tự động phát hiện ngoại lệ
    1. Rừng cách ly
    2. Yếu tố quyết định hiệp phương sai tối thiểu
    3. Yếu tố ngoại lệ cục bộ
    4. 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

Chủ Đề