287 lines (286 with data), 39.5 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 53,
"id": "2348d74d-b6cb-4974-a916-da968e8b2fd7",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 77,
"id": "873b745b-9f4e-414e-a878-4b6278ce6736",
"metadata": {},
"outputs": [],
"source": [
"from minisom import MiniSom\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"from sklearn import datasets\n",
"from sklearn.preprocessing import scale\n",
"\n",
"import seaborn as sns"
]
},
{
"cell_type": "code",
"execution_count": 91,
"id": "6b76167a-0fc7-4933-91ed-df5e9999d3c5",
"metadata": {},
"outputs": [],
"source": [
"# load the digits dataset from scikit-learn\n",
"digits = datasets.load_digits(n_class=10)\n",
"data = digits.data # matrix where each row is a vector that represent a digit.\n",
"data = scale(data)\n",
"dfx = pd.DataFrame(data)\n",
"num = digits.target # num[i] is the digit represented by data[i]\n",
"cols = dfx.columns.tolist()\n",
"np.random.shuffle(cols)\n",
"dfx1 = dfx[cols]\n",
"\n",
"X = dfx1.T.values\n"
]
},
{
"cell_type": "code",
"execution_count": 122,
"id": "78db08aa-2d47-4225-b155-f20a7106370a",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/shenwanxiang/anaconda3/envs/molmap/lib/python3.6/site-packages/minisom.py:370: ComplexWarning: Casting complex values to real discards the imaginary part\n",
" self._weights[i, j] = c1*pc[pc_order[0]] + c2*pc[pc_order[1]]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" [ 10000 / 10000 ] 100% - 0:00:00 left \n",
" quantization error: 16.10853863033332\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/shenwanxiang/anaconda3/envs/molmap/lib/python3.6/site-packages/minisom.py:486: RuntimeWarning: invalid value encountered in sqrt\n",
" return sqrt(-2 * cross_term + input_data_sq + weights_flat_sq.T)\n"
]
}
],
"source": [
"\n",
"som = MiniSom(8, 8, 1797, sigma=1, learning_rate=0.5, neighborhood_function='triangle')\n",
"som.pca_weights_init(X)\n",
"som.train(X, 10000, random_order=True, verbose=True) # random training"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7f3ee5b3-d9d8-4c6f-b9a4-09f7a74a3083",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 123,
"id": "0d34fd44-335d-41a8-b777-b9aa8c9ed020",
"metadata": {},
"outputs": [],
"source": [
"wp = []\n",
"for i, x in enumerate(X):\n",
" x,y = som.winner(x)\n",
" wp.append([x, y, i])"
]
},
{
"cell_type": "code",
"execution_count": 124,
"id": "0db0988b-950b-4397-b739-df67b310c3de",
"metadata": {},
"outputs": [],
"source": [
"idx = pd.DataFrame(wp).sort_values([0, 1])[2].tolist()"
]
},
{
"cell_type": "code",
"execution_count": 125,
"id": "721e93bb-36c1-4efa-9336-c9fdadd9ede2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f05807fa710>"
]
},
"execution_count": 125,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(X[:, 12].reshape(8,8))"
]
},
{
"cell_type": "code",
"execution_count": 130,
"id": "4690a7be-d8e3-4016-b7e1-585e3f305804",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f0580750c18>"
]
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(dfx1.values[19][idx].reshape(8,8))"
]
},
{
"cell_type": "code",
"execution_count": 76,
"id": "42e7af1f-a5a4-4344-ba1f-e97eeb4871ac",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8, 8))\n",
"wmap = {}\n",
"im = 0\n",
"for x, t in zip(data.T, num): # scatterplot\n",
" w = som.winner(x)\n",
" wmap[w] = im\n",
" plt. text(w[0], w[1], str(t),\n",
" color=plt.cm.rainbow(t / 10.), fontdict={'weight': 'bold', 'size': 11})\n",
" im = im + 1\n",
"plt.axis([0, som.get_weights().shape[0], 0, som.get_weights().shape[1]])\n",
"# plt.savefig('resulting_images/som_digts.png')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 134,
"id": "0d2da8a7-6c81-4f0a-9fcb-4fde4b58f4c8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot:>"
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.heatmap(som.distance_map())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bb243b2c-4867-446b-b6c6-e0bc56c1615f",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}