2109 lines
221 KiB
Plaintext
2109 lines
221 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"(1797, 64)\n",
|
|
"10\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"from sklearn import datasets\n",
|
|
"digits = datasets.load_digits()\n",
|
|
"print(digits.data.shape)\n",
|
|
"print(len(np.unique(digits.target)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"scrolled": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[ 0. 0. 5. 13. 9. 1. 0. 0. 0. 0. 13. 15. 10. 15. 5. 0. 0. 3.\n",
|
|
" 15. 2. 0. 11. 8. 0. 0. 4. 12. 0. 0. 8. 8. 0. 0. 5. 8. 0.\n",
|
|
" 0. 9. 8. 0. 0. 4. 11. 0. 1. 12. 7. 0. 0. 2. 14. 5. 10. 12.\n",
|
|
" 0. 0. 0. 0. 6. 13. 10. 0. 0. 0.]\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"0\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"1\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"2\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAGkCAYAAAAIduO+AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGPBJREFUeJzt3X9s1IX9x/HX0a4H0/YsSKEdpfwQRcB2QIGw6kSpmAaJ7g9GCGYVnFNSJtiYaP8ZmGVc98cMbiOlMFZMHIOxrOhMoGuZlCyzoy1pApogCJMiQudS7kqzHKb3+f61flehpZ+j7374XJ+P5JN5x+f4vGIcT+5H24DjOI4AADAyyusBAIDkRmgAAKYIDQDAFKEBAJgiNAAAU4QGAGCK0AAATBEaAIApQgMAMEVoAACmkiY027dv15QpUzR69GgtWrRIx48f93rSLR07dkwrVqxQTk6OAoGADh486PWkQQmHw1qwYIHS09OVlZWlZ555RqdPn/Z61qBUVVUpPz9fGRkZysjI0OLFi3Xo0CGvZ7lWWVmpQCCgTZs2eT3llrZs2aJAINDnmDlzptezBuXzzz/Xs88+q3HjxmnMmDF66KGH1NLS4vWsW5oyZcoN/84DgYDKyso82ZMUodm/f7/Ky8u1efNmnThxQgUFBXryySfV0dHh9bQBdXd3q6CgQNu3b/d6iiuNjY0qKytTU1OT6uvr9dVXX2nZsmXq7u72etotTZo0SZWVlWptbVVLS4sef/xxPf300/roo4+8njZozc3Nqq6uVn5+vtdTBm327Nn64osveo+//e1vXk+6pc7OThUVFekb3/iGDh06pI8//li/+MUvlJmZ6fW0W2pubu7z77u+vl6StHLlSm8GOUlg4cKFTllZWe/tnp4eJycnxwmHwx6uckeSU1tb6/WMhHR0dDiSnMbGRq+nJCQzM9P5zW9+4/WMQenq6nJmzJjh1NfXO48++qizceNGryfd0ubNm52CggKvZ7j22muvOQ8//LDXM4bExo0bnenTpzvxeNyT6/v+Gc3169fV2tqq4uLi3vtGjRql4uJiffjhhx4uGzkikYgkaezYsR4vcaenp0f79u1Td3e3Fi9e7PWcQSkrK9Py5cv7/PfuB2fOnFFOTo6mTZumNWvW6MKFC15PuqX33ntPhYWFWrlypbKysjR37lzt2rXL61muXb9+Xe+8847WrVunQCDgyQbfh+bLL79UT0+PJkyY0Of+CRMm6PLlyx6tGjni8bg2bdqkoqIizZkzx+s5g3Ly5EndfffdCgaDeumll1RbW6tZs2Z5PeuW9u3bpxMnTigcDns9xZVFixZpz549Onz4sKqqqnT+/Hk98sgj6urq8nragM6dO6eqqirNmDFDdXV1Wr9+vV5++WW9/fbbXk9z5eDBg7p69aqee+45zzakenZlJIWysjKdOnXKF6+5/9cDDzygtrY2RSIR/fGPf1RpaakaGxvv6Ni0t7dr48aNqq+v1+jRo72e40pJSUnvP+fn52vRokXKy8vTH/7wBz3//PMeLhtYPB5XYWGhtm7dKkmaO3euTp06pR07dqi0tNTjdYO3e/dulZSUKCcnx7MNvn9Gc++99yolJUVXrlzpc/+VK1c0ceJEj1aNDBs2bND777+vDz74QJMmTfJ6zqClpaXpvvvu0/z58xUOh1VQUKC33nrL61kDam1tVUdHh+bNm6fU1FSlpqaqsbFRv/zlL5Wamqqenh6vJw7aPffco/vvv19nz571esqAsrOzb/jLx4MPPuiLl/3+67PPPlNDQ4N++MMferrD96FJS0vT/PnzdeTIkd774vG4jhw54pvX3f3GcRxt2LBBtbW1+utf/6qpU6d6Pem2xONxxWIxr2cMaOnSpTp58qTa2tp6j8LCQq1Zs0ZtbW1KSUnxeuKgXbt2TZ9++qmys7O9njKgoqKiGz62/8knnygvL8+jRe7V1NQoKytLy5cv93RHUrx0Vl5ertLSUhUWFmrhwoXatm2buru7tXbtWq+nDejatWt9/lZ3/vx5tbW1aezYsZo8ebKHywZWVlamvXv36t1331V6enrve2GhUEhjxozxeN3AKioqVFJSosmTJ6urq0t79+7V0aNHVVdX5/W0AaWnp9/wHthdd92lcePG3fHvjb366qtasWKF8vLydOnSJW3evFkpKSlavXq119MG9Morr+g73/mOtm7dqu9///s6fvy4du7cqZ07d3o9bVDi8bhqampUWlqq1FSP/6j35LNuBn71q185kydPdtLS0pyFCxc6TU1NXk+6pQ8++MCRdMNRWlrq9bQB3WyzJKempsbrabe0bt06Jy8vz0lLS3PGjx/vLF261PnLX/7i9ayE+OXjzatWrXKys7OdtLQ051vf+pazatUq5+zZs17P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",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"3\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAGkCAYAAAAIduO+AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGNdJREFUeJzt3X9s1IX9x/HX0a4Hanv8kEI7SouKImALUiCsOlEQ0yCR/cEIw6wFt0RyDLAxMf1nsCzj2B9zuI1UYKwlcQy2Za3OBDpgtmSRjlLSBTRBUJQqQudi70r/OFzv8/1r910HtP0cffPhc30+kk/0zs9xrxjk6efu2gYcx3EEAICREV4PAACkN0IDADBFaAAApggNAMAUoQEAmCI0AABThAYAYIrQAABMERoAgClCAwAwlTah2bFjh4qKijRy5EjNnz9fJ06c8HrSgI4dO6Zly5YpPz9fgUBADQ0NXk8alEgkorlz5yo7O1u5ublavny5zp496/WsQampqVFxcbFycnKUk5OjBQsW6ODBg17Pcm3btm0KBALatGmT11MGtGXLFgUCgT7HtGnTvJ41KJ999pmef/55jRs3TqNGjdIjjzyikydPej1rQEVFRdf9Ow8EAgqHw57sSYvQHDhwQFVVVdq8ebNOnTqlkpISPfPMM+rs7PR6Wr96enpUUlKiHTt2eD3FlebmZoXDYbW0tOjw4cP66quvtGTJEvX09Hg9bUCTJk3Stm3b1NbWppMnT+qpp57Sc889p/fee8/raYPW2tqqnTt3qri42OspgzZjxgx9/vnnyeNvf/ub15MG9OWXX6qsrExf+9rXdPDgQb3//vv62c9+pjFjxng9bUCtra19/n0fPnxYkrRixQpvBjlpYN68eU44HE7e7u3tdfLz851IJOLhKnckOfX19V7PSElnZ6cjyWlubvZ6SkrGjBnj/PrXv/Z6xqB0d3c7U6dOdQ4fPuw88cQTzsaNG72eNKDNmzc7JSUlXs9w7ZVXXnEee+wxr2cMiY0bNzr333+/k0gkPHl+31/RXLt2TW1tbVq8eHHyvhEjRmjx4sU6fvy4h8uGj2g0KkkaO3asx0vc6e3t1f79+9XT06MFCxZ4PWdQwuGwli5d2uf3ux+cO3dO+fn5uu+++7R69WpdvHjR60kDeuutt1RaWqoVK1YoNzdXs2fP1u7du72e5dq1a9f0xhtvaO3atQoEAp5s8H1ovvjiC/X29mrChAl97p8wYYIuX77s0arhI5FIaNOmTSorK9PMmTO9njMop0+f1j333KNgMKgXX3xR9fX1mj59utezBrR//36dOnVKkUjE6ymuzJ8/X3V1dTp06JBqamp04cIFPf744+ru7vZ6Wr8++ugj1dTUaOrUqWpsbNS6deu0YcMG7d271+tprjQ0NKirq0uVlZWebcj07JmRFsLhsM6cOeOL19z/46GHHlJ7e7ui0aj++Mc/qqKiQs3NzXd0bDo6OrRx40YdPnxYI0eO9HqOK+Xl5cm/Ly4u1vz581VYWKjf//73euGFFzxc1r9EIqHS0lJt3bpVkjR79mydOXNGr7/+uioqKjxeN3h79uxReXm58vPzPdvg+yuae++9VxkZGbpy5Uqf+69cuaKJEyd6tGp4WL9+vd5++2298847mjRpktdzBi0rK0sPPPCA5syZo0gkopKSEr322mtez+pXW1ubOjs79eijjyozM1OZmZlqbm7WL37xC2VmZqq3t9friYM2evRoPfjggzp//rzXU/qVl5d33f98PPzww7542e8/PvnkEx05ckTf+973PN3h+9BkZWVpzpw5Onr0aPK+RCKho0eP+uZ1d79xHEfr169XfX29/vrXv2rKlCleT7oliURC8Xjc6xn9WrRokU6fPq329vbkUVpaqtWrV6u9vV0ZGRleTxy0q1ev6sMPP1ReXp7XU/pVVlZ23cf2P/jgAxUWFnq0yL3a2lrl5uZq6dKlnu5Ii5fOqqqqVFFRodLSUs2bN0/bt29XT0+P1qxZ4/W0fl29erXP/9VduHBB7e3tGjt2rCZPnuzhsv6Fw2Ht27dPb775prKzs5PvhYVCIY0aNcrjdf2rrq5WeXm5Jk+erO7ubu3bt09NTU1qbGz0elq/srOzr3sP7O6779a4cePu+PfGXn75ZS1btkyFhYW6dOmSNm/erIyMDK1atcrraf166aWX9I1vfENbt27Vt7/9bZ04cUK7du3Srl27vJ42KIlEQrW1taqoqFBmpsd/1HvyWTcDv/zlL53Jkyc7WVlZzrx585yWlhavJw3onXfecSRdd1RUVHg9rV832izJqa2t9XragNauXesUFhY6WVlZzvjx451FixY5f/nLX7yelRK/fLx55cqVTl5enpOVleV8/etfd1auXOmcP3/e61mD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CA0AwBShAQCYIjQAAFOEBgBgitAAAEwRGgCAKUIDADBFaAAApggNAMAUoQEAmCI0AABThAYAYIrQAABMERoAgKlb/sFnw0lXV5fXE1IWjUa9npCSiooKryekbNasWV5PGHYaGhq8noAb4IoGAGCK0AAATBEaAIApQgMAMEVoAACmCA0AwBShAQCYIjQAAFOEBgBgitAAAEwRGgCAKUIDADBFaAAApggNAMAUoQEAmCI0AABThAYAYIrQAABMERoAgClXodmyZYsCgUCfY9q0aVbbAABpINPtA2bMmKEjR478/y+Q6fqXAAAMI64rkZmZqYkTJ1psAQCkIdfv0Zw7d075+fm67777tHr1al28eLHf8+PxuGKxWJ8DADB8uArN/PnzVVdXp0OHDqmmpkYXLlzQ448/ru7u7ps+JhKJKBQKJY+CgoJbHg0A8I+A4zhOqg/u6upSYWGhXn31Vb3wwgs3PCcejysejydvx2Ix38Zm4cKFXk9IWUNDg9cTUhIKhbyekLJ//OMfXk9ISUlJidcTUjZmzBivJ6Skq6vL6wm3JBqNKicn56b//JbeyR89erQefPBBnT9//qbnBINBBYPBW3kaAICP3dLX0Vy9elUffvih8vLyhmoPACDNuArNyy+/rObmZn388cd699139a1vfUsZGRlatWqV1T4AgM+5euns008/1apVq/Svf/1L48eP12OPPaaWlhaNHz/eah8AwOdchWb//v1WOwAAaYrvdQYAMEVoAACmCA0AwBShAQCYIjQAAFOEBgBgitAAAEwRGgCAKUIDADBFaAAApggNAMAUoQEAmCI0AABThAYAYIrQAABMERoAgClXP/hsuGtqavJ6QspGjx7t9YSUzJo1y+sJKfPr75e9e/d6PSFlXV1dXk/ADXBFAwAwRWgAAKYIDQDAFKEBAJgiNAAAU4QGAGCK0AAATBEaAIApQgMAMEVoAACmCA0AwBShAQCYIjQAAFOEBgBgitAAAEwRGgCAKUIDADBFaAAAplyH5rPPPtPzzz+vcePGadSoUXrkkUd08uRJi20AgDSQ6ebkL7/8UmVlZXryySd18OBBjR8/XufOndOYMWOs9gEAfM5VaH7605+qoKBAtbW1yfumTJky5KMAAOnD1Utnb731lkpLS7VixQrl5uZq9uzZ2r17d7+PicfjisVifQ4AwPDhKjQfffSRampqNHXqVDU2NmrdunXasGGD9u7de9PHRCIRhUKh5FFQUHDLowEA/hFwHMcZ7MlZWVkqLS3Vu+++m7xvw4YNam1t1fHjx2/4mHg8rng8nrwdi8WIDQZt1qxZXk9IWVNTk9cTUtLQ0OD1hJRVVlZ6PWFYikajysnJuek/d3VFk5eXp+nTp/e57+GHH9bFixdv+phgMKicnJw+BwBg+HAVmrKyMp09e7bPfR988IEKCwuHdBQAIH24Cs1LL72klpYWbd26VefPn9e+ffu0a9cuhcNhq30AAJ9zFZq5c+eqvr5ev/vd7zRz5kz9+Mc/1vbt27V69WqrfQAAn3P1dTSS9Oyzz+rZZ5+12AIASEN8rzMAgClCAwAwRWgAAKYIDQDAFKEBAJgiNAAAU4QGAGCK0AAATBEaAIApQgMAMEVoAACmCA0AwBShAQCYIjQAAFOEBgBgitAAAEy5/sFnwO3U1dXl9YSUhUIhryekpK6uzusJSDNc0QAATBEaAIApQgMAMEVoAACmCA0AwBShAQCYIjQAAFOEBgBgitAAAEwRGgCAKUIDADBFaAAApggNAMAUoQEAmCI0AABThAYAYIrQAABMERoAgClCAwAw5So0RUVFCgQC1x3hcNhqHwDA5zLdnNza2qre3t7k7TNnzujpp5/WihUrhnwYACA9uArN+PHj+9zetm2b7r//fj3xxBNDOgoAkD5chea/Xbt2TW+88YaqqqoUCARuel48Hlc8Hk/ejsViqT4lAMCHUv4wQENDg7q6ulRZWdnveZFIRKFQKHkUFBSk+pQAAB9KOTR79uxReXm58vPz+z2vurpa0Wg0eXR0dKT6lAAAH0rppbNPPvlER44c0Z/+9KcBzw0GgwoGg6k8DQAgDaR0RVNbW6vc3FwtXbp0qPcAANKM69AkEgnV1taqoqJCmZkpf5YAADBMuA7NkSNHdPHiRa1du9ZiDwAgzbi+JFmyZIkcx7HYAgBIQ3yvMwCAKUIDADBFaAAApggNAMAUoQEAmCI0AABThAYAYIrQAABMERoAgClCAwAwRWgAAKYIDQDAFKEBAJgiNAAAU4QGAGDqtv+ITH6WDdxIJBJeT0hZLBbzekJK/v3vf3s9AT4z0J/rtz003d3dt/sp4WMXL170ekLKQqGQ1xOA26K7u7vf3+8B5zZfYiQSCV26dEnZ2dkKBAJD+mvHYjEVFBSoo6NDOTk5Q/prW/Lrbsm/2/26W/Lvdr/ulvy73Xq34zjq7u5Wfn6+Roy4+Tsxt/2KZsSIEZo0aZLpc+Tk5PjqN8N/+HW35N/tft0t+Xe7X3dL/t1uuXswV+58GAAAYIrQAABMpVVogsGgNm/erGAw6PUUV/y6W/Lvdr/ulvy73a+7Jf9uv1N23/YPAwAAhpe0uqIBANx5CA0AwBShAQCYIjQAAFOEBgBgitAAAEwRGgCAKUIDADD1f9w0SIch2BeyAAAAAElFTkSuQmCC",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"4\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"5\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"6\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"7\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"8\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 0 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 480x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"9\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt \n",
|
|
"\n",
|
|
"print(digits.data[0])\n",
|
|
"\n",
|
|
"for i in range(0,10):\n",
|
|
" plt.gray() \n",
|
|
" plt.matshow(digits.images[i]) \n",
|
|
" plt.show() \n",
|
|
"\n",
|
|
" print(digits.target[i])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from sklearn.cluster import KMeans\n",
|
|
"from sklearn import metrics"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<style>#sk-container-id-2 {\n",
|
|
" /* Definition of color scheme common for light and dark mode */\n",
|
|
" --sklearn-color-text: #000;\n",
|
|
" --sklearn-color-text-muted: #666;\n",
|
|
" --sklearn-color-line: gray;\n",
|
|
" /* Definition of color scheme for unfitted estimators */\n",
|
|
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
|
|
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
|
|
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
|
|
" --sklearn-color-unfitted-level-3: chocolate;\n",
|
|
" /* Definition of color scheme for fitted estimators */\n",
|
|
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
|
|
" --sklearn-color-fitted-level-1: #d4ebff;\n",
|
|
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
|
|
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2.light {\n",
|
|
" /* Specific color for light theme */\n",
|
|
" --sklearn-color-text-on-default-background: black;\n",
|
|
" --sklearn-color-background: white;\n",
|
|
" --sklearn-color-border-box: black;\n",
|
|
" --sklearn-color-icon: #696969;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2.dark {\n",
|
|
" --sklearn-color-text-on-default-background: white;\n",
|
|
" --sklearn-color-background: #111;\n",
|
|
" --sklearn-color-border-box: white;\n",
|
|
" --sklearn-color-icon: #878787;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 pre {\n",
|
|
" padding: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 input.sk-hidden--visually {\n",
|
|
" border: 0;\n",
|
|
" clip: rect(1px 1px 1px 1px);\n",
|
|
" clip: rect(1px, 1px, 1px, 1px);\n",
|
|
" height: 1px;\n",
|
|
" margin: -1px;\n",
|
|
" overflow: hidden;\n",
|
|
" padding: 0;\n",
|
|
" position: absolute;\n",
|
|
" width: 1px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-dashed-wrapped {\n",
|
|
" border: 1px dashed var(--sklearn-color-line);\n",
|
|
" margin: 0 0.4em 0.5em 0.4em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" padding-bottom: 0.4em;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-container {\n",
|
|
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
|
|
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
|
|
" so we also need the `!important` here to be able to override the\n",
|
|
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
|
|
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
|
|
" display: inline-block !important;\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-text-repr-fallback {\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-parallel-item,\n",
|
|
"div.sk-serial,\n",
|
|
"div.sk-item {\n",
|
|
" /* draw centered vertical line to link estimators */\n",
|
|
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
|
|
" background-size: 2px 100%;\n",
|
|
" background-repeat: no-repeat;\n",
|
|
" background-position: center center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Parallel-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item::after {\n",
|
|
" content: \"\";\n",
|
|
" width: 100%;\n",
|
|
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
|
|
" flex-grow: 1;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel {\n",
|
|
" display: flex;\n",
|
|
" align-items: stretch;\n",
|
|
" justify-content: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
|
|
" align-self: flex-end;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
|
|
" align-self: flex-start;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
|
|
" width: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Serial-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-serial {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
" align-items: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" padding-right: 1em;\n",
|
|
" padding-left: 1em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
|
|
"clickable and can be expanded/collapsed.\n",
|
|
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
|
|
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
|
|
"*/\n",
|
|
"\n",
|
|
"/* Pipeline and ColumnTransformer style (default) */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable {\n",
|
|
" /* Default theme specific background. It is overwritten whether we have a\n",
|
|
" specific estimator or a Pipeline/ColumnTransformer */\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable label */\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label {\n",
|
|
" cursor: pointer;\n",
|
|
" display: flex;\n",
|
|
" width: 100%;\n",
|
|
" margin-bottom: 0;\n",
|
|
" padding: 0.5em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" text-align: center;\n",
|
|
" align-items: center;\n",
|
|
" justify-content: center;\n",
|
|
" gap: 0.5em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label .caption {\n",
|
|
" font-size: 0.6rem;\n",
|
|
" font-weight: lighter;\n",
|
|
" color: var(--sklearn-color-text-muted);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
|
|
" /* Arrow on the left of the label */\n",
|
|
" content: \"▸\";\n",
|
|
" float: left;\n",
|
|
" margin-right: 0.25em;\n",
|
|
" color: var(--sklearn-color-icon);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable content - dropdown */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content {\n",
|
|
" display: none;\n",
|
|
" text-align: left;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content pre {\n",
|
|
" margin: 0.2em;\n",
|
|
" border-radius: 0.25em;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
|
|
" /* Expand drop-down */\n",
|
|
" display: block;\n",
|
|
" width: 100%;\n",
|
|
" overflow: visible;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
|
|
" content: \"▾\";\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Pipeline/ColumnTransformer-specific style */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific style */\n",
|
|
"\n",
|
|
"/* Colorize estimator box */\n",
|
|
"#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
|
|
"#sk-container-id-2 div.sk-label label {\n",
|
|
" /* The background is the default theme color */\n",
|
|
" color: var(--sklearn-color-text-on-default-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover, darken the color of the background */\n",
|
|
"#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Label box, darken color on hover, fitted */\n",
|
|
"#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator label */\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label label {\n",
|
|
" font-family: monospace;\n",
|
|
" font-weight: bold;\n",
|
|
" line-height: 1.2em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-label-container {\n",
|
|
" text-align: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific */\n",
|
|
"#sk-container-id-2 div.sk-estimator {\n",
|
|
" font-family: monospace;\n",
|
|
" border: 1px dotted var(--sklearn-color-border-box);\n",
|
|
" border-radius: 0.25em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" margin-bottom: 0.5em;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-estimator.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* on hover */\n",
|
|
"#sk-container-id-2 div.sk-estimator:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
|
|
"\n",
|
|
"/* Common style for \"i\" and \"?\" */\n",
|
|
"\n",
|
|
".sk-estimator-doc-link,\n",
|
|
"a:link.sk-estimator-doc-link,\n",
|
|
"a:visited.sk-estimator-doc-link {\n",
|
|
" float: right;\n",
|
|
" font-size: smaller;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border-radius: 1em;\n",
|
|
" height: 1em;\n",
|
|
" width: 1em;\n",
|
|
" text-decoration: none !important;\n",
|
|
" margin-left: 0.5em;\n",
|
|
" text-align: center;\n",
|
|
" /* unfitted */\n",
|
|
" border: var(--sklearn-color-unfitted-level-3) 1pt solid;\n",
|
|
" color: var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted,\n",
|
|
"a:link.sk-estimator-doc-link.fitted,\n",
|
|
"a:visited.sk-estimator-doc-link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-3) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
|
|
" color: var(--sklearn-color-unfitted-level-0);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
" border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-0);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Span, style for the box shown on hovering the info icon */\n",
|
|
".sk-estimator-doc-link span {\n",
|
|
" display: none;\n",
|
|
" z-index: 9999;\n",
|
|
" position: relative;\n",
|
|
" font-weight: normal;\n",
|
|
" right: .2ex;\n",
|
|
" padding: .5ex;\n",
|
|
" margin: .5ex;\n",
|
|
" width: min-content;\n",
|
|
" min-width: 20ex;\n",
|
|
" max-width: 50ex;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" box-shadow: 2pt 2pt 4pt #999;\n",
|
|
" /* unfitted */\n",
|
|
" background: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted span {\n",
|
|
" /* fitted */\n",
|
|
" background: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link:hover span {\n",
|
|
" display: block;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
|
|
"\n",
|
|
"#sk-container-id-2 a.estimator_doc_link {\n",
|
|
" float: right;\n",
|
|
" font-size: 1rem;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border-radius: 1rem;\n",
|
|
" height: 1rem;\n",
|
|
" width: 1rem;\n",
|
|
" text-decoration: none;\n",
|
|
" /* unfitted */\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 a.estimator_doc_link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"#sk-container-id-2 a.estimator_doc_link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table {\n",
|
|
" font-family: monospace;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table summary {\n",
|
|
" padding: .5rem;\n",
|
|
" cursor: pointer;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table summary::marker {\n",
|
|
" font-size: 0.7rem;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table details[open] {\n",
|
|
" padding-left: 0.1rem;\n",
|
|
" padding-right: 0.1rem;\n",
|
|
" padding-bottom: 0.3rem;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table .parameters-table {\n",
|
|
" margin-left: auto !important;\n",
|
|
" margin-right: auto !important;\n",
|
|
" margin-top: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table .parameters-table tr:nth-child(odd) {\n",
|
|
" background-color: #fff;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table .parameters-table tr:nth-child(even) {\n",
|
|
" background-color: #f6f6f6;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table .parameters-table tr:hover {\n",
|
|
" background-color: #e0e0e0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table table td {\n",
|
|
" border: 1px solid rgba(106, 105, 104, 0.232);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/*\n",
|
|
" `table td`is set in notebook with right text-align.\n",
|
|
" We need to overwrite it.\n",
|
|
"*/\n",
|
|
".estimator-table table td.param {\n",
|
|
" text-align: left;\n",
|
|
" position: relative;\n",
|
|
" padding: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".user-set td {\n",
|
|
" color:rgb(255, 94, 0);\n",
|
|
" text-align: left !important;\n",
|
|
"}\n",
|
|
"\n",
|
|
".user-set td.value {\n",
|
|
" color:rgb(255, 94, 0);\n",
|
|
" background-color: transparent;\n",
|
|
"}\n",
|
|
"\n",
|
|
".default td {\n",
|
|
" color: black;\n",
|
|
" text-align: left !important;\n",
|
|
"}\n",
|
|
"\n",
|
|
".user-set td i,\n",
|
|
".default td i {\n",
|
|
" color: black;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/*\n",
|
|
" Styles for parameter documentation links\n",
|
|
" We need styling for visited so jupyter doesn't overwrite it\n",
|
|
"*/\n",
|
|
"a.param-doc-link,\n",
|
|
"a.param-doc-link:link,\n",
|
|
"a.param-doc-link:visited {\n",
|
|
" text-decoration: underline dashed;\n",
|
|
" text-underline-offset: .3em;\n",
|
|
" color: inherit;\n",
|
|
" display: block;\n",
|
|
" padding: .5em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* \"hack\" to make the entire area of the cell containing the link clickable */\n",
|
|
"a.param-doc-link::before {\n",
|
|
" position: absolute;\n",
|
|
" content: \"\";\n",
|
|
" inset: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".param-doc-description {\n",
|
|
" display: none;\n",
|
|
" position: absolute;\n",
|
|
" z-index: 9999;\n",
|
|
" left: 0;\n",
|
|
" padding: .5ex;\n",
|
|
" margin-left: 1.5em;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" box-shadow: .3em .3em .4em #999;\n",
|
|
" width: max-content;\n",
|
|
" text-align: left;\n",
|
|
" max-height: 10em;\n",
|
|
" overflow-y: auto;\n",
|
|
"\n",
|
|
" /* unfitted */\n",
|
|
" background: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border: thin solid var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Fitted state for parameter tooltips */\n",
|
|
".fitted .param-doc-description {\n",
|
|
" /* fitted */\n",
|
|
" background: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: thin solid var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".param-doc-link:hover .param-doc-description {\n",
|
|
" display: block;\n",
|
|
"}\n",
|
|
"\n",
|
|
".copy-paste-icon {\n",
|
|
" background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiLz48L3N2Zz4=);\n",
|
|
" background-repeat: no-repeat;\n",
|
|
" background-size: 14px 14px;\n",
|
|
" background-position: 0;\n",
|
|
" display: inline-block;\n",
|
|
" width: 14px;\n",
|
|
" height: 14px;\n",
|
|
" cursor: pointer;\n",
|
|
"}\n",
|
|
"</style><body><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(init='random', n_clusters=10, n_init=1)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>KMeans</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"\">\n",
|
|
" <div class=\"estimator-table\">\n",
|
|
" <details>\n",
|
|
" <summary>Parameters</summary>\n",
|
|
" <table class=\"parameters-table\">\n",
|
|
" <tbody>\n",
|
|
" \n",
|
|
" <tr class=\"user-set\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('n_clusters',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=n_clusters,-int%2C%20default%3D8\">\n",
|
|
" n_clusters\n",
|
|
" <span class=\"param-doc-description\">n_clusters: int, default=8<br><br>The number of clusters to form as well as the number of<br>centroids to generate.<br><br>For an example of how to choose an optimal value for `n_clusters` refer to<br>:ref:`sphx_glr_auto_examples_cluster_plot_kmeans_silhouette_analysis.py`.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">10</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"user-set\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('init',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=init,-%7B%27k-means%2B%2B%27%2C%20%27random%27%7D%2C%20callable%20or%20array-like%20of%20shape%20%20%20%20%20%20%20%20%20%20%20%20%20%28n_clusters%2C%20n_features%29%2C%20default%3D%27k-means%2B%2B%27\">\n",
|
|
" init\n",
|
|
" <span class=\"param-doc-description\">init: {'k-means++', 'random'}, callable or array-like of shape (n_clusters, n_features), default='k-means++'<br><br>Method for initialization:<br><br>* 'k-means++' : selects initial cluster centroids using sampling based on an empirical probability distribution of the points' contribution to the overall inertia. This technique speeds up convergence. The algorithm implemented is \"greedy k-means++\". It differs from the vanilla k-means++ by making several trials at each sampling step and choosing the best centroid among them.<br><br>* 'random': choose `n_clusters` observations (rows) at random from data for the initial centroids.<br><br>* If an array is passed, it should be of shape (n_clusters, n_features) and gives the initial centers.<br><br>* If a callable is passed, it should take arguments X, n_clusters and a random state and return an initialization.<br><br>For an example of how to use the different `init` strategies, see<br>:ref:`sphx_glr_auto_examples_cluster_plot_kmeans_digits.py`.<br><br>For an evaluation of the impact of initialization, see the example<br>:ref:`sphx_glr_auto_examples_cluster_plot_kmeans_stability_low_dim_dense.py`.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">'random'</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"user-set\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('n_init',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=n_init,-%27auto%27%20or%20int%2C%20default%3D%27auto%27\">\n",
|
|
" n_init\n",
|
|
" <span class=\"param-doc-description\">n_init: 'auto' or int, default='auto'<br><br>Number of times the k-means algorithm is run with different centroid<br>seeds. The final results is the best output of `n_init` consecutive runs<br>in terms of inertia. Several runs are recommended for sparse<br>high-dimensional problems (see :ref:`kmeans_sparse_high_dim`).<br><br>When `n_init='auto'`, the number of runs depends on the value of init:<br>10 if using `init='random'` or `init` is a callable;<br>1 if using `init='k-means++'` or `init` is an array-like.<br><br>.. versionadded:: 1.2<br> Added 'auto' option for `n_init`.<br><br>.. versionchanged:: 1.4<br> Default value for `n_init` changed to `'auto'`.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">1</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('max_iter',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=max_iter,-int%2C%20default%3D300\">\n",
|
|
" max_iter\n",
|
|
" <span class=\"param-doc-description\">max_iter: int, default=300<br><br>Maximum number of iterations of the k-means algorithm for a<br>single run.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">300</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('tol',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=tol,-float%2C%20default%3D1e-4\">\n",
|
|
" tol\n",
|
|
" <span class=\"param-doc-description\">tol: float, default=1e-4<br><br>Relative tolerance with regards to Frobenius norm of the difference<br>in the cluster centers of two consecutive iterations to declare<br>convergence.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">0.0001</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('verbose',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=verbose,-int%2C%20default%3D0\">\n",
|
|
" verbose\n",
|
|
" <span class=\"param-doc-description\">verbose: int, default=0<br><br>Verbosity mode.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">0</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('random_state',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=random_state,-int%2C%20RandomState%20instance%20or%20None%2C%20default%3DNone\">\n",
|
|
" random_state\n",
|
|
" <span class=\"param-doc-description\">random_state: int, RandomState instance or None, default=None<br><br>Determines random number generation for centroid initialization. Use<br>an int to make the randomness deterministic.<br>See :term:`Glossary <random_state>`.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">None</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('copy_x',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=copy_x,-bool%2C%20default%3DTrue\">\n",
|
|
" copy_x\n",
|
|
" <span class=\"param-doc-description\">copy_x: bool, default=True<br><br>When pre-computing distances it is more numerically accurate to center<br>the data first. If copy_x is True (default), then the original data is<br>not modified. If False, the original data is modified, and put back<br>before the function returns, but small numerical differences may be<br>introduced by subtracting and then adding the data mean. Note that if<br>the original data is not C-contiguous, a copy will be made even if<br>copy_x is False. If the original data is sparse, but not in CSR format,<br>a copy will be made even if copy_x is False.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">True</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('algorithm',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=algorithm,-%7B%22lloyd%22%2C%20%22elkan%22%7D%2C%20default%3D%22lloyd%22\">\n",
|
|
" algorithm\n",
|
|
" <span class=\"param-doc-description\">algorithm: {\"lloyd\", \"elkan\"}, default=\"lloyd\"<br><br>K-means algorithm to use. The classical EM-style algorithm is `\"lloyd\"`.<br>The `\"elkan\"` variation can be more efficient on some datasets with<br>well-defined clusters, by using the triangle inequality. However it's<br>more memory intensive due to the allocation of an extra array of shape<br>`(n_samples, n_clusters)`.<br><br>.. versionchanged:: 0.18<br> Added Elkan algorithm<br><br>.. versionchanged:: 1.1<br> Renamed \"full\" to \"lloyd\", and deprecated \"auto\" and \"full\".<br> Changed \"auto\" to use \"lloyd\" instead of \"elkan\".</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">'lloyd'</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
" </tbody>\n",
|
|
" </table>\n",
|
|
" </details>\n",
|
|
" </div>\n",
|
|
" </div></div></div></div></div><script>function copyToClipboard(text, element) {\n",
|
|
" // Get the parameter prefix from the closest toggleable content\n",
|
|
" const toggleableContent = element.closest('.sk-toggleable__content');\n",
|
|
" const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
|
|
" const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",
|
|
"\n",
|
|
" const originalStyle = element.style;\n",
|
|
" const computedStyle = window.getComputedStyle(element);\n",
|
|
" const originalWidth = computedStyle.width;\n",
|
|
" const originalHTML = element.innerHTML.replace('Copied!', '');\n",
|
|
"\n",
|
|
" navigator.clipboard.writeText(fullParamName)\n",
|
|
" .then(() => {\n",
|
|
" element.style.width = originalWidth;\n",
|
|
" element.style.color = 'green';\n",
|
|
" element.innerHTML = \"Copied!\";\n",
|
|
"\n",
|
|
" setTimeout(() => {\n",
|
|
" element.innerHTML = originalHTML;\n",
|
|
" element.style = originalStyle;\n",
|
|
" }, 2000);\n",
|
|
" })\n",
|
|
" .catch(err => {\n",
|
|
" console.error('Failed to copy:', err);\n",
|
|
" element.style.color = 'red';\n",
|
|
" element.innerHTML = \"Failed!\";\n",
|
|
" setTimeout(() => {\n",
|
|
" element.innerHTML = originalHTML;\n",
|
|
" element.style = originalStyle;\n",
|
|
" }, 2000);\n",
|
|
" });\n",
|
|
" return false;\n",
|
|
"}\n",
|
|
"\n",
|
|
"document.querySelectorAll('.copy-paste-icon').forEach(function(element) {\n",
|
|
" const toggleableContent = element.closest('.sk-toggleable__content');\n",
|
|
" const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
|
|
" const paramName = element.parentElement.nextElementSibling\n",
|
|
" .textContent.trim().split(' ')[0];\n",
|
|
" const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",
|
|
"\n",
|
|
" element.setAttribute('title', fullParamName);\n",
|
|
"});\n",
|
|
"\n",
|
|
"\n",
|
|
"/**\n",
|
|
" * Adapted from Skrub\n",
|
|
" * https://github.com/skrub-data/skrub/blob/403466d1d5d4dc76a7ef569b3f8228db59a31dc3/skrub/_reporting/_data/templates/report.js#L789\n",
|
|
" * @returns \"light\" or \"dark\"\n",
|
|
" */\n",
|
|
"function detectTheme(element) {\n",
|
|
" const body = document.querySelector('body');\n",
|
|
"\n",
|
|
" // Check VSCode theme\n",
|
|
" const themeKindAttr = body.getAttribute('data-vscode-theme-kind');\n",
|
|
" const themeNameAttr = body.getAttribute('data-vscode-theme-name');\n",
|
|
"\n",
|
|
" if (themeKindAttr && themeNameAttr) {\n",
|
|
" const themeKind = themeKindAttr.toLowerCase();\n",
|
|
" const themeName = themeNameAttr.toLowerCase();\n",
|
|
"\n",
|
|
" if (themeKind.includes(\"dark\") || themeName.includes(\"dark\")) {\n",
|
|
" return \"dark\";\n",
|
|
" }\n",
|
|
" if (themeKind.includes(\"light\") || themeName.includes(\"light\")) {\n",
|
|
" return \"light\";\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Check Jupyter theme\n",
|
|
" if (body.getAttribute('data-jp-theme-light') === 'false') {\n",
|
|
" return 'dark';\n",
|
|
" } else if (body.getAttribute('data-jp-theme-light') === 'true') {\n",
|
|
" return 'light';\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Guess based on a parent element's color\n",
|
|
" const color = window.getComputedStyle(element.parentNode, null).getPropertyValue('color');\n",
|
|
" const match = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i);\n",
|
|
" if (match) {\n",
|
|
" const [r, g, b] = [\n",
|
|
" parseFloat(match[1]),\n",
|
|
" parseFloat(match[2]),\n",
|
|
" parseFloat(match[3])\n",
|
|
" ];\n",
|
|
"\n",
|
|
" // https://en.wikipedia.org/wiki/HSL_and_HSV#Lightness\n",
|
|
" const luma = 0.299 * r + 0.587 * g + 0.114 * b;\n",
|
|
"\n",
|
|
" if (luma > 180) {\n",
|
|
" // If the text is very bright we have a dark theme\n",
|
|
" return 'dark';\n",
|
|
" }\n",
|
|
" if (luma < 75) {\n",
|
|
" // If the text is very dark we have a light theme\n",
|
|
" return 'light';\n",
|
|
" }\n",
|
|
" // Otherwise fall back to the next heuristic.\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Fallback to system preference\n",
|
|
" return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"function forceTheme(elementId) {\n",
|
|
" const estimatorElement = document.querySelector(`#${elementId}`);\n",
|
|
" if (estimatorElement === null) {\n",
|
|
" console.error(`Element with id ${elementId} not found.`);\n",
|
|
" } else {\n",
|
|
" const theme = detectTheme(estimatorElement);\n",
|
|
" estimatorElement.classList.add(theme);\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"forceTheme('sk-container-id-2');</script></body>"
|
|
],
|
|
"text/plain": [
|
|
"KMeans(init='random', n_clusters=10, n_init=1)"
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"kmeans = KMeans(n_clusters=10, init='random', n_init=1)\n",
|
|
"kmeans.fit(digits.data)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"0.10907067334446299\n",
|
|
"0.745350822261002\n",
|
|
"0.76318258796145\n",
|
|
"0.6611470614010143\n",
|
|
"0.17430724039300127\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(metrics.accuracy_score(digits.target, kmeans.labels_))\n",
|
|
"print(metrics.homogeneity_score(digits.target, kmeans.labels_))\n",
|
|
"print(metrics.completeness_score(digits.target, kmeans.labels_))\n",
|
|
"print(metrics.adjusted_rand_score(digits.target, kmeans.labels_))\n",
|
|
"print(metrics.silhouette_score(digits.data, kmeans.labels_))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<style>#sk-container-id-4 {\n",
|
|
" /* Definition of color scheme common for light and dark mode */\n",
|
|
" --sklearn-color-text: #000;\n",
|
|
" --sklearn-color-text-muted: #666;\n",
|
|
" --sklearn-color-line: gray;\n",
|
|
" /* Definition of color scheme for unfitted estimators */\n",
|
|
" --sklearn-color-unfitted-level-0: #fff5e6;\n",
|
|
" --sklearn-color-unfitted-level-1: #f6e4d2;\n",
|
|
" --sklearn-color-unfitted-level-2: #ffe0b3;\n",
|
|
" --sklearn-color-unfitted-level-3: chocolate;\n",
|
|
" /* Definition of color scheme for fitted estimators */\n",
|
|
" --sklearn-color-fitted-level-0: #f0f8ff;\n",
|
|
" --sklearn-color-fitted-level-1: #d4ebff;\n",
|
|
" --sklearn-color-fitted-level-2: #b3dbfd;\n",
|
|
" --sklearn-color-fitted-level-3: cornflowerblue;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4.light {\n",
|
|
" /* Specific color for light theme */\n",
|
|
" --sklearn-color-text-on-default-background: black;\n",
|
|
" --sklearn-color-background: white;\n",
|
|
" --sklearn-color-border-box: black;\n",
|
|
" --sklearn-color-icon: #696969;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4.dark {\n",
|
|
" --sklearn-color-text-on-default-background: white;\n",
|
|
" --sklearn-color-background: #111;\n",
|
|
" --sklearn-color-border-box: white;\n",
|
|
" --sklearn-color-icon: #878787;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 pre {\n",
|
|
" padding: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 input.sk-hidden--visually {\n",
|
|
" border: 0;\n",
|
|
" clip: rect(1px 1px 1px 1px);\n",
|
|
" clip: rect(1px, 1px, 1px, 1px);\n",
|
|
" height: 1px;\n",
|
|
" margin: -1px;\n",
|
|
" overflow: hidden;\n",
|
|
" padding: 0;\n",
|
|
" position: absolute;\n",
|
|
" width: 1px;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-dashed-wrapped {\n",
|
|
" border: 1px dashed var(--sklearn-color-line);\n",
|
|
" margin: 0 0.4em 0.5em 0.4em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" padding-bottom: 0.4em;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-container {\n",
|
|
" /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
|
|
" but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
|
|
" so we also need the `!important` here to be able to override the\n",
|
|
" default hidden behavior on the sphinx rendered scikit-learn.org.\n",
|
|
" See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
|
|
" display: inline-block !important;\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-text-repr-fallback {\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-parallel-item,\n",
|
|
"div.sk-serial,\n",
|
|
"div.sk-item {\n",
|
|
" /* draw centered vertical line to link estimators */\n",
|
|
" background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
|
|
" background-size: 2px 100%;\n",
|
|
" background-repeat: no-repeat;\n",
|
|
" background-position: center center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Parallel-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-parallel-item::after {\n",
|
|
" content: \"\";\n",
|
|
" width: 100%;\n",
|
|
" border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
|
|
" flex-grow: 1;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-parallel {\n",
|
|
" display: flex;\n",
|
|
" align-items: stretch;\n",
|
|
" justify-content: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" position: relative;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-parallel-item {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-parallel-item:first-child::after {\n",
|
|
" align-self: flex-end;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-parallel-item:last-child::after {\n",
|
|
" align-self: flex-start;\n",
|
|
" width: 50%;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-parallel-item:only-child::after {\n",
|
|
" width: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Serial-specific style estimator block */\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-serial {\n",
|
|
" display: flex;\n",
|
|
" flex-direction: column;\n",
|
|
" align-items: center;\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
" padding-right: 1em;\n",
|
|
" padding-left: 1em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
|
|
"clickable and can be expanded/collapsed.\n",
|
|
"- Pipeline and ColumnTransformer use this feature and define the default style\n",
|
|
"- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
|
|
"*/\n",
|
|
"\n",
|
|
"/* Pipeline and ColumnTransformer style (default) */\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-toggleable {\n",
|
|
" /* Default theme specific background. It is overwritten whether we have a\n",
|
|
" specific estimator or a Pipeline/ColumnTransformer */\n",
|
|
" background-color: var(--sklearn-color-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable label */\n",
|
|
"#sk-container-id-4 label.sk-toggleable__label {\n",
|
|
" cursor: pointer;\n",
|
|
" display: flex;\n",
|
|
" width: 100%;\n",
|
|
" margin-bottom: 0;\n",
|
|
" padding: 0.5em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" text-align: center;\n",
|
|
" align-items: center;\n",
|
|
" justify-content: center;\n",
|
|
" gap: 0.5em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 label.sk-toggleable__label .caption {\n",
|
|
" font-size: 0.6rem;\n",
|
|
" font-weight: lighter;\n",
|
|
" color: var(--sklearn-color-text-muted);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 label.sk-toggleable__label-arrow:before {\n",
|
|
" /* Arrow on the left of the label */\n",
|
|
" content: \"▸\";\n",
|
|
" float: left;\n",
|
|
" margin-right: 0.25em;\n",
|
|
" color: var(--sklearn-color-icon);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Toggleable content - dropdown */\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-toggleable__content {\n",
|
|
" display: none;\n",
|
|
" text-align: left;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-toggleable__content.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-toggleable__content pre {\n",
|
|
" margin: 0.2em;\n",
|
|
" border-radius: 0.25em;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-toggleable__content.fitted pre {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
|
|
" /* Expand drop-down */\n",
|
|
" display: block;\n",
|
|
" width: 100%;\n",
|
|
" overflow: visible;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
|
|
" content: \"▾\";\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Pipeline/ColumnTransformer-specific style */\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific style */\n",
|
|
"\n",
|
|
"/* Colorize estimator box */\n",
|
|
"#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-label label.sk-toggleable__label,\n",
|
|
"#sk-container-id-4 div.sk-label label {\n",
|
|
" /* The background is the default theme color */\n",
|
|
" color: var(--sklearn-color-text-on-default-background);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover, darken the color of the background */\n",
|
|
"#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Label box, darken color on hover, fitted */\n",
|
|
"#sk-container-id-4 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator label */\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-label label {\n",
|
|
" font-family: monospace;\n",
|
|
" font-weight: bold;\n",
|
|
" line-height: 1.2em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-label-container {\n",
|
|
" text-align: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Estimator-specific */\n",
|
|
"#sk-container-id-4 div.sk-estimator {\n",
|
|
" font-family: monospace;\n",
|
|
" border: 1px dotted var(--sklearn-color-border-box);\n",
|
|
" border-radius: 0.25em;\n",
|
|
" box-sizing: border-box;\n",
|
|
" margin-bottom: 0.5em;\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-estimator.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* on hover */\n",
|
|
"#sk-container-id-4 div.sk-estimator:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 div.sk-estimator.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-2);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
|
|
"\n",
|
|
"/* Common style for \"i\" and \"?\" */\n",
|
|
"\n",
|
|
".sk-estimator-doc-link,\n",
|
|
"a:link.sk-estimator-doc-link,\n",
|
|
"a:visited.sk-estimator-doc-link {\n",
|
|
" float: right;\n",
|
|
" font-size: smaller;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border-radius: 1em;\n",
|
|
" height: 1em;\n",
|
|
" width: 1em;\n",
|
|
" text-decoration: none !important;\n",
|
|
" margin-left: 0.5em;\n",
|
|
" text-align: center;\n",
|
|
" /* unfitted */\n",
|
|
" border: var(--sklearn-color-unfitted-level-3) 1pt solid;\n",
|
|
" color: var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted,\n",
|
|
"a:link.sk-estimator-doc-link.fitted,\n",
|
|
"a:visited.sk-estimator-doc-link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-3) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
|
|
".sk-estimator-doc-link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
|
|
" color: var(--sklearn-color-unfitted-level-0);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover,\n",
|
|
"div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
|
|
".sk-estimator-doc-link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
" border: var(--sklearn-color-fitted-level-0) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-0);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Span, style for the box shown on hovering the info icon */\n",
|
|
".sk-estimator-doc-link span {\n",
|
|
" display: none;\n",
|
|
" z-index: 9999;\n",
|
|
" position: relative;\n",
|
|
" font-weight: normal;\n",
|
|
" right: .2ex;\n",
|
|
" padding: .5ex;\n",
|
|
" margin: .5ex;\n",
|
|
" width: min-content;\n",
|
|
" min-width: 20ex;\n",
|
|
" max-width: 50ex;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" box-shadow: 2pt 2pt 4pt #999;\n",
|
|
" /* unfitted */\n",
|
|
" background: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link.fitted span {\n",
|
|
" /* fitted */\n",
|
|
" background: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".sk-estimator-doc-link:hover span {\n",
|
|
" display: block;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* \"?\"-specific style due to the `<a>` HTML tag */\n",
|
|
"\n",
|
|
"#sk-container-id-4 a.estimator_doc_link {\n",
|
|
" float: right;\n",
|
|
" font-size: 1rem;\n",
|
|
" line-height: 1em;\n",
|
|
" font-family: monospace;\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border-radius: 1rem;\n",
|
|
" height: 1rem;\n",
|
|
" width: 1rem;\n",
|
|
" text-decoration: none;\n",
|
|
" /* unfitted */\n",
|
|
" color: var(--sklearn-color-unfitted-level-1);\n",
|
|
" border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 a.estimator_doc_link.fitted {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
|
|
" color: var(--sklearn-color-fitted-level-1);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* On hover */\n",
|
|
"#sk-container-id-4 a.estimator_doc_link:hover {\n",
|
|
" /* unfitted */\n",
|
|
" background-color: var(--sklearn-color-unfitted-level-3);\n",
|
|
" color: var(--sklearn-color-background);\n",
|
|
" text-decoration: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
"#sk-container-id-4 a.estimator_doc_link.fitted:hover {\n",
|
|
" /* fitted */\n",
|
|
" background-color: var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table {\n",
|
|
" font-family: monospace;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table summary {\n",
|
|
" padding: .5rem;\n",
|
|
" cursor: pointer;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table summary::marker {\n",
|
|
" font-size: 0.7rem;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table details[open] {\n",
|
|
" padding-left: 0.1rem;\n",
|
|
" padding-right: 0.1rem;\n",
|
|
" padding-bottom: 0.3rem;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table .parameters-table {\n",
|
|
" margin-left: auto !important;\n",
|
|
" margin-right: auto !important;\n",
|
|
" margin-top: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table .parameters-table tr:nth-child(odd) {\n",
|
|
" background-color: #fff;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table .parameters-table tr:nth-child(even) {\n",
|
|
" background-color: #f6f6f6;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table .parameters-table tr:hover {\n",
|
|
" background-color: #e0e0e0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".estimator-table table td {\n",
|
|
" border: 1px solid rgba(106, 105, 104, 0.232);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/*\n",
|
|
" `table td`is set in notebook with right text-align.\n",
|
|
" We need to overwrite it.\n",
|
|
"*/\n",
|
|
".estimator-table table td.param {\n",
|
|
" text-align: left;\n",
|
|
" position: relative;\n",
|
|
" padding: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".user-set td {\n",
|
|
" color:rgb(255, 94, 0);\n",
|
|
" text-align: left !important;\n",
|
|
"}\n",
|
|
"\n",
|
|
".user-set td.value {\n",
|
|
" color:rgb(255, 94, 0);\n",
|
|
" background-color: transparent;\n",
|
|
"}\n",
|
|
"\n",
|
|
".default td {\n",
|
|
" color: black;\n",
|
|
" text-align: left !important;\n",
|
|
"}\n",
|
|
"\n",
|
|
".user-set td i,\n",
|
|
".default td i {\n",
|
|
" color: black;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/*\n",
|
|
" Styles for parameter documentation links\n",
|
|
" We need styling for visited so jupyter doesn't overwrite it\n",
|
|
"*/\n",
|
|
"a.param-doc-link,\n",
|
|
"a.param-doc-link:link,\n",
|
|
"a.param-doc-link:visited {\n",
|
|
" text-decoration: underline dashed;\n",
|
|
" text-underline-offset: .3em;\n",
|
|
" color: inherit;\n",
|
|
" display: block;\n",
|
|
" padding: .5em;\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* \"hack\" to make the entire area of the cell containing the link clickable */\n",
|
|
"a.param-doc-link::before {\n",
|
|
" position: absolute;\n",
|
|
" content: \"\";\n",
|
|
" inset: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".param-doc-description {\n",
|
|
" display: none;\n",
|
|
" position: absolute;\n",
|
|
" z-index: 9999;\n",
|
|
" left: 0;\n",
|
|
" padding: .5ex;\n",
|
|
" margin-left: 1.5em;\n",
|
|
" color: var(--sklearn-color-text);\n",
|
|
" box-shadow: .3em .3em .4em #999;\n",
|
|
" width: max-content;\n",
|
|
" text-align: left;\n",
|
|
" max-height: 10em;\n",
|
|
" overflow-y: auto;\n",
|
|
"\n",
|
|
" /* unfitted */\n",
|
|
" background: var(--sklearn-color-unfitted-level-0);\n",
|
|
" border: thin solid var(--sklearn-color-unfitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
"/* Fitted state for parameter tooltips */\n",
|
|
".fitted .param-doc-description {\n",
|
|
" /* fitted */\n",
|
|
" background: var(--sklearn-color-fitted-level-0);\n",
|
|
" border: thin solid var(--sklearn-color-fitted-level-3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".param-doc-link:hover .param-doc-description {\n",
|
|
" display: block;\n",
|
|
"}\n",
|
|
"\n",
|
|
".copy-paste-icon {\n",
|
|
" background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDggNTEyIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIDYuNy4yIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuLS0+PHBhdGggZD0iTTIwOCAwTDMzMi4xIDBjMTIuNyAwIDI0LjkgNS4xIDMzLjkgMTQuMWw2Ny45IDY3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNDQ4IDMzNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjg4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4ek00OCAxMjhsODAgMCAwIDY0LTY0IDAgMCAyNTYgMTkyIDAgMC0zMiA2NCAwIDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDE3NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiLz48L3N2Zz4=);\n",
|
|
" background-repeat: no-repeat;\n",
|
|
" background-size: 14px 14px;\n",
|
|
" background-position: 0;\n",
|
|
" display: inline-block;\n",
|
|
" width: 14px;\n",
|
|
" height: 14px;\n",
|
|
" cursor: pointer;\n",
|
|
"}\n",
|
|
"</style><body><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=10)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>KMeans</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"\">\n",
|
|
" <div class=\"estimator-table\">\n",
|
|
" <details>\n",
|
|
" <summary>Parameters</summary>\n",
|
|
" <table class=\"parameters-table\">\n",
|
|
" <tbody>\n",
|
|
" \n",
|
|
" <tr class=\"user-set\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('n_clusters',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=n_clusters,-int%2C%20default%3D8\">\n",
|
|
" n_clusters\n",
|
|
" <span class=\"param-doc-description\">n_clusters: int, default=8<br><br>The number of clusters to form as well as the number of<br>centroids to generate.<br><br>For an example of how to choose an optimal value for `n_clusters` refer to<br>:ref:`sphx_glr_auto_examples_cluster_plot_kmeans_silhouette_analysis.py`.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">10</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('init',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=init,-%7B%27k-means%2B%2B%27%2C%20%27random%27%7D%2C%20callable%20or%20array-like%20of%20shape%20%20%20%20%20%20%20%20%20%20%20%20%20%28n_clusters%2C%20n_features%29%2C%20default%3D%27k-means%2B%2B%27\">\n",
|
|
" init\n",
|
|
" <span class=\"param-doc-description\">init: {'k-means++', 'random'}, callable or array-like of shape (n_clusters, n_features), default='k-means++'<br><br>Method for initialization:<br><br>* 'k-means++' : selects initial cluster centroids using sampling based on an empirical probability distribution of the points' contribution to the overall inertia. This technique speeds up convergence. The algorithm implemented is \"greedy k-means++\". It differs from the vanilla k-means++ by making several trials at each sampling step and choosing the best centroid among them.<br><br>* 'random': choose `n_clusters` observations (rows) at random from data for the initial centroids.<br><br>* If an array is passed, it should be of shape (n_clusters, n_features) and gives the initial centers.<br><br>* If a callable is passed, it should take arguments X, n_clusters and a random state and return an initialization.<br><br>For an example of how to use the different `init` strategies, see<br>:ref:`sphx_glr_auto_examples_cluster_plot_kmeans_digits.py`.<br><br>For an evaluation of the impact of initialization, see the example<br>:ref:`sphx_glr_auto_examples_cluster_plot_kmeans_stability_low_dim_dense.py`.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">'k-means++'</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('n_init',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=n_init,-%27auto%27%20or%20int%2C%20default%3D%27auto%27\">\n",
|
|
" n_init\n",
|
|
" <span class=\"param-doc-description\">n_init: 'auto' or int, default='auto'<br><br>Number of times the k-means algorithm is run with different centroid<br>seeds. The final results is the best output of `n_init` consecutive runs<br>in terms of inertia. Several runs are recommended for sparse<br>high-dimensional problems (see :ref:`kmeans_sparse_high_dim`).<br><br>When `n_init='auto'`, the number of runs depends on the value of init:<br>10 if using `init='random'` or `init` is a callable;<br>1 if using `init='k-means++'` or `init` is an array-like.<br><br>.. versionadded:: 1.2<br> Added 'auto' option for `n_init`.<br><br>.. versionchanged:: 1.4<br> Default value for `n_init` changed to `'auto'`.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">'auto'</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('max_iter',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=max_iter,-int%2C%20default%3D300\">\n",
|
|
" max_iter\n",
|
|
" <span class=\"param-doc-description\">max_iter: int, default=300<br><br>Maximum number of iterations of the k-means algorithm for a<br>single run.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">300</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('tol',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=tol,-float%2C%20default%3D1e-4\">\n",
|
|
" tol\n",
|
|
" <span class=\"param-doc-description\">tol: float, default=1e-4<br><br>Relative tolerance with regards to Frobenius norm of the difference<br>in the cluster centers of two consecutive iterations to declare<br>convergence.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">0.0001</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('verbose',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=verbose,-int%2C%20default%3D0\">\n",
|
|
" verbose\n",
|
|
" <span class=\"param-doc-description\">verbose: int, default=0<br><br>Verbosity mode.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">0</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('random_state',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=random_state,-int%2C%20RandomState%20instance%20or%20None%2C%20default%3DNone\">\n",
|
|
" random_state\n",
|
|
" <span class=\"param-doc-description\">random_state: int, RandomState instance or None, default=None<br><br>Determines random number generation for centroid initialization. Use<br>an int to make the randomness deterministic.<br>See :term:`Glossary <random_state>`.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">None</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('copy_x',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=copy_x,-bool%2C%20default%3DTrue\">\n",
|
|
" copy_x\n",
|
|
" <span class=\"param-doc-description\">copy_x: bool, default=True<br><br>When pre-computing distances it is more numerically accurate to center<br>the data first. If copy_x is True (default), then the original data is<br>not modified. If False, the original data is modified, and put back<br>before the function returns, but small numerical differences may be<br>introduced by subtracting and then adding the data mean. Note that if<br>the original data is not C-contiguous, a copy will be made even if<br>copy_x is False. If the original data is sparse, but not in CSR format,<br>a copy will be made even if copy_x is False.</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">True</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
"\n",
|
|
" <tr class=\"default\">\n",
|
|
" <td><i class=\"copy-paste-icon\"\n",
|
|
" onclick=\"copyToClipboard('algorithm',\n",
|
|
" this.parentElement.nextElementSibling)\"\n",
|
|
" ></i></td>\n",
|
|
" <td class=\"param\">\n",
|
|
" <a class=\"param-doc-link\"\n",
|
|
" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.8/modules/generated/sklearn.cluster.KMeans.html#:~:text=algorithm,-%7B%22lloyd%22%2C%20%22elkan%22%7D%2C%20default%3D%22lloyd%22\">\n",
|
|
" algorithm\n",
|
|
" <span class=\"param-doc-description\">algorithm: {\"lloyd\", \"elkan\"}, default=\"lloyd\"<br><br>K-means algorithm to use. The classical EM-style algorithm is `\"lloyd\"`.<br>The `\"elkan\"` variation can be more efficient on some datasets with<br>well-defined clusters, by using the triangle inequality. However it's<br>more memory intensive due to the allocation of an extra array of shape<br>`(n_samples, n_clusters)`.<br><br>.. versionchanged:: 0.18<br> Added Elkan algorithm<br><br>.. versionchanged:: 1.1<br> Renamed \"full\" to \"lloyd\", and deprecated \"auto\" and \"full\".<br> Changed \"auto\" to use \"lloyd\" instead of \"elkan\".</span>\n",
|
|
" </a>\n",
|
|
" </td>\n",
|
|
" <td class=\"value\">'lloyd'</td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
" </tbody>\n",
|
|
" </table>\n",
|
|
" </details>\n",
|
|
" </div>\n",
|
|
" </div></div></div></div></div><script>function copyToClipboard(text, element) {\n",
|
|
" // Get the parameter prefix from the closest toggleable content\n",
|
|
" const toggleableContent = element.closest('.sk-toggleable__content');\n",
|
|
" const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
|
|
" const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",
|
|
"\n",
|
|
" const originalStyle = element.style;\n",
|
|
" const computedStyle = window.getComputedStyle(element);\n",
|
|
" const originalWidth = computedStyle.width;\n",
|
|
" const originalHTML = element.innerHTML.replace('Copied!', '');\n",
|
|
"\n",
|
|
" navigator.clipboard.writeText(fullParamName)\n",
|
|
" .then(() => {\n",
|
|
" element.style.width = originalWidth;\n",
|
|
" element.style.color = 'green';\n",
|
|
" element.innerHTML = \"Copied!\";\n",
|
|
"\n",
|
|
" setTimeout(() => {\n",
|
|
" element.innerHTML = originalHTML;\n",
|
|
" element.style = originalStyle;\n",
|
|
" }, 2000);\n",
|
|
" })\n",
|
|
" .catch(err => {\n",
|
|
" console.error('Failed to copy:', err);\n",
|
|
" element.style.color = 'red';\n",
|
|
" element.innerHTML = \"Failed!\";\n",
|
|
" setTimeout(() => {\n",
|
|
" element.innerHTML = originalHTML;\n",
|
|
" element.style = originalStyle;\n",
|
|
" }, 2000);\n",
|
|
" });\n",
|
|
" return false;\n",
|
|
"}\n",
|
|
"\n",
|
|
"document.querySelectorAll('.copy-paste-icon').forEach(function(element) {\n",
|
|
" const toggleableContent = element.closest('.sk-toggleable__content');\n",
|
|
" const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
|
|
" const paramName = element.parentElement.nextElementSibling\n",
|
|
" .textContent.trim().split(' ')[0];\n",
|
|
" const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",
|
|
"\n",
|
|
" element.setAttribute('title', fullParamName);\n",
|
|
"});\n",
|
|
"\n",
|
|
"\n",
|
|
"/**\n",
|
|
" * Adapted from Skrub\n",
|
|
" * https://github.com/skrub-data/skrub/blob/403466d1d5d4dc76a7ef569b3f8228db59a31dc3/skrub/_reporting/_data/templates/report.js#L789\n",
|
|
" * @returns \"light\" or \"dark\"\n",
|
|
" */\n",
|
|
"function detectTheme(element) {\n",
|
|
" const body = document.querySelector('body');\n",
|
|
"\n",
|
|
" // Check VSCode theme\n",
|
|
" const themeKindAttr = body.getAttribute('data-vscode-theme-kind');\n",
|
|
" const themeNameAttr = body.getAttribute('data-vscode-theme-name');\n",
|
|
"\n",
|
|
" if (themeKindAttr && themeNameAttr) {\n",
|
|
" const themeKind = themeKindAttr.toLowerCase();\n",
|
|
" const themeName = themeNameAttr.toLowerCase();\n",
|
|
"\n",
|
|
" if (themeKind.includes(\"dark\") || themeName.includes(\"dark\")) {\n",
|
|
" return \"dark\";\n",
|
|
" }\n",
|
|
" if (themeKind.includes(\"light\") || themeName.includes(\"light\")) {\n",
|
|
" return \"light\";\n",
|
|
" }\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Check Jupyter theme\n",
|
|
" if (body.getAttribute('data-jp-theme-light') === 'false') {\n",
|
|
" return 'dark';\n",
|
|
" } else if (body.getAttribute('data-jp-theme-light') === 'true') {\n",
|
|
" return 'light';\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Guess based on a parent element's color\n",
|
|
" const color = window.getComputedStyle(element.parentNode, null).getPropertyValue('color');\n",
|
|
" const match = color.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$/i);\n",
|
|
" if (match) {\n",
|
|
" const [r, g, b] = [\n",
|
|
" parseFloat(match[1]),\n",
|
|
" parseFloat(match[2]),\n",
|
|
" parseFloat(match[3])\n",
|
|
" ];\n",
|
|
"\n",
|
|
" // https://en.wikipedia.org/wiki/HSL_and_HSV#Lightness\n",
|
|
" const luma = 0.299 * r + 0.587 * g + 0.114 * b;\n",
|
|
"\n",
|
|
" if (luma > 180) {\n",
|
|
" // If the text is very bright we have a dark theme\n",
|
|
" return 'dark';\n",
|
|
" }\n",
|
|
" if (luma < 75) {\n",
|
|
" // If the text is very dark we have a light theme\n",
|
|
" return 'light';\n",
|
|
" }\n",
|
|
" // Otherwise fall back to the next heuristic.\n",
|
|
" }\n",
|
|
"\n",
|
|
" // Fallback to system preference\n",
|
|
" return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n",
|
|
"}\n",
|
|
"\n",
|
|
"\n",
|
|
"function forceTheme(elementId) {\n",
|
|
" const estimatorElement = document.querySelector(`#${elementId}`);\n",
|
|
" if (estimatorElement === null) {\n",
|
|
" console.error(`Element with id ${elementId} not found.`);\n",
|
|
" } else {\n",
|
|
" const theme = detectTheme(estimatorElement);\n",
|
|
" estimatorElement.classList.add(theme);\n",
|
|
" }\n",
|
|
"}\n",
|
|
"\n",
|
|
"forceTheme('sk-container-id-4');</script></body>"
|
|
],
|
|
"text/plain": [
|
|
"KMeans(n_clusters=10)"
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"kmeans2 = KMeans(n_clusters=10)\n",
|
|
"kmeans2.fit(digits.data)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"0.012799109627156371\n",
|
|
"0.7055173362142219\n",
|
|
"0.715457995208012\n",
|
|
"0.6301885151444379\n",
|
|
"0.16699457553360253\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(metrics.accuracy_score(digits.target, kmeans2.labels_))\n",
|
|
"print(metrics.homogeneity_score(digits.target, kmeans2.labels_))\n",
|
|
"print(metrics.completeness_score(digits.target, kmeans2.labels_))\n",
|
|
"print(metrics.adjusted_rand_score(digits.target, kmeans2.labels_))\n",
|
|
"print(metrics.silhouette_score(digits.data, kmeans2.labels_))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[(np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(9)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(5)), (np.int64(2), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(3)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(5)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(3)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(5)), (np.int64(2), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(0)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(3)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(9)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(3)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(3)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(0)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(5), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(4)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(5)), (np.int64(1), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(3)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(4)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(0)), (np.int64(1), np.int32(6)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(0)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(0)), (np.int64(3), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(4)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(4)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(0)), (np.int64(1), np.int32(6)), (np.int64(3), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(0)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(4)), (np.int64(5), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(4), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(1)), (np.int64(5), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(8)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(3)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(5), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(2)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(7)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(3)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(5), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(0)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(4)), (np.int64(5), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(4)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(4)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(2), np.int32(7)), (np.int64(5), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(3)), (np.int64(9), np.int32(8)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(7)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(8)), (np.int64(2), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(5), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(7)), (np.int64(8), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(9)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(9)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(5), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(4)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(6)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(4)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(2), np.int32(4)), (np.int64(5), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(5), np.int32(0)), (np.int64(1), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(8)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(0)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(0)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(5), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(0)), (np.int64(8), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(5)), (np.int64(7), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(9)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(9)), (np.int64(8), np.int32(3)), (np.int64(9), np.int32(9)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(2)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(4)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(5)), (np.int64(3), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(3)), (np.int64(3), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(2), np.int32(4)), (np.int64(8), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(7)), (np.int64(4), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(3)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(9)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(4)), (np.int64(5), np.int32(9)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(8)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(9)), (np.int64(8), np.int32(3)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(8)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(3), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(5), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(9)), (np.int64(5), np.int32(9)), (np.int64(6), np.int32(6)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(7), np.int32(3)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(5)), (np.int64(3), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(3), np.int32(0)), (np.int64(3), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(6), np.int32(6)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(5), np.int32(9)), (np.int64(0), np.int32(2)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(0), np.int32(2)), (np.int64(0), np.int32(2)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(2), np.int32(7)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(4), np.int32(1)), (np.int64(6), np.int32(6)), (np.int64(3), np.int32(8)), (np.int64(1), np.int32(5)), (np.int64(3), np.int32(8)), (np.int64(9), np.int32(0)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(6), np.int32(6)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(3), np.int32(9)), (np.int64(1), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(0), np.int32(2)), (np.int64(5), np.int32(0)), (np.int64(3), np.int32(8)), (np.int64(6), np.int32(6)), (np.int64(9), np.int32(0)), (np.int64(6), np.int32(6)), (np.int64(1), np.int32(5)), (np.int64(7), np.int32(3)), (np.int64(5), np.int32(9)), (np.int64(4), np.int32(1)), (np.int64(4), np.int32(1)), (np.int64(7), np.int32(3)), (np.int64(2), np.int32(7)), (np.int64(8), np.int32(5)), (np.int64(2), np.int32(7)), (np.int64(2), np.int32(7)), (np.int64(5), np.int32(0)), (np.int64(7), np.int32(3)), (np.int64(9), np.int32(0)), (np.int64(5), np.int32(0)), (np.int64(4), np.int32(1)), (np.int64(8), np.int32(5)), (np.int64(8), np.int32(5)), (np.int64(4), np.int32(1)), (np.int64(9), np.int32(0)), (np.int64(0), np.int32(2)), (np.int64(8), np.int32(5)), (np.int64(9), np.int32(0)), (np.int64(8), np.int32(0))]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"print(list(zip(digits.target,kmeans.labels_)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"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.13.12"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|