Phát hiện ngoại lệ Python sklearn

Ví dụ này minh họa nhu cầu ước tính hiệp phương sai mạnh mẽ trên một tập dữ liệu thực. Nó hữu ích cho cả việc phát hiện ngoại lệ và để hiểu rõ hơn về cấu trúc dữ liệu

Chúng tôi đã chọn hai bộ gồm hai biến từ bộ dữ liệu nhà ở ở Boston để minh họa cho loại phân tích nào có thể được thực hiện với một số công cụ phát hiện ngoại lệ. Với mục đích trực quan hóa, chúng tôi đang làm việc với các ví dụ hai chiều, nhưng cần lưu ý rằng mọi thứ không quá tầm thường ở chiều cao, như nó sẽ được chỉ ra

Trong cả hai ví dụ dưới đây, kết quả chính là ước tính hiệp phương sai theo kinh nghiệm, với tư cách là một ước tính không chắc chắn, bị ảnh hưởng nhiều bởi cấu trúc không đồng nhất của các quan sát. Mặc dù ước tính hiệp phương sai mạnh mẽ có thể tập trung vào chế độ chính của phân phối dữ liệu, nhưng nó vẫn tuân theo giả định rằng dữ liệu phải được phân phối Gaussian, mang lại một số ước tính sai lệch về cấu trúc dữ liệu, nhưng vẫn chính xác ở một mức độ nào đó. Thuật toán SVM một lớp

ví dụ đầu tiên

Ví dụ đầu tiên minh họa cách ước tính hiệp phương sai mạnh mẽ có thể giúp tập trung vào một cụm có liên quan khi tồn tại một cụm khác. Ở đây, nhiều quan sát được gộp thành một và chia nhỏ ước tính hiệp phương sai theo kinh nghiệm. Tất nhiên, một số công cụ sàng lọc sẽ chỉ ra sự hiện diện của hai cụm [Máy vectơ hỗ trợ, Mô hình hỗn hợp Gaussian, phát hiện ngoại lệ đơn biến,. ]. Nhưng nếu nó là một ví dụ chiều cao, thì không cái nào trong số này có thể được áp dụng dễ dàng như vậy

Ví dụ thứ hai

Ví dụ thứ hai cho thấy khả năng của công cụ ước tính mạnh mẽ của yếu tố quyết định hiệp phương sai tối thiểu để tập trung vào chế độ chính của phân phối dữ liệu. vị trí dường như được ước tính tốt, mặc dù hiệp phương sai khó ước tính do phân phối hình quả chuối. Dù sao, chúng ta có thể loại bỏ một số quan sát bên ngoài. One-Class SVM có thể nắm bắt cấu trúc dữ liệu thực, nhưng khó khăn là điều chỉnh tham số băng thông hạt nhân của nó để có được sự thỏa hiệp tốt giữa hình dạng của ma trận phân tán dữ liệu và rủi ro khớp dữ liệu quá mức

Khi đã biết lượng ô nhiễm, ví dụ này minh họa hai cách khác nhau để thực hiện

  • dựa trên một công cụ ước tính hiệp phương sai mạnh mẽ, giả định rằng dữ liệu được phân phối Gaussian và hoạt động tốt hơn SVM một lớp trong trường hợp đó
  • sử dụng SVM một lớp và khả năng nắm bắt hình dạng của tập dữ liệu, do đó hoạt động tốt hơn khi dữ liệu không phải Gaussian, tôi. e. với hai cụm được phân tách rõ ràng;

Sự thật cơ bản về các giá trị nội tại và giá trị ngoại lệ được đưa ra bởi màu sắc của các điểm trong khi khu vực tô màu cam cho biết điểm nào được báo cáo là giá trị ngoại lệ theo từng phương pháp

Ở đây, chúng tôi giả sử rằng chúng tôi biết tỷ lệ ngoại lệ trong bộ dữ liệu. Do đó, thay vì sử dụng phương thức 'dự đoán' của các đối tượng, chúng tôi đặt ngưỡng cho hàm_quyết_định để tách ra phần tương ứng

Ý tưởng trong phát hiện ngoại lệ là tìm các điểm khác nhau. Có hai loại phát hiện ngoại lệ khá liên quan được tóm tắt trong phần phát hiện ngoại lệ. Có phát hiện ngoại lệ và phát hiện mới lạ

#Động lực. đệm-top [. cột bên trái[

]

.right-column[

] ]

Cả hai đều là phương pháp không giám sát. Ý tưởng là tìm những thứ khác biệt. Thông thường, trong phát hiện ngoại lệ, tập dữ liệu đào tạo của bạn cũng chứa các ngoại lệ khiến nó hơi bẩn, trong khi phát hiện tính mới, bạn nhận được một tập dữ liệu và sau đó, ai đó cung cấp cho bạn dữ liệu mới và hỏi bạn có gì mới ở đây. Vì vậy, trong phát hiện tính mới, tập dữ liệu của bạn sẽ sạch

