통계 기반 이상탐지
통계적 접근 방식을 사용하여 모델이 데이터의 ‘정상적인’ 행동을 학습하고 통계적으로 이례적인 행동을 보이는 데이터 포인트를 이상치로 식별합니다.
GMM (Gaussian Mixture Models)
- 링크: https://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html
- 정의: Gaussian Mixture Models(GMM)은 데이터를 여러 가우시안 분포의 혼합으로 모델링하여 각 데이터 포인트가 속할 확률을 계산합니다. 이를 통해 데이터를 클러스터링하거나 이상치를 탐지할 수 있습니다.
- 적합한 데이터: 데이터가 하나 이상의 정규 분포를 따르는 것으로 가정할 때 효과적이며, 데이터의 잠재적 클러스터를 식별하는 데 유용합니다.
-
sklearn 함수:
sklearn.mixture.GaussianMixture-
함수 설명:
- GaussianMixture는 가우시안 혼합 모델을 사용하여 데이터의 확률 분포를 추정하는 클래스입니다. EM(Expectation-Maximization) 알고리즘을 사용하여 각 가우시안 성분의 파라미터를 최적화합니다.
- 이 알고리즘은 데이터가 여러 개의 가우시안 분포로 구성되어 있다고 가정하고, 각 데이터 포인트가 특정 가우시안 분포에 속할 확률을 계산합니다.
-
매개변수:
n_components(int, default=1): 혼합 성분의 수를 정의합니다. 클러스터의 수와 대응합니다.covariance_type(str, default=’full’): 공분산 매트릭스의 형태를 정의합니다. ‘full’, ‘tied’, ‘diag’, ‘spherical’ 중 선택할 수 있습니다.tol(float, default=1e-3): EM 알고리즘의 수렴 임계값입니다. 이 값 이하로 로그 가능도 변화가 작아지면 알고리즘이 수렴합니다.reg_covar(float, default=1e-6): 공분산 매트릭스에 추가되는 정규화 항입니다. 공분산 매트릭스가 양의 정부호성을 갖도록 보장합니다.max_iter(int, default=100): EM 알고리즘의 최대 반복 횟수입니다.n_init(int, default=1): 초기화를 수행할 횟수입니다. 가장 좋은 결과를 선택합니다.init_params(str, default=’kmeans’): 초기화 방법을 정의합니다. ‘kmeans’, ‘k-means++’, ‘random’, ‘random_from_data’ 중 선택할 수 있습니다.weights_init(array-like, default=None): 초기 가중치 배열입니다. 제공되지 않으면init_params방법을 사용하여 초기화됩니다.means_init(array-like, default=None): 초기 평균 배열입니다. 제공되지 않으면init_params방법을 사용하여 초기화됩니다.precisions_init(array-like, default=None): 초기 정밀도(공분산의 역행렬) 배열입니다. 제공되지 않으면init_params방법을 사용하여 초기화됩니다.random_state(int, RandomState instance or None, default=None): 난수 생성 시드를 설정하여 결과를 재현 가능하게 합니다.warm_start(bool, default=False): True로 설정하면 이전에 학습된 결과를 초기화에 사용합니다.verbose(int, default=0): 학습 과정의 진행 상황을 출력합니다.verbose_interval(int, default=10): 몇 번째 반복마다 출력을 할지 설정합니다.
-
속성:
weights_: 각 혼합 성분의 가중치 배열입니다.means_: 각 혼합 성분의 평균 배열입니다.covariances_: 각 혼합 성분의 공분산 행렬 배열입니다.precisions_: 각 혼합 성분의 정밀도 행렬 배열입니다.precisions_cholesky_: 각 혼합 성분의 정밀도 행렬의 Cholesky 분해입니다.converged_: 모델이 수렴했는지 여부를 나타냅니다.n_iter_: 수렴하는 데 사용된 반복 횟수입니다.lower_bound_: EM 알고리즘에서 계산된 로그 가능도의 하한 값입니다.n_features_in_: 학습 시 사용된 특성의 수입니다.feature_names_in_: 학습 시 사용된 특성 이름 배열입니다.
-
메서드:
aic(X): 주어진 데이터 X에 대한 현재 모델의 Akaike 정보 기준(AIC)을 계산합니다.bic(X): 주어진 데이터 X에 대한 현재 모델의 베이지안 정보 기준(BIC)을 계산합니다.fit(X[, y]): EM 알고리즘을 사용하여 모델 파라미터를 추정합니다.fit_predict(X[, y]): 주어진 데이터 X를 사용하여 모델 파라미터를 추정하고 레이블을 예측합니다.get_metadata_routing(): 이 객체의 메타데이터 라우팅을 가져옵니다.get_params([deep]): 이 추정기의 파라미터를 가져옵니다.predict(X): 학습된 모델을 사용하여 주어진 데이터 샘플 X의 레이블을 예측합니다.predict_proba(X): 각 샘플에 대한 구성 요소의 밀도를 평가합니다.sample([n_samples]): 학습된 가우시안 분포에서 랜덤 샘플을 생성합니다.score(X[, y]): 주어진 데이터 X에 대한 샘플 당 평균 로그 가능도를 계산합니다.score_samples(X): 각 샘플에 대한 로그 가능도를 계산합니다.set_params(**params): 이 추정기의 파라미터를 설정합니다.
-
예시:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
from sklearn.mixture import GaussianMixture import numpy as np # 예제 데이터 X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) # GMM 모델 생성 및 적합 gm = GaussianMixture(n_components=2, random_state=0).fit(X) # 각 혼합 성분의 평균 출력 print(gm.means_) # 예측 라벨 출력 print(gm.predict([[0, 0], [12, 3]]))
-
✍️ 이 예제는 GaussianMixture를 사용하여 데이터를 두 개의 가우시안 성분으로 모델링하고, 새로운 데이터 포인트의 클러스터를 예측하는 방법을 보여줍니다. GMM은 데이터의 잠재적인 분포를 학습하고 이를 통해 클러스터링이나 이상치 탐지를 수행하는 데 매우 유용합니다.
PCA (Principal Component Analysis)
- 링크: https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
- 정의: PCA(Principal Component Analysis)는 데이터의 주성분을 분석하여 차원을 축소하는 기법입니다. 이를 통해 데이터의 주요 변동성을 캡처하고, 원 데이터와 재구성된 데이터 간의 차이를 통해 이상치를 탐지할 수 있습니다.
- 적합한 데이터: 고차원 데이터셋에서 주요 변동성을 파악하고 차원의 저주를 줄이고자 할 때 유용합니다. 주로 데이터 시각화, 노이즈 제거, 특징 추출 등에 사용됩니다.
-
sklearn 함수:
sklearn.decomposition.PCA-
함수 설명:
- PCA는 특이값 분해(Singular Value Decomposition, SVD)를 사용하여 데이터를 낮은 차원으로 투영하는 선형 차원 축소 기법입니다. 입력 데이터는 각 특성에 대해 중심화되며, SVD를 통해 주성분을 추출합니다.
- LAPACK 구현의 전체 SVD 또는 데이터의 형태와 추출할 성분의 수에 따라 확률적 SVD를 사용합니다.
-
매개변수:
n_components(int, float or ‘mle’, default=None): 유지할 주성분의 수입니다. 기본적으로 모든 성분을 유지합니다.copy(bool, default=True): True로 설정하면 fit 시 입력 데이터를 복사하고, False로 설정하면 데이터를 덮어씁니다.whiten(bool, default=False): True로 설정하면 주성분 벡터를 단위 분산을 가지도록 스케일링합니다. 이는 예측 정확도를 높일 수 있습니다.svd_solver(str, default=’auto’): SVD를 계산할 방법입니다. ‘auto’, ‘full’, ‘arpack’, ‘randomized’ 중 선택할 수 있습니다.tol(float, default=0.0): ‘arpack’ SVD 솔버의 특이값에 대한 허용 오차입니다.iterated_power(int or ‘auto’, default=’auto’): ‘randomized’ SVD 솔버에서 파워 방법의 반복 횟수입니다.n_oversamples(int, default=10): ‘randomized’ SVD 솔버에서 추가로 샘플링할 무작위 벡터의 수입니다.power_iteration_normalizer(str, default=’auto’): ‘randomized’ SVD 솔버의 파워 반복 정규화 방법입니다.random_state(int, RandomState instance or None, default=None): 난수 생성을 제어하여 결과를 재현 가능하게 합니다.
-
속성:
components_: 주성분 벡터 배열입니다.explained_variance_: 선택된 각 성분에 의해 설명된 분산의 양입니다.explained_variance_ratio_: 선택된 각 성분에 의해 설명된 분산의 비율입니다.singular_values_: 선택된 각 성분에 해당하는 특이값입니다.mean_: 각 특성의 경험적 평균입니다.n_components_: 추정된 주성분의 수입니다.n_samples_: 훈련 데이터의 샘플 수입니다.noise_variance_: 추정된 노이즈 공분산입니다.n_features_in_: 학습 시 본 특성의 수입니다.feature_names_in_: 학습 시 본 특성 이름 배열입니다.
-
메서드:
fit(X[, y]): 주어진 데이터 X로 모델을 학습시킵니다.fit_transform(X[, y]): 주어진 데이터 X로 모델을 학습시키고, 차원 축소를 적용합니다.get_covariance(): 생성 모델을 사용하여 데이터의 공분산을 계산합니다.get_feature_names_out([input_features]): 변환된 출력 특성 이름을 가져옵니다.get_metadata_routing(): 이 객체의 메타데이터 라우팅을 가져옵니다.get_params([deep]): 이 추정기의 파라미터를 가져옵니다.get_precision(): 생성 모델을 사용하여 데이터의 정밀도 행렬을 계산합니다.inverse_transform(X): 데이터를 원래의 공간으로 변환합니다.score(X[, y]): 모든 샘플의 평균 로그 가능도를 반환합니다.score_samples(X): 각 샘플의 로그 가능도를 반환합니다.set_output(*[, transform]): 출력 컨테이너를 설정합니다.set_params(**params): 이 추정기의 파라미터를 설정합니다.transform(X): 주어진 데이터 X에 차원 축소를 적용합니다.
-
예시:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
from sklearn.decomposition import PCA import numpy as np # 예제 데이터 X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) # PCA 모델 생성 및 적합 pca = PCA(n_components=2) pca.fit(X) # 설명된 분산 비율 출력 print(pca.explained_variance_ratio_) # 특이값 출력 print(pca.singular_values_) # 새로운 데이터에 대한 주성분 투영 X_new = pca.transform([[0, 0], [12, 3]]) print(X_new)
-
✍️ 이 예제는 PCA를 사용하여 데이터의 주성분을 추출하고, 새로운 데이터 포인트를 주성분 공간에 투영하는 방법을 보여줍니다. PCA는 데이터의 주요 변동성을 파악하고 차원을 축소하여 데이터 분석 및 시각화에서 유용하게 활용될 수 있습니다.