{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# k-means demo" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal-lengthsepal-widthpetal-lengthpetal-widthclass
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
\n", "
" ], "text/plain": [ " sepal-length sepal-width petal-length petal-width class\n", "0 5.1 3.5 1.4 0.2 Iris-setosa\n", "1 4.9 3.0 1.4 0.2 Iris-setosa\n", "2 4.7 3.2 1.3 0.2 Iris-setosa\n", "3 4.6 3.1 1.5 0.2 Iris-setosa\n", "4 5.0 3.6 1.4 0.2 Iris-setosa" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# This line configures matplotlib to show figures embedded in the notebook, \n", "# instead of opening a new window for each figure. More about that later. \n", "# If you are using an old version of IPython, try using '%pylab inline' instead.\n", "%matplotlib inline\n", "\n", "# import librarys\n", "from numpy import *\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "\n", "# Load dataset\n", "names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']\n", "dataset = pd.read_csv(\"iris.csv\", header=0, index_col=0)\n", "dataset.head()\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/bushuhui/.virtualenv/fintech/lib/python3.5/site-packages/ipykernel_launcher.py:2: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " \n", "/home/bushuhui/.virtualenv/fintech/lib/python3.5/site-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " This is separate from the ipykernel package so we can avoid doing imports until\n", "/home/bushuhui/.virtualenv/fintech/lib/python3.5/site-packages/ipykernel_launcher.py:4: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " after removing the cwd from sys.path.\n" ] } ], "source": [ "#对类别进行编码,3个类别分别赋值0,1,2\n", "dataset['class'][dataset['class']=='Iris-setosa']=0\n", "dataset['class'][dataset['class']=='Iris-versicolor']=1\n", "dataset['class'][dataset['class']=='Iris-virginica']=2\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def originalDatashow(dataSet):\n", " #绘制原始的样本点\n", " num,dim=shape(dataSet)\n", " marksamples=['ob'] #样本图形标记\n", " for i in range(num):\n", " plt.plot(datamat.iat[i,0],datamat.iat[i,1],marksamples[0],markersize=5)\n", " plt.title('original dataset')\n", " plt.xlabel('sepal length')\n", " plt.ylabel('sepal width') \n", " plt.show()\n", " " ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#获取样本数据\n", "datamat = dataset.loc[:, ['sepal-length', 'sepal-width']]\n", "# 真实的标签\n", "labels = dataset.loc[:, ['class']]\n", "#原始数据显示\n", "originalDatashow(datamat)\n", "\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "def randChosenCent(dataSet,k):\n", " \"\"\"初始化聚类中心:通过在区间范围随机产生的值作为新的中心点\"\"\"\n", "\n", " # 样本数\n", " m=shape(dataSet)[0]\n", " # 初始化列表\n", " centroidsIndex=[]\n", " #生成类似于样本索引的列表\n", " dataIndex=list(range(m))\n", " for i in range(k):\n", " #生成随机数\n", " randIndex=random.randint(0,len(dataIndex))\n", " #将随机产生的样本的索引放入centroidsIndex\n", " centroidsIndex.append(dataIndex[randIndex])\n", " #删除已经被抽中的样本\n", " del dataIndex[randIndex]\n", " #根据索引获取样本\n", " centroids = dataSet.iloc[centroidsIndex]\n", " return mat(centroids)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "\n", "def distEclud(vecA, vecB):\n", " \"\"\"算距离, 两个向量间欧式距离\"\"\"\n", " return sqrt(sum(power(vecA - vecB, 2))) #la.norm(vecA-vecB)\n", "\n", "\n", "def kMeans(dataSet, k):\n", " # 样本总数\n", " m = shape(dataSet)[0]\n", " # 分配样本到最近的簇:存[簇序号,距离的平方] (m行 x 2 列)\n", " clusterAssment = mat(zeros((m, 2)))\n", "\n", " # step1: 通过随机产生的样本点初始化聚类中心\n", " centroids = randChosenCent(dataSet, k)\n", " print('最初的中心=', centroids)\n", "\n", " # 标志位,如果迭代前后样本分类发生变化值为Tree,否则为False\n", " clusterChanged = True\n", " # 查看迭代次数\n", " iterTime = 0\n", " \n", " # 所有样本分配结果不再改变,迭代终止\n", " while clusterChanged:\n", " clusterChanged = False\n", " \n", " # step2:分配到最近的聚类中心对应的簇中\n", " for i in range(m):\n", " # 初始定义距离为无穷大\n", " minDist = inf;\n", " # 初始化索引值\n", " minIndex = -1\n", " # 计算每个样本与k个中心点距离\n", " for j in range(k):\n", " # 计算第i个样本到第j个中心点的距离\n", " distJI = distEclud(centroids[j, :], dataSet.values[i, :])\n", " # 判断距离是否为最小\n", " if distJI < minDist:\n", " # 更新获取到最小距离\n", " minDist = distJI\n", " # 获取对应的簇序号\n", " minIndex = j\n", " # 样本上次分配结果跟本次不一样,标志位clusterChanged置True\n", " if clusterAssment[i, 0] != minIndex:\n", " clusterChanged = True\n", " clusterAssment[i, :] = minIndex, minDist ** 2 # 分配样本到最近的簇\n", " \n", " iterTime += 1\n", " sse = sum(clusterAssment[:, 1])\n", " print('the SSE of %d' % iterTime + 'th iteration is %f' % sse)\n", " \n", " # step3:更新聚类中心\n", " for cent in range(k): # 样本分配结束后,重新计算聚类中心\n", " # 获取该簇所有的样本点\n", " ptsInClust = dataSet.iloc[nonzero(clusterAssment[:, 0].A == cent)[0]]\n", " # 更新聚类中心:axis=0沿列方向求均值。\n", " centroids[cent, :] = mean(ptsInClust, axis=0)\n", " return centroids, clusterAssment\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "最初的中心= [[5. 3.5]\n", " [4.9 2.4]\n", " [7.1 3. ]]\n", "the SSE of 1th iteration is 68.800000\n", "the SSE of 2th iteration is 41.374283\n", "the SSE of 3th iteration is 38.641949\n", "the SSE of 4th iteration is 38.030526\n", "the SSE of 5th iteration is 37.513984\n", "the SSE of 6th iteration is 37.174201\n", "the SSE of 7th iteration is 37.136261\n", "the SSE of 8th iteration is 37.123702\n" ] } ], "source": [ "# 进行k-means聚类\n", "k = 3 # 用户定义聚类数\n", "mycentroids, clusterAssment = kMeans(datamat, k)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def datashow(dataSet, k, centroids, clusterAssment): # 二维空间显示聚类结果\n", " from matplotlib import pyplot as plt\n", " num, dim = shape(dataSet) # 样本数num ,维数dim\n", "\n", " if dim != 2:\n", " print('sorry,the dimension of your dataset is not 2!')\n", " return 1\n", " marksamples = ['or', 'ob', 'og', 'ok', '^r', '^b', ' len(marksamples):\n", " print('sorry,your k is too large,please add length of the marksample!')\n", " return 1\n", " # 绘所有样本\n", " for i in range(num):\n", " markindex = int(clusterAssment[i, 0]) # 矩阵形式转为int值, 簇序号\n", " # 特征维对应坐标轴x,y;样本图形标记及大小\n", " plt.plot(dataSet.iat[i, 0], dataSet.iat[i, 1], marksamples[markindex], markersize=6)\n", "\n", " # 绘中心点\n", " markcentroids = ['o', '*', '^'] # 聚类中心图形标记\n", " label = ['0', '1', '2']\n", " c = ['yellow', 'pink', 'red']\n", " for i in range(k):\n", " plt.plot(centroids[i, 0], centroids[i, 1], markcentroids[i], markersize=15, label=label[i], c=c[i])\n", " plt.legend(loc='upper left')\n", " plt.xlabel('sepal length')\n", " plt.ylabel('sepal width')\n", "\n", " plt.title('k-means cluster result') # 标题\n", " plt.show()\n", " \n", " \n", "# 画出实际图像\n", "def trgartshow(dataSet, k, labels):\n", " from matplotlib import pyplot as plt\n", "\n", " num, dim = shape(dataSet)\n", " label = ['0', '1', '2']\n", " marksamples = ['ob', 'or', 'og', 'ok', '^r', '^b', '" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 绘图显示\n", "datashow(datamat, k, mycentroids, clusterAssment)\n", "trgartshow(datamat, 3, labels)" ] } ], "metadata": { "jupytext_formats": "ipynb,py", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 2 }