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 -

  • int - Bu durumda, random_state rastgele sayı üreteci tarafından kullanılan tohumdur.

  • RandomState instance- Bu durumda, random_state , rastgele sayı üretecidir.

  • None - Bu durumda, rastgele sayı oluşturucu, np.random tarafından kullanılan RandonState örneğidir.

Ö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 -

  • int - Bu durumda, random_state rastgele sayı üreteci tarafından kullanılan tohumdur.

  • RandomState instance- Bu durumda, random_state , rastgele sayı üretecidir.

  • None - Bu durumda, rastgele sayı oluşturucu, np.random tarafından kullanılan RandonState örneğidir.

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ğı.

  • Ball_tree'yi seçerseniz, BallTree algoritmasını kullanacaktır.

  • Kd_tree'yi seçerseniz, KDTree algoritmasını kullanacaktır.

  • Eğer kaba seçerseniz, kaba kuvvet arama algoritması kullanacaktır.

  • Otomatik'i seçerseniz, fit () yöntemine aktardığımız değere göre en uygun algoritmaya karar verecektir.

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])