Nhưng trong cả hai, bạn muốn xác định thứ gì đó khác với phân phối chuẩn. Chỉ trong trường hợp phát hiện ngoại lệ, đã có các mẫu khác nhau trong tập dữ liệu huấn luyện của bạn

Đây là một trong số ít bài toán không giám sát cứng nhắc được sử dụng khá nhiều trong thực tế

  • Tìm những điểm “khác biệt” trong tập huấn luyện [và trong tương lai]

  • “Phát hiện tính mới” - không có ngoại lệ nào trong tập huấn luyện

  • Ngoại lệ không được dán nhãn. [nếu không thì đó chỉ là sự phân loại không cân bằng]

  • Phát hiện ngoại lệ và phát hiện tính mới thường được sử dụng thay thế cho nhau trong thực tế

Ý kiến ​​cơ bản

  • Phân phối dữ liệu mô hình \[p[X]\]

  • ngoại lệ. \[p[X] < \varepsilon\]

  • Để phát hiện ngoại lệ. mạnh mẽ trong việc lập mô hình \[p[X]\]

Ý tưởng chính là, bạn lập mô hình phân phối dữ liệu của mình, p[X]. Và sau đó bạn nhìn vào các điểm dữ liệu không thể xảy ra trong mô hình. Vì vậy, nếu nó không xảy ra theo mô hình, thì đó có thể là một ngoại lệ

Nếu bạn đang thực hiện phát hiện ngoại lệ, điều đó có nghĩa là mẫu của bạn sẽ bị nhiễm bẩn. Vì vậy, chúng đã là các ngoại lệ trong tập dữ liệu X nếu đúng như vậy, bạn muốn mạnh mẽ trong việc lập mô hình p[X], vì vậy bạn muốn lập mô hình p[X] theo cách mạnh mẽ đối với các ngoại lệ

Cả hai nhiệm vụ này thường không được xác định rõ ràng. Vì vậy, trừ khi bạn thực sự biết phân phối dữ liệu thực, còn không thì khó có thể đo lường được hiệu quả của một thứ gì đó. Thông thường, bạn không có sự thật cơ bản về ngoại lệ là gì nếu bạn có sự thật cơ bản về ngoại lệ là gì, bạn có thể thực hiện nhiệm vụ phân loại mất cân bằng

Vì vậy, tương tự như phân cụm, những gì chúng tôi đang làm ở đây là xây dựng một mô hình, cố gắng tìm một số điểm ngoại lệ và sau đó kiểm tra xem chúng có thực sự là điểm ngoại lệ không. Nếu chúng tôi hài lòng với những thứ mà mô hình của chúng tôi tìm thấy, thì chúng tôi có thể đưa vào sản xuất. Nhưng không có gì đảm bảo rằng nó sẽ tìm thấy x phần ngoại lệ và vì chúng tôi không có dữ liệu được gắn nhãn nên thông thường, chúng tôi không thể thực sự đo lường khả năng thu hồi của mình. Chúng tôi sẽ không bao giờ biết về các mẫu mà chúng tôi không tìm thấy

Vì vậy, có thể đối với bài tập về nhà và trong bài tập về nhà thực sự có dữ liệu sự thật cơ bản. Và nó tương tự như cài đặt phân cụm, trong đó các nhà nghiên cứu về cơ bản gian lận và đánh giá các phương pháp không được giám sát theo cách có giám sát. Vì vậy, khi bạn có nhãn sự thật cơ bản, bạn có thể đánh giá khả năng phát hiện ngoại lệ của mình, chẳng hạn như sử dụng AUC, đây là điều bạn sẽ làm bài tập về nhà của mình

Nhưng trong môi trường thực tế, nếu bạn có nhãn, bạn sẽ không bao giờ sử dụng tính năng phát hiện ngoại lệ

Một lần nữa, tương tự như phân cụm, điều gì tạo nên giá trị ngoại lệ trong một tập dữ liệu cụ thể không được xác định rõ ràng. Vì vậy, tùy thuộc vào ứng dụng, bạn muốn xem xét điều gì là ngoại lệ hay không. Vì vậy, trong bài tập về nhà, ốm yếu và khỏe mạnh, và những người ốm yếu là ngoại lệ. Nhưng nó cũng có thể là những người lớn tuổi hơn nhiều và những người khác là những người ngoại lệ

Nếu có một loại mô hình mật độ rất rõ ràng và vì vậy bạn không biết mật độ của dữ liệu được cho là như thế nào và sau đó, bạn biết đấy, những thứ không chia sẻ mật độ này, thì bạn có thể xác định điều này. Nhưng thường thì bạn không biết mật độ trông như thế nào và do đó không có khái niệm xác định rõ ràng thế nào là ngoại lệ. Tương tự như vậy, không có giải pháp xác định rõ ràng về những gì nên là một cụm

