├── desktop.ini ├── README.md ├── .ipynb_checkpoints ├── sift-checkpoint.ipynb ├── Image retrieval-checkpoint.ipynb └── plot_kmeans_digits-checkpoint.ipynb ├── sift.ipynb ├── ImageRetrieval.py └── plot_kmeans_digits.ipynb /desktop.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhaoxin111/imageRetrieval/HEAD/desktop.ini -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # imageRetrieval 2 | 3 | ## This is a demo of how to retriecval image using SIFT and BOW. 4 | -------------------------------------------------------------------------------- /.ipynb_checkpoints/sift-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 2 6 | } 7 | -------------------------------------------------------------------------------- /.ipynb_checkpoints/Image retrieval-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 2 6 | } 7 | -------------------------------------------------------------------------------- /sift.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import cv2\n", 12 | "import numpy" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 21, 18 | "metadata": { 19 | "collapsed": true 20 | }, 21 | "outputs": [], 22 | "source": [ 23 | "img=cv2.imread('cat.jpg',cv2.IMREAD_COLOR)\n", 24 | "gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 22, 30 | "metadata": {}, 31 | "outputs": [ 32 | { 33 | "data": { 34 | "text/plain": [ 35 | "-1" 36 | ] 37 | }, 38 | "execution_count": 22, 39 | "metadata": {}, 40 | "output_type": "execute_result" 41 | } 42 | ], 43 | "source": [ 44 | "cv2.imshow('cat',img)\n", 45 | "cv2.waitKey()" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 23, 51 | "metadata": {}, 52 | "outputs": [ 53 | { 54 | "data": { 55 | "text/plain": [ 56 | "True" 57 | ] 58 | }, 59 | "execution_count": 23, 60 | "metadata": {}, 61 | "output_type": "execute_result" 62 | } 63 | ], 64 | "source": [ 65 | "sift = cv2.xfeatures2d.SIFT_create()\n", 66 | "kp = sift.detect(gray,None)\n", 67 | "img_kp=cv2.drawKeypoints(gray,kp,img)\n", 68 | "cv2.imwrite('sift_keypoints.jpg',img_kp)\n" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 19, 74 | "metadata": {}, 75 | "outputs": [ 76 | { 77 | "data": { 78 | "text/plain": [ 79 | "cv2.KeyPoint" 80 | ] 81 | }, 82 | "execution_count": 19, 83 | "metadata": {}, 84 | "output_type": "execute_result" 85 | } 86 | ], 87 | "source": [ 88 | "type(kp[0])" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 26, 94 | "metadata": {}, 95 | "outputs": [ 96 | { 97 | "data": { 98 | "text/plain": [ 99 | "True" 100 | ] 101 | }, 102 | "execution_count": 26, 103 | "metadata": {}, 104 | "output_type": "execute_result" 105 | } 106 | ], 107 | "source": [ 108 | "img=cv2.drawKeypoints(gray,kp,img,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)\n", 109 | "cv2.imwrite('sift_keypoints.jpg',img)" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": 27, 115 | "metadata": {}, 116 | "outputs": [ 117 | { 118 | "data": { 119 | "text/plain": [ 120 | "-1" 121 | ] 122 | }, 123 | "execution_count": 27, 124 | "metadata": {}, 125 | "output_type": "execute_result" 126 | } 127 | ], 128 | "source": [ 129 | "kp_img=cv2.imread('sift_keypoints.jpg',cv2.IMREAD_COLOR)\n", 130 | "cv2.imshow('kp',kp_img)\n", 131 | "cv2.waitKey()" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 28, 137 | "metadata": { 138 | "collapsed": true 139 | }, 140 | "outputs": [], 141 | "source": [ 142 | "kp, des = sift.detectAndCompute(gray,None)" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 35, 148 | "metadata": {}, 149 | "outputs": [ 150 | { 151 | "data": { 152 | "text/plain": [ 153 | "array([ 81., 148., 2., 0., 0., 0., 0., 0., 183.,\n", 154 | " 183., 0., 1., 1., 0., 0., 0., 70., 33.,\n", 155 | " 1., 9., 30., 0., 0., 0., 12., 9., 1.,\n", 156 | " 7., 20., 4., 0., 0., 144., 43., 2., 0.,\n", 157 | " 0., 0., 0., 10., 183., 76., 0., 0., 1.,\n", 158 | " 0., 0., 4., 162., 18., 2., 10., 45., 0.,\n", 159 | " 0., 0., 6., 23., 4., 10., 26., 2., 0.,\n", 160 | " 0., 57., 0., 0., 0., 0., 0., 0., 16.,\n", 161 | " 183., 2., 0., 0., 2., 0., 0., 65., 126.,\n", 162 | " 5., 3., 16., 69., 1., 1., 18., 3., 39.,\n", 163 | " 8., 7., 17., 2., 0., 0., 0., 0., 0.,\n", 164 | " 0., 0., 0., 0., 0., 19., 0., 0., 0.,\n", 165 | " 1., 0., 0., 12., 9., 1., 1., 7., 34.,\n", 166 | " 1., 0., 7., 2., 18., 7., 4., 8., 0.,\n", 167 | " 0., 0.], dtype=float32)" 168 | ] 169 | }, 170 | "execution_count": 35, 171 | "metadata": {}, 172 | "output_type": "execute_result" 173 | } 174 | ], 175 | "source": [ 176 | "des[0]" 177 | ] 178 | } 179 | ], 180 | "metadata": { 181 | "kernelspec": { 182 | "display_name": "Python 3", 183 | "language": "python", 184 | "name": "python3" 185 | }, 186 | "language_info": { 187 | "codemirror_mode": { 188 | "name": "ipython", 189 | "version": 3 190 | }, 191 | "file_extension": ".py", 192 | "mimetype": "text/x-python", 193 | "name": "python", 194 | "nbconvert_exporter": "python", 195 | "pygments_lexer": "ipython3", 196 | "version": "3.6.1" 197 | } 198 | }, 199 | "nbformat": 4, 200 | "nbformat_minor": 2 201 | } 202 | -------------------------------------------------------------------------------- /ImageRetrieval.py: -------------------------------------------------------------------------------- 1 | 2 | # coding: utf-8 3 | 4 | # In[156]: 5 | 6 | import cv2 7 | import numpy as np 8 | import os 9 | from sklearn.cluster import KMeans 10 | from matplotlib import pyplot as plt 11 | get_ipython().magic('matplotlib inline') 12 | 13 | 14 | # ### 基于SIFT,BOW的图像检索 15 | # #### 1、SIFT提取每幅图像的特征点 16 | # #### 2、聚类获取视觉单词中心(聚类中心),构造视觉单词词典 17 | # #### 3、将图像特征点映射到视觉单词上,得到图像特征 18 | # #### 4、计算待检索图像的最近邻图像 19 | 20 | # In[249]: 21 | 22 | # 根据图像数据文件夹路径获取所有图片路径 23 | 24 | training_path='C:\\Users\\Euler\\Pictures\\Saved Pictures\\' #训练样本文件夹路径 25 | training_names=os.listdir(training_path) 26 | # 保留所有图片 27 | pic_names=['bmp','jpg','png','tiff','gif','pcx','tga','exif','fpx','svg','psd','cdr','pcd','dxf','ufo','eps','ai','raw','WMF'] 28 | for name in training_names: 29 | file_format=name.split('.')[-1] 30 | if file_format not in pic_names: 31 | training_names.remove(name) 32 | num_words=1000 # 聚类中心数 33 | 34 | img_paths=[] # 所有图片路径 35 | for name in training_names: 36 | img_path=os.path.join(training_path,name) 37 | img_paths.append(img_path) 38 | 39 | 40 | # In[248]: 41 | 42 | img_paths 43 | 44 | 45 | # In[198]: 46 | 47 | def getClusterCentures(img_paths,dataset_matrix,num_words): 48 | ''' 49 | 获取聚类中心 50 | 51 | img_paths:图像数据中所有图像路径 52 | dataset_matrix:图像数据的矩阵表示 注:img_paths dataset_matrix这两个参数只需要指定一个 53 | num_words:聚类中心数 54 | ''' 55 | sift_det=cv2.xfeatures2d.SIFT_create() 56 | des_list=[] # 特征描述 57 | des_matrix=np.zeros((1,128)) 58 | if img_paths!=None: 59 | for path in img_paths: 60 | img=cv2.imread(path) 61 | gray=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) 62 | kp,des=sift_det.detectAndCompute(gray,None) 63 | if des!=None: 64 | des_matrix=np.row_stack((des_matrix,des)) 65 | des_list.append(des) 66 | elif dataset_matrix!=None: 67 | for gray in range(dataset_matrix.shape[0]): 68 | kp,des=sift_det.detectAndCompute(gray,None) 69 | if des!=None: 70 | des_matrix=np.row_stack((des_matrix,des)) 71 | des_list.append(des) 72 | else: 73 | raise ValueError('输入不合法') 74 | 75 | des_matrix=des_matrix[1:,:] # the des matrix of sift 76 | 77 | # 计算聚类中心 构造视觉单词词典 78 | kmeans=KMeans(n_clusters=num_words,random_state=33) 79 | kmeans.fit(des_matrix) 80 | centres = kmeans.cluster_centers_ # 视觉聚类中心 81 | 82 | return centres,des_list 83 | 84 | 85 | # In[250]: 86 | 87 | centres,des_list=getClusterCentures(img_paths=img_paths,num_words=num_words,dataset_matrix=None) 88 | 89 | 90 | # In[227]: 91 | 92 | des_list[0].shape 93 | 94 | 95 | # In[189]: 96 | 97 | kmeans.cluster_centers_.shape 98 | 99 | 100 | # In[190]: 101 | 102 | np.sum(np.sum(img_features[24])) 103 | 104 | 105 | # In[200]: 106 | 107 | # 将特征描述转换为特征向量 108 | def des2feature(des,num_words,centures): 109 | ''' 110 | des:单幅图像的SIFT特征描述 111 | num_words:视觉单词数/聚类中心数 112 | centures:聚类中心坐标 num_words*128 113 | return: feature vector 1*num_words 114 | ''' 115 | img_feature_vec=np.zeros((1,num_words),'float32') 116 | for i in range(des.shape[0]): 117 | feature_k_rows=np.ones((num_words,128),'float32') 118 | feature=des[i] 119 | feature_k_rows=feature_k_rows*feature 120 | feature_k_rows=np.sum((feature_k_rows-centures)**2,1) 121 | index=np.argmax(feature_k_rows) 122 | img_feature_vec[0][index]+=1 123 | return img_feature_vec 124 | 125 | 126 | # In[206]: 127 | 128 | def get_all_features(des_list,num_words): 129 | # 获取所有图片的特征向量 130 | allvec=np.zeros((len(des_list),num_words),'float32') 131 | for i in range(len(des_list)): 132 | if des_list[i]!=None: 133 | allvec[i]=des2feature(centures=centres,des=des_list[i],num_words=num_words) 134 | return allvec 135 | 136 | 137 | # #### 经过之前的操作,我们已经成功通过词袋表示法将SIFT提取的特征表示出来 138 | # #### 接下来计算待检索图像最近邻图像 139 | 140 | # In[127]: 141 | 142 | def getNearestImg(feature,dataset,num_close): 143 | ''' 144 | 找出目标图像最像的几个 145 | feature:目标图像特征 146 | dataset:图像数据库 147 | num_close:最近个数 148 | return:最相似的几个图像 149 | ''' 150 | features=np.ones((dataset.shape[0],len(feature)),'float32') 151 | features=features*feature 152 | dist=np.sum((features-dataset)**2,1) 153 | dist_index=np.argsort(dist) 154 | return dist_index[:num_close] 155 | 156 | 157 | # In[259]: 158 | 159 | def showImg(target_img_path,index,dataset_paths): 160 | ''' 161 | target_img:要搜索的图像 162 | dataset_paths:图像数据库所有图片的路径 163 | 显示最相似的图片集合 164 | ''' 165 | # get img path 166 | paths=[] 167 | for i in index: 168 | paths.append(dataset_paths[i]) 169 | 170 | plt.figure(figsize=(10,20)) # figsize 用来设置图片大小 171 | plt.subplot(432),plt.imshow(plt.imread(target_img_path)),plt.title('target_image') 172 | 173 | for i in range(len(index)): 174 | plt.subplot(4,3,i+4),plt.imshow(plt.imread(paths[i])) 175 | plt.show() 176 | 177 | 178 | # In[216]: 179 | 180 | # 暴力搜索 181 | def retrieval_img(img_path,img_dataset,centures,img_paths): 182 | ''' 183 | 检索图像,找出最像的几个 184 | img:待检索的图像 185 | img_dataset:图像数据库 matrix 186 | num_close:显示最近邻的图像数目 187 | centures:聚类中心 188 | img_paths:图像数据库所有图像路径 189 | ''' 190 | num_close=9 191 | img=cv2.imread(img_path) 192 | img=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) 193 | kp,des=sift_det.detectAndCompute(img,None) 194 | feature=des2feature(des=des,centures=centures,num_words=num_words) 195 | sorted_index=getNearestImg(feature,img_dataset,num_close) 196 | 197 | showImg(img_path,sorted_index,img_paths) 198 | 199 | 200 | # In[251]: 201 | 202 | # test 203 | img_features=get_all_features(des_list=des_list,num_words=num_words) 204 | 205 | 206 | # In[261]: 207 | 208 | path='C:\\Users\\Euler\\Pictures\\Saved Pictures\\3.jpg' 209 | 210 | retrieval_img(path,img_features,centres,img_paths) 211 | 212 | 213 | # In[256]: 214 | 215 | pic=plt.imread(path) 216 | plt.figure(figsize=(10,20)) 217 | plt.imshow(pic) 218 | plt.show() 219 | 220 | -------------------------------------------------------------------------------- /plot_kmeans_digits.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%matplotlib inline" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": {}, 15 | "source": [ 16 | "\n", 17 | "# A demo of K-Means clustering on the handwritten digits data\n", 18 | "\n", 19 | "\n", 20 | "In this example we compare the various initialization strategies for\n", 21 | "K-means in terms of runtime and quality of the results.\n", 22 | "\n", 23 | "As the ground truth is known here, we also apply different cluster\n", 24 | "quality metrics to judge the goodness of fit of the cluster labels to the\n", 25 | "ground truth.\n", 26 | "\n", 27 | "Cluster quality metrics evaluated (see `clustering_evaluation` for\n", 28 | "definitions and discussions of the metrics):\n", 29 | "\n", 30 | "=========== ========================================================\n", 31 | "Shorthand full name\n", 32 | "=========== ========================================================\n", 33 | "homo homogeneity score\n", 34 | "compl completeness score\n", 35 | "v-meas V measure\n", 36 | "ARI adjusted Rand index\n", 37 | "AMI adjusted mutual information\n", 38 | "silhouette silhouette coefficient\n", 39 | "=========== ========================================================\n", 40 | "\n", 41 | "\n" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 2, 47 | "metadata": {}, 48 | "outputs": [ 49 | { 50 | "name": "stdout", 51 | "output_type": "stream", 52 | "text": [ 53 | "Automatically created module for IPython interactive environment\n", 54 | "n_digits: 10, \t n_samples 1797, \t n_features 64\n", 55 | "__________________________________________________________________________________\n", 56 | "init\t\ttime\tinertia\thomo\tcompl\tv-meas\tARI\tAMI\tsilhouette\n", 57 | "k-means++\t1.04s\t69432\t0.602\t0.650\t0.625\t0.465\t0.598\t0.146\n", 58 | "random \t0.30s\t69694\t0.669\t0.710\t0.689\t0.553\t0.666\t0.147\n", 59 | "PCA-based\t0.05s\t70804\t0.671\t0.698\t0.684\t0.561\t0.668\t0.118\n", 60 | "__________________________________________________________________________________\n" 61 | ] 62 | }, 63 | { 64 | "data": { 65 | "image/png": "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\n", 66 | "text/plain": [ 67 | "" 68 | ] 69 | }, 70 | "metadata": {}, 71 | "output_type": "display_data" 72 | } 73 | ], 74 | "source": [ 75 | "print(__doc__)\n", 76 | "\n", 77 | "from time import time\n", 78 | "import numpy as np\n", 79 | "import matplotlib.pyplot as plt\n", 80 | "\n", 81 | "from sklearn import metrics\n", 82 | "from sklearn.cluster import KMeans\n", 83 | "from sklearn.datasets import load_digits\n", 84 | "from sklearn.decomposition import PCA\n", 85 | "from sklearn.preprocessing import scale\n", 86 | "\n", 87 | "np.random.seed(42)\n", 88 | "\n", 89 | "digits = load_digits()\n", 90 | "data = scale(digits.data)\n", 91 | "\n", 92 | "n_samples, n_features = data.shape\n", 93 | "n_digits = len(np.unique(digits.target))\n", 94 | "labels = digits.target\n", 95 | "\n", 96 | "sample_size = 300\n", 97 | "\n", 98 | "print(\"n_digits: %d, \\t n_samples %d, \\t n_features %d\"\n", 99 | " % (n_digits, n_samples, n_features))\n", 100 | "\n", 101 | "\n", 102 | "print(82 * '_')\n", 103 | "print('init\\t\\ttime\\tinertia\\thomo\\tcompl\\tv-meas\\tARI\\tAMI\\tsilhouette')\n", 104 | "\n", 105 | "\n", 106 | "def bench_k_means(estimator, name, data):\n", 107 | " t0 = time()\n", 108 | " estimator.fit(data)\n", 109 | " print('%-9s\\t%.2fs\\t%i\\t%.3f\\t%.3f\\t%.3f\\t%.3f\\t%.3f\\t%.3f'\n", 110 | " % (name, (time() - t0), estimator.inertia_,\n", 111 | " metrics.homogeneity_score(labels, estimator.labels_),\n", 112 | " metrics.completeness_score(labels, estimator.labels_),\n", 113 | " metrics.v_measure_score(labels, estimator.labels_),\n", 114 | " metrics.adjusted_rand_score(labels, estimator.labels_),\n", 115 | " metrics.adjusted_mutual_info_score(labels, estimator.labels_),\n", 116 | " metrics.silhouette_score(data, estimator.labels_,\n", 117 | " metric='euclidean',\n", 118 | " sample_size=sample_size)))\n", 119 | "\n", 120 | "bench_k_means(KMeans(init='k-means++', n_clusters=n_digits, n_init=10),\n", 121 | " name=\"k-means++\", data=data)\n", 122 | "\n", 123 | "bench_k_means(KMeans(init='random', n_clusters=n_digits, n_init=10),\n", 124 | " name=\"random\", data=data)\n", 125 | "\n", 126 | "# in this case the seeding of the centers is deterministic, hence we run the\n", 127 | "# kmeans algorithm only once with n_init=1\n", 128 | "pca = PCA(n_components=n_digits).fit(data)\n", 129 | "bench_k_means(KMeans(init=pca.components_, n_clusters=n_digits, n_init=1),\n", 130 | " name=\"PCA-based\",\n", 131 | " data=data)\n", 132 | "print(82 * '_')\n", 133 | "\n", 134 | "# #############################################################################\n", 135 | "# Visualize the results on PCA-reduced data\n", 136 | "\n", 137 | "reduced_data = PCA(n_components=2).fit_transform(data)\n", 138 | "kmeans = KMeans(init='k-means++', n_clusters=n_digits, n_init=10)\n", 139 | "kmeans.fit(reduced_data)\n", 140 | "\n", 141 | "# Step size of the mesh. Decrease to increase the quality of the VQ.\n", 142 | "h = .02 # point in the mesh [x_min, x_max]x[y_min, y_max].\n", 143 | "\n", 144 | "# Plot the decision boundary. For that, we will assign a color to each\n", 145 | "x_min, x_max = reduced_data[:, 0].min() - 1, reduced_data[:, 0].max() + 1\n", 146 | "y_min, y_max = reduced_data[:, 1].min() - 1, reduced_data[:, 1].max() + 1\n", 147 | "xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n", 148 | "\n", 149 | "# Obtain labels for each point in mesh. Use last trained model.\n", 150 | "Z = kmeans.predict(np.c_[xx.ravel(), yy.ravel()])\n", 151 | "\n", 152 | "# Put the result into a color plot\n", 153 | "Z = Z.reshape(xx.shape)\n", 154 | "plt.figure(1)\n", 155 | "plt.clf()\n", 156 | "plt.imshow(Z, interpolation='nearest',\n", 157 | " extent=(xx.min(), xx.max(), yy.min(), yy.max()),\n", 158 | " cmap=plt.cm.Paired,\n", 159 | " aspect='auto', origin='lower')\n", 160 | "\n", 161 | "plt.plot(reduced_data[:, 0], reduced_data[:, 1], 'k.', markersize=2)\n", 162 | "# Plot the centroids as a white X\n", 163 | "centroids = kmeans.cluster_centers_\n", 164 | "plt.scatter(centroids[:, 0], centroids[:, 1],\n", 165 | " marker='x', s=169, linewidths=3,\n", 166 | " color='w', zorder=10)\n", 167 | "plt.title('K-means clustering on the digits dataset (PCA-reduced data)\\n'\n", 168 | " 'Centroids are marked with white cross')\n", 169 | "plt.xlim(x_min, x_max)\n", 170 | "plt.ylim(y_min, y_max)\n", 171 | "plt.xticks(())\n", 172 | "plt.yticks(())\n", 173 | "plt.show()" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": null, 179 | "metadata": { 180 | "collapsed": true 181 | }, 182 | "outputs": [], 183 | "source": [] 184 | } 185 | ], 186 | "metadata": { 187 | "kernelspec": { 188 | "display_name": "Python 3", 189 | "language": "python", 190 | "name": "python3" 191 | }, 192 | "language_info": { 193 | "codemirror_mode": { 194 | "name": "ipython", 195 | "version": 3 196 | }, 197 | "file_extension": ".py", 198 | "mimetype": "text/x-python", 199 | "name": "python", 200 | "nbconvert_exporter": "python", 201 | "pygments_lexer": "ipython3", 202 | "version": "3.6.1" 203 | } 204 | }, 205 | "nbformat": 4, 206 | "nbformat_minor": 1 207 | } 208 | -------------------------------------------------------------------------------- /.ipynb_checkpoints/plot_kmeans_digits-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "%matplotlib inline" 10 | ] 11 | }, 12 | { 13 | "cell_type": "markdown", 14 | "metadata": {}, 15 | "source": [ 16 | "\n", 17 | "# A demo of K-Means clustering on the handwritten digits data\n", 18 | "\n", 19 | "\n", 20 | "In this example we compare the various initialization strategies for\n", 21 | "K-means in terms of runtime and quality of the results.\n", 22 | "\n", 23 | "As the ground truth is known here, we also apply different cluster\n", 24 | "quality metrics to judge the goodness of fit of the cluster labels to the\n", 25 | "ground truth.\n", 26 | "\n", 27 | "Cluster quality metrics evaluated (see `clustering_evaluation` for\n", 28 | "definitions and discussions of the metrics):\n", 29 | "\n", 30 | "=========== ========================================================\n", 31 | "Shorthand full name\n", 32 | "=========== ========================================================\n", 33 | "homo homogeneity score\n", 34 | "compl completeness score\n", 35 | "v-meas V measure\n", 36 | "ARI adjusted Rand index\n", 37 | "AMI adjusted mutual information\n", 38 | "silhouette silhouette coefficient\n", 39 | "=========== ========================================================\n", 40 | "\n", 41 | "\n" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 2, 47 | "metadata": {}, 48 | "outputs": [ 49 | { 50 | "name": "stdout", 51 | "output_type": "stream", 52 | "text": [ 53 | "Automatically created module for IPython interactive environment\n", 54 | "n_digits: 10, \t n_samples 1797, \t n_features 64\n", 55 | "__________________________________________________________________________________\n", 56 | "init\t\ttime\tinertia\thomo\tcompl\tv-meas\tARI\tAMI\tsilhouette\n", 57 | "k-means++\t1.04s\t69432\t0.602\t0.650\t0.625\t0.465\t0.598\t0.146\n", 58 | "random \t0.30s\t69694\t0.669\t0.710\t0.689\t0.553\t0.666\t0.147\n", 59 | "PCA-based\t0.05s\t70804\t0.671\t0.698\t0.684\t0.561\t0.668\t0.118\n", 60 | "__________________________________________________________________________________\n" 61 | ] 62 | }, 63 | { 64 | "data": { 65 | "image/png": "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\n", 66 | "text/plain": [ 67 | "" 68 | ] 69 | }, 70 | "metadata": {}, 71 | "output_type": "display_data" 72 | } 73 | ], 74 | "source": [ 75 | "print(__doc__)\n", 76 | "\n", 77 | "from time import time\n", 78 | "import numpy as np\n", 79 | "import matplotlib.pyplot as plt\n", 80 | "\n", 81 | "from sklearn import metrics\n", 82 | "from sklearn.cluster import KMeans\n", 83 | "from sklearn.datasets import load_digits\n", 84 | "from sklearn.decomposition import PCA\n", 85 | "from sklearn.preprocessing import scale\n", 86 | "\n", 87 | "np.random.seed(42)\n", 88 | "\n", 89 | "digits = load_digits()\n", 90 | "data = scale(digits.data)\n", 91 | "\n", 92 | "n_samples, n_features = data.shape\n", 93 | "n_digits = len(np.unique(digits.target))\n", 94 | "labels = digits.target\n", 95 | "\n", 96 | "sample_size = 300\n", 97 | "\n", 98 | "print(\"n_digits: %d, \\t n_samples %d, \\t n_features %d\"\n", 99 | " % (n_digits, n_samples, n_features))\n", 100 | "\n", 101 | "\n", 102 | "print(82 * '_')\n", 103 | "print('init\\t\\ttime\\tinertia\\thomo\\tcompl\\tv-meas\\tARI\\tAMI\\tsilhouette')\n", 104 | "\n", 105 | "\n", 106 | "def bench_k_means(estimator, name, data):\n", 107 | " t0 = time()\n", 108 | " estimator.fit(data)\n", 109 | " print('%-9s\\t%.2fs\\t%i\\t%.3f\\t%.3f\\t%.3f\\t%.3f\\t%.3f\\t%.3f'\n", 110 | " % (name, (time() - t0), estimator.inertia_,\n", 111 | " metrics.homogeneity_score(labels, estimator.labels_),\n", 112 | " metrics.completeness_score(labels, estimator.labels_),\n", 113 | " metrics.v_measure_score(labels, estimator.labels_),\n", 114 | " metrics.adjusted_rand_score(labels, estimator.labels_),\n", 115 | " metrics.adjusted_mutual_info_score(labels, estimator.labels_),\n", 116 | " metrics.silhouette_score(data, estimator.labels_,\n", 117 | " metric='euclidean',\n", 118 | " sample_size=sample_size)))\n", 119 | "\n", 120 | "bench_k_means(KMeans(init='k-means++', n_clusters=n_digits, n_init=10),\n", 121 | " name=\"k-means++\", data=data)\n", 122 | "\n", 123 | "bench_k_means(KMeans(init='random', n_clusters=n_digits, n_init=10),\n", 124 | " name=\"random\", data=data)\n", 125 | "\n", 126 | "# in this case the seeding of the centers is deterministic, hence we run the\n", 127 | "# kmeans algorithm only once with n_init=1\n", 128 | "pca = PCA(n_components=n_digits).fit(data)\n", 129 | "bench_k_means(KMeans(init=pca.components_, n_clusters=n_digits, n_init=1),\n", 130 | " name=\"PCA-based\",\n", 131 | " data=data)\n", 132 | "print(82 * '_')\n", 133 | "\n", 134 | "# #############################################################################\n", 135 | "# Visualize the results on PCA-reduced data\n", 136 | "\n", 137 | "reduced_data = PCA(n_components=2).fit_transform(data)\n", 138 | "kmeans = KMeans(init='k-means++', n_clusters=n_digits, n_init=10)\n", 139 | "kmeans.fit(reduced_data)\n", 140 | "\n", 141 | "# Step size of the mesh. Decrease to increase the quality of the VQ.\n", 142 | "h = .02 # point in the mesh [x_min, x_max]x[y_min, y_max].\n", 143 | "\n", 144 | "# Plot the decision boundary. For that, we will assign a color to each\n", 145 | "x_min, x_max = reduced_data[:, 0].min() - 1, reduced_data[:, 0].max() + 1\n", 146 | "y_min, y_max = reduced_data[:, 1].min() - 1, reduced_data[:, 1].max() + 1\n", 147 | "xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n", 148 | "\n", 149 | "# Obtain labels for each point in mesh. Use last trained model.\n", 150 | "Z = kmeans.predict(np.c_[xx.ravel(), yy.ravel()])\n", 151 | "\n", 152 | "# Put the result into a color plot\n", 153 | "Z = Z.reshape(xx.shape)\n", 154 | "plt.figure(1)\n", 155 | "plt.clf()\n", 156 | "plt.imshow(Z, interpolation='nearest',\n", 157 | " extent=(xx.min(), xx.max(), yy.min(), yy.max()),\n", 158 | " cmap=plt.cm.Paired,\n", 159 | " aspect='auto', origin='lower')\n", 160 | "\n", 161 | "plt.plot(reduced_data[:, 0], reduced_data[:, 1], 'k.', markersize=2)\n", 162 | "# Plot the centroids as a white X\n", 163 | "centroids = kmeans.cluster_centers_\n", 164 | "plt.scatter(centroids[:, 0], centroids[:, 1],\n", 165 | " marker='x', s=169, linewidths=3,\n", 166 | " color='w', zorder=10)\n", 167 | "plt.title('K-means clustering on the digits dataset (PCA-reduced data)\\n'\n", 168 | " 'Centroids are marked with white cross')\n", 169 | "plt.xlim(x_min, x_max)\n", 170 | "plt.ylim(y_min, y_max)\n", 171 | "plt.xticks(())\n", 172 | "plt.yticks(())\n", 173 | "plt.show()" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": null, 179 | "metadata": { 180 | "collapsed": true 181 | }, 182 | "outputs": [], 183 | "source": [] 184 | } 185 | ], 186 | "metadata": { 187 | "kernelspec": { 188 | "display_name": "Python 3", 189 | "language": "python", 190 | "name": "python3" 191 | }, 192 | "language_info": { 193 | "codemirror_mode": { 194 | "name": "ipython", 195 | "version": 3 196 | }, 197 | "file_extension": ".py", 198 | "mimetype": "text/x-python", 199 | "name": "python", 200 | "nbconvert_exporter": "python", 201 | "pygments_lexer": "ipython3", 202 | "version": "3.6.1" 203 | } 204 | }, 205 | "nbformat": 4, 206 | "nbformat_minor": 1 207 | } 208 | --------------------------------------------------------------------------------