Scikit Learn - Anormallik Algılama
Burada Sklearn'da anormallik tespitinin ne olduğunu ve veri noktalarının belirlenmesinde nasıl kullanıldığını öğreneceğiz.
Anormallik algılama, veri kümesindeki verilerin geri kalanıyla iyi uyuşmayan veri noktalarını tanımlamak için kullanılan bir tekniktir. Dolandırıcılık tespiti, saldırı tespiti, sistem sağlığını izleme, gözetim ve tahmini bakım gibi iş dünyasında birçok uygulamaya sahiptir. Aykırı olarak da adlandırılan anormallikler aşağıdaki üç kategoriye ayrılabilir:
Point anomalies - Tek bir veri örneğinin, verilerin geri kalanı için anormal olduğu düşünüldüğünde ortaya çıkar.
Contextual anomalies- Bu tür bir anormallik bağlama özeldir. Bir veri örneğinin belirli bir bağlamda anormal olması durumunda oluşur.
Collective anomalies - İlgili veri örneklerinden oluşan bir koleksiyon, tek tek değerler yerine tüm veri kümesinde anormal olduğunda ortaya çıkar.
Yöntemler
Yani iki yöntem outlier detection ve novelty detectionanormallik tespiti için kullanılabilir. Aralarındaki farkı görmek gerekiyor.
Aykırı değer tespiti
Eğitim verileri, verilerin geri kalanından uzak olan aykırı değerleri içerir. Bu tür aykırı değerler gözlemler olarak tanımlanır. Bu nedenle, aykırı değer tespit tahmin edicileri, sapkın gözlemleri göz ardı ederek her zaman en yoğun eğitim verilerine sahip bölgeye uymaya çalışır. Ayrıca denetimsiz anormallik algılama olarak da bilinir.
Yenilik algılama
Eğitim verilerine dahil edilmeyen yeni gözlemlerde gözlemlenmemiş bir örüntü tespit etmekle ilgilenir. Burada eğitim verileri aykırı değerler tarafından kirletilmez. Ayrıca yarı denetimli anormallik tespiti olarak da bilinir.
Scikit-learn tarafından sağlanan ve hem aykırı değer tespiti hem de yenilik tespiti için kullanılabilen bir dizi makine öğrenimi aracı vardır. Bu araçlar ilk olarak, aşağıdaki gibi fit () yöntemini kullanarak denetimsiz bir ortamda verilerden nesne öğrenmeyi uygular -
estimator.fit(X_train)
Şimdi, yeni gözlemler şu şekilde sıralanacaktır: inliers (labeled 1) veya outliers (labeled -1) predikt () yöntemini aşağıdaki gibi kullanarak -
estimator.fit(X_test)
Tahminci, ilk olarak ham puanlama fonksiyonunu hesaplayacak ve daha sonra yöntem, bu ham puanlama fonksiyonu üzerindeki eşiği kullanacağını tahmin edecektir. Bu ham puanlama fonksiyonuna şu yardımıyla erişebiliriz:score_sample yöntem ve eşiği kontrol edebilir contamination parametre.
Ayrıca tanımlayabiliriz decision_function aykırı değerleri negatif değer ve iç değerleri negatif olmayan değer olarak tanımlayan yöntem.
estimator.decision_function(X_test)
Aykırı Değer Tespiti için Sklearn algoritmaları
Eliptik bir zarfın ne olduğunu anlayarak başlayalım.
Eliptik bir zarfın takılması
Bu algoritma, normal verilerin Gauss dağılımı gibi bilinen bir dağıtımdan geldiğini varsayar. Aykırı değer tespiti için Scikit-learn,covariance.EllipticEnvelop.
Bu nesne, verilere sağlam bir kovaryans tahminine uyar ve böylece, merkezi veri noktalarına bir elips sığdırır. Merkezi modun dışındaki noktaları göz ardı eder.
Parametreler
Aşağıdaki tablo, sklearn. covariance.EllipticEnvelop yöntem -
Sr.No | Parametre ve Açıklama |
---|---|
1 | store_precision - Boolean, isteğe bağlı, varsayılan = Doğru Tahmini hassasiyetin saklanıp saklanmadığını belirtebiliriz. |
2 | assume_centered - Boolean, isteğe bağlı, varsayılan = False False olarak ayarlarsak, sağlam konumu ve kovaryansı doğrudan FastMCD algoritması yardımıyla hesaplayacaktır. Öte yandan, True ayarlanırsa, sağlam konum ve kovaryanın desteğini hesaplayacaktır. |
3 | support_fraction - float (0., 1.), isteğe bağlı, varsayılan = Yok Bu parametre yönteme, ham MCD tahminlerinin desteğine ne kadar puan dahil edileceğini söyler. |
4 | contamination - float in (0., 1.), isteğe bağlı, varsayılan = 0.1 Veri setindeki aykırı değerlerin oranını sağlar. |
5 | random_state - int, RandomState örneği veya Yok, isteğe bağlı, varsayılan = yok Bu parametre, verileri karıştırırken kullanılan sözde rasgele sayının tohumunu temsil eder. Seçenekler şunlardır -
|
Öznitellikler
Aşağıdaki tablo, tarafından kullanılan öznitelikleri içermektedir. sklearn. covariance.EllipticEnvelop yöntem -
Sr.No | Öznitelikler ve Açıklama |
---|---|
1 | support_ - dizi benzeri, şekil (n_samples,) Güçlü konum ve şekil tahminlerini hesaplamak için kullanılan gözlemlerin maskesini temsil eder. |
2 | location_ - dizi benzeri, şekil (n_features) Tahmini sağlam konumu döndürür. |
3 | covariance_ - dizi benzeri, şekil (n_features, n_features) Tahmini sağlam kovaryans matrisini döndürür. |
4 | precision_ - dizi benzeri, şekil (n_features, n_features) Tahmini sözde ters matrisi döndürür. |
5 | offset_ - şamandıra Ham puanlardan karar fonksiyonunu tanımlamak için kullanılır. 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])
İzolasyon Ormanı
Yüksek boyutlu veri kümesi olması durumunda, aykırı değer tespiti için etkili bir yol, rastgele ormanlar kullanmaktır. Scikit-learn,ensemble.IsolationForestbir özelliği rastgele seçerek gözlemleri izole eden yöntem. Daha sonra, seçilen özelliklerin maksimum ve minimum değerleri arasında rastgele bir değer seçer.
Burada, bir örneği izole etmek için gereken bölme sayısı, kök düğümden sonlandırma düğümüne giden yol uzunluğuna eşittir.
Parametreler
Aşağıdaki tablo, tarafından kullanılan parametreleri içerir. sklearn. ensemble.IsolationForest yöntem -
Sr.No | Parametre ve Açıklama |
---|---|
1 | n_estimators - int, isteğe bağlı, varsayılan = 100 Topluluktaki temel tahmincilerin sayısını temsil eder. |
2 | max_samples - int veya float, isteğe bağlı, varsayılan = "otomatik" Her bir temel tahmin ediciyi eğitmek için X'ten çekilecek örnek sayısını temsil eder. Değer olarak int'i seçersek, max_samples örnek çizecektir. Değer olarak float seçersek, max_samples ∗ .shape [0] örnek çizecektir. Ve değeri olarak auto seçersek, max_samples = min (256, n_samples) çizecektir. |
3 | support_fraction - float (0., 1.), isteğe bağlı, varsayılan = Yok Bu parametre yönteme, ham MCD tahminlerinin desteğine ne kadar puan dahil edileceğini söyler. |
4 | contamination - otomatik veya kayan, isteğe bağlı, varsayılan = otomatik Veri setindeki aykırı değerlerin oranını sağlar. Varsayılan yani otomatik olarak ayarlarsak, eşiği orijinal kağıttaki gibi belirleyecektir. Yüzer olarak ayarlanırsa, kontaminasyon aralığı [0,0.5] aralığında olacaktır. |
5 | random_state - int, RandomState örneği veya Yok, isteğe bağlı, varsayılan = yok Bu parametre, verileri karıştırırken kullanılan sözde rasgele sayının tohumunu temsil eder. Seçenekler şunlardır -
|
6 | max_features - int veya float, isteğe bağlı (varsayılan = 1.0) Her bir temel tahmin ediciyi eğitmek için X'ten çizilecek özelliklerin sayısını temsil eder. Değer olarak int'i seçersek, max_features özelliğini çizecektir. Değeri olarak float seçersek, max_features * X.shape [] örnekleri çizecektir. |
7 | bootstrap - Boolean, isteğe bağlı (varsayılan = False) Varsayılan seçeneği False'dir, bu da örneklemenin değiştirilmeden gerçekleştirileceği anlamına gelir. Öte yandan, True olarak ayarlanırsa, tek tek ağaçların değiştirme ile örneklenen eğitim verilerinin rastgele bir alt kümesine sığması anlamına gelir. |
8 | n_jobs - int veya Yok, isteğe bağlı (varsayılan = Yok) Paralel olarak çalıştırılacak işlerin sayısını temsil eder. fit() ve predict() hem yöntemler. |
9 | verbose - int, isteğe bağlı (varsayılan = 0) Bu parametre, ağaç oluşturma sürecinin ayrıntı düzeyini kontrol eder. |
10 | warm_start - Bool, isteğe bağlı (varsayılan = Yanlış) Warm_start = true ise, önceki çağrı çözümünü uyacak şekilde yeniden kullanabilir ve topluluğa daha fazla tahminci ekleyebiliriz. Ancak yanlış olarak ayarlanırsa, yepyeni bir ormana sığmamız gerekir. |
Öznitellikler
Aşağıdaki tablo, tarafından kullanılan öznitelikleri içermektedir. sklearn. ensemble.IsolationForest yöntem -
Sr.No | Öznitelikler ve Açıklama |
---|---|
1 | estimators_ - DecisionTreeClassifier listesi Takılan tüm alt tahmin edicilerin toplanmasının sağlanması. |
2 | max_samples_ - tamsayı Kullanılan gerçek örnek sayısını sağlar. |
3 | offset_ - şamandıra Ham puanlardan karar fonksiyonunu tanımlamak için kullanılır. decision_function = score_samples -offset_ |
Implementation Example
Aşağıdaki Python betiği kullanacak sklearn. ensemble.IsolationForest Verilen verilere 10 ağaç sığdırmak için yöntem
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
)
Yerel Aykırı Değer Faktörü
Yerel Aykırı Değer Faktörü (LOF) algoritması, yüksek boyutlu veriler üzerinde aykırı değer tespiti yapmak için başka bir etkili algoritmadır. Scikit-learn,neighbors.LocalOutlierFactorgözlemlerin anormallik derecesini yansıtan yerel aykırı değer faktörü olarak adlandırılan bir puanı hesaplayan yöntem. Bu algoritmanın ana mantığı, komşularından önemli ölçüde daha düşük yoğunluğa sahip örnekleri tespit etmektir. Komşularına göre verilen veri noktalarının yerel yoğunluk sapmasını ölçmesinin nedeni budur.
Parametreler
Aşağıdaki tablo, tarafından kullanılan parametreleri içerir. sklearn. neighbors.LocalOutlierFactor yöntem
Sr.No | Parametre ve Açıklama |
---|---|
1 | n_neighbors - int, isteğe bağlı, varsayılan = 20 Kneighbors sorgusu için varsayılan olarak kullanılan komşu sayısını temsil eder. Tüm örnekler kullanılırsa. |
2 | algorithm - isteğe bağlı En yakın komşuları hesaplamak için hangi algoritmanın kullanılacağı.
|
3 | leaf_size - int, isteğe bağlı, varsayılan = 30 Bu parametrenin değeri, yapım ve sorgulamanın hızını etkileyebilir. Ayrıca ağacı depolamak için gereken belleği de etkiler. Bu parametre BallTree veya KdTree algoritmalarına aktarılır. |
4 | contamination - otomatik veya kayan, isteğe bağlı, varsayılan = otomatik Veri setindeki aykırı değerlerin oranını sağlar. Varsayılan yani otomatik olarak ayarlarsak, eşiği orijinal kağıttaki gibi belirleyecektir. Yüzer olarak ayarlanırsa, kontaminasyon aralığı [0,0.5] aralığında olacaktır. |
5 | metric - dize veya çağrılabilir, varsayılan Mesafe hesaplaması için kullanılan ölçüyü temsil eder. |
6 | P - int, isteğe bağlı (varsayılan = 2) Minkowski metriğinin parametresidir. P = 1, manhattan_distance, yani L1 kullanmaya eşdeğerdir, oysa P = 2, öklid uzaklığı yani L2 kullanımına eşdeğerdir. |
7 | novelty - Boolean, (varsayılan = Yanlış) Varsayılan olarak, LOF algoritması aykırı değer tespiti için kullanılır, ancak yenilik = doğru olarak ayarlarsak yenilik tespiti için kullanılabilir. |
8 | n_jobs - int veya Yok, isteğe bağlı (varsayılan = Yok) Hem fit () hem de tahmin () yöntemleri için paralel olarak çalıştırılacak işlerin sayısını temsil eder. |
Öznitellikler
Aşağıdaki tablo, tarafından kullanılan öznitelikleri içermektedir. sklearn.neighbors.LocalOutlierFactor yöntem -
Sr.No | Öznitelikler ve Açıklama |
---|---|
1 | negative_outlier_factor_ - uyuşuk dizi, şekil (n_samples,) Eğitim örneklerinin ters LOF'sinin sağlanması. |
2 | n_neighbors_ - tamsayı Komşuların sorguları için kullanılan gerçek komşu sayısını sağlar. |
3 | offset_ - şamandıra Ham puanlardan ikili etiketleri tanımlamak için kullanılır. |
Implementation Example
Aşağıda verilen Python betiği kullanacak sklearn.neighbors.LocalOutlierFactor Veri kümemize karşılık gelen herhangi bir diziden NeighborsClassifier sınıfı oluşturma yöntemi
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
Şimdi, aşağıdaki python betiğini kullanarak bu yapılandırılmış sınıflandırıcıdan [0.5, 1., 1.5] 'e en yakın noktayı sorabiliriz -
print(neigh.kneighbors([[.5, 1., 1.5]])
Output
(array([[1.7]]), array([[1]], dtype = int64))
Tek Sınıf SVM
Schölkopf ve diğerleri tarafından sunulan Tek Sınıflı SVM, denetimsiz Aykırı Değer Tespiti'dir. Ayrıca, yüksek boyutlu verilerde çok etkilidir ve yüksek boyutlu bir dağılımın desteğini tahmin eder. UygulanırSupport Vector Machines modüldeki Sklearn.svm.OneClassSVMnesne. Bir sınırı tanımlamak için bir çekirdek (çoğunlukla RBF kullanılır) ve bir skaler parametre gerektirir.
Daha iyi anlamak için verilerimizi şununla birleştirelim: svm.OneClassSVM nesne -
Misal
from sklearn.svm import OneClassSVM
X = [[0], [0.89], [0.90], [0.91], [1]]
OSVMclf = OneClassSVM(gamma = 'scale').fit(X)
Şimdi, girdi verileri için score_samples'ı aşağıdaki gibi alabiliriz -
OSVMclf.score_samples(X)
Çıktı
array([1.12218594, 1.58645126, 1.58673086, 1.58645127, 1.55713767])