You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

k-means.ipynb 59 kB

6 years ago
6 years ago
6 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "# k-means demo"
  8. ]
  9. },
  10. {
  11. "cell_type": "code",
  12. "execution_count": 10,
  13. "metadata": {},
  14. "outputs": [
  15. {
  16. "data": {
  17. "text/html": [
  18. "<div>\n",
  19. "<style scoped>\n",
  20. " .dataframe tbody tr th:only-of-type {\n",
  21. " vertical-align: middle;\n",
  22. " }\n",
  23. "\n",
  24. " .dataframe tbody tr th {\n",
  25. " vertical-align: top;\n",
  26. " }\n",
  27. "\n",
  28. " .dataframe thead th {\n",
  29. " text-align: right;\n",
  30. " }\n",
  31. "</style>\n",
  32. "<table border=\"1\" class=\"dataframe\">\n",
  33. " <thead>\n",
  34. " <tr style=\"text-align: right;\">\n",
  35. " <th></th>\n",
  36. " <th>sepal-length</th>\n",
  37. " <th>sepal-width</th>\n",
  38. " <th>petal-length</th>\n",
  39. " <th>petal-width</th>\n",
  40. " <th>class</th>\n",
  41. " </tr>\n",
  42. " </thead>\n",
  43. " <tbody>\n",
  44. " <tr>\n",
  45. " <th>0</th>\n",
  46. " <td>5.1</td>\n",
  47. " <td>3.5</td>\n",
  48. " <td>1.4</td>\n",
  49. " <td>0.2</td>\n",
  50. " <td>Iris-setosa</td>\n",
  51. " </tr>\n",
  52. " <tr>\n",
  53. " <th>1</th>\n",
  54. " <td>4.9</td>\n",
  55. " <td>3.0</td>\n",
  56. " <td>1.4</td>\n",
  57. " <td>0.2</td>\n",
  58. " <td>Iris-setosa</td>\n",
  59. " </tr>\n",
  60. " <tr>\n",
  61. " <th>2</th>\n",
  62. " <td>4.7</td>\n",
  63. " <td>3.2</td>\n",
  64. " <td>1.3</td>\n",
  65. " <td>0.2</td>\n",
  66. " <td>Iris-setosa</td>\n",
  67. " </tr>\n",
  68. " <tr>\n",
  69. " <th>3</th>\n",
  70. " <td>4.6</td>\n",
  71. " <td>3.1</td>\n",
  72. " <td>1.5</td>\n",
  73. " <td>0.2</td>\n",
  74. " <td>Iris-setosa</td>\n",
  75. " </tr>\n",
  76. " <tr>\n",
  77. " <th>4</th>\n",
  78. " <td>5.0</td>\n",
  79. " <td>3.6</td>\n",
  80. " <td>1.4</td>\n",
  81. " <td>0.2</td>\n",
  82. " <td>Iris-setosa</td>\n",
  83. " </tr>\n",
  84. " </tbody>\n",
  85. "</table>\n",
  86. "</div>"
  87. ],
  88. "text/plain": [
  89. " sepal-length sepal-width petal-length petal-width class\n",
  90. "0 5.1 3.5 1.4 0.2 Iris-setosa\n",
  91. "1 4.9 3.0 1.4 0.2 Iris-setosa\n",
  92. "2 4.7 3.2 1.3 0.2 Iris-setosa\n",
  93. "3 4.6 3.1 1.5 0.2 Iris-setosa\n",
  94. "4 5.0 3.6 1.4 0.2 Iris-setosa"
  95. ]
  96. },
  97. "execution_count": 10,
  98. "metadata": {},
  99. "output_type": "execute_result"
  100. }
  101. ],
  102. "source": [
  103. "# This line configures matplotlib to show figures embedded in the notebook, \n",
  104. "# instead of opening a new window for each figure. More about that later. \n",
  105. "# If you are using an old version of IPython, try using '%pylab inline' instead.\n",
  106. "%matplotlib inline\n",
  107. "\n",
  108. "# import librarys\n",
  109. "from numpy import *\n",
  110. "import matplotlib.pyplot as plt\n",
  111. "import pandas as pd\n",
  112. "\n",
  113. "# Load dataset\n",
  114. "names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']\n",
  115. "dataset = pd.read_csv(\"iris.csv\", header=0, index_col=0)\n",
  116. "dataset.head()\n"
  117. ]
  118. },
  119. {
  120. "cell_type": "code",
  121. "execution_count": 5,
  122. "metadata": {},
  123. "outputs": [
  124. {
  125. "name": "stderr",
  126. "output_type": "stream",
  127. "text": [
  128. "/home/bushuhui/.virtualenv/fintech/lib/python3.5/site-packages/ipykernel_launcher.py:2: SettingWithCopyWarning: \n",
  129. "A value is trying to be set on a copy of a slice from a DataFrame\n",
  130. "\n",
  131. "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
  132. " \n",
  133. "/home/bushuhui/.virtualenv/fintech/lib/python3.5/site-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: \n",
  134. "A value is trying to be set on a copy of a slice from a DataFrame\n",
  135. "\n",
  136. "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
  137. " This is separate from the ipykernel package so we can avoid doing imports until\n",
  138. "/home/bushuhui/.virtualenv/fintech/lib/python3.5/site-packages/ipykernel_launcher.py:4: SettingWithCopyWarning: \n",
  139. "A value is trying to be set on a copy of a slice from a DataFrame\n",
  140. "\n",
  141. "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
  142. " after removing the cwd from sys.path.\n"
  143. ]
  144. }
  145. ],
  146. "source": [
  147. "#对类别进行编码,3个类别分别赋值0,1,2\n",
  148. "dataset['class'][dataset['class']=='Iris-setosa']=0\n",
  149. "dataset['class'][dataset['class']=='Iris-versicolor']=1\n",
  150. "dataset['class'][dataset['class']=='Iris-virginica']=2\n"
  151. ]
  152. },
  153. {
  154. "cell_type": "code",
  155. "execution_count": 8,
  156. "metadata": {},
  157. "outputs": [],
  158. "source": [
  159. "def originalDatashow(dataSet):\n",
  160. " #绘制原始的样本点\n",
  161. " num,dim=shape(dataSet)\n",
  162. " marksamples=['ob'] #样本图形标记\n",
  163. " for i in range(num):\n",
  164. " plt.plot(datamat.iat[i,0],datamat.iat[i,1],marksamples[0],markersize=5)\n",
  165. " plt.title('original dataset')\n",
  166. " plt.xlabel('sepal length')\n",
  167. " plt.ylabel('sepal width') \n",
  168. " plt.show()\n",
  169. " "
  170. ]
  171. },
  172. {
  173. "cell_type": "code",
  174. "execution_count": 21,
  175. "metadata": {
  176. "scrolled": true
  177. },
  178. "outputs": [
  179. {
  180. "data": {
  181. "image/png": "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\n",
  182. "text/plain": [
  183. "<Figure size 432x288 with 1 Axes>"
  184. ]
  185. },
  186. "metadata": {},
  187. "output_type": "display_data"
  188. }
  189. ],
  190. "source": [
  191. "#获取样本数据\n",
  192. "datamat = dataset.loc[:, ['sepal-length', 'sepal-width']]\n",
  193. "# 真实的标签\n",
  194. "labels = dataset.loc[:, ['class']]\n",
  195. "#原始数据显示\n",
  196. "originalDatashow(datamat)\n",
  197. "\n"
  198. ]
  199. },
  200. {
  201. "cell_type": "code",
  202. "execution_count": 12,
  203. "metadata": {},
  204. "outputs": [],
  205. "source": [
  206. "def randChosenCent(dataSet,k):\n",
  207. " \"\"\"初始化聚类中心:通过在区间范围随机产生的值作为新的中心点\"\"\"\n",
  208. "\n",
  209. " # 样本数\n",
  210. " m=shape(dataSet)[0]\n",
  211. " # 初始化列表\n",
  212. " centroidsIndex=[]\n",
  213. " #生成类似于样本索引的列表\n",
  214. " dataIndex=list(range(m))\n",
  215. " for i in range(k):\n",
  216. " #生成随机数\n",
  217. " randIndex=random.randint(0,len(dataIndex))\n",
  218. " #将随机产生的样本的索引放入centroidsIndex\n",
  219. " centroidsIndex.append(dataIndex[randIndex])\n",
  220. " #删除已经被抽中的样本\n",
  221. " del dataIndex[randIndex]\n",
  222. " #根据索引获取样本\n",
  223. " centroids = dataSet.iloc[centroidsIndex]\n",
  224. " return mat(centroids)"
  225. ]
  226. },
  227. {
  228. "cell_type": "code",
  229. "execution_count": 15,
  230. "metadata": {},
  231. "outputs": [],
  232. "source": [
  233. "\n",
  234. "def distEclud(vecA, vecB):\n",
  235. " \"\"\"算距离, 两个向量间欧式距离\"\"\"\n",
  236. " return sqrt(sum(power(vecA - vecB, 2))) #la.norm(vecA-vecB)\n",
  237. "\n",
  238. "\n",
  239. "def kMeans(dataSet, k):\n",
  240. " # 样本总数\n",
  241. " m = shape(dataSet)[0]\n",
  242. " # 分配样本到最近的簇:存[簇序号,距离的平方] (m行 x 2 列)\n",
  243. " clusterAssment = mat(zeros((m, 2)))\n",
  244. "\n",
  245. " # step1: 通过随机产生的样本点初始化聚类中心\n",
  246. " centroids = randChosenCent(dataSet, k)\n",
  247. " print('最初的中心=', centroids)\n",
  248. "\n",
  249. " # 标志位,如果迭代前后样本分类发生变化值为Tree,否则为False\n",
  250. " clusterChanged = True\n",
  251. " # 查看迭代次数\n",
  252. " iterTime = 0\n",
  253. " \n",
  254. " # 所有样本分配结果不再改变,迭代终止\n",
  255. " while clusterChanged:\n",
  256. " clusterChanged = False\n",
  257. " \n",
  258. " # step2:分配到最近的聚类中心对应的簇中\n",
  259. " for i in range(m):\n",
  260. " # 初始定义距离为无穷大\n",
  261. " minDist = inf;\n",
  262. " # 初始化索引值\n",
  263. " minIndex = -1\n",
  264. " # 计算每个样本与k个中心点距离\n",
  265. " for j in range(k):\n",
  266. " # 计算第i个样本到第j个中心点的距离\n",
  267. " distJI = distEclud(centroids[j, :], dataSet.values[i, :])\n",
  268. " # 判断距离是否为最小\n",
  269. " if distJI < minDist:\n",
  270. " # 更新获取到最小距离\n",
  271. " minDist = distJI\n",
  272. " # 获取对应的簇序号\n",
  273. " minIndex = j\n",
  274. " # 样本上次分配结果跟本次不一样,标志位clusterChanged置True\n",
  275. " if clusterAssment[i, 0] != minIndex:\n",
  276. " clusterChanged = True\n",
  277. " clusterAssment[i, :] = minIndex, minDist ** 2 # 分配样本到最近的簇\n",
  278. " \n",
  279. " iterTime += 1\n",
  280. " sse = sum(clusterAssment[:, 1])\n",
  281. " print('the SSE of %d' % iterTime + 'th iteration is %f' % sse)\n",
  282. " \n",
  283. " # step3:更新聚类中心\n",
  284. " for cent in range(k): # 样本分配结束后,重新计算聚类中心\n",
  285. " # 获取该簇所有的样本点\n",
  286. " ptsInClust = dataSet.iloc[nonzero(clusterAssment[:, 0].A == cent)[0]]\n",
  287. " # 更新聚类中心:axis=0沿列方向求均值。\n",
  288. " centroids[cent, :] = mean(ptsInClust, axis=0)\n",
  289. " return centroids, clusterAssment\n"
  290. ]
  291. },
  292. {
  293. "cell_type": "code",
  294. "execution_count": 16,
  295. "metadata": {},
  296. "outputs": [
  297. {
  298. "name": "stdout",
  299. "output_type": "stream",
  300. "text": [
  301. "最初的中心= [[5. 3.5]\n",
  302. " [4.9 2.4]\n",
  303. " [7.1 3. ]]\n",
  304. "the SSE of 1th iteration is 68.800000\n",
  305. "the SSE of 2th iteration is 41.374283\n",
  306. "the SSE of 3th iteration is 38.641949\n",
  307. "the SSE of 4th iteration is 38.030526\n",
  308. "the SSE of 5th iteration is 37.513984\n",
  309. "the SSE of 6th iteration is 37.174201\n",
  310. "the SSE of 7th iteration is 37.136261\n",
  311. "the SSE of 8th iteration is 37.123702\n"
  312. ]
  313. }
  314. ],
  315. "source": [
  316. "# 进行k-means聚类\n",
  317. "k = 3 # 用户定义聚类数\n",
  318. "mycentroids, clusterAssment = kMeans(datamat, k)"
  319. ]
  320. },
  321. {
  322. "cell_type": "code",
  323. "execution_count": 17,
  324. "metadata": {},
  325. "outputs": [],
  326. "source": [
  327. "def datashow(dataSet, k, centroids, clusterAssment): # 二维空间显示聚类结果\n",
  328. " from matplotlib import pyplot as plt\n",
  329. " num, dim = shape(dataSet) # 样本数num ,维数dim\n",
  330. "\n",
  331. " if dim != 2:\n",
  332. " print('sorry,the dimension of your dataset is not 2!')\n",
  333. " return 1\n",
  334. " marksamples = ['or', 'ob', 'og', 'ok', '^r', '^b', '<g'] # 样本图形标记\n",
  335. " if k > len(marksamples):\n",
  336. " print('sorry,your k is too large,please add length of the marksample!')\n",
  337. " return 1\n",
  338. " # 绘所有样本\n",
  339. " for i in range(num):\n",
  340. " markindex = int(clusterAssment[i, 0]) # 矩阵形式转为int值, 簇序号\n",
  341. " # 特征维对应坐标轴x,y;样本图形标记及大小\n",
  342. " plt.plot(dataSet.iat[i, 0], dataSet.iat[i, 1], marksamples[markindex], markersize=6)\n",
  343. "\n",
  344. " # 绘中心点\n",
  345. " markcentroids = ['o', '*', '^'] # 聚类中心图形标记\n",
  346. " label = ['0', '1', '2']\n",
  347. " c = ['yellow', 'pink', 'red']\n",
  348. " for i in range(k):\n",
  349. " plt.plot(centroids[i, 0], centroids[i, 1], markcentroids[i], markersize=15, label=label[i], c=c[i])\n",
  350. " plt.legend(loc='upper left')\n",
  351. " plt.xlabel('sepal length')\n",
  352. " plt.ylabel('sepal width')\n",
  353. "\n",
  354. " plt.title('k-means cluster result') # 标题\n",
  355. " plt.show()\n",
  356. " \n",
  357. " \n",
  358. "# 画出实际图像\n",
  359. "def trgartshow(dataSet, k, labels):\n",
  360. " from matplotlib import pyplot as plt\n",
  361. "\n",
  362. " num, dim = shape(dataSet)\n",
  363. " label = ['0', '1', '2']\n",
  364. " marksamples = ['ob', 'or', 'og', 'ok', '^r', '^b', '<g']\n",
  365. " # 通过循环的方式,完成分组散点图的绘制\n",
  366. " for i in range(num):\n",
  367. " plt.plot(datamat.iat[i, 0], datamat.iat[i, 1], marksamples[int(labels.iat[i, 0])], markersize=6)\n",
  368. " for i in range(0, num, 50):\n",
  369. " plt.plot(datamat.iat[i, 0], datamat.iat[i, 1], marksamples[int(labels.iat[i, 0])], markersize=6,\n",
  370. " label=label[int(labels.iat[i, 0])])\n",
  371. " plt.legend(loc='upper left')\n",
  372. " \n",
  373. " # 添加轴标签和标题\n",
  374. " plt.xlabel('sepal length')\n",
  375. " plt.ylabel('sepal width')\n",
  376. " plt.title('iris true result') # 标题\n",
  377. "\n",
  378. " # 显示图形\n",
  379. " plt.show()\n",
  380. " # label=labels.iat[i,0]"
  381. ]
  382. },
  383. {
  384. "cell_type": "code",
  385. "execution_count": 18,
  386. "metadata": {},
  387. "outputs": [
  388. {
  389. "data": {
  390. "image/png": "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\n",
  391. "text/plain": [
  392. "<Figure size 432x288 with 1 Axes>"
  393. ]
  394. },
  395. "metadata": {},
  396. "output_type": "display_data"
  397. },
  398. {
  399. "data": {
  400. "image/png": "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\n",
  401. "text/plain": [
  402. "<Figure size 432x288 with 1 Axes>"
  403. ]
  404. },
  405. "metadata": {},
  406. "output_type": "display_data"
  407. }
  408. ],
  409. "source": [
  410. "# 绘图显示\n",
  411. "datashow(datamat, k, mycentroids, clusterAssment)\n",
  412. "trgartshow(datamat, 3, labels)"
  413. ]
  414. }
  415. ],
  416. "metadata": {
  417. "jupytext_formats": "ipynb,py",
  418. "kernelspec": {
  419. "display_name": "Python 3",
  420. "language": "python",
  421. "name": "python3"
  422. },
  423. "language_info": {
  424. "codemirror_mode": {
  425. "name": "ipython",
  426. "version": 3
  427. },
  428. "file_extension": ".py",
  429. "mimetype": "text/x-python",
  430. "name": "python",
  431. "nbconvert_exporter": "python",
  432. "pygments_lexer": "ipython3",
  433. "version": "3.5.2"
  434. }
  435. },
  436. "nbformat": 4,
  437. "nbformat_minor": 2
  438. }

机器学习越来越多应用到飞行器、机器人等领域,其目的是利用计算机实现类似人类的智能,从而实现装备的智能化与无人化。本课程旨在引导学生掌握机器学习的基本知识、典型方法与技术,通过具体的应用案例激发学生对该学科的兴趣,鼓励学生能够从人工智能的角度来分析、解决飞行器、机器人所面临的问题和挑战。本课程主要内容包括Python编程基础,机器学习模型,无监督学习、监督学习、深度学习基础知识与实现,并学习如何利用机器学习解决实际问题,从而全面提升自我的《综合能力》。

Contributors (1)