Vì vậy, chúng ta sẽ nói về một số thuật toán khác nhau đưa ra các giả định khác nhau về điều gì làm cho một điểm dữ liệu trở nên khác biệt. Vì vậy, ở đây, tôi đã nói, chúng ta thường bắt đầu với phân phối dữ liệu p[X]

  • Nhiệm vụ thường không được xác định rõ ràng [trừ khi bạn biết phân phối dữ liệu thực]

  • Nhiệm vụ thường không được xác định rõ ràng [trừ khi bạn biết phân phối dữ liệu thực]

Phong bì #Elliptic

\[p[X] = \mathcal{N}[\mu, \Sigma]\]

.center[

]

Điều này dẫn đến phát hiện ngoại lệ đường bao elip. Về cơ bản, nó phù hợp với Gaussian vào dữ liệu, sau đó nó xem xét các điểm không phù hợp với Gaussian và những điểm đó là ngoại lệ. Vì điều này có nghĩa là dành cho nhiệm vụ phát hiện ngoại lệ, nên những gì chúng tôi đang cố gắng thực sự là cố gắng tìm một ước tính mạnh mẽ về ma trận trung bình và hiệp phương sai để chúng tôi có thể chấp nhận một số ngoại lệ trong tập dữ liệu huấn luyện và vẫn phục hồi giá trị thực

Trong hình minh họa này, các điểm màu đen, inliers, là những gì bạn mong đợi dữ liệu trông như thế nào và phân phối ngoại lệ được vẽ bằng màu đỏ

Chúng trùng nhau, vì vậy thông thường trong các phương pháp không được giám sát, bạn sẽ không bao giờ gắn nhãn bất kỳ điểm màu đỏ nào là ngoại lệ nhưng chúng tôi có thể cố gắng tìm ra rằng những điểm này ở đây là ngoại lệ

Cách mà đường bao elip hoạt động là nó tìm thấy một phiên bản mạnh mẽ của ma trận phương sai. Về cơ bản, nó tìm thấy ma trận hiệp phương sai với yếu tố quyết định nhỏ nhất mà vẫn chiếm một phần lớn dữ liệu

Trong hầu hết các phương pháp phát hiện ngoại lệ, bạn phải chỉ định số lượng ngoại lệ mà bạn mong đợi. Vì vậy, ở đây, giả sử chúng ta chỉ định 10% dữ liệu là ngoại lệ, sau đó nó sẽ cố gắng xây dựng ma trận hiệp phương sai bao gồm 90% dữ liệu, nhưng chứa yếu tố quyết định thấp nhất có thể

Nếu bạn làm điều này, bạn sẽ có các vòng tròn chấm màu đỏ, là hiệp phương sai của đường bao phù hợp với ước tính chắc chắn và vòng tròn màu xanh lam là hiệp phương sai phù hợp với ước tính khả năng tối đa, sử dụng tất cả dữ liệu

Rõ ràng, những ngoại lệ này có thể làm xáo trộn ma trận hiệp phương sai và do đó, màu xanh lam quá dày theo một hướng trong khi màu đỏ thì không. Vì vậy, bây giờ, nếu bạn có mô hình màu đỏ này, về cơ bản bạn có thể nói, tất cả dữ liệu nằm trong hai độ lệch chuẩn này và vì vậy mọi thứ bên ngoài đây đều là ngoại lệ

Phù hợp với ma trận hiệp phương sai mạnh mẽ và có nghĩa là FIXME thêm slide trên Hiệp phương sai. Xác định hiệp phương sai tối thiểu [MinCovDet]

phong bì elip

  • Xử lý sơ bộ với PCA đôi khi có thể hữu ích

