Skip to content

Instantly share code, notes, and snippets.

@wdeback
Last active October 1, 2018 22:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wdeback/2112ec0afa6ce294409fbaa435129b5d to your computer and use it in GitHub Desktop.
Save wdeback/2112ec0afa6ce294409fbaa435129b5d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pylab as plt\n",
"import numpy as np\n",
"import umap # https://github.com/lmcinnes/umap"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- generate some binary image data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"n = 10\n",
"light = np.random.random((n,32,32)) > 0.40\n",
"dark = np.random.random((n,32,32)) > 0.60\n",
"allimg = np.concatenate([light, dark])\n",
"labels = np.array([0]*len(light)+[1]*len(light))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1440x360 with 20 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(2,n,figsize=(20,5))\n",
"for a, im in zip(ax.flatten(), allimg):\n",
" a.imshow(im, cmap='gray'); a.axis('off')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- embed images using umap and perform kmeans clustering in low-dim embedding space"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"embedding = umap.UMAP(n_components=2).fit_transform( allimg.reshape(allimg.shape[0], -1) )\n",
"from sklearn.cluster import KMeans\n",
"kmeans = KMeans(n_clusters=2).fit(embedding)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1a1f8fd278>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(*embedding.T, c=labels, s=150, cmap='viridis', label='ground truth', alpha=0.25)\n",
"plt.scatter(*embedding.T, c=kmeans.labels_, s=50, cmap='viridis', label='predicted')\n",
"plt.legend()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- compute accuracy "
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"y_pred = [0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1]\n",
"y_true = [0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1]\n",
"Accuracy (Rand index) = 100%\n"
]
}
],
"source": [
"from sklearn.metrics import adjusted_rand_score\n",
"print('y_pred = {}'.format(kmeans.labels_))\n",
"print('y_true = {}'.format(labels))\n",
"print('Accuracy (Rand index) = {:.0%}'.format(adjusted_rand_score(labels, kmeans.labels_)))"
]
}
],
"metadata": {
"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.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment