자료를 공개한 저자 오렐리앙 제롱에게 깊은 감사를 드립니다. 이와 더불어 한빛미디어로부터 강의준비에 필요한 자료를 지원받았음을 밝히며, 이에 대해 진심어린 감사를 전합니다.



n_clusters) 지정해야 함.from sklearn.cluster import KMeans
k = 5
kmeans = KMeans(n_clusters=k, random_state=42)
y_pred = kmeans.fit_predict(X)



score() 메서드가 측정. (음수 기준)n_init = 10이 기본값으로 사용됨. 즉, 10번 학습 후 가장 낮은 관성을 갖는 모델 선택.KMeans 모델의 기본값으로 사용됨.algorithm=elkan: 학습 속도 향상됨. algorithm=full: 희소데이터에 대한 기본값.MiniBatchMeansfrom sklearn.cluster import MiniBatchKMeans
minibatch_kmeans = MiniBatchKMeans(n_clusters=5, random_state=42)
minibatch_kmeans.fit(X)
memmap 활용¶MiniBatchKMeans의 partial_fit() 메서드 활용


k=4 선택 가능.
k=5도 좋은 선택이 될 수 있음.

k=5 가 보다 좋은 모델임.
segmented_imgs = []
n_colors = (10, 8, 6, 4, 2)
for n_clusters in n_colors:
kmeans = KMeans(n_clusters=n_clusters, random_state=42).fit(X)
segmented_img = kmeans.cluster_centers_[kmeans.labels_]
segmented_imgs.append(segmented_img.reshape(image.shape))

pipeline = Pipeline([
("kmeans", KMeans(n_clusters=50, random_state=42)),
("log_reg", LogisticRegression(multi_class="ovr", solver="lbfgs", max_iter=5000, random_state=42)),
])
pipeline.fit(X_train, y_train)
param_grid = dict(kmeans__n_clusters=range(2, 100))
grid_clf = GridSearchCV(pipeline, param_grid, cv=3, verbose=2)
grid_clf.fit(X_train, y_train)

eps: $\varepsilon$-이웃 범위min_samples: $\varepsilon$ 반경 내에 위치하는 이웃의 수min-samples개의 이웃을 갖는 샘플from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.05, min_samples=5)
dbscan.fit(X)

predict() 메서드 지원하지 않음.KNeighborsClassifier 등 보다 좋은 성능의 분류 알고리즘 활용 가능.from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=50)
knn.fit(dbscan.components_, dbscan.labels_[dbscan.core_sample_indices_])


eps가 커질 경우.

GaussianMixture 모델 적용n_components: 군집수 지정n_init: 모델 학습 반복 횟수. from sklearn.mixture import GaussianMixture
gm = GaussianMixture(n_components=3, n_init=10, random_state=42)
gm.fit(X)

covariance_type 설정.

BIC: Bayesian information criterion
$$ \log(m)\, p - 2 \log (\hat L)$$
AIC: Akaike information criterion
$$ 2\, p - 2 \log (\hat L)$$

n_components에 전달해야 함.from sklearn.mixture import BayesianGaussianMixture
bgm = BayesianGaussianMixture(n_components=10, n_init=10, random_state=42)
bgm.fit(X)
>>> np.round(bgm.weights_, 2)
array([0.4 , 0.21, 0.4 , 0. , 0. , 0. , 0. , 0. , 0. , 0. ])
weight_concentration_prior 하이퍼파라미터n_components에 설정된 군집수에 대한 규제로 사용됨.n_components에 설정된 군집수가 유지되도록 함.

감사의 글: 슬라이드에 사용할 이미지를 제공한 한빛아카데미에 감사드립니다.