nhỏ hơn [

from sklearn.covariance import EllipticEnvelope
ee = EllipticEnvelope[contamination=.1].fit[X]
pred = ee.predict[X]
print[pred]
print[np.mean[pred == -1]]
```]

.smaller[
```python
[ 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 -1  1  1  1 -1 -1  1 -1  1  1 -1  1 -1 -1 -1  1  1 -1 -1 -1 -1  1 -1  1  1]
0.104

```]



The way we do this in scikit-learn. The covariance module
has all the robust covariance methods. As I said, you have
to specify the contamination, which is how many outliers do
you expect. Here, I set it to 10%.

If I predict I get 1s and -1s. All the outlier models in
scikit-learn use 1 for inliers and -1 to outliers.

The mean of the prediction tells me that about 10% of the
training data was labeled as an outlier, which is what we
would expect, given that we set it as 10%.  You could also
get a continuous score saying how much of an outlier is each
point with the score samples methods.

Here, in the elliptic envelope, contamination parameter
changes how the model is fit, for some other models, this
will actually only change the threshold. It’s important here
to have the right contamination parameters for the right
covariance fit.

For real-world model, set it based on what your expectations
are.

trường hợp thất bại. Dữ liệu phi Gaussian

.center[

]

Nếu dữ liệu không phải là Gaussian, chúng tôi nhận được điều này

Trong bộ dữ liệu này, trực giác của tôi là ba điểm bị cô lập là các điểm ngoại lệ và phần còn lại là dữ liệu bình thường. Vì dữ liệu không phải là Gaussian, nó mang lại cho bạn 10% là giá trị ngoại lệ cách xa giá trị trung bình nhất. Và đây không phải là điều tôi muốn chút nào

Vì vậy, nếu dữ liệu của bạn không phải Gaussian, thì phương pháp này rõ ràng sẽ không hoạt động tốt

Bây giờ, rõ ràng chúng ta có thể sử dụng một mô hình mật độ phức tạp hơn. Vì vậy, chúng ta đã nói về các mô hình hỗn hợp Gaussian, chúng ta có thể sử dụng mô hình hỗn hợp Gaussian. Thay vì khớp một Gaussian duy nhất, chúng ta có thể cố gắng khớp nhiều Gaussian. Nếu bạn chỉ sử dụng các mô hình hỗn hợp Gaussian trong scikit-learning, thì chúng sẽ không phù hợp mạnh mẽ, do đó, điều đó có thể có ý nghĩa hơn trong phát hiện tính mới so với nghĩa phát hiện ngoại lệ vì nó sẽ cố gắng khớp với tất cả dữ liệu. Bạn vẫn có thể thử làm điều đó với nhiệm vụ phát hiện ngoại lệ và vừa vặn, vì vậy nếu tôi khớp ba Gaussian ở đây, nó có thể sẽ cho tôi các ngoại lệ phù hợp. Nhưng một lần nữa, tôi cần biết số lượng thành phần cho GMM của mình để nó hoạt động tốt

Vì vậy, tôi vẫn đưa ra các giả định về mật độ là gì

Một cách tiếp cận khác là thay vì có một mô hình mật độ tham số như thế này, chúng ta có thể thực hiện một mô hình mật độ phi tham số như ước tính mật độ hạt nhân

Rõ ràng có thể làm hỗn hợp gaussian

Mật độ hạt nhân

KDE là ước tính phi tham số đơn giản nhất cho phân phối xác suất. Các dấu tích ở dưới cùng trong biểu đồ bên trái là các điểm dữ liệu. Một cách để trực quan hóa phân phối là thực hiện một biểu đồ

Đối với ước tính KDE ở bên phải, chúng tôi đặt một đốm màu Gaussian nhỏ xung quanh mỗi điểm dữ liệu. Vì vậy, ở đây, mỗi điểm dữ liệu ở đây ở dưới cùng tương ứng với một trong những Gaussian này và sau đó chúng tôi chỉ tổng hợp tất cả chúng lại và điều này mang lại cho bạn loại mật độ mịn này ở đây

Vì vậy, điều này hơi giống một GMM nơi chúng tôi có nhiều thành phần như điểm dữ liệu. Bạn cũng có thể sử dụng các hạt nhân khác

Từ kernel ở đây có nghĩa hơi khác so với trong SVM. Kernel ở đây có nghĩa là hạt nhân theo nghĩa xử lý tín hiệu. Vì vậy, một hạt nhân khác thường được sử dụng ở đây là hạt nhân mũ trên cùng, là hạt nhân theo nghĩa xử lý tín hiệu nhưng nó không phải là hạt nhân theo nghĩa máy vectơ hỗ trợ, hạt nhân Gaussian là hạt nhân theo cả hai nghĩa

Một hạt nhân có thể có nghĩa là rất nhiều thứ khác nhau. Và ở đây, về cơ bản nó có nghĩa là chức năng cửa sổ. Và do đó, bất kỳ chức năng cửa sổ nào cũng sẽ hoạt động cho việc này, bạn đặt một chút phép toán xác suất xung quanh mỗi điểm dữ liệu

Một vấn đề rõ ràng với điều này là bạn cần chọn băng thông

  • Mô hình mật độ phi tham số

  • Gaussian blob trên mỗi điểm dữ liệu

  • Không hoạt động tốt ở kích thước cao

Băng thông hạt nhân

Vì vậy, tùy thuộc vào băng thông bạn chọn, bạn có thể làm mịn dữ liệu hoặc làm mịn dữ liệu. Ở đây, màu đỏ, bạn đã chọn băng thông quá nhỏ trong khi màu xanh lá cây, bạn đã chọn hai băng thông lớn và màu đen có lẽ là băng thông khá

Một lần nữa, đây là một vấn đề không được giám sát. Vì vậy, nó rất khó để làm điều này. Bạn thực sự có thể sử dụng xác thực chéo để điều chỉnh băng thông. Vì vậy, bạn có thể xem điểm số của dữ liệu được đưa ra là bao nhiêu

Đây cũng không phải là một ước tính mạnh mẽ. Vì vậy, nếu bạn có các giá trị ngoại lệ trong dữ liệu của mình, thì các giá trị ngoại lệ trong dữ liệu của bạn có thể ảnh hưởng đến ước tính của bạn

Một vấn đề khác với điều này là KDD không hoạt động ở các chiều cao hơn. Rõ ràng là bạn không chỉ có thể thực hiện điều này ở 1 chiều mà còn có thể thực hiện điều này ở bất kỳ số chiều nào. Nhưng ở đây, bạn nhận được lời nguyền của chiều. Về cơ bản, nếu bạn có không gian nhiều chiều hơn, bạn cần ngày càng nhiều điểm dữ liệu hơn để thực sự lấp đầy không gian bằng các đốm màu Gaussian nhỏ này. Nếu bạn muốn tạo một biểu đồ, trong khoảng 10 chiều và bạn không có đủ dữ liệu, thì hầu hết các ô biểu đồ sẽ trống. Và đây, đây chỉ giống như một phiên bản mượt mà của biểu đồ nên nó có cùng một vấn đề

Vì vậy, nếu không gian của bạn có nhiều chiều, hầu hết không gian sẽ trống và điều này sẽ không hoạt động tốt

  • Cần điều chỉnh băng thông kernel

  • Mô hình không giám sát, vậy làm thế nào để chọn băng thông hạt nhân?

  • xác thực chéo có thể được sử dụng để chọn băng thông, nhưng nếu có giá trị ngoại lai trong dữ liệu đào tạo, liệu có thể xảy ra sai sót không?

nhỏ hơn [

kde = KernelDensity[bandwidth=3]
kde.fit[X_train_noise]
pred = kde.score_samples[X_train_noise]
pred = [pred > np.percentile[pred, 10]].astype[int]
```]

