pythondcnda算法聚类_ML-hand/5kmeans聚类.ipynb at master · Briareox/ML-hand · GitHub

{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"5kmeans聚类.ipynb","version":"0.3.2","provenance":[],"collapsed_sections":[]},"kernelspec":{"name":"python3","display_name":"Python 3"}},"cells":[{"metadata":{"id":"QhDJAWG6-fAb","colab_type":"code","colab":{}},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]},{"metadata":{"id":"CE5VbcIw_A0I","colab_type":"text"},"cell_type":"markdown","source":["# Kmeans"]},{"metadata":{"id":"8jtGxdUn_CTy","colab_type":"code","colab":{}},"cell_type":"code","source":["import os, sys\n","import argparse\n","import numpy as np\n","import time\n","import matplotlib.pyplot as plt"],"execution_count":0,"outputs":[]},{"metadata":{"id":"msMaUmKA_aTI","colab_type":"code","colab":{}},"cell_type":"code","source":["np.random.seed(42)\n","# Sample data points from three different Gaussians.\n","u1, u2, u3 = np.asarray([1.0, 1.0]), np.asarray([-1.0, 1.0]), np.asarray([5.0, 5.0])\n","sigma1, sigma2, sigma3 = np.random.rand(2, 2), np.random.rand(2, 2), np.random.rand(2, 2)\n","sigma1 = np.dot(sigma1, sigma1.T) * 1.0\n","sigma2 = np.dot(sigma2, sigma2.T) * 5.0\n","sigma3 = np.dot(sigma3, sigma3.T) * 2.0\n","\n","num_pts = 100\n","samples1 = np.random.multivariate_normal(u1, sigma1 * np.ones((2, 2)), size=num_pts)\n","samples2 = np.random.multivariate_normal(u2, sigma2 * np.ones((2, 2)), size=num_pts)\n","samples3 = np.random.multivariate_normal(u3, sigma3 * np.ones((2, 2)), size=num_pts)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"tgnponPe_c0Z","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":362},"outputId":"9a91e4cc-d8a7-43b6-fc28-5174d996bb35","executionInfo":{"status":"ok","timestamp":1552647715367,"user_tz":-480,"elapsed":6338,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["# Plot for visualization.\n","plt.figure()\n","plt.scatter(samples1[:, 0], samples1[:, 1], s=40, c=\"r\", alpha=0.5)\n","plt.scatter(samples2[:, 0], samples2[:, 1], s=40, c=\"b\", alpha=0.5)\n","plt.scatter(samples3[:, 0], samples3[:, 1], s=40, c=\"g\", alpha=0.5)\n","plt.grid(True)\n","plt.title(\"Ground Truth Clustering\")\n","# plt.savefig(\"./examples/clustering_{}.pdf\".format(args.seed), bbox_inches=\"tight\")\n","plt.show()"],"execution_count":6,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAd8AAAFZCAYAAADZ6SWdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvXl4XPV97/86Z0aa0TIjjWzJizS2\nZbME2RIGhzTIBAiYmCaQ0PIj+OcfZGlL47QlpQ+9SUvSQpebp+Te3tBL8mThJk1Kr28cB24SA8EN\nZUmCCQmYIGMHbCzJnhG2JVuzSNaMpJn5/v44mtGs0myaRfq8HnjsOXOW7zm29T6fXVNKKQRBEARB\nKBl6uRcgCIIgCEsNEV9BEARBKDEivoIgCIJQYkR8BUEQBKHEiPgKgiAIQokR8RUEQRCEEiPiKyx6\nlFL827/9Gx/+8If53d/9XW644Qbuuusu3njjjbKt6ROf+ASPP/54wrZjx45x4403cuONN3LVVVex\nefPm2OdvfOMbOZ3/7Nmz/Od//icAbrebrq6urI/94Q9/yC233MKNN97I9ddfz7333suZM2cAePjh\nh/n85z+f01ri+f73v5/zMWfOnOGmm27K+5qCUImYy70AQVhovvzlL/Pyyy/zv/7X/6KtrY1wOMze\nvXv55Cc/yf79+2lpaSn3EgG48MILefrppwF4/PHH+fGPf8x3vvOdvM718ssvc+DAAa6//vqcjtu9\nezff+c53+NrXvsaGDRuYnp7ma1/7GnfccQdPPPFEXmuJEg6H+dKXvsRHP/rRnI5bsWJFwdcWhEpD\nLF9hUeP1evnud7/Lgw8+SFtbGwAmk4kdO3bw3HPPxYT3zjvv5Mtf/jK/+7u/y8GDB/F6vfz5n/85\n27dv54Mf/CDf/OY3gVQrMv7z448/zmc+8xnuu+++2HHHjh0DwOVycdttt7Ft2zbuvfdewuFwzvfy\n8ssvs2PHDv78z/+ce++9l5dffpkbbrgh4fsbbriBw4cP8/d///fs37+fv/iLv4h9/4Mf/ICbb76Z\na665Jq2YRSIRvvrVr/K3f/u3bNiwAYCamho+85nP8LnPfQ5N0xL2v+6663jllVdSPodCIT7/+c+z\nfft2brjhBv7sz/6M8fFxPvnJTzI2NsaNN96Iy+Xi9OnT7Nq1i+3bt7N9+3ZeeOGF2DO96qqr+OIX\nv8gdd9yR9TN2u93ccsstXHfddfzt3/4tn/rUp1K8C4JQKYj4Coua119/nVWrVrFu3bqU7xobGxM+\nv/HGGzz55JNcfvnl/I//8T9oampi//797N69m//zf/5PgtBk4mc/+xk7d+5k//79/M7v/A7f/e53\nAfjv//2/c+WVV/LMM8/w8Y9/nIMHD+Z1P0eOHGHHjh388z//c8Z9Nm7cyB133MH27dv58pe/DBjC\nOj09zb59+/jrv/5rHnrooZTj+vv78fl8bN26NeW7bdu2UVtbm9Uaf/GLX+B2u3n66af5j//4Dy64\n4AJee+01vvjFL2IymXj66adxOp187nOf413vehf79+/nm9/8Jp/97GfxeDyA8dJ0ySWX8O///u8p\n58/0jL/0pS+xdetWnn32Wa6++moOHDiQ1XoFoRyI+AqLGp/Pl+BW9vv9sTjq1VdfzSOPPBL77ppr\nrkHXjX8SL7zwAjt37gSgubmZG264gRdffHHe623YsIFNmzYB0NXVxalTpwB45ZVX+OAHPwhAT08P\n69evz+t+rFYrV155Zc7HKaW45ZZbYus6ffp0yj5er5eWlpYUCzdXWlpaOH78OD/96U8JBALcc889\nvO9970vYZ2JigpdffplPfOITAKxdu5YtW7bErN/p6ekEqz6euZ5xNDa8bdu2mKdDECoRifkKi5qW\nlhaGh4djn+12eyyu+vnPf55gMBj7rqmpKfb70dFR7HZ7wnHx58mEzWaL/d5kMsXcyz6fL8HSjj93\nLsSvMRdMJhN1dXUA6LpOJBJJ2cfhcHDu3DlCoRBmc/4/Gnp6evjCF77Ao48+yuc+9zmuu+467r//\n/oR9xsbGUEqxY8eO2LaJiQne+973xtab7JmIkukZ+/3+hOezYsWKvO9BEBYasXyFRc3mzZs5d+4c\nR44cyem45cuX4/V6Y5+9Xi/Lly/HZDIRiUSIziPx+/1Znc9utzM+Ph77PDo6mtN60hEvPLmsJROd\nnZ20tLTw7LPPpnz3la98JWXNySLu8/liv7/xxht59NFHee655wgEAnzrW99KOHbZsmWYTCYee+wx\nnn76aZ5++ml+9rOf8bGPfSzv9Tc0NDAxMRH7PDIykve5BGGhEfEVFjWNjY38yZ/8CZ/97Gc5ceIE\nYMQ/n3zySX7yk5+wZs2atMdde+217NmzBzCE8qc//SnXXnstDocDk8nEW2+9BRhlOdmwefNmfvrT\n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\nnN4NG0asCzXjzBlDJ08WSIp9/upVQ4FAVEuXpg/QVIu/5jLdDQDIH3kdvjMldsPhsFRdHZnT9O/I\nyFTwTjH+/zy1VNPaZqe7AQD5xVXhK011w16vNDo6t66zujqioaECRROy2jBiz9NJtvgr/hwA4D6u\nC9/5qK2N6vLliPz+qXe+NTVR1damD9Fki7/mMt0NAMgvhO8cxEP07rvnFqLJFn+x2hkA3IvwnYP5\nhOjMxV8AAPcifOfIbIiyrxcAkArhmwPs6wUApJO3ZzvbKd2+XgAACN8cYF8vACAdwjcHUu3fZV8v\nAEAifHNizZprMozpQcu+XgBAHAuucoB9vQCAdAjfHGFfLwAgFaadAQCw2LzCd2xsTKtXr9Y333yT\nrXoAAMh78wrftrY21dTUZKsWAABcIePwHRwcVFlZme68885s1gMAQN7LaMHVv//+qz179qijo0Ot\nra2mPlNZuVgej7NOePJ6l9hdwoLBWJnDOJnHWJnDOJm3kMZq1vD1+Xzy+XzTnq1fv1719fWqqKgw\n/UWBwMTcq8shr3eJRkfH7S5jQWCszGGczGOszGGczHPiWKX7Y8CIRqNz3nza1NSkSCQiSfrjjz9U\nVVWlt99+W6tWrUr5GScOitNqcirGyhzGyTzGyhzGyTwnjlW68M1o2rm7u3vy3zt37tTmzZvTBi8A\nAJjCPl8AACw27xOu3nzzzWzUAQCAa2T0zhcAAGSOaWcAACxG+AIAYDHCFwAAixG+AABYjPAFAMBi\nhC8AABZzbfiGw2E1Nzdry5Ytamho0IkTJ+wuyXFaW1vV2NiopqYm/fjjj3aX42htbW1qbGzU008/\nrSNHjthdjqOFQiFt3LhRH330kd2lONqnn36quro6PfXUUxoYGLC7HMe6cuWKXnrpJT377LNqamrS\nsWPH7C7JlHkfsrFQ9fX1adGiRTpw4ICGhoa0a9cu9fb22l2WY3z77bf6/fff1dPTo9OnT6ulpUU9\nPT12l+VIx48f19DQkHp6ehQIBLR582Y99thjdpflWO+++66WLl1qdxmOFggEtGfPHh08eFATExN6\n5513tGHDBrvLcqSPP/5Yt912m1555RVduHBBzz//vA4fPmx3WbNybfjW1dVp06ZNkqSqqioFg0Gb\nK3KWwcFBbdy4UZJ0++2369KlS/r7779VXl5uc2XOs3r1at13332SpIqKCl29elXXrl1TYaGzrtB0\ngtOnT+vXX38lSGYxODiohx56SOXl5SovL9cbb7xhd0mOVVlZqV9++UWSdPnyZVVWVtpckTmunXYu\nKipSSUmJJGnv3r2TQYyYsbGxaf+Jq6qqNDo6amNFzlVYWKjFixdLknp7e7V+/XqCN4Xdu3dr586d\ndpfheGfPnlUoFNILL7ygZ555RoODg3aX5FhPPvmkzp8/r0cffVRbt25Vc3Oz3SWZ4orON9mdxNu3\nb9e6deu0b98+nTp1Sp2dnTZVtzBwCunsvvzyS/X29uqDDz6wuxRH+uSTT3T//ferpqbG7lIWhGAw\nqPb2dp0/f17PPfecjh49KsMw7C7Lcfr6+rRixQp1dXXp559/VktLy4JYT+CK8K2vr1d9ff11z30+\nn/r7+9XR0aGioiIbKnOu6upqjY2NTf48MjIir9drY0XOduzYMXV2dur999/XkiWp7/B0s4GBAfn9\nfg0MDOjPP/9UcXGxbrrpJq1Zs8bu0hxn+fLleuCBB+TxeHTLLbeorKxMFy9e1PLly+0uzXG+//57\nrV27VpJ01113aWRkZEG89nHttLPf71d3d7fa29snp58x5eGHH9YXX3whSTp16pSqq6t535vC+Pi4\n2tra9N5772nZsmV2l+NYb731lg4ePKgPP/xQ9fX1evHFFwneFNauXavjx48rEokoEAhoYmJiwbzL\ntNqtt96qH374QZJ07tw5lZWVOT54JZd0vsn4fD4Fg0Ft27Zt8llXV5eKi4ttrMo5HnzwQd1zzz1q\namqSYRh67bXX7C7JsQ4dOqRAIKCXX3558tnu3bu1YsUKG6vCQnbjjTfq8ccfV0NDgyTp1VdfVUGB\na3ultBobG9XS0qKtW7cqHA7r9ddft7skU7hSEAAAi/GnFAAAFiN8AQCwGOELAIDFCF8AACxG+AIA\nYDHCFwAAixG+AABYjPAFAMBi/wOMUxjDchogKAAAAABJRU5ErkJggg==\n","text/plain":["

"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"efSXTI_BBLWo","colab_type":"text"},"cell_type":"markdown","source":["# 手写kmeans"]},{"metadata":{"id":"xrCtmCwXCy3t","colab_type":"text"},"cell_type":"markdown","source":["## 随机初始化"]},{"metadata":{"id":"ZNt_GqC8DCKq","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1717},"outputId":"b0bacdce-6105-4726-d98f-831765ca3d72","executionInfo":{"status":"ok","timestamp":1552648299966,"user_tz":-480,"elapsed":939,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["samples1"],"execution_count":14,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 1.33850759, 1.5671852 ],\n"," [ 1.57075368, 1.30128828],\n"," [ 1.21158179, 0.28579414],\n"," [ 2.84766744, 2.42391275],\n"," [ 1.93262754, 2.00250446],\n"," [ 2.23643392, 1.46128799],\n"," [-0.40369402, -0.39157583],\n"," [ 1.26954792, 0.57063483],\n"," [ 1.5149758 , 1.5238589 ],\n"," [ 2.05545781, 2.14405737],\n"," [ 1.66604317, 1.47105952],\n"," [ 1.1604665 , 2.02570416],\n"," [ 1.26336387, 0.73912803],\n"," [ 0.4707781 , -0.06353039],\n"," [ 1.25544852, 0.30392329],\n"," [ 2.27387095, 2.25906167],\n"," [ 0.22537176, 0.37248772],\n"," [ 1.18612284, 1.02744385],\n"," [ 2.63994965, 2.15908318],\n"," [ 1.20812853, 1.69203149],\n"," [ 1.07501941, 0.23211877],\n"," [ 0.76881622, 0.60574148],\n"," [ 1.52840495, 1.77374496],\n"," [-0.24501776, 0.30262119],\n"," [ 1.90736158, 1.68356555],\n"," [ 0.44015137, 0.9505877 ],\n"," [ 1.5202347 , 1.38794896],\n"," [ 2.3825154 , 1.69749356],\n"," [-0.12824784, 0.61110652],\n"," [ 0.83444435, 1.32466492],\n"," [ 0.79293357, 0.50442741],\n"," [ 0.27727465, 1.06843852],\n"," [ 0.66587752, 1.43665389],\n"," [ 3.41014737, 3.59538051],\n"," [ 0.98412173, 0.84359752],\n"," [ 1.37845677, 0.4032445 ],\n"," [ 1.13399397, 1.29205396],\n"," [-0.34674869, -0.47825062],\n"," [ 1.92231788, 1.60589267],\n"," [ 0.01228379, 0.25217673],\n"," [ 1.40536168, 1.61446123],\n"," [ 0.67459336, 1.16183974],\n"," [ 1.775362 , 1.55402536],\n"," [ 1.73564757, 0.97874499],\n"," [ 0.64392814, 0.79804221],\n"," [ 1.05035144, 0.9347671 ],\n"," [ 2.50646586, 2.17890287],\n"," [ 1.53028788, 1.10457493],\n"," [ 1.06485856, 1.25106293],\n"," [-0.91637 , -0.67073959],\n"," [ 0.76155337, 0.74648642],\n"," [ 2.91377534, 2.73861876],\n"," [ 0.35803876, 1.58133341],\n"," [ 1.11997386, 1.25286026],\n"," [ 1.31067635, 0.7297696 ],\n"," [-0.31380356, 0.15458214],\n"," [ 0.42850643, 0.04556876],\n"," [-0.06329225, -0.6381156 ],\n"," [-0.10103563, 1.03182585],\n"," [ 2.11854368, 1.7548257 ],\n"," [ 1.01990896, 0.77932844],\n"," [ 2.52536054, 2.4283121 ],\n"," [ 1.94415521, 2.08865895],\n"," [ 1.54776577, 2.236646 ],\n"," [ 1.85476216, 1.62933782],\n"," [ 0.48212077, -0.05790588],\n"," [ 0.46498637, 1.13064947],\n"," [ 2.55441836, 2.50997478],\n"," [ 0.55689124, 0.96549307],\n"," [ 2.54172585, 1.78422483],\n"," [ 0.41094179, 0.60189596],\n"," [ 0.66910872, 0.86160094],\n"," [ 1.62115016, 1.6785829 ],\n"," [ 0.87745474, 0.5489194 ],\n"," [-0.96679487, -0.57489021],\n"," [ 2.02916264, 2.25325642],\n"," [ 1.78296662, 2.08990926],\n"," [ 0.04213828, -0.26588837],\n"," [-0.0552656 , 0.23023619],\n"," [-0.26546336, 0.74202922],\n"," [ 1.42206203, 1.02857471],\n"," [ 2.07707657, 1.59849247],\n"," [ 0.99603216, 1.1582391 ],\n"," [ 0.52946285, 0.96191734],\n"," [ 0.64359227, 1.36354249],\n"," [ 0.62030504, 1.94322683],\n"," [ 0.58055814, 0.20948565],\n"," [ 1.95059517, 2.09876521],\n"," [ 1.05342704, 1.38766751],\n"," [ 0.5467499 , 0.55069786],\n"," [ 2.19979481, 1.37910652],\n"," [ 1.24152021, 1.62734723],\n"," [ 1.08154117, 0.48353578],\n"," [ 0.73678179, 0.9419678 ],\n"," [ 1.84234354, 1.84372551],\n"," [ 1.21222626, 0.65188071],\n"," [ 0.51179447, 0.81934898],\n"," [-0.32571694, 0.28691169],\n"," [ 2.59119961, 2.01104689],\n"," [ 0.36657561, 0.66416664]])"]},"metadata":{"tags":[]},"execution_count":14}]},{"metadata":{"id":"y4PpSqJ8DH1A","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"229ad22a-b7f3-46fa-c315-9a1ff2b43904","executionInfo":{"status":"ok","timestamp":1552648283393,"user_tz":-480,"elapsed":877,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["samples.shape"],"execution_count":13,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(300, 2)"]},"metadata":{"tags":[]},"execution_count":13}]},{"metadata":{"id":"gGY0-WLmA-EM","colab_type":"code","colab":{}},"cell_type":"code","source":["# Vanilla K-means clustering.\n","samples = np.vstack([samples1, samples2, samples3])\n","rorder = np.arange(num_pts * 3)\n","rorder = np.random.shuffle(rorder)\n","samples = samples[rorder, :].squeeze()"],"execution_count":0,"outputs":[]},{"metadata":{"id":"6Dt2u-YaBg0w","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":68},"outputId":"ff3652fa-5d9d-4f70-b4af-e67eb62397ce","executionInfo":{"status":"ok","timestamp":1552647865631,"user_tz":-480,"elapsed":1078,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["# Lloyd's algorithm, with random initialization.\n","k = 3\n","centers = np.random.rand(k, 2)\n","centers"],"execution_count":8,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[0.75903585, 0.72410333],\n"," [0.63723158, 0.9805768 ],\n"," [0.90336381, 0.64666492]])"]},"metadata":{"tags":[]},"execution_count":8}]},{"metadata":{"id":"ctA0l-22BiY4","colab_type":"code","colab":{}},"cell_type":"code","source":["num_iters = 10\n","losses = []\n","# Save for repeated use.\n","xdist = np.sum(samples * samples, axis=1)\n","for _ in range(num_iters):\n"," # Compute distance to each center.\n"," cdist = np.sum(centers * centers, axis=1)\n"," consts = xdist[:, np.newaxis] + cdist\n"," dists = consts - 2 * np.dot(samples, centers.T)\n"," # Compute cluster assignment.\n"," ids = np.argmin(dists, axis=1)\n"," losses.append(np.sum(np.min(dists, axis=1)))\n"," for i in range(k):\n"," centers[i, :] = np.mean(samples[ids == i], axis=0)\n"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Tjfr3Xz5BtRG","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":363},"outputId":"f42131af-466d-426c-b236-faf8cb24bb65","executionInfo":{"status":"ok","timestamp":1552647928486,"user_tz":-480,"elapsed":1116,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["plt.figure()\n","colors = [\"r\", \"b\", \"g\"]\n","for i in range(k):\n"," plt.scatter(samples[ids == i, 0], samples[ids == i, 1], c=colors[i], s=40, alpha=0.5)\n","plt.grid(True)\n","plt.title(\"K-means Clustering\")\n","# plt.savefig(\"./examples/kmeans_{}.pdf\".format(args.seed), bbox_inches=\"tight\")\n","plt.show()"],"execution_count":10,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nxx9/XF999ZUMw7C7LMdpaWnRsmXL1NDQoFOnTqmmpmZe7CdI+/D1er3yer3XtPt8PrW2tqqurk45\nOTk2VOZspaWl6u3tjf25u7tbJSUlNlbkbO3t7aqvr9ebb76pwsL58Zi31dra2uT3+9XW1qbff/9d\nbrdbS5cu1bp16+wuzXGWLFmi1atXy+Vy6frrr1d+fr76+vq0ZMkSu0tznB9++EEbNmyQJN12223q\n7u6eF8s+GTnt7Pf71djYqAMHDsSmnzHR+vXrdfToUUnSyZMnVVpaynrvNAYGBlRbW6s33nhDixcv\ntrscx3rllVd05MgRvfvuu/J6vXrqqacI3mls2LBBx44d08jIiAKBgAYHB+fNWqbVbrjhBv3444+S\npPPnzys/P9/xwStlwMh3Kj6fT8FgUDt27Ii1NTQ0yO1221iVs9x111264447VFVVJcMw9MILL9hd\nkmN98sknCgQCqq6ujrXt379fy5Yts7EqzGfXXXedHnjgAW3btk2S9PzzzysrKyPHSjOqrKxUTU2N\ntm/frnA4rBdffNHukkzhSUEAACzGf6UAALAY4QsAgMUIXwAALEb4AgBgMcIXAACLEb4AAFiM8AUA\nwGKELwAAFvs/7g3ERt0o86gAAAAASUVORK5CYII=\n","text/plain":[" "]},"metadata":{"tags":[]}}]},{"metadata":{"id":"Vcz9B5yCC14L","colab_type":"text"},"cell_type":"markdown","source":["## kmeans++初始化"]},{"metadata":{"id":"j1xSPWuyBzXc","colab_type":"code","colab":{}},"cell_type":"code","source":["sample2=np.array([[1,1]\n"," ,[1,2]\n"," ,[-1,-1]\n"," ,[-1,-2]\n"," ,[6,6]\n"," ,[6,5]\n"," ,[6,-6]])"],"execution_count":0,"outputs":[]},{"metadata":{"id":"I5A5xo5PDajk","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"27fae156-ca92-46e9-8e71-55047c92c614","executionInfo":{"status":"ok","timestamp":1552648463776,"user_tz":-480,"elapsed":981,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["sample2.shape"],"execution_count":21,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(7, 2)"]},"metadata":{"tags":[]},"execution_count":21}]},{"metadata":{"id":"S3e1GRIIDcOC","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":363},"outputId":"c5afad33-df18-4a65-f562-e643b3dea8b4","executionInfo":{"status":"ok","timestamp":1552648622151,"user_tz":-480,"elapsed":973,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["plt.figure()\n","plt.scatter(sample2[:,0],sample2[:,1], alpha=0.5)\n","plt.grid(True)\n","plt.title(\"K-means Clustering\")\n","# plt.savefig(\"./examples/kmeans_{}.pdf\".format(args.seed), bbox_inches=\"tight\")\n","plt.show()"],"execution_count":25,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAd8AAAFZCAYAAADZ6SWdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAHwRJREFUeJzt3Xl0VPX9//HX3JkMkkwiECYRNYrS\nhFaQEzkuRQERIpvbAcGgsvTgwWLLohaVRpRW6gJqD0tQUFFpaUsaohatByKauPQHKLZo5bgEetAA\nIUwkyAxJmMzy+8N22nwJiJOZz5DJ8/EXuZnc+/7EmCefmwljC4fDYQEAAGOsRA8AAEBHQ3wBADCM\n+AIAYBjxBQDAMOILAIBhxBcAAMOIL/B/9O7dW/v374+8/dprr2n48OGqq6tL4FTR++ijj/STn/xE\nw4cPV0FBgaZMmaK///3vkqStW7fq6quvjvrc7777rvbt2/e9P27KlCnasWNH1NcF2jviC5zAli1b\n9Pjjj+vZZ59V9+7dEz3O9/bpp5/q9ttv18SJE1VeXq5NmzZp8uTJmjZtmqqqqtp8/hdffDGq+K5e\nvVp9+vRp8/WB9or4AsfxxRdf6L777lNxcbHOPffcVh+zdetWFRYW6uGHH9awYcM0duxYffTRR5o0\naZKuuOIKLV26NPLYkpISjRw5UkOHDtXdd9+tpqYmSVJdXZ1uu+22yPteeOGFyMcMHTpUa9eu1bhx\n4zRw4EA99thjkqRAIKD7779fI0aM0NVXX60ZM2bI5/MdM9/TTz+twsJCFRQURI4NGzZMxcXFyszM\nbPHYuXPn6qmnnmr17TVr1mjUqFEaOXKkxo0bp6qqKi1evFhbtmzRPffco9dff11+v1+/+c1vNGLE\nCA0dOlQrVqxosY7i4mKNGDFC+/bt09ChQ7Vt2zbt2bNHAwcO1O9+9ztdd911GjRokF5//XVJ0tGj\nRzV79mwNGjRIU6dO1RNPPKG5c+ee3H884BRHfIFW1NbWavr06Xr44Yd14YUXnvCxO3bsUEFBgTZt\n2iTLsvTQQw/pmWee0QsvvKCVK1fq6NGj2rZtm5YsWaLVq1frrbfeksvl0pIlSyR9G8izzz5bGzZs\n0OrVq/Xkk0+qpqYmcv4PPvhAJSUlKisr05o1a7R//36999572rNnjzZs2KDy8nL94Ac/0D/+8Y9j\nZvvggw905ZVXHnN8wIAB6tat20l9Lnw+n5YsWaLS0lJt2LBBt912myorK3XnnXcqOztbjz/+uEaP\nHq1nn31WO3fu1KuvvqrXXntNGzduVEVFRYvP6caNG3XmmWe2OH99fb0sy9Krr76qoqIiLV68WJJU\nWlqqAwcOqKKiQgsWLNBLL710UvMC7QHxBVoxZ84c+f1+1dfXf+djMzIydNlll8lmsyk3N1eXXnqp\nOnfurNzcXAWDQR08eFBvvfWWRo8erezsbEnSzTffrPLycknSvHnz9MADD0iScnJy5Ha7tWfPnsj5\nr7vuOtntdmVnZyszM1M1NTXq1q2bdu3apTfeeEONjY268847NWjQoGNm++abb9p8u7xTp06y2Wxa\nt26d6urqNGrUKE2bNu2Yx1VUVOiWW26R0+lUamqqbrjhhsgaJWnIkCGtnj8QCGjs2LGSpD59+kRu\nY2/btk0jRoyQw+HQWWed1epfIoD2ypHoAYBT0bx585SZmampU6cqLy9PvXv3lvTt7dc1a9ZIkn7x\ni18oIyNDaWlpkY+zLEupqamSJJvNJsuyFAwG5fV69cYbb+i9996TJIXDYTU3N0uS/vnPf0Z2u5Zl\nyePxKBQKRc7pcrkif7bb7QoGg7rooos0b948/f73v9d9992noUOHav78+crIyGixjq5du6q2tva4\nt81PRkpKil588UWtWLFCy5YtU+/evTV//vzI5+Q/vF6vHn30Uf32t7+VJPn9fvXr1y/y/tNPP73V\n89vt9sjnzLKsyNoPHz6sLl26RB6XnZ3d4olwQHtGfIFW9O7dW2eccYZmz56tmTNnqqysTOnp6Zo4\ncaImTpwYedzWrVtP6nxZWVkaM2aM7rvvvmPed88992jKlCm6+eabZbPZWt3BtmbkyJEaOXKkDh06\npKKiIq1atUp33XVXi8dcdtllKi8v16WXXtrieFlZmfLy8loc+9/wSd/umv/jggsu0NKlS+X3+/Xc\nc89p/vz5Wrt27TFrnDp1qq666qqTmv+7uFwuHTlyJPK2x+OJyXmBUwG3nYETuPXWW9W3b1/de++9\nassLgA0dOlTl5eU6ePCgJGnTpk165plnJElff/21+vbtK5vNppdfflmNjY1qaGg44fnKysq0fPly\nSVKXLl10/vnnt/q4O+64Q+vXr9fLL78cOfbGG2/oySefbLGjliS3263PPvtMklRdXR35daTPP/9c\n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\nAElFTkSuQmCC\n","text/plain":[" "]},"metadata":{"tags":[]}}]},{"metadata":{"id":"c4uTD5KYEL3J","colab_type":"code","colab":{}},"cell_type":"code","source":["def kmean(samples):\n"," num_iters = 10\n"," losses = []\n"," # Save for repeated use.\n"," xdist = np.sum(samples * samples, axis=1)\n"," for _ in range(num_iters):\n"," # Compute distance to each center.\n"," cdist = np.sum(centers * centers, axis=1)\n"," consts = xdist[:, np.newaxis] + cdist\n"," dists = consts - 2 * np.dot(samples, centers.T)\n"," # Compute cluster assignment.\n"," ids = np.argmin(dists, axis=1)\n"," losses.append(np.sum(np.min(dists, axis=1)))\n"," for i in range(k):\n"," centers[i, :] = np.mean(samples[ids == i], axis=0)\n"," return ids ,centers"],"execution_count":0,"outputs":[]},{"metadata":{"id":"MpAJ5DsEFEmN","colab_type":"code","colab":{}},"cell_type":"code","source":["ids,centers = kmean(sample2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"MxSXgHlWFKe5","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":280},"outputId":"1296e9d6-0c04-465c-c889-1135f1eb02b3","executionInfo":{"status":"ok","timestamp":1552648898966,"user_tz":-480,"elapsed":957,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["plt.figure(figsize=(4,4))\n","colors = [\"r\", \"b\", \"g\"]\n","for i in range(k):\n"," plt.scatter(sample2[ids == i, 0], sample2[ids == i, 1], c=colors[i], s=40, alpha=0.5)\n","plt.grid(True)\n","plt.title(\"K-means Clustering\")\n","# plt.savefig(\"./examples/kmeans_{}.pdf\".format(args.seed), bbox_inches=\"tight\")\n","plt.show()"],"execution_count":30,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nU+ncHvOuogAAAABJRU5ErkJggg==\n","text/plain":[" "]},"metadata":{"tags":[]}}]},{"metadata":{"id":"mBvtYeMoFM_W","colab_type":"code","colab":{}},"cell_type":"code","source":["n_samples, n_features = sample2.shape\n","centers2 = np.empty((k, n_features))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"EXiJEbk8GI0B","colab_type":"code","colab":{}},"cell_type":"code","source":["# n_local_trials是每次选择候选点个数\n","n_local_trials = 2 + int(np.log(k))\n","\n","# 第一个随机点\n","center_id = np.random.randint(n_samples)\n","centers2[0] = sample2[center_id]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Y6faTEypIGpK","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"e796fcd7-5c0b-4f6d-ddf9-5c4f22ac1372","executionInfo":{"status":"ok","timestamp":1552649601642,"user_tz":-480,"elapsed":1052,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["sample2[center_id]"],"execution_count":45,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([6, 6])"]},"metadata":{"tags":[]},"execution_count":45}]},{"metadata":{"id":"o_wwKz6CHJrM","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":69},"outputId":"00f8c229-8a16-42ad-e745-21ae3ca06d07","executionInfo":{"status":"ok","timestamp":1552649604461,"user_tz":-480,"elapsed":977,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["centers2"],"execution_count":46,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[6., 6.],\n"," [2., 4.],\n"," [6., 8.]])"]},"metadata":{"tags":[]},"execution_count":46}]},{"metadata":{"id":"Bl14Q84UIZ8c","colab_type":"code","colab":{}},"cell_type":"code","source":["def distance(point1, point2):\n"," # 欧氏距离\n"," return np.sqrt(np.sum(np.square(point1 - point2), axis=1))"],"execution_count":0,"outputs":[]},{"metadata":{"id":"JPIB-VpYG5wy","colab_type":"code","colab":{}},"cell_type":"code","source":["# closest_dist_sq是每个样本,到所有中心点最近距离\n","# 假设现在有3个中心点,closest_dist_sq = [min(样本1到3个中心距离),min(样本2到3个中心距离),...min(样本n到3个中心距离)]\n","closest_dist_sq = distance(centers2[0, np.newaxis], sample2)\n","# newaxis可以给原数组增加一个维度"],"execution_count":0,"outputs":[]},{"metadata":{"id":"wO3QpetoIhNG","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":52},"outputId":"0f95a5e7-98a6-4ac1-8c9c-21db9c34736b","executionInfo":{"status":"ok","timestamp":1552649694498,"user_tz":-480,"elapsed":810,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["closest_dist_sq"],"execution_count":49,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 7.07106781, 6.40312424, 9.89949494, 10.63014581, 0. ,\n"," 1. , 12. ])"]},"metadata":{"tags":[]},"execution_count":49}]},{"metadata":{"id":"eHTD4scEIfNB","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"f8a62c8b-7936-40b6-bfbb-3914de8b71f2","executionInfo":{"status":"ok","timestamp":1552649734023,"user_tz":-480,"elapsed":862,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["# current_pot所有最短距离的和\n","current_pot = closest_dist_sq.sum()\n","current_pot"],"execution_count":50,"outputs":[{"output_type":"execute_result","data":{"text/plain":["47.00383279864464"]},"metadata":{"tags":[]},"execution_count":50}]},{"metadata":{"id":"SInm6gAXJFSE","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"92ab094e-a67e-4877-ba86-bb51678704de","executionInfo":{"status":"ok","timestamp":1552649843048,"user_tz":-480,"elapsed":980,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["n_local_trials"],"execution_count":51,"outputs":[{"output_type":"execute_result","data":{"text/plain":["3"]},"metadata":{"tags":[]},"execution_count":51}]},{"metadata":{"id":"w3MNOzCzM5sW","colab_type":"code","colab":{}},"cell_type":"code","source":["def check_random_state(seed):\n"," if seed is None or seed is np.random:\n"," return np.random.mtrand._rand\n"," if isinstance(seed, (numbers.Integral, np.integer)):\n"," return np.random.RandomState(seed)\n"," if isinstance(seed, np.random.RandomState):\n"," return seed\n"," raise ValueError('%r cannot be used to seed a numpy.random.RandomState'\n"," ' instance' % seed)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"LBSHgJ8CNA0u","colab_type":"code","colab":{}},"cell_type":"code","source":["random_state = check_random_state(None)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"O0r17Jr2NMCf","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"434481aa-353c-4d1e-cf48-48eff9e1641a","executionInfo":{"status":"ok","timestamp":1552650919719,"user_tz":-480,"elapsed":980,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["random_state"],"execution_count":56,"outputs":[{"output_type":"execute_result","data":{"text/plain":[""]},"metadata":{"tags":[]},"execution_count":56}]},{"metadata":{"id":"A55urCKmNzhl","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":743},"outputId":"7767338d-555b-404e-a49f-7e418b33e196","executionInfo":{"status":"ok","timestamp":1552651091493,"user_tz":-480,"elapsed":865,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["help(random_state.random_sample)"],"execution_count":62,"outputs":[{"output_type":"stream","text":["Help on built-in function random_sample:\n","\n","random_sample(...) method of mtrand.RandomState instance\n"," random_sample(size=None)\n"," \n"," Return random floats in the half-open interval [0.0, 1.0).\n"," \n"," Results are from the \"continuous uniform\" distribution over the\n"," stated interval. To sample :math:`Unif[a, b), b > a` multiply\n"," the output of `random_sample` by `(b-a)` and add `a`::\n"," \n"," (b - a) * random_sample() + a\n"," \n"," Parameters\n"," ----------\n"," size : int or tuple of ints, optional\n"," Output shape. If the given shape is, e.g., ``(m, n, k)``, then\n"," ``m * n * k`` samples are drawn. Default is None, in which case a\n"," single value is returned.\n"," \n"," Returns\n"," -------\n"," out : float or ndarray of floats\n"," Array of random floats of shape `size` (unless ``size=None``, in which\n"," case a single float is returned).\n"," \n"," Examples\n"," --------\n"," >>> np.random.random_sample()\n"," 0.47108547995356098\n"," >>> type(np.random.random_sample())\n"," \n"," >>> np.random.random_sample((5,))\n"," array([ 0.30220482, 0.86820401, 0.1654503 , 0.11659149, 0.54323428])\n"," \n"," Three-by-two array of random numbers from [-5, 0):\n"," \n"," >>> 5 * np.random.random_sample((3, 2)) - 5\n"," array([[-3.99149989, -0.52338984],\n"," [-2.99091858, -0.79479508],\n"," [-1.23204345, -1.75224494]])\n","\n"],"name":"stdout"}]},{"metadata":{"id":"NfKhNZ_lIwLL","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"581982fc-b39c-475c-efd9-a1328f13a9ca","executionInfo":{"status":"ok","timestamp":1552650949592,"user_tz":-480,"elapsed":819,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["# 选出n_local_trials随机址,并映射到current_pot的长度\n","rand_vals = random_state.random_sample(n_local_trials) * current_pot\n","rand_vals"],"execution_count":58,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([46.9734448 , 26.12503962, 22.24268927])"]},"metadata":{"tags":[]},"execution_count":58}]},{"metadata":{"id":"4-MgZXuXNhy9","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":52},"outputId":"bca27403-25b8-440f-d27a-59c28c13c48f","executionInfo":{"status":"ok","timestamp":1552651005269,"user_tz":-480,"elapsed":891,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["np.cumsum(closest_dist_sq)"],"execution_count":61,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 7.07106781, 13.47419205, 23.37368699, 34.0038328 , 34.0038328 ,\n"," 35.0038328 , 47.0038328 ])"]},"metadata":{"tags":[]},"execution_count":61}]},{"metadata":{"id":"ifsH22YKNQPR","colab_type":"code","colab":{}},"cell_type":"code","source":["# np.cumsum([1,2,3,4]) = [1, 3, 6, 10],就是累加当前索引前面的值\n","# np.searchsorted搜索随机出的rand_vals落在np.cumsum(closest_dist_sq)中的位置。\n","# candidate_ids候选节点的索引\n","candidate_ids = np.searchsorted(np.cumsum(closest_dist_sq), rand_vals)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"TWjsUqAANZE2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"eda31282-56ad-42d8-ee3b-c28e11c7896b","executionInfo":{"status":"ok","timestamp":1552650970514,"user_tz":-480,"elapsed":950,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["candidate_ids"],"execution_count":60,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([6, 3, 2])"]},"metadata":{"tags":[]},"execution_count":60}]},{"metadata":{"id":"1eN4oy9oREK_","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"c89cb78d-72db-476d-bed1-22ba854ecd07","executionInfo":{"status":"ok","timestamp":1552651936158,"user_tz":-480,"elapsed":851,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["sample2[candidate_ids[0], np.newaxis]"],"execution_count":63,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 6, -6]])"]},"metadata":{"tags":[]},"execution_count":63}]},{"metadata":{"id":"ZaMRR-PeRHrQ","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"d415d03a-9825-4eda-9de9-d18b38257d12","executionInfo":{"status":"ok","timestamp":1552651952739,"user_tz":-480,"elapsed":1163,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["sample2[candidate_ids[0]]"],"execution_count":64,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 6, -6])"]},"metadata":{"tags":[]},"execution_count":64}]},{"metadata":{"id":"afyAq-bpUWzq","colab_type":"code","colab":{}},"cell_type":"code","source":["distance_to_candidate = distance(sample2[candidate_ids[0], np.newaxis], sample2)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"PBFWknoOUhVS","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":52},"outputId":"7e46f28a-d101-41b7-898e-917859588f06","executionInfo":{"status":"ok","timestamp":1552652840704,"user_tz":-480,"elapsed":842,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["distance_to_candidate"],"execution_count":66,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 8.60232527, 9.43398113, 8.60232527, 8.06225775, 12. ,\n"," 11. , 0. ])"]},"metadata":{"tags":[]},"execution_count":66}]},{"metadata":{"id":"SktxoVzeUnxn","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":52},"outputId":"a1fa8bfa-fa3c-4dd1-9cdf-449e81bd6d02","executionInfo":{"status":"ok","timestamp":1552652867781,"user_tz":-480,"elapsed":1028,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["closest_dist_sq"],"execution_count":69,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 7.07106781, 6.40312424, 9.89949494, 10.63014581, 0. ,\n"," 1. , 12. ])"]},"metadata":{"tags":[]},"execution_count":69}]},{"metadata":{"id":"ICkR-OiKUc9X","colab_type":"code","colab":{}},"cell_type":"code","source":["# 计算每个候选节点的距离序列new_dist_sq, 距离总和new_pot\n","new_dist_sq = np.minimum(closest_dist_sq, distance_to_candidate)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"05hxPi6iUlJG","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":52},"outputId":"0b068a7c-4354-4dfb-8d6e-507658b6545a","executionInfo":{"status":"ok","timestamp":1552652856572,"user_tz":-480,"elapsed":1032,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["new_dist_sq"],"execution_count":68,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([7.07106781, 6.40312424, 8.60232527, 8.06225775, 0. ,\n"," 1. , 0. ])"]},"metadata":{"tags":[]},"execution_count":68}]},{"metadata":{"id":"VRy_WXPVUgPI","colab_type":"code","colab":{}},"cell_type":"code","source":["new_pot = new_dist_sq.sum()\n"],"execution_count":0,"outputs":[]},{"metadata":{"id":"lmLnAfJcUaY0","colab_type":"code","colab":{}},"cell_type":"code","source":["\n","# 选择最小的new_pot\n","if (best_candidate is None) or (new_pot < best_pot):\n"," best_candidate = candidate_ids[trial]\n"," best_pot = new_pot\n"," best_dist_sq = new_dist_sq"],"execution_count":0,"outputs":[]},{"metadata":{"id":"K_hH-gkSNXRN","colab_type":"code","colab":{}},"cell_type":"code","source":["\n","# best_candidate最好的候选节点\n","# best_pot最好的候选节点计算出的距离和\n","# best_dist_sq最好的候选节点计算出的距离列表\n","best_candidate = None\n","best_pot = None\n","best_dist_sq = None\n","for trial in range(n_local_trials):\n"," # 计算每个样本到候选节点的欧式距离\n"," distance_to_candidate = distance(sample2[candidate_ids[trial], np.newaxis], sample2)\n","\n"," # 计算每个候选节点的距离序列new_dist_sq, 距离总和new_pot\n","# closest_dist_sq 每个样本,到所有已知的中心点的距离\n","# new_dist_sq 每个样本,到所有中心点最近距离\n","# 如果中心点变成了两个,那么样本到中心点的最近距离就可能会发生变化\n"," new_dist_sq = np.minimum(closest_dist_sq, distance_to_candidate)\n"," new_pot = new_dist_sq.sum()\n","\n"," # 选择最小的new_pot\n"," if (best_candidate is None) or (new_pot < best_pot):\n"," best_candidate = candidate_ids[trial]\n"," best_pot = new_pot\n"," best_dist_sq = new_dist_sq"],"execution_count":0,"outputs":[]},{"metadata":{"id":"aDuufjqAQaAa","colab_type":"text"},"cell_type":"markdown","source":["选择出来的候选节点是按照概率选择出来的\n","\n","然后再根据所有样本到(已知中心点+候选节点)的距离选择出来最合适的候选节点"]},{"metadata":{"id":"MhXa8donKbRX","colab_type":"code","colab":{}},"cell_type":"code","source":["def _k_means_plus_plus(dataset,k):\n"," n_samples, n_features = dataset.shape\n"," centers = np.empty((k, n_features))\n"," random_state = check_random_state(None)\n"," # n_local_trials是每次选择候选点个数\n"," n_local_trials = None\n"," if n_local_trials is None:\n"," n_local_trials = 2 + int(np.log(k))\n","\n","\n","\n"," # 第一个随机点\n"," center_id = random_state.randint(n_samples)\n"," centers[0] = dataset[center_id]\n","\n"," # closest_dist_sq是每个样本,到所有中心点最近距离\n"," # 假设现在有3个中心点,closest_dist_sq = [min(样本1到3个中心距离),min(样本2到3个中心距离),...min(样本n到3个中心距离)]\n"," closest_dist_sq = distance(centers[0, np.newaxis], dataset)\n"," # newaxis可以给原数组增加一个维度\n","\n"," # current_pot所有最短距离的和\n"," current_pot = closest_dist_sq.sum()\n","\n"," for c in range(1, k):\n"," # 选出n_local_trials随机址,并映射到current_pot的长度\n"," rand_vals = random_state.random_sample(n_local_trials) * current_pot\n"," # 选择出来的候选节点是按照概率选择出来的\n"," # 然后再根据所有样本到候选节点的距离选择出来距离最小的节点\n","\n","\n","\n"," # np.cumsum([1,2,3,4]) = [1, 3, 6, 10],就是累加当前索引前面的值\n"," # np.searchsorted搜索随机出的rand_vals落在np.cumsum(closest_dist_sq)中的位置。\n"," # candidate_ids候选节点的索引\n"," candidate_ids = np.searchsorted(np.cumsum(closest_dist_sq), rand_vals)\n","\n"," # best_candidate最好的候选节点\n"," # best_pot最好的候选节点计算出的距离和\n"," # best_dist_sq最好的候选节点计算出的距离列表\n"," best_candidate = None\n"," best_pot = None\n"," best_dist_sq = None\n"," for trial in range(n_local_trials):\n"," # 计算每个样本到候选节点的欧式距离\n"," distance_to_candidate = distance(dataset[candidate_ids[trial], np.newaxis], dataset)\n","\n"," # 计算每个候选节点的距离序列new_dist_sq, 距离总和new_pot\n","\n"," # closest_dist_sq 每个样本,到所有已知的中心点的距离\n"," # new_dist_sq 每个样本,到所有中心点(已知的中心点+当前的候选点)最近距离\n"," # 如果中心点变成了两个,那么样本到中心点的最近距离就可能会发生变化\n"," new_dist_sq = np.minimum(closest_dist_sq, distance_to_candidate)\n"," new_pot = new_dist_sq.sum()\n","\n"," # 选择最小的new_pot\n"," if (best_candidate is None) or (new_pot < best_pot):\n"," best_candidate = candidate_ids[trial]\n"," best_pot = new_pot\n"," best_dist_sq = new_dist_sq\n","\n"," centers[c] = dataset[best_candidate]\n"," current_pot = best_pot\n"," closest_dist_sq = best_dist_sq\n","\n"," return centers"],"execution_count":0,"outputs":[]},{"metadata":{"id":"v4jfZ52zYIsB","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":69},"outputId":"4a1ff3a9-7763-40d6-929f-51f5b5cc9085","executionInfo":{"status":"ok","timestamp":1552653813927,"user_tz":-480,"elapsed":1004,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["_k_means_plus_plus(sample2,3)"],"execution_count":72,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 6., -6.],\n"," [ 1., 1.],\n"," [ 6., 5.]])"]},"metadata":{"tags":[]},"execution_count":72}]},{"metadata":{"id":"DvoPG4PHZOPA","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":138},"outputId":"8e13a810-2539-4aae-b5d6-f322de992af7","executionInfo":{"status":"ok","timestamp":1552654070493,"user_tz":-480,"elapsed":1215,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["sample2 * sample2"],"execution_count":73,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 1, 1],\n"," [ 1, 4],\n"," [ 1, 1],\n"," [ 1, 4],\n"," [36, 36],\n"," [36, 25],\n"," [36, 36]])"]},"metadata":{"tags":[]},"execution_count":73}]},{"metadata":{"id":"ky7wJNnUco2g","colab_type":"text"},"cell_type":"markdown","source":["## # 计算样本点到中心点的欧式距离 (a-b)**2=a^2+b^2-2*ab"]},{"metadata":{"id":"GDZnyIv1YQQ_","colab_type":"code","colab":{}},"cell_type":"code","source":["xdist2 = np.sum(sample2 * sample2, axis=1)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"uSgRFcGxZRTV","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"2595a90f-cb68-4297-d233-b61f4b5e80d1","executionInfo":{"status":"ok","timestamp":1552654087867,"user_tz":-480,"elapsed":1057,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["xdist2\n","# a^2"],"execution_count":75,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 2, 5, 2, 5, 72, 61, 72])"]},"metadata":{"tags":[]},"execution_count":75}]},{"metadata":{"id":"uAIjrgv5ZX_N","colab_type":"code","colab":{}},"cell_type":"code","source":["centers = _k_means_plus_plus(sample2,3)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"_ZdbNXmHZa-8","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":69},"outputId":"c161470b-36c6-47d5-babb-d37e32469f8d","executionInfo":{"status":"ok","timestamp":1552654124162,"user_tz":-480,"elapsed":1125,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["centers\n"],"execution_count":77,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 1., 2.],\n"," [ 6., 6.],\n"," [ 6., -6.]])"]},"metadata":{"tags":[]},"execution_count":77}]},{"metadata":{"id":"JZrNoU74ZIYC","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"b308773d-5cdc-449d-facf-cccafcaffcfd","executionInfo":{"status":"ok","timestamp":1552654151324,"user_tz":-480,"elapsed":863,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["# Compute distance to each center.\n","cdist = np.sum(centers * centers, axis=1)\n","cdist\n","# b^2"],"execution_count":78,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 5., 72., 72.])"]},"metadata":{"tags":[]},"execution_count":78}]},{"metadata":{"id":"kctWvNVYZyQt","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":138},"outputId":"cca4eabf-845d-4363-9dad-5ffd630e7a99","executionInfo":{"status":"ok","timestamp":1552654217803,"user_tz":-480,"elapsed":1124,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["xdist2[:, np.newaxis]"],"execution_count":81,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 2],\n"," [ 5],\n"," [ 2],\n"," [ 5],\n"," [72],\n"," [61],\n"," [72]])"]},"metadata":{"tags":[]},"execution_count":81}]},{"metadata":{"id":"E2la8P83ZhL4","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":138},"outputId":"a8e918c8-e12c-47c1-b3c9-46a25a5d0cf0","executionInfo":{"status":"ok","timestamp":1552654183467,"user_tz":-480,"elapsed":813,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["consts = xdist2[:, np.newaxis] + cdist\n","consts\n","# a^2+b^2"],"execution_count":80,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 7., 74., 74.],\n"," [ 10., 77., 77.],\n"," [ 7., 74., 74.],\n"," [ 10., 77., 77.],\n"," [ 77., 144., 144.],\n"," [ 66., 133., 133.],\n"," [ 77., 144., 144.]])"]},"metadata":{"tags":[]},"execution_count":80}]},{"metadata":{"id":"5ZMS_bxZZkKC","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":138},"outputId":"83c38990-de86-4c3b-cc18-73928ae8de22","executionInfo":{"status":"ok","timestamp":1552654380312,"user_tz":-480,"elapsed":917,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["dists = consts - 2 * np.dot(sample2, centers.T)\n","dists\n","# # a^2+b^2-2ab"],"execution_count":82,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 1., 50., 74.],\n"," [ 0., 41., 89.],\n"," [ 13., 98., 74.],\n"," [ 20., 113., 65.],\n"," [ 41., 0., 144.],\n"," [ 34., 1., 121.],\n"," [ 89., 144., 0.]])"]},"metadata":{"tags":[]},"execution_count":82}]},{"metadata":{"id":"CdU-J3dYaTOQ","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":35},"outputId":"30f054fe-27b2-40c8-d6a8-38e9ef6f437b","executionInfo":{"status":"ok","timestamp":1552654390268,"user_tz":-480,"elapsed":916,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["# Compute cluster assignment.\n","ids = np.argmin(dists, axis=1)\n","ids"],"execution_count":83,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([0, 0, 0, 0, 1, 1, 2])"]},"metadata":{"tags":[]},"execution_count":83}]},{"metadata":{"id":"xkaT5cDLab7i","colab_type":"code","colab":{}},"cell_type":"code","source":["losses.append(np.sum(np.min(dists, axis=1)))\n","losses"],"execution_count":0,"outputs":[]},{"metadata":{"id":"i1h3TeQSah1i","colab_type":"code","colab":{}},"cell_type":"code","source":["for i in range(k):\n"," centers[i, :] = np.mean(sample2[ids == i], axis=0)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"8V6ElO2vavFl","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":69},"outputId":"5c124181-a626-4ada-8e15-a1496871fc37","executionInfo":{"status":"ok","timestamp":1552654472547,"user_tz":-480,"elapsed":833,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["centers"],"execution_count":86,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[ 0. , 0. ],\n"," [ 6. , 5.5],\n"," [ 6. , -6. ]])"]},"metadata":{"tags":[]},"execution_count":86}]},{"metadata":{"id":"DOCbja7VeoZt","colab_type":"code","colab":{}},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]}]}

你可能感兴趣的:(pythondcnda算法聚类)