Scikit Learn - Phát hiện bất thường
Ở đây, chúng ta sẽ tìm hiểu về phát hiện bất thường trong Sklearn là gì và cách nó được sử dụng để xác định các điểm dữ liệu.
Phát hiện bất thường là một kỹ thuật được sử dụng để xác định các điểm dữ liệu trong tập dữ liệu không khớp với phần còn lại của dữ liệu. Nó có nhiều ứng dụng trong kinh doanh như phát hiện gian lận, phát hiện xâm nhập, theo dõi tình trạng hệ thống, giám sát và bảo trì dự đoán. Các dị thường, còn được gọi là ngoại lệ, có thể được chia thành ba loại sau:
Point anomalies - Nó xảy ra khi một cá thể dữ liệu riêng lẻ được coi là bất thường trong phần còn lại của dữ liệu.
Contextual anomalies- Loại dị thường như vậy là theo ngữ cảnh cụ thể. Nó xảy ra nếu một cá thể dữ liệu bất thường trong một ngữ cảnh cụ thể.
Collective anomalies - Nó xảy ra khi một tập hợp các cá thể dữ liệu liên quan là toàn bộ tập dữ liệu wrt bất thường thay vì các giá trị riêng lẻ.
Phương pháp
Hai phương pháp cụ thể là outlier detection và novelty detectioncó thể được sử dụng để phát hiện bất thường. Cần phải xem sự phân biệt giữa chúng.
Phát hiện ngoại vi
Dữ liệu đào tạo chứa các ngoại lệ khác xa với phần còn lại của dữ liệu. Những ngoại lệ như vậy được định nghĩa là quan sát. Đó là lý do, các nhà ước tính phát hiện ngoại lệ luôn cố gắng điều chỉnh khu vực có dữ liệu đào tạo tập trung nhất trong khi bỏ qua các quan sát sai lệch. Nó còn được gọi là phát hiện bất thường không giám sát.
Phát hiện mới lạ
Nó liên quan đến việc phát hiện một mẫu chưa được quan sát trong các quan sát mới không được đưa vào dữ liệu đào tạo. Ở đây, dữ liệu đào tạo không bị ô nhiễm bởi các yếu tố bên ngoài. Nó còn được gọi là phát hiện bất thường bán giám sát.
Có một bộ công cụ ML, được cung cấp bởi scikit-learning, có thể được sử dụng để phát hiện ngoại lệ cũng như phát hiện tính mới. Các công cụ này đầu tiên triển khai việc học đối tượng từ dữ liệu trong một phương thức không được giám sát bằng cách sử dụng phương thức fit () như sau:
estimator.fit(X_train)
Bây giờ, các quan sát mới sẽ được sắp xếp như inliers (labeled 1) hoặc là outliers (labeled -1) bằng cách sử dụng phương thức dự đoán () như sau:
estimator.fit(X_test)
Công cụ ước tính trước tiên sẽ tính toán chức năng tính điểm thô và sau đó phương pháp dự đoán sẽ sử dụng ngưỡng trên chức năng tính điểm thô đó. Chúng tôi có thể truy cập chức năng tính điểm thô này với sự trợ giúp củascore_sample và có thể kiểm soát ngưỡng bằng cách contamination tham số.
Chúng tôi cũng có thể xác định decision_function phương pháp xác định giá trị ngoại lai là giá trị âm và giá trị ngoại lai là giá trị không âm.
estimator.decision_function(X_test)
Thuật toán Sklearn để phát hiện ngoại lệ
Chúng ta hãy bắt đầu bằng cách hiểu một bao thư elip là gì.
Lắp một phong bì hình elip
Thuật toán này giả định rằng dữ liệu thông thường đến từ một phân phối đã biết, chẳng hạn như phân phối Gauss. Để phát hiện ngoại lệ, Scikit-learning cung cấp một đối tượng có têncovariance.EllipticEnvelop.
Đối tượng này phù hợp với một ước tính hiệp phương sai mạnh mẽ cho dữ liệu và do đó, phù hợp với một hình elip với các điểm dữ liệu trung tâm. Nó bỏ qua những điểm bên ngoài chế độ trung tâm.
Thông số
Bảng sau bao gồm các tham số được sử dụng bởi sklearn. covariance.EllipticEnvelop phương pháp -
Sr.No | Mô tả về Thông Số |
---|---|
1 | store_precision - Boolean, tùy chọn, mặc định = True Chúng tôi có thể chỉ định nó nếu độ chính xác ước tính được lưu trữ. |
2 | assume_centered - Boolean, tùy chọn, mặc định = Sai Nếu chúng ta đặt nó là False, nó sẽ tính toán vị trí mạnh mẽ và hiệp phương sai trực tiếp với sự trợ giúp của thuật toán FastMCD. Mặt khác, nếu được đặt True, nó sẽ tính toán hỗ trợ của vị trí mạnh mẽ và đồng loại. |
3 | support_fraction - float in (0., 1.), tùy chọn, mặc định = Không có Tham số này cho phương pháp biết tỷ lệ điểm được bao gồm trong hỗ trợ của các ước tính MCD thô. |
4 | contamination - float in (0., 1.), tùy chọn, mặc định = 0.1 Nó cung cấp tỷ lệ của các giá trị ngoại lai trong tập dữ liệu. |
5 | random_state - int, RandomState instance hoặc None, tùy chọn, default = none Tham số này đại diện cho hạt giống của số ngẫu nhiên giả được tạo ra được sử dụng trong khi xáo trộn dữ liệu. Tiếp theo là các tùy chọn -
|
Thuộc tính
Bảng sau bao gồm các thuộc tính được sử dụng bởi sklearn. covariance.EllipticEnvelop phương pháp -
Sr.No | Thuộc tính & Mô tả |
---|---|
1 | support_ - dạng mảng, hình dạng (n_samples,) Nó đại diện cho mặt nạ của các quan sát được sử dụng để tính toán các ước tính mạnh mẽ về vị trí và hình dạng. |
2 | location_ - dạng mảng, hình dạng (n_features) Nó trả về vị trí mạnh mẽ ước tính. |
3 | covariance_ - dạng mảng, hình dạng (n_features, n_features) Nó trả về ma trận hiệp phương sai mạnh mẽ được ước tính. |
4 | precision_ - dạng mảng, hình dạng (n_features, n_features) Nó trả về ma trận nghịch đảo giả ước tính. |
5 | offset_ - phao Nó được sử dụng để xác định chức năng quyết định từ các điểm số thô. decision_function = score_samples -offset_ |
Implementation Example
import numpy as np^M
from sklearn.covariance import EllipticEnvelope^M
true_cov = np.array([[.5, .6],[.6, .4]])
X = np.random.RandomState(0).multivariate_normal(mean = [0, 0], cov=true_cov,size=500)
cov = EllipticEnvelope(random_state = 0).fit(X)^M
# Now we can use predict method. It will return 1 for an inlier and -1 for an outlier.
cov.predict([[0, 0],[2, 2]])
Output
array([ 1, -1])
Rừng cách ly
Trong trường hợp tập dữ liệu nhiều chiều, một cách hiệu quả để phát hiện ngoại lệ là sử dụng các khu rừng ngẫu nhiên. Scikit-learning cung cấpensemble.IsolationForestphương pháp cô lập các quan sát bằng cách chọn ngẫu nhiên một đối tượng địa lý. Sau đó, nó chọn ngẫu nhiên một giá trị giữa các giá trị lớn nhất và nhỏ nhất của các tính năng đã chọn.
Ở đây, số lần phân tách cần thiết để cô lập một mẫu tương đương với độ dài đường dẫn từ nút gốc đến nút kết thúc.
Thông số
Bảng theo dõi bao gồm các thông số được sử dụng bởi sklearn. ensemble.IsolationForest phương pháp -
Sr.No | Mô tả về Thông Số |
---|---|
1 | n_estimators - int, tùy chọn, mặc định = 100 Nó đại diện cho số lượng công cụ ước tính cơ sở trong tập hợp. |
2 | max_samples - int hoặc float, tùy chọn, default = “auto” Nó đại diện cho số lượng mẫu được rút ra từ X để đào tạo mỗi công cụ ước lượng cơ sở. Nếu chúng ta chọn int làm giá trị của nó, nó sẽ vẽ các mẫu max_samples. Nếu chúng ta chọn float làm giá trị của nó, nó sẽ vẽ các mẫu max_samples ∗ .shape [0]. Và, nếu chúng ta chọn auto làm giá trị của nó, nó sẽ vẽ max_samples = min (256, n_samples). |
3 | support_fraction - float in (0., 1.), tùy chọn, mặc định = Không có Tham số này cho phương pháp biết tỷ lệ điểm được bao gồm trong hỗ trợ của các ước tính MCD thô. |
4 | contamination - auto hoặc float, tùy chọn, default = auto Nó cung cấp tỷ lệ của các giá trị ngoại lai trong tập dữ liệu. Nếu chúng ta đặt nó mặc định tức là tự động, nó sẽ xác định ngưỡng như trong bài báo gốc. Nếu được thiết lập để thả nổi, phạm vi ô nhiễm sẽ nằm trong khoảng [0,0,5]. |
5 | random_state - int, RandomState instance hoặc None, tùy chọn, default = none Tham số này đại diện cho hạt giống của số ngẫu nhiên giả được tạo ra được sử dụng trong khi xáo trộn dữ liệu. Tiếp theo là các tùy chọn -
|
6 | max_features - int hoặc float, tùy chọn (mặc định = 1.0) Nó đại diện cho số lượng các tính năng được rút ra từ X để đào tạo mỗi công cụ ước tính cơ sở. Nếu chúng ta chọn int làm giá trị của nó, nó sẽ vẽ các đặc điểm max_features. Nếu chúng ta chọn float làm giá trị của nó, nó sẽ vẽ các mẫu max_features * X.shape []. |
7 | bootstrap - Boolean, tùy chọn (mặc định = Sai) Tùy chọn mặc định của nó là Sai có nghĩa là việc lấy mẫu sẽ được thực hiện mà không cần thay thế. Và mặt khác, nếu được đặt thành True, có nghĩa là các cây riêng lẻ phù hợp với một tập hợp con ngẫu nhiên của dữ liệu huấn luyện được lấy mẫu thay thế. |
số 8 | n_jobs - int hoặc None, tùy chọn (mặc định = None) Nó đại diện cho số lượng công việc được chạy song song fit() và predict() cả hai phương pháp. |
9 | verbose - int, tùy chọn (mặc định = 0) Tham số này kiểm soát tính chi tiết của quá trình xây dựng cây. |
10 | warm_start - Bool, tùy chọn (mặc định = Sai) Nếu warm_start = true, chúng ta có thể sử dụng lại giải pháp cuộc gọi trước đó để phù hợp và có thể thêm nhiều công cụ ước tính hơn vào nhóm. Nhưng nếu được đặt thành false, chúng ta cần phải điều chỉnh một khu rừng hoàn toàn mới. |
Thuộc tính
Bảng sau bao gồm các thuộc tính được sử dụng bởi sklearn. ensemble.IsolationForest phương pháp -
Sr.No | Thuộc tính & Mô tả |
---|---|
1 | estimators_ - danh sách của Người phân loại Quyết định Cung cấp bộ sưu tập của tất cả các công cụ ước tính phụ được trang bị. |
2 | max_samples_ - số nguyên Nó cung cấp số lượng mẫu thực tế được sử dụng. |
3 | offset_ - phao Nó được sử dụng để xác định chức năng quyết định từ các điểm số thô. decision_function = score_samples -offset_ |
Implementation Example
Tập lệnh Python bên dưới sẽ sử dụng sklearn. ensemble.IsolationForest phương pháp để phù hợp với 10 cây trên dữ liệu đã cho
from sklearn.ensemble import IsolationForest
import numpy as np
X = np.array([[-1, -2], [-3, -3], [-3, -4], [0, 0], [-50, 60]])
OUTDClf = IsolationForest(n_estimators = 10)
OUTDclf.fit(X)
Output
IsolationForest(
behaviour = 'old', bootstrap = False, contamination='legacy',
max_features = 1.0, max_samples = 'auto', n_estimators = 10, n_jobs=None,
random_state = None, verbose = 0
)
Yếu tố ngoại lai địa phương
Thuật toán Hệ số ngoại lệ cục bộ (LOF) là một thuật toán hiệu quả khác để thực hiện phát hiện ngoại lệ trên dữ liệu thứ nguyên cao. Scikit-learning cung cấpneighbors.LocalOutlierFactorphương pháp tính điểm, được gọi là hệ số ngoại lệ cục bộ, phản ánh mức độ bất thường của các quan sát. Logic chính của thuật toán này là phát hiện các mẫu có mật độ thấp hơn đáng kể so với các mẫu lân cận của nó. Đó là lý do tại sao nó đo lường độ lệch mật độ cục bộ của các điểm dữ liệu đã cho với hàng xóm của chúng.
Thông số
Bảng theo dõi bao gồm các thông số được sử dụng bởi sklearn. neighbors.LocalOutlierFactor phương pháp
Sr.No | Mô tả về Thông Số |
---|---|
1 | n_neighbors - int, tùy chọn, mặc định = 20 Nó đại diện cho số lượng hàng xóm được sử dụng theo mặc định cho truy vấn đầu gối. Tất cả các mẫu sẽ được sử dụng nếu. |
2 | algorithm - tùy chọn Thuật toán nào được sử dụng để tính toán các nước láng giềng gần nhất.
|
3 | leaf_size - int, tùy chọn, mặc định = 30 Giá trị của tham số này có thể ảnh hưởng đến tốc độ xây dựng và truy vấn. Nó cũng ảnh hưởng đến bộ nhớ cần thiết để lưu trữ cây. Tham số này được chuyển cho các thuật toán BallTree hoặc KdTree. |
4 | contamination - auto hoặc float, tùy chọn, default = auto Nó cung cấp tỷ lệ của các giá trị ngoại lai trong tập dữ liệu. Nếu chúng ta đặt nó mặc định tức là tự động, nó sẽ xác định ngưỡng như trong bài báo gốc. Nếu được thiết lập để thả nổi, phạm vi ô nhiễm sẽ nằm trong khoảng [0,0,5]. |
5 | metric - chuỗi hoặc có thể gọi, mặc định Nó đại diện cho số liệu được sử dụng để tính toán khoảng cách. |
6 | P - int, tùy chọn (mặc định = 2) Đây là tham số cho chỉ số Minkowski. P = 1 tương đương với việc sử dụng manhattan_distance tức là L1, trong khi P = 2 tương đương với sử dụng euclidean_distance tức là L2. |
7 | novelty - Boolean, (mặc định = Sai) Theo mặc định, thuật toán LOF được sử dụng để phát hiện ngoại lệ nhưng nó có thể được sử dụng để phát hiện tính mới nếu chúng ta đặt tính mới = true. |
số 8 | n_jobs - int hoặc None, tùy chọn (mặc định = None) Nó đại diện cho số lượng công việc được chạy song song cho cả hai phương thức fit () và dự đoán (). |
Thuộc tính
Bảng sau bao gồm các thuộc tính được sử dụng bởi sklearn.neighbors.LocalOutlierFactor phương pháp -
Sr.No | Thuộc tính & Mô tả |
---|---|
1 | negative_outlier_factor_ - mảng numpy, hình dạng (n_samples,) Cung cấp LOF đối lập của các mẫu đào tạo. |
2 | n_neighbors_ - số nguyên Nó cung cấp số lượng hàng xóm thực tế được sử dụng cho các truy vấn hàng xóm. |
3 | offset_ - phao Nó được sử dụng để xác định các nhãn nhị phân từ các điểm số thô. |
Implementation Example
Tập lệnh Python được cung cấp bên dưới sẽ sử dụng sklearn.neighbors.LocalOutlierFactor phương thức để xây dựng lớp NeighborsClassifier từ bất kỳ mảng nào tương ứng với tập dữ liệu của chúng tôi
from sklearn.neighbors import NearestNeighbors
samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
LOFneigh = NearestNeighbors(n_neighbors = 1, algorithm = "ball_tree",p=1)
LOFneigh.fit(samples)
Output
NearestNeighbors(
algorithm = 'ball_tree', leaf_size = 30, metric='minkowski',
metric_params = None, n_jobs = None, n_neighbors = 1, p = 1, radius = 1.0
)
Example
Bây giờ, chúng ta có thể hỏi từ bộ phân loại đã xây dựng này là điểm tủ đến [0,5, 1, 1,5] bằng cách sử dụng tập lệnh python sau:
print(neigh.kneighbors([[.5, 1., 1.5]])
Output
(array([[1.7]]), array([[1]], dtype = int64))
SVM một lớp
SVM Một Lớp, được giới thiệu bởi Schölkopf và cộng sự, là Phát hiện Ngoại nhân không được giám sát. Nó cũng rất hiệu quả trong dữ liệu chiều cao và ước tính sự hỗ trợ của phân phối chiều cao. Nó được thực hiện trongSupport Vector Machines mô-đun trong Sklearn.svm.OneClassSVMvật. Để xác định biên giới, nó yêu cầu một nhân (chủ yếu được sử dụng là RBF) và một tham số vô hướng.
Để hiểu rõ hơn, hãy điều chỉnh dữ liệu của chúng tôi với svm.OneClassSVM đối tượng -
Thí dụ
from sklearn.svm import OneClassSVM
X = [[0], [0.89], [0.90], [0.91], [1]]
OSVMclf = OneClassSVM(gamma = 'scale').fit(X)
Bây giờ, chúng ta có thể lấy các ví dụ về điểm số cho dữ liệu đầu vào như sau:
OSVMclf.score_samples(X)
Đầu ra
array([1.12218594, 1.58645126, 1.58673086, 1.58645127, 1.55713767])