Scikit Learn-클러스터링 방법
여기에서는 데이터 샘플에서 유사성을 식별하는 데 도움이되는 Sklearn의 클러스터링 방법에 대해 연구합니다.
가장 유용한 비지도 ML 방법 중 하나 인 클러스터링 방법은 데이터 샘플 간의 유사성 및 관계 패턴을 찾는 데 사용됩니다. 그런 다음 기능을 기반으로 유사성을 갖는 그룹으로 이러한 샘플을 클러스터링합니다. 클러스터링은 현재 레이블이 지정되지 않은 데이터 간의 고유 한 그룹화를 결정하므로 이것이 중요한 이유입니다.
Scikit-learn 라이브러리에는 sklearn.cluster레이블이없는 데이터의 클러스터링을 수행합니다. 이 모듈에서 scikit-leran에는 다음과 같은 클러스터링 방법이 있습니다.
KMeans
이 알고리즘은 중심을 계산하고 최적의 중심을 찾을 때까지 반복합니다. 클러스터 수를 지정해야하므로 이미 알려져 있다고 가정합니다. 이 알고리즘의 주요 논리는 관성이라고 알려진 기준을 최소화하여 n 개의 동일한 분산 그룹에서 샘플을 분리하는 데이터를 클러스터링하는 것입니다. 알고리즘에 의해 식별되는 클러스터의 수는 'K.
Scikit-learn은 sklearn.cluster.KMeansK-Means 클러스터링을 수행하는 모듈. 클러스터 중심과 관성 값을 계산하는 동안sample_weight 허용 sklearn.cluster.KMeans 일부 샘플에 더 많은 가중치를 할당하는 모듈.
선호도 전파
이 알고리즘은 수렴 될 때까지 서로 다른 샘플 쌍 사이의 '메시지 전달'개념을 기반으로합니다. 알고리즘을 실행하기 전에 클러스터 수를 지정할 필요가 없습니다. 알고리즘의 가장 큰 단점은 순서 (2)의 시간 복잡도를 가지고 있습니다.
Scikit-learn은 sklearn.cluster.AffinityPropagation 선호도 전파 클러스터링을 수행하는 모듈.
평균 이동
이 알고리즘은 주로 blobs부드러운 밀도의 샘플에서. 포인트를 가장 높은 밀도의 데이터 포인트로 이동하여 반복적으로 클러스터에 데이터 포인트를 할당합니다. 이름이 지정된 매개 변수에 의존하는 대신bandwidth 검색 할 지역의 크기를 지정하면 클러스터 수를 자동으로 설정합니다.
Scikit-learn은 sklearn.cluster.MeanShift 평균 이동 클러스터링을 수행하는 모듈.
스펙트럼 클러스터링
클러스터링 전에이 알고리즘은 기본적으로 고유 값, 즉 데이터 유사성 행렬의 스펙트럼을 사용하여 더 적은 차원에서 차원 감소를 수행합니다. 클러스터가 많은 경우이 알고리즘을 사용하지 않는 것이 좋습니다.
Scikit-learn은 sklearn.cluster.SpectralClustering 스펙트럼 클러스터링을 수행하는 모듈.
계층 적 클러스터링
이 알고리즘은 클러스터를 연속적으로 병합하거나 분할하여 중첩 된 클러스터를 구축합니다. 이 클러스터 계층 구조는 덴드로 그램 즉 트리로 표시됩니다. 그것은 다음 두 가지 범주에 속합니다-
Agglomerative hierarchical algorithms− 이러한 종류의 계층 적 알고리즘에서 모든 데이터 포인트는 단일 클러스터처럼 취급됩니다. 그런 다음 클러스터 쌍을 연속적으로 응집합니다. 이것은 상향식 접근 방식을 사용합니다.
Divisive hierarchical algorithms−이 계층 적 알고리즘에서 모든 데이터 포인트는 하나의 큰 클러스터로 취급됩니다. 여기서 클러스터링 프로세스는 하향식 접근 방식을 사용하여 하나의 큰 클러스터를 다양한 작은 클러스터로 나누는 과정을 포함합니다.
Scikit-learn은 sklearn.cluster.AgglomerativeClustering Agglomerative Hierarchical Clustering을 수행하기위한 모듈.
DBSCAN
그것은 “Density-based spatial clustering of applications with noise”. 이 알고리즘은 "클러스터"및 "노이즈"라는 직관적 인 개념을 기반으로합니다. 클러스터는 데이터 공간에서 밀도가 낮은 밀도 영역이며 데이터 포인트의 밀도가 낮은 영역으로 구분됩니다.
Scikit-learn은 sklearn.cluster.DBSCANDBSCAN 클러스터링을 수행하는 모듈. 이 알고리즘에서 밀도를 정의하는 데 사용되는 두 가지 중요한 매개 변수, 즉 min_samples 및 eps가 있습니다.
더 높은 매개 변수 값 min_samples 또는 매개 변수 eps의 값이 낮 으면 클러스터를 형성하는 데 필요한 데이터 포인트의 밀도가 더 높다는 표시가됩니다.
광학
그것은 “Ordering points to identify the clustering structure”. 이 알고리즘은 공간 데이터에서 밀도 기반 클러스터도 찾습니다. 기본 작동 논리는 DBSCAN과 같습니다.
이는 DBSCAN 알고리즘의 주요 약점 (다양한 밀도의 데이터에서 의미있는 클러스터를 감지하는 문제)을 공간적으로 가장 가까운 점이 순서에서 이웃이되는 방식으로 데이터베이스의 점을 정렬하여 해결합니다.
Scikit-learn은 sklearn.cluster.OPTICS OPTICS 클러스터링을 수행하는 모듈.
버치
계층을 사용하여 균형 잡힌 반복 감소 및 클러스터링을 나타냅니다. 대규모 데이터 세트에 대해 계층 적 클러스터링을 수행하는 데 사용됩니다. 이름이 지정된 트리를 만듭니다.CFT 즉 Characteristics Feature Tree, 주어진 데이터에 대해.
CFT의 장점은 CF (특성 기능) 노드라고하는 데이터 노드가 클러스터링에 필요한 정보를 보유하고있어 전체 입력 데이터를 메모리에 보관할 필요가 없다는 것입니다.
Scikit-learn은 sklearn.cluster.Birch BIRCH 클러스터링을 수행하는 모듈.
클러스터링 알고리즘 비교
다음 표는 scikit-learn에서 클러스터링 알고리즘의 비교 (매개 변수, 확장 성 및 메트릭 기반)를 제공합니다.
Sr. 아니요 | 알고리즘 이름 | 매개 변수 | 확장 성 | 사용 된 메트릭 |
---|---|---|---|---|
1 | K- 평균 | 클러스터 수 | 매우 큰 n_samples | 점 사이의 거리. |
2 | 선호도 전파 | 제동 | n_samples로는 확장 할 수 없습니다. | 그래프 거리 |
삼 | 평균 이동 | 대역폭 | n_samples로는 확장 할 수 없습니다. | 점 사이의 거리. |
4 | 스펙트럼 클러스터링 | 클러스터 수 | n_samples로 중간 수준의 확장 성. n_clusters를 사용한 작은 수준의 확장 성. | 그래프 거리 |
5 | 계층 적 클러스터링 | 거리 임계 값 또는 클러스터 수 | 대형 n_samples 대형 n_ 클러스터 | 점 사이의 거리. |
6 | DBSCAN | 이웃의 크기 | 매우 큰 n_samples 및 중간 n_clusters. | 가장 가까운 지점 거리 |
7 | 광학 | 최소 클러스터 멤버십 | 매우 큰 n_sample과 큰 n_cluster. | 점 사이의 거리. |
8 | 버치 | 임계 값, 분기 계수 | 대형 n_samples 대형 n_ 클러스터 | 점 사이의 유클리드 거리입니다. |
Scikit-learn Digit 데이터 세트의 K- 평균 클러스터링
이 예에서는 숫자 데이터 세트에 K- 평균 클러스터링을 적용합니다. 이 알고리즘은 원래 레이블 정보를 사용하지 않고 유사한 숫자를 식별합니다. 구현은 Jupyter 노트북에서 수행됩니다.
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
산출
1797, 64)
이 출력은 숫자 데이터 세트에 64 개의 기능이있는 1797 개의 샘플이 있음을 보여줍니다.
예
이제 다음과 같이 K- 평균 클러스터링을 수행합니다.
kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
산출
(10, 64)
이 출력은 K- 평균 클러스터링이 64 개의 기능이있는 10 개의 클러스터를 생성했음을 보여줍니다.
예
fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks = [], yticks = [])
axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)
산출
아래 출력에는 K- 평균 군집화에서 학습 한 군집 중심을 보여주는 이미지가 있습니다.
다음으로, 아래의 Python 스크립트는 학습 된 클러스터 레이블 (K-Means 기준)을 발견 된 실제 레이블과 일치시킵니다.
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]
아래에 언급 된 명령을 사용하여 정확도를 확인할 수도 있습니다.
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)
산출
0.7935447968836951
완전한 구현 예
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks=[], yticks = [])
axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)