.center[
![:scale 70%][images/kernel_density_bw3.png]
]


If your space is low dimensional, and you can plot it, it
might work nicely. So here, I might have used the
cross-validation to find out the bandwidth of 3 is good. And
then I can look at the scores. So here, KDE is not an
outlier detection method in scikit-learn, but I can use it
as an outlier detection method by just looking at score
samples, which are the log probabilities of all the data
points under this probability model. And I say that
everything that's higher than the 10th percentile is an
inlier.

So basically, now I label 10% of the data as outliers and I
actually get the right three points that I wanted and a
couple more points. Obviously, I get more points, because I
told them I want 10% of my data to be outliers.

So this is a really is a very simple method. But it doesn’t
work well in higher dimensions and it gets very slow since
you have a lot of these kernels that you need to evaluate.
So you need to compute the distance between all pairs of
points mostly.

Một lớp SVM

  • Cũng sử dụng hạt nhân Gaussian để bao phủ dữ liệu

  • Chỉ chọn các vectơ hỗ trợ [không phải tất cả các điểm]

  • Chỉ định tỷ lệ ngoại lệ [ô nhiễm] thông qua nu

nhỏ hơn [

from sklearn.svm import OneClassSVM
scaler = StandardScaler[]
X_train_noise_scaled = scaler.fit_transform[X_train_noise]
oneclass = OneClassSVM[nu=.1].fit[X_train_noise_scaled]
pred = oneclass.predict[X_train_noise_scaled]
```]



A more sophisticated variant of this is the one class SVM.
This also uses Gaussian kernels to basically cover the data.
But it selects only support vectors, not all points as basis
points. You get a similar function, in KDE.

But the density function is supported only by some support
vectors. Again, you need to specify the bandwidth parameter
gamma. So this only makes sense with an RVF kernel. It’s
quite similar to what KDE does, but only, it selects support
vectors and does it in a more robust way.

You also have to set the number of outliers you expect as
nu. Again, nu is part of the optimization process. So
setting the outlier fraction differently will change how the
models fit.


- Need to adjust kernel bandwidth
- nu is "training mistakes"

+++
.center[
![:scale 80%][images/one_class_svm_plot.png]
]



So here, this was with a particular setting of gamma, and
you can see that it seems like a somewhat reasonable model.
If I made gamma a little bit smaller, it would probably have
found the right points. But here, it's even harder to adjust
the gamma parameter because there's no way to really do it.
So for KDE, I can do cross-validation to see how good of a
probability model this is, while the SVM doesn't have a
probability model. So I can't do cross-validation or
anything. So I just need to pick gamma in some way that
makes sense to me, which is not great.

If you can visualize data, obviously, that helps. But in
higher dimensions, you need to look at projections or other
things to see how to set gamma. So in a sense, is also sort
of a non-parametric density estimate. But it doesn't really
have a probabilistic model.

Rừng cách ly

Mô hình cuối cùng mà tôi muốn nói đến cũng là một ước tính phi tham số cũng không có mô hình xác suất và nó được gọi là rừng cô lập

Cho đến nay, nó là sở thích của tôi vì nó không có thông số để điều chỉnh

#Ý tưởng

  • Ngoại lệ dễ dàng bị cô lập khỏi phần còn lại

.center[

]

Vì vậy, ý tưởng về khu rừng cô lập là nếu bạn xây dựng một cây ngẫu nhiên trên một tập dữ liệu, thì nếu bạn muốn tìm hiểu xem việc tách một điểm cụ thể dễ dàng như thế nào, thì việc tách một điểm ngoại lệ sẽ dễ dàng hơn nhiều, đó là

Ý tưởng là bạn xây dựng nhiều cây hoàn toàn ngẫu nhiên, nó hoàn toàn không có sự giám sát, vì vậy nó cứ tiếp tục phân tách dữ liệu theo một cách nào đó và chúng tôi xem xét mức độ cần thiết để tách một điểm dữ liệu khỏi các điểm dữ liệu khác

Nếu trung bình, chúng ta phải đi sâu vào cây, thì có thể nếu một số dữ liệu của chúng ta dày đặc, thì đó không phải là ngoại lệ. Vì vậy, trung bình, nếu chúng ta tách điểm từ rất sớm, thì đó có thể là một ngoại lệ

.left-column[

]

.right-column[

]

Nếu bạn thêm ngày càng nhiều cây hoàn toàn ngẫu nhiên, bạn sẽ nhận được một số điểm tương đối ổn định cho bạn biết đó là ngoại lệ hay ngoại lệ. Bạn có thể coi đây là một kiểu cố gắng mô hình hóa mật độ dữ liệu. Nhưng không có mô hình xác suất nào ở đây

X1 có hơn 1000 cây, bạn cần một con đường rất dài để đi thật sâu vào một cái cây trước khi nó bị cô lập khỏi điểm khác. Điều đó có nghĩa là nó ở trong một khu vực rất dày đặc. Trong khi đó, X0, tính trung bình, được phân tách khá sớm so với phần còn lại của các điểm dữ liệu, vì vậy nó có thể là một ngoại lệ. Vì vậy, về cơ bản, nếu bạn ở bên ngoài dữ liệu, bất kể tính năng nào được chọn, bạn có khả năng bị tách ra, vì bạn là người ngoại lệ đối với bất kỳ tính năng nào trong số này

#Chuẩn hóa độ dài đường dẫn

Độ dài đường dẫn trung bình của tìm kiếm không thành công trong Cây tìm kiếm nhị phân

\[ c[n] = 2H[n-1] - \left[\frac{2[n-1]}{n}\right] \text{ [H = Số hài]}\]

\[ s[x,n] = 2^{-\frac{E[h[x]]}{c[n]}} \text{ [h = độ sâu của cây]}\]

  • s < 0. 5. nội quy xác định

  • s gần 1. ngoại lệ

Vì vậy, để làm cho điều này mạch lạc hơn, chúng ta cần chuẩn hóa các đường dẫn. Và do đó, tùy thuộc vào số lượng điểm dữ liệu có, bạn sẽ đi sâu hơn vào cây để tách thứ gì đó. Và do đó, bạn có thể tính toán độ dài đường dẫn trung bình của một tìm kiếm không thành công trong cây nhị phân, tương tự như việc cố gắng cô lập một điểm và bạn có thể tính toán con số này

Và điểm mà chúng tôi thực sự tính toán, điểm ngoại lệ là 2 trừ độ dài đường dẫn trung bình trên tất cả các cây chia cho độ dài đường dẫn trung bình cho một tìm kiếm không thành công trong cây nhị phân. Vì vậy, điều này chỉ phụ thuộc vào n là số điểm dữ liệu. Vì vậy, về cơ bản, chúng tôi chỉ chuẩn hóa điểm số để có ý nghĩa độc lập với kích thước tập dữ liệu

Nếu điểm này nhỏ hơn 0. 5 thì chắc chắn bạn là người trong cuộc. Nếu nó gần hơn với 1, đó là một ngoại lệ

Về cơ bản, cách bạn xác định giá trị ngoại lệ là theo ngưỡng điểm số. Vì vậy, ở đây, việc đặt số lượng ngoại lệ dự kiến ​​hoàn toàn không thay đổi thuật toán, nó chỉ thay đổi ngưỡng cho chức năng cốt lõi này. Vì vậy, ở đây, việc chọn trước số lượng ngoại lệ không quan trọng bằng

xây dựng rừng

  • Bộ dữ liệu mẫu con cho mỗi cây

  • Kích thước mẫu mặc định là 256 hoạt động tốt một cách đáng ngạc nhiên

  • Ngừng trồng cây ở độ sâu log_2[cỡ mẫu] – so 8

  • Không khởi động

  • Càng nhiều cây càng tốt – mặc định 100

  • Cần xác định tỷ lệ ô nhiễm

Nó không có tham số, nó khá đơn giản để làm điều này. Vì vậy, những gì chúng tôi đang làm thực ra là chúng tôi lấy mẫu con tập dữ liệu cho mỗi cây và chúng tôi đã chọn 256 mẫu. Giá trị mặc định của 256 mẫu luôn hoạt động, bất kể kích thước tập dữ liệu là bao nhiêu. Và chúng tôi đã ngừng trồng cây ở độ sâu log_2 [cỡ mẫu], tức là 8

Vì vậy, bạn liên tục vẽ, không thay thế, 256 mẫu từ dữ liệu của mình và trồng cây có độ sâu 8, sau đó bạn xem xét độ dài đường dẫn trung bình để cô lập một điểm

Rõ ràng, như với tất cả các khu rừng ngẫu nhiên, càng nhiều cây càng tốt nhưng mặc định trong scikit-learning là 100

Về nguyên tắc, đây là các tham số miễn phí của thuật toán, chẳng hạn như số lượng mẫu phụ cho mỗi cây và cách cắt tỉa từng cây. Nhưng mọi người không điều chỉnh các thông số này và nó chỉ hoạt động tốt

Tỷ lệ ô nhiễm chỉ chọn ngưỡng trên điểm số cuối cùng này

FIXME tất cả các văn bản

.center[

]

Đây là những gì thuật toán tạo ra và nó hoạt động tốt như tôi nghĩ

Hãy nhớ rằng, đây là tập dữ liệu đồ chơi. Nó không thực sự cho bạn biết nhiều về cách thức hoạt động trong thế giới thực

.center[

]

Ở đây, tôi đã vẽ điểm cho từng điểm dữ liệu. Bạn cũng có thể làm điều này cho các mô hình dữ liệu. Ở đây, vì nó dựa trên cây, nên nó không đẹp và mượt mà như đối với máy vectơ hỗ trợ hoặc KDE. Tôi không phải điều chỉnh bất kỳ băng thông nhân nào hay bất cứ thứ gì và điều đó thật tuyệt

Một lần nữa, nó cũng phụ thuộc vào những giả định của bạn về ngoại lệ. Điều này sẽ không làm việc rất tốt cho bài tập về nhà. Và bạn có thể nghĩ về lý do tại sao điều này không hoạt động tốt từ bài tập về nhà của bạn

Các mô hình dựa trên mật độ khác

  • PCA

  • GMM

  • PCA mạnh mẽ [không có trong sklearn. -[]

  • Bất kỳ mô hình xác suất nào khác - “mạnh mẽ” thì tốt hơn

Bạn có thể sử dụng các mô hình dựa trên mật độ khác. Bạn chỉ có thể sử dụng PCA, theo một nghĩa nào đó, nó cũng giống như mô hình Gaussian chiều cao hơn, trong đó bạn bỏ một số hướng

Bạn có thể sử dụng GMM

Thật không may, có một biến thể mạnh mẽ của PCA, không có trên scikit-learning

Bạn có thể sử dụng bất kỳ mô hình xác suất nào mà bạn muốn. Nhưng bạn cần suy nghĩ xem mô hình có phù hợp với dữ liệu mà bạn đang cố gắng lập mô hình hay không. Và nếu bạn cho rằng đã có rất nhiều ngoại lệ trong tập dữ liệu đào tạo của mình, thì bạn có thể cần phải suy nghĩ về cách làm cho mô hình trở nên mạnh mẽ

Vì vậy, PCA không mạnh mẽ, trong khi PCA mạnh mẽ là mạnh mẽ. Và vì vậy, nếu bạn có các giá trị ngoại lệ rất lớn trong tập dữ liệu của mình, nó sẽ làm sai lệch kết quả PCA của bạn và do đó, điều đó có thể không hoạt động tốt

mạnh mẽ chỉ cần thiết để phát hiện ngoại lệ, không phát hiện tính mới

.center[

]

.center[

]

.center[

]

Dưới đây là so sánh của ba trong số bốn mô hình mà chúng ta đã nói về. Vì vậy, ở đây, chúng tôi đang xem xét khu rừng cô lập, SVM một lớp và hiệp phương sai mạnh mẽ

Về cơ bản, hiệp phương sai của rô bốt hoạt động hoàn hảo đối với Gaussian đẳng hướng, bởi vì đó là những gì nó phù hợp. Nếu bạn có nhiều Gaussian thì nó sẽ bị hỏng. Vì vậy, nếu chúng đủ gần nhau, có thể sẽ hợp lý khi mô hình chúng thành Gaussian chung. Nhưng nếu bạn đặt chúng cách xa nhau hơn, về cơ bản, nó sẽ thay đổi hình dạng hiệp phương sai và do đó, nó sẽ có một mô hình dữ liệu xấu

Vì vậy, khu rừng cách ly hoạt động khá tốt trong mọi trường hợp. Ý tôi là, đây là tập dữ liệu 2D và vì vậy nó có thể tìm thấy các vùng dày đặc mà không gặp vấn đề gì. Trong khi SVM một lớp, cho kết quả hơi lạ, có thể là do nó đã chọn một số vectơ hỗ trợ để che dữ liệu

Lý tưởng nhất là SVM một lớp được cho là mạnh đối với sự nhiễm bẩn trong tập huấn luyện, nhưng như chúng ta có thể thấy, nó không mạnh đối với sự nhiễm bẩn. Một mệnh đề SVM có thể hoạt động tốt hơn khi bạn có một tập dữ liệu huấn luyện rõ ràng

Rõ ràng là không có định nghĩa về ngoại lệ thực sự. Nhưng ở đây, chúng tôi đã rút ra rất dày đặc từ một hoặc hai mô hình Gaussian, các phần tử bên trong có màu trắng và sau đó chúng tôi có đồng nhất ngẫu nhiên trên toàn bộ hình vuông này một số phần tử ngoại lai

Về cơ bản, ý tưởng là có 3 phân phối khác nhau mà dữ liệu được lấy từ đó. Giống như một số điểm Gaussian và một số điểm chỉ đồng nhất. Và bạn muốn cô lập các điểm rất dày đặc từ các điểm không dày đặc đồng nhất

Tóm lược

  • Khu rừng cách ly hoạt động tuyệt vời

  • Các mô hình mật độ là tuyệt vời nếu chúng đúng

  • Ước tính băng thông có thể phức tạp trong cài đặt không giám sát

  • Xác nhận kết quả thường yêu cầu kiểm tra thủ công

Như với tất cả các phương pháp không được giám sát, để phát hiện ngoại lệ, xác thực mô hình và điều chỉnh các tham số thực sự khó khăn. Vì vậy, mô hình của bạn càng phụ thuộc vào các tham số, chẳng hạn như SVM một lớp phụ thuộc rất nhiều vào các tham số, thì rất khó để làm điều đó

Đối với phân cụm, xác thực thường có nghĩa là xem xét dữ liệu, xem xét các điểm dữ liệu đơn lẻ, tại sao chúng lại ngoại lệ và cố gắng giải thích kết quả. Bởi vì nếu bạn có hai nhãn, tại sao bạn không học một bộ phân loại

Một cách tiếp cận khả thi mà tôi chưa nói đến là nếu bạn có một tập dữ liệu lớn không được gắn nhãn, bạn có thể chạy thuật toán phát hiện ngoại lệ, bạn có thể tìm thấy 10% những thứ ngoại lệ nhất theo thuật toán của mình, bạn có thể xác nhận thủ công xem chúng có phải là . Nó phụ thuộc một chút vào việc liệu các ngoại lệ đều là ngoại lệ theo cách tương tự hay ngoại lệ theo các cách khác nhau. Vì vậy, nếu tất cả các ngoại lệ của bạn là ngoại lệ theo một cách khác, thì việc chạy bộ phân loại sẽ thực sự không hoạt động. Vì vậy, trong cài đặt đó, bạn thực sự có thể tốt hơn với phương pháp phát hiện ngoại lệ

Ngay cả khi bạn có nhãn, nếu tất cả các ngoại lệ của bạn đều là ngoại lệ theo một cách rất khác, thì tốt hơn hết là bạn chỉ nên xây dựng mô hình từ dữ liệu không phải ngoại lệ và sau đó gọi mọi thứ khác là ngoại lệ thay vì cố gắng tìm hiểu một bộ phân loại. Nếu không có vùng ngoại lai dày đặc, thì bạn không thể học một trình phân loại cho điều đó

Làm cách nào để phát hiện các ngoại lệ trong Python?

Tìm giá trị ngoại lệ bằng phương pháp thống kê . 5 IQR trở lên Q3 + 1. 5 IQR Using the IQR, the outlier data points are the ones falling below Q1–1.5 IQR or above Q3 + 1.5 IQR . Q1 là phân vị thứ 25 và Q3 là phân vị thứ 75 của tập dữ liệu và IQR biểu thị phạm vi liên phần tư được tính bằng Q3 trừ Q1 [Q3–Q1].

Gói Python nào phát hiện các ngoại lệ?

PyOD hoặc Python Outlier Detection là bộ công cụ gói python để phát hiện dữ liệu ngoại lệ. Gói PyOD tự hào có 30 thuật toán phát hiện ngoại lệ, từ cổ điển đến mới nhất—gói PyOD bằng chứng được duy trì tốt. Ví dụ về mô hình phát hiện ngoại lệ bao gồm. Phát hiện ngoại lệ dựa trên góc.

1 là gì. 5 quy tắc IQR?

Chúng ta có thể sử dụng phương pháp xác định giá trị ngoại lệ IQR để thiết lập “hàng rào” bên ngoài Q1 và Q3. Bất kỳ giá trị nào nằm ngoài hàng rào này đều được coi là giá trị ngoại lệ. Để xây dựng hàng rào này, chúng tôi mất 1. 5 lần IQR rồi trừ giá trị này khỏi Q1 rồi cộng giá trị này vào Q3 .

Thuật toán nào được sử dụng để phát hiện ngoại lệ?

The Phân cụm không gian dựa trên mật độ của các ứng dụng có nhiễu [DBSCAN] là một trong những thuật toán phân cụm có thể được áp dụng để phát hiện các giá trị ngoại lai.

Chủ Đề