{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 11장. 레이블되지 않은 데이터 다루기 : 군집 분석"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**아래 링크를 통해 이 노트북을 주피터 노트북 뷰어(nbviewer.jupyter.org)로 보거나 구글 코랩(colab.research.google.com)에서 실행할 수 있습니다.**\n",
"\n",
"
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`watermark`는 주피터 노트북에 사용하는 파이썬 패키지를 출력하기 위한 유틸리티입니다. `watermark` 패키지를 설치하려면 다음 셀의 주석을 제거한 뒤 실행하세요."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"#!pip install watermark"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"last updated: 2020-05-22 \n",
"\n",
"CPython 3.7.3\n",
"IPython 7.5.0\n",
"\n",
"numpy 1.18.4\n",
"pandas 1.0.3\n",
"matplotlib 3.2.1\n",
"scipy 1.4.1\n",
"sklearn 0.23.1\n"
]
}
],
"source": [
"%load_ext watermark\n",
"%watermark -u -d -v -p numpy,pandas,matplotlib,scipy,sklearn"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# k-평균 알고리즘을 사용하여 유사한 객체를 그룹핑하기"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 사이킷런을 사용한 k-평균 군집"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.datasets import make_blobs\n",
"\n",
"X, y = make_blobs(n_samples=150, \n",
" n_features=2, \n",
" centers=3, \n",
" cluster_std=0.5, \n",
" shuffle=True, \n",
" random_state=0)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Pg4EAhgxYkTcqcNwwgVRIoygiCxAjzRzh8OB1157Le7jfOc731F8nPCAU1RUpHldTW3zscPhQG9vb9y1qnDCBVEiHKCILECPNPOqqip8+OGHKUUuNpsNo0aNSljtQouqqip8+umnaG9vV5w67O7uRmVlpaaCu5TfOEARpUBrRXOt9EgzLywsRG1tLd56662kHifclzNnzujSl8LCQuzatQuhUAhutxvLly9HfX09lixZgurqavz85z/H1KlT45Z00vq71ftvQNbDAYooSUbUzNMrzXzjxo1xkx6UHieyL0OGDNGt/l95eTlOnTqFrVu3QkqJrq4urFy5Eu+//z5+/vOfx61E0dLSoul3a/XDKkknSql96f4wzTw35Gvf1fqtJc06VbEp4C6XS9rtds1p5uH2Pfroo3L48OFy2rRpcuPGjXEfJ7Yv4X4bmQre0NAgXS6X4nXLly+XN954Y8LfrRF/A77WzQWmmROlz8iaeYk2ASeqzBCOKj766CPU1dVh3Lhx+OUvf4nJkycrJj2Yceij2lrbkCFDMHfu3ITtMfOwSsosppkTJcHomnnxagv6/X6sWLECX375JebNm4c5c+Zgz549ePzxx7F79+6BVHGl9PKamhps3Lgx6b74fD6cOHFC13Op1M7xOn78OO6///647Qn/bs06rJIyjxEUURLMOP48GAxi9erVKCgogM/nw2uvvYYNGzZg//79aGxsxIoVK/Dd734Xs2bNSiqqUOtLR0cHzp07p/v6jtpa25kzZ3D48GHF+0X+bnkEfR5RmvdL94drULkhX/tu1hpUPA0NDXLatGlx126WLFkib775ZllfX694/aZNm6TH4xl0udoaVHFxcVRf9OxfvLW2/fv3a/rdcg1KP1bpN+KsQXGKjygJZh2UqFaZoby8HEOGDFGNKpxO56DLY/tyzz33YMWKFWhra8O+ffui+qLncRpqlSi0/G7N+BuQOThAESUpUamfdAWDwYHHdjgcGDt2bMLKDJWVlXjiiSeSPqsqsi9SSoRCITz88MOKVST0XN+Jt9am9Xdr9N+ArEHzACWEGALgMIAzUsrlxjWJyPqMOihR6Th1v9+Py5cv4+TJk4oDUHd3N373u98NJErMnDkTs2fP1hxVhPvS1tYGl8sVN4khXiSmN62/20weVknmSCaC+jGAYwBGGNQWorymVjC2uroaX331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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(X[:, 0], X[:, 1], \n",
" c='white', marker='o', edgecolor='black', s=50)\n",
"plt.grid()\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.cluster import KMeans\n",
"\n",
"km = KMeans(n_clusters=3, \n",
" init='random', \n",
" n_init=10, \n",
" max_iter=300,\n",
" tol=1e-04,\n",
" random_state=0)\n",
"\n",
"y_km = km.fit_predict(X)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(X[y_km == 0, 0],\n",
" X[y_km == 0, 1],\n",
" s=50, c='lightgreen',\n",
" marker='s', edgecolor='black',\n",
" label='cluster 1')\n",
"plt.scatter(X[y_km == 1, 0],\n",
" X[y_km == 1, 1],\n",
" s=50, c='orange',\n",
" marker='o', edgecolor='black',\n",
" label='cluster 2')\n",
"plt.scatter(X[y_km == 2, 0],\n",
" X[y_km == 2, 1],\n",
" s=50, c='lightblue',\n",
" marker='v', edgecolor='black',\n",
" label='cluster 3')\n",
"plt.scatter(km.cluster_centers_[:, 0],\n",
" km.cluster_centers_[:, 1],\n",
" s=250, marker='*',\n",
" c='red', edgecolor='black',\n",
" label='centroids')\n",
"plt.legend(scatterpoints=1)\n",
"plt.grid()\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 엘보우 방법을 사용하여 최적의 클러스터 개수를 찾기"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"왜곡: 72.48\n"
]
}
],
"source": [
"print('왜곡: %.2f' % km.inertia_)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"distortions = []\n",
"for i in range(1, 11):\n",
" km = KMeans(n_clusters=i, \n",
" init='k-means++', \n",
" n_init=10, \n",
" max_iter=300, \n",
" random_state=0)\n",
" km.fit(X)\n",
" distortions.append(km.inertia_)\n",
"plt.plot(range(1, 11), distortions, marker='o')\n",
"plt.xlabel('Number of clusters')\n",
"plt.ylabel('Distortion')\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 실루엣 그래프로 군집 품질을 정량화하기"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"from matplotlib import cm\n",
"from sklearn.metrics import silhouette_samples\n",
"\n",
"km = KMeans(n_clusters=3, \n",
" init='k-means++', \n",
" n_init=10, \n",
" max_iter=300,\n",
" tol=1e-04,\n",
" random_state=0)\n",
"y_km = km.fit_predict(X)\n",
"\n",
"cluster_labels = np.unique(y_km)\n",
"n_clusters = cluster_labels.shape[0]\n",
"silhouette_vals = silhouette_samples(X, y_km, metric='euclidean')\n",
"y_ax_lower, y_ax_upper = 0, 0\n",
"yticks = []\n",
"for i, c in enumerate(cluster_labels):\n",
" c_silhouette_vals = silhouette_vals[y_km == c]\n",
" c_silhouette_vals.sort()\n",
" y_ax_upper += len(c_silhouette_vals)\n",
" color = cm.jet(float(i) / n_clusters)\n",
" plt.barh(range(y_ax_lower, y_ax_upper), c_silhouette_vals, height=1.0, \n",
" edgecolor='none', color=color)\n",
"\n",
" yticks.append((y_ax_lower + y_ax_upper) / 2.)\n",
" y_ax_lower += len(c_silhouette_vals)\n",
" \n",
"silhouette_avg = np.mean(silhouette_vals)\n",
"plt.axvline(silhouette_avg, color=\"red\", linestyle=\"--\") \n",
"\n",
"plt.yticks(yticks, cluster_labels + 1)\n",
"plt.ylabel('Cluster')\n",
"plt.xlabel('Silhouette coefficient')\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"잘못된 클러스터링:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"km = KMeans(n_clusters=2,\n",
" init='k-means++',\n",
" n_init=10,\n",
" max_iter=300,\n",
" tol=1e-04,\n",
" random_state=0)\n",
"y_km = km.fit_predict(X)\n",
"\n",
"plt.scatter(X[y_km == 0, 0],\n",
" X[y_km == 0, 1],\n",
" s=50,\n",
" c='lightgreen',\n",
" edgecolor='black',\n",
" marker='s',\n",
" label='cluster 1')\n",
"plt.scatter(X[y_km == 1, 0],\n",
" X[y_km == 1, 1],\n",
" s=50,\n",
" c='orange',\n",
" edgecolor='black',\n",
" marker='o',\n",
" label='cluster 2')\n",
"\n",
"plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1],\n",
" s=250, marker='*', c='red', label='centroids')\n",
"plt.legend()\n",
"plt.grid()\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"cluster_labels = np.unique(y_km)\n",
"n_clusters = cluster_labels.shape[0]\n",
"silhouette_vals = silhouette_samples(X, y_km, metric='euclidean')\n",
"y_ax_lower, y_ax_upper = 0, 0\n",
"yticks = []\n",
"for i, c in enumerate(cluster_labels):\n",
" c_silhouette_vals = silhouette_vals[y_km == c]\n",
" c_silhouette_vals.sort()\n",
" y_ax_upper += len(c_silhouette_vals)\n",
" color = cm.jet(float(i) / n_clusters)\n",
" plt.barh(range(y_ax_lower, y_ax_upper), c_silhouette_vals, height=1.0, \n",
" edgecolor='none', color=color)\n",
"\n",
" yticks.append((y_ax_lower + y_ax_upper) / 2.)\n",
" y_ax_lower += len(c_silhouette_vals)\n",
" \n",
"silhouette_avg = np.mean(silhouette_vals)\n",
"plt.axvline(silhouette_avg, color=\"red\", linestyle=\"--\") \n",
"\n",
"plt.yticks(yticks, cluster_labels + 1)\n",
"plt.ylabel('Cluster')\n",
"plt.xlabel('Silhouette coefficient')\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 계층적인 트리로 클러스터를 조직화하기"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 상향식으로 클러스터 묶기"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" X | \n",
" Y | \n",
" Z | \n",
"
\n",
" \n",
" \n",
" \n",
" | ID_0 | \n",
" 6.964692 | \n",
" 2.861393 | \n",
" 2.268515 | \n",
"
\n",
" \n",
" | ID_1 | \n",
" 5.513148 | \n",
" 7.194690 | \n",
" 4.231065 | \n",
"
\n",
" \n",
" | ID_2 | \n",
" 9.807642 | \n",
" 6.848297 | \n",
" 4.809319 | \n",
"
\n",
" \n",
" | ID_3 | \n",
" 3.921175 | \n",
" 3.431780 | \n",
" 7.290497 | \n",
"
\n",
" \n",
" | ID_4 | \n",
" 4.385722 | \n",
" 0.596779 | \n",
" 3.980443 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" X Y Z\n",
"ID_0 6.964692 2.861393 2.268515\n",
"ID_1 5.513148 7.194690 4.231065\n",
"ID_2 9.807642 6.848297 4.809319\n",
"ID_3 3.921175 3.431780 7.290497\n",
"ID_4 4.385722 0.596779 3.980443"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"np.random.seed(123)\n",
"\n",
"variables = ['X', 'Y', 'Z']\n",
"labels = ['ID_0', 'ID_1', 'ID_2', 'ID_3', 'ID_4']\n",
"\n",
"X = np.random.random_sample([5, 3])*10\n",
"df = pd.DataFrame(X, columns=variables, index=labels)\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 거리 행렬에서 계층 군집 수행하기"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" ID_0 | \n",
" ID_1 | \n",
" ID_2 | \n",
" ID_3 | \n",
" ID_4 | \n",
"
\n",
" \n",
" \n",
" \n",
" | ID_0 | \n",
" 0.000000 | \n",
" 4.973534 | \n",
" 5.516653 | \n",
" 5.899885 | \n",
" 3.835396 | \n",
"
\n",
" \n",
" | ID_1 | \n",
" 4.973534 | \n",
" 0.000000 | \n",
" 4.347073 | \n",
" 5.104311 | \n",
" 6.698233 | \n",
"
\n",
" \n",
" | ID_2 | \n",
" 5.516653 | \n",
" 4.347073 | \n",
" 0.000000 | \n",
" 7.244262 | \n",
" 8.316594 | \n",
"
\n",
" \n",
" | ID_3 | \n",
" 5.899885 | \n",
" 5.104311 | \n",
" 7.244262 | \n",
" 0.000000 | \n",
" 4.382864 | \n",
"
\n",
" \n",
" | ID_4 | \n",
" 3.835396 | \n",
" 6.698233 | \n",
" 8.316594 | \n",
" 4.382864 | \n",
" 0.000000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" ID_0 ID_1 ID_2 ID_3 ID_4\n",
"ID_0 0.000000 4.973534 5.516653 5.899885 3.835396\n",
"ID_1 4.973534 0.000000 4.347073 5.104311 6.698233\n",
"ID_2 5.516653 4.347073 0.000000 7.244262 8.316594\n",
"ID_3 5.899885 5.104311 7.244262 0.000000 4.382864\n",
"ID_4 3.835396 6.698233 8.316594 4.382864 0.000000"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from scipy.spatial.distance import pdist, squareform\n",
"\n",
"row_dist = pd.DataFrame(squareform(pdist(df, metric='euclidean')),\n",
" columns=labels,\n",
" index=labels)\n",
"row_dist"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"함수 설명을 보면 `pdist` 함수에서 계산한 축약된 거리 행렬(상삼각행렬(upper triangular matrix))을 입력 속성으로 사용할 수 있습니다. 아니면 `linkage` 함수에 초기 데이터 배열을 전달하고 `metric='euclidean'` 지표를 매개변수로 사용할 수 있습니다. 앞서 `squareform` 함수로 만든 거리 행렬은 `linkage` 함수가 기대한 값과 다르기 때문에 사용해서는 안됩니다."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/haesun/anaconda3/envs/python-ml/lib/python3.7/site-packages/ipykernel_launcher.py:5: ClusterWarning: scipy.cluster: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix\n",
" \"\"\"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" row label 1 | \n",
" row label 2 | \n",
" distance | \n",
" no. of items in clust. | \n",
"
\n",
" \n",
" \n",
" \n",
" | cluster 1 | \n",
" 0.0 | \n",
" 4.0 | \n",
" 6.521973 | \n",
" 2.0 | \n",
"
\n",
" \n",
" | cluster 2 | \n",
" 1.0 | \n",
" 2.0 | \n",
" 6.729603 | \n",
" 2.0 | \n",
"
\n",
" \n",
" | cluster 3 | \n",
" 3.0 | \n",
" 5.0 | \n",
" 8.539247 | \n",
" 3.0 | \n",
"
\n",
" \n",
" | cluster 4 | \n",
" 6.0 | \n",
" 7.0 | \n",
" 12.444824 | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" row label 1 row label 2 distance no. of items in clust.\n",
"cluster 1 0.0 4.0 6.521973 2.0\n",
"cluster 2 1.0 2.0 6.729603 2.0\n",
"cluster 3 3.0 5.0 8.539247 3.0\n",
"cluster 4 6.0 7.0 12.444824 5.0"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 1. 잘못된 방식: squareform 거리 행렬\n",
"\n",
"from scipy.cluster.hierarchy import linkage\n",
"\n",
"row_clusters = linkage(row_dist, method='complete', metric='euclidean')\n",
"pd.DataFrame(row_clusters,\n",
" columns=['row label 1', 'row label 2',\n",
" 'distance', 'no. of items in clust.'],\n",
" index=['cluster %d' % (i + 1)\n",
" for i in range(row_clusters.shape[0])])"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" row label 1 | \n",
" row label 2 | \n",
" distance | \n",
" no. of items in clust. | \n",
"
\n",
" \n",
" \n",
" \n",
" | cluster 1 | \n",
" 0.0 | \n",
" 4.0 | \n",
" 3.835396 | \n",
" 2.0 | \n",
"
\n",
" \n",
" | cluster 2 | \n",
" 1.0 | \n",
" 2.0 | \n",
" 4.347073 | \n",
" 2.0 | \n",
"
\n",
" \n",
" | cluster 3 | \n",
" 3.0 | \n",
" 5.0 | \n",
" 5.899885 | \n",
" 3.0 | \n",
"
\n",
" \n",
" | cluster 4 | \n",
" 6.0 | \n",
" 7.0 | \n",
" 8.316594 | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" row label 1 row label 2 distance no. of items in clust.\n",
"cluster 1 0.0 4.0 3.835396 2.0\n",
"cluster 2 1.0 2.0 4.347073 2.0\n",
"cluster 3 3.0 5.0 5.899885 3.0\n",
"cluster 4 6.0 7.0 8.316594 5.0"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 2. 올바른 방식: 축약된 거리 행렬\n",
"\n",
"row_clusters = linkage(pdist(df, metric='euclidean'), method='complete')\n",
"pd.DataFrame(row_clusters,\n",
" columns=['row label 1', 'row label 2',\n",
" 'distance', 'no. of items in clust.'],\n",
" index=['cluster %d' % (i + 1) \n",
" for i in range(row_clusters.shape[0])])"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" row label 1 | \n",
" row label 2 | \n",
" distance | \n",
" no. of items in clust. | \n",
"
\n",
" \n",
" \n",
" \n",
" | cluster 1 | \n",
" 0.0 | \n",
" 4.0 | \n",
" 3.835396 | \n",
" 2.0 | \n",
"
\n",
" \n",
" | cluster 2 | \n",
" 1.0 | \n",
" 2.0 | \n",
" 4.347073 | \n",
" 2.0 | \n",
"
\n",
" \n",
" | cluster 3 | \n",
" 3.0 | \n",
" 5.0 | \n",
" 5.899885 | \n",
" 3.0 | \n",
"
\n",
" \n",
" | cluster 4 | \n",
" 6.0 | \n",
" 7.0 | \n",
" 8.316594 | \n",
" 5.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" row label 1 row label 2 distance no. of items in clust.\n",
"cluster 1 0.0 4.0 3.835396 2.0\n",
"cluster 2 1.0 2.0 4.347073 2.0\n",
"cluster 3 3.0 5.0 5.899885 3.0\n",
"cluster 4 6.0 7.0 8.316594 5.0"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 3. 올바른 방식: 입력 샘플 행렬\n",
"\n",
"row_clusters = linkage(df.values, method='complete', metric='euclidean')\n",
"pd.DataFrame(row_clusters,\n",
" columns=['row label 1', 'row label 2',\n",
" 'distance', 'no. of items in clust.'],\n",
" index=['cluster %d' % (i + 1)\n",
" for i in range(row_clusters.shape[0])])"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from scipy.cluster.hierarchy import dendrogram\n",
"\n",
"# 검은색 덴드로그램 만들기 (1/2 부분만)\n",
"# from scipy.cluster.hierarchy import set_link_color_palette\n",
"# set_link_color_palette(['black'])\n",
"\n",
"row_dendr = dendrogram(row_clusters, \n",
" labels=labels,\n",
" # 검은색 덴드로그램 만들기 (2/2 부분)\n",
" # color_threshold=np.inf\n",
" )\n",
"plt.tight_layout()\n",
"plt.ylabel('Euclidean distance')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 히트맵에 덴드로그램 연결하기"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(8, 8), facecolor='white')\n",
"axd = fig.add_axes([0.09, 0.1, 0.2, 0.6])\n",
"\n",
"# 노트: matplotlib < v1.5.1일 때는 use orientation='right'를 사용하세요\n",
"row_dendr = dendrogram(row_clusters, orientation='left')\n",
"\n",
"# 군집에 맞게 데이터를 재정렬합니다.\n",
"df_rowclust = df.iloc[row_dendr['leaves'][::-1]]\n",
"\n",
"axd.set_xticks([])\n",
"axd.set_yticks([])\n",
"\n",
"# 덴드로그램의 축을 제거합니다.\n",
"for i in axd.spines.values():\n",
" i.set_visible(False)\n",
"\n",
"# 히트맵을 출력합니다.\n",
"axm = fig.add_axes([0.23, 0.1, 0.6, 0.6]) # x-위치, y-위치, 너비, 높이\n",
"cax = axm.matshow(df_rowclust, interpolation='nearest', cmap='hot_r')\n",
"fig.colorbar(cax)\n",
"axm.set_xticklabels([''] + list(df_rowclust.columns))\n",
"axm.set_yticklabels([''] + list(df_rowclust.index))\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 사이킷런에서 병합 군집 적용하기"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"클러스터 레이블: [1 0 0 2 1]\n"
]
}
],
"source": [
"from sklearn.cluster import AgglomerativeClustering\n",
"\n",
"ac = AgglomerativeClustering(n_clusters=3, \n",
" affinity='euclidean', \n",
" linkage='complete')\n",
"labels = ac.fit_predict(X)\n",
"print('클러스터 레이블: %s' % labels)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"클러스터 레이블: [0 1 1 0 0]\n"
]
}
],
"source": [
"ac = AgglomerativeClustering(n_clusters=2, \n",
" affinity='euclidean', \n",
" linkage='complete')\n",
"labels = ac.fit_predict(X)\n",
"print('클러스터 레이블: %s' % labels)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# DBSCAN을 사용하여 밀집도가 높은 지역 찾기"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.datasets import make_moons\n",
"\n",
"X, y = make_moons(n_samples=200, noise=0.05, random_state=0)\n",
"plt.scatter(X[:, 0], X[:, 1])\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"K-평균과 계층 군집:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"f, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 3))\n",
"\n",
"km = KMeans(n_clusters=2, random_state=0)\n",
"y_km = km.fit_predict(X)\n",
"ax1.scatter(X[y_km == 0, 0], X[y_km == 0, 1],\n",
" edgecolor='black',\n",
" c='lightblue', marker='o', s=40, label='cluster 1')\n",
"ax1.scatter(X[y_km == 1, 0], X[y_km == 1, 1],\n",
" edgecolor='black',\n",
" c='red', marker='s', s=40, label='cluster 2')\n",
"ax1.set_title('K-means clustering')\n",
"\n",
"ac = AgglomerativeClustering(n_clusters=2,\n",
" affinity='euclidean',\n",
" linkage='complete')\n",
"y_ac = ac.fit_predict(X)\n",
"ax2.scatter(X[y_ac == 0, 0], X[y_ac == 0, 1], c='lightblue',\n",
" edgecolor='black',\n",
" marker='o', s=40, label='cluster 1')\n",
"ax2.scatter(X[y_ac == 1, 0], X[y_ac == 1, 1], c='red',\n",
" edgecolor='black',\n",
" marker='s', s=40, label='cluster 2')\n",
"ax2.set_title('Agglomerative clustering')\n",
"\n",
"plt.legend()\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"DBSCAN:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.cluster import DBSCAN\n",
"\n",
"db = DBSCAN(eps=0.2, min_samples=5, metric='euclidean')\n",
"y_db = db.fit_predict(X)\n",
"plt.scatter(X[y_db == 0, 0], X[y_db == 0, 1],\n",
" c='lightblue', marker='o', s=40,\n",
" edgecolor='black', \n",
" label='cluster 1')\n",
"plt.scatter(X[y_db == 1, 0], X[y_db == 1, 1],\n",
" c='red', marker='s', s=40,\n",
" edgecolor='black', \n",
" label='cluster 2')\n",
"plt.legend()\n",
"plt.tight_layout()\n",
"plt.show()"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 1
}