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

ann.ipynb 129KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "id": "4d162f18",
  6. "metadata": {},
  7. "source": [
  8. "## Import du dataset"
  9. ]
  10. },
  11. {
  12. "cell_type": "code",
  13. "execution_count": 1,
  14. "id": "861d1252",
  15. "metadata": {},
  16. "outputs": [],
  17. "source": [
  18. "from sklearn.datasets import fetch_openml \n",
  19. "mnist = fetch_openml('mnist_784') "
  20. ]
  21. },
  22. {
  23. "cell_type": "code",
  24. "execution_count": 2,
  25. "id": "8d74eceb",
  26. "metadata": {},
  27. "outputs": [],
  28. "source": [
  29. "import numpy as np\n",
  30. "from sklearn.model_selection import train_test_split\n",
  31. "from sklearn.neural_network import MLPClassifier"
  32. ]
  33. },
  34. {
  35. "cell_type": "markdown",
  36. "id": "95e0ce45",
  37. "metadata": {},
  38. "source": [
  39. "## Echantillonnage du dataset"
  40. ]
  41. },
  42. {
  43. "cell_type": "code",
  44. "execution_count": 4,
  45. "id": "91e6919c",
  46. "metadata": {},
  47. "outputs": [],
  48. "source": [
  49. "echantillon = np.random.randint(70000, size=25000)\n",
  50. "data = mnist.data.values[echantillon]\n",
  51. "target = mnist.target[echantillon]\n",
  52. "trainSize = 17500/25000\n",
  53. "xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=trainSize)"
  54. ]
  55. },
  56. {
  57. "cell_type": "markdown",
  58. "id": "f35a2a10",
  59. "metadata": {},
  60. "source": [
  61. "## Premier entraînement et scores"
  62. ]
  63. },
  64. {
  65. "cell_type": "code",
  66. "execution_count": 12,
  67. "id": "9813e61b",
  68. "metadata": {},
  69. "outputs": [],
  70. "source": [
  71. "clf = MLPClassifier(hidden_layer_sizes = (50)).fit(xtrain, ytrain)"
  72. ]
  73. },
  74. {
  75. "cell_type": "code",
  76. "execution_count": 13,
  77. "id": "ef3b75ad",
  78. "metadata": {},
  79. "outputs": [
  80. {
  81. "name": "stdout",
  82. "output_type": "stream",
  83. "text": [
  84. "0.9470666666666666\n"
  85. ]
  86. }
  87. ],
  88. "source": [
  89. "print(clf.score(xtest, ytest))"
  90. ]
  91. },
  92. {
  93. "cell_type": "code",
  94. "execution_count": 16,
  95. "id": "05c41c4e",
  96. "metadata": {},
  97. "outputs": [
  98. {
  99. "name": "stdout",
  100. "output_type": "stream",
  101. "text": [
  102. "9\n",
  103. "['9']\n"
  104. ]
  105. }
  106. ],
  107. "source": [
  108. "print(target[4])\n",
  109. "print(clf.predict([data[4]]))"
  110. ]
  111. },
  112. {
  113. "cell_type": "code",
  114. "execution_count": 25,
  115. "id": "dc422f73",
  116. "metadata": {},
  117. "outputs": [
  118. {
  119. "data": {
  120. "text/plain": [
  121. "0.9768142857142857"
  122. ]
  123. },
  124. "execution_count": 25,
  125. "metadata": {},
  126. "output_type": "execute_result"
  127. }
  128. ],
  129. "source": [
  130. "from sklearn.metrics import precision_score\n",
  131. "precision_score(target.values, clf.predict(data), average='micro')"
  132. ]
  133. },
  134. {
  135. "cell_type": "markdown",
  136. "id": "d5d7d4c1",
  137. "metadata": {},
  138. "source": [
  139. "## Nombre de couches cachées optimal"
  140. ]
  141. },
  142. {
  143. "cell_type": "code",
  144. "execution_count": 14,
  145. "id": "44b6cf69",
  146. "metadata": {},
  147. "outputs": [
  148. {
  149. "data": {
  150. "image/png": "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\n",
  151. "text/plain": [
  152. "<Figure size 432x288 with 1 Axes>"
  153. ]
  154. },
  155. "metadata": {
  156. "needs_background": "light"
  157. },
  158. "output_type": "display_data"
  159. }
  160. ],
  161. "source": [
  162. "import matplotlib.pyplot as plt \n",
  163. "from sklearn.metrics import precision_score\n",
  164. "hidden_layer_list = [50]\n",
  165. "list_score = []\n",
  166. "liste_x = []\n",
  167. "\n",
  168. "for i in range (2,21):\n",
  169. " liste_x.append(i)\n",
  170. " hidden_layer_list.append(50)\n",
  171. " hidden_layer_tuple = tuple(hidden_layer_list) \n",
  172. " clf = MLPClassifier(hidden_layer_sizes = hidden_layer_tuple).fit(xtrain, ytrain)\n",
  173. " list_score.append(precision_score(target.values, clf.predict(data), average='micro'))\n",
  174. "#pour réduire le temps d'exécution réduire max_iter\n",
  175. "plt.plot(liste_x, list_score)\n",
  176. "plt.ylabel('scores')\n",
  177. "plt.xlabel('nb couches')\n",
  178. "plt.show()"
  179. ]
  180. },
  181. {
  182. "cell_type": "markdown",
  183. "id": "e4b13f21",
  184. "metadata": {},
  185. "source": [
  186. "## Nombre de couches cachées et de neurones par couche optimaux"
  187. ]
  188. },
  189. {
  190. "cell_type": "code",
  191. "execution_count": 46,
  192. "id": "7a889d9e",
  193. "metadata": {
  194. "scrolled": true
  195. },
  196. "outputs": [
  197. {
  198. "name": "stdout",
  199. "output_type": "stream",
  200. "text": [
  201. "Nb couches = 2 , layer = [179, 50] , Précision : [0.98433735 0.99186417 0.97671618 0.97836167 0.9737382 0.968\n",
  202. " 0.98077693 0.98742633 0.97380089 0.96992481] , Score : 0.9506666666666667 , Temps = 76.75932478904724\n",
  203. "Nb couches = 8 , layer = [231, 107, 126, 49, 149, 61, 73, 128] , Précision : [0.99518459 0.99120647 0.99437977 0.98888037 0.98005698 0.99416255\n",
  204. " 0.99272139 0.99413146 0.99191266 0.98865546] , Score : 0.9724 , Temps = 197.41534781455994\n",
  205. "Nb couches = 6 , layer = [275, 278, 291, 185, 252, 277] , Précision : [0.98963317 0.99822506 0.98804781 0.98809981 0.99460133 0.98660714\n",
  206. " 0.99072954 0.98948598 0.98906883 0.98955286] , Score : 0.9712 , Temps = 365.7198393344879\n",
  207. "Nb couches = 1 , layer = [168] , Précision : [0.99198397 0.9887798 0.97471355 0.98300502 0.9805141 0.97771836\n",
  208. " 0.98433735 0.98858717 0.98868399 0.96382114] , Score : 0.9573333333333334 , Temps = 54.06105351448059\n",
  209. "Nb couches = 8 , layer = [156, 144, 52, 151, 19, 85, 216, 106] , Précision : [0.99278846 0.99504425 0.99117883 0.99378399 0.98970346 0.98255814\n",
  210. " 0.9895288 0.99291617 0.9777954 0.98750521] , Score : 0.9685333333333334 , Temps = 79.1754539012909\n"
  211. ]
  212. }
  213. ],
  214. "source": [
  215. "import numpy as np\n",
  216. "import random\n",
  217. "import time\n",
  218. "\n",
  219. "for i in range(1,6):\n",
  220. " hidden_layer_list = []\n",
  221. " nb_couche = np.random.randint(1, 10)\n",
  222. " hidden_layer_list = random.sample(range(10, 300), nb_couche)\n",
  223. " hidden_layer_tuple = tuple(hidden_layer_list) \n",
  224. " start = time.time()\n",
  225. " clf = MLPClassifier(hidden_layer_sizes = hidden_layer_tuple).fit(xtrain, ytrain)\n",
  226. " end = time.time()\n",
  227. " elapsed = end - start\n",
  228. " precision = precision_score(target.values, clf.predict(data), average=None)\n",
  229. " score = clf.score(xtest, ytest)\n",
  230. " print(\"Nb couches = \", nb_couche, \", layer = \", hidden_layer_list, \", Précision : \", precision, \" , Score : \", score, \", Temps = \", elapsed)"
  231. ]
  232. },
  233. {
  234. "cell_type": "code",
  235. "execution_count": 49,
  236. "id": "2f4d82ab",
  237. "metadata": {},
  238. "outputs": [
  239. {
  240. "data": {
  241. "image/png": "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\n",
  242. "text/plain": [
  243. "<Figure size 432x288 with 2 Axes>"
  244. ]
  245. },
  246. "metadata": {
  247. "needs_background": "light"
  248. },
  249. "output_type": "display_data"
  250. }
  251. ],
  252. "source": [
  253. "import matplotlib.pyplot as plt \n",
  254. "modeles = [1, 2, 3, 4, 5]\n",
  255. "scores = [0.9506666666666667, 0.9724, 0.9712, 0.9573333333333334, 0.9685333333333334]\n",
  256. "times = [76.75932478904724, 197.41534781455994, 365.7198393344879, 54.06105351448059, 79.1754539012909]\n",
  257. "\n",
  258. "plt.subplot(2,1,1)\n",
  259. "plt.plot(modeles, scores)\n",
  260. "plt.ylabel('scores')\n",
  261. "plt.xlabel('model')\n",
  262. "\n",
  263. "plt.subplot(2,1,2)\n",
  264. "plt.plot(modeles, times)\n",
  265. "plt.ylabel('time')\n",
  266. "plt.xlabel('model')\n",
  267. "\n",
  268. "plt.show()"
  269. ]
  270. },
  271. {
  272. "cell_type": "markdown",
  273. "id": "11adbe03",
  274. "metadata": {},
  275. "source": [
  276. "## Algorithme d'optimisation optimal"
  277. ]
  278. },
  279. {
  280. "cell_type": "code",
  281. "execution_count": 47,
  282. "id": "4356994c",
  283. "metadata": {},
  284. "outputs": [
  285. {
  286. "name": "stderr",
  287. "output_type": "stream",
  288. "text": [
  289. "C:\\Users\\momof\\anaconda3\\lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:500: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
  290. "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
  291. "\n",
  292. "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
  293. " https://scikit-learn.org/stable/modules/preprocessing.html\n",
  294. " self.n_iter_ = _check_optimize_result(\"lbfgs\", opt_res, self.max_iter)\n"
  295. ]
  296. },
  297. {
  298. "name": "stdout",
  299. "output_type": "stream",
  300. "text": [
  301. "0.8926666666666667\n",
  302. "0.9128\n",
  303. "29.908934354782104\n"
  304. ]
  305. }
  306. ],
  307. "source": [
  308. "start = time.time()\n",
  309. "clf = MLPClassifier(hidden_layer_sizes = (50), solver = 'lbfgs', verbose = True).fit(xtrain, ytrain)\n",
  310. "end = time.time()\n",
  311. "elapsed = end - start\n",
  312. "print(clf.score(xtest, ytest))\n",
  313. "print(clf.score(xtrain, ytrain))\n",
  314. "print(elapsed)"
  315. ]
  316. },
  317. {
  318. "cell_type": "code",
  319. "execution_count": 48,
  320. "id": "35a7ed37",
  321. "metadata": {},
  322. "outputs": [
  323. {
  324. "name": "stderr",
  325. "output_type": "stream",
  326. "text": [
  327. "C:\\Users\\momof\\anaconda3\\lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:614: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
  328. " warnings.warn(\n"
  329. ]
  330. },
  331. {
  332. "name": "stdout",
  333. "output_type": "stream",
  334. "text": [
  335. "0.73\n",
  336. "0.7583428571428571\n",
  337. "79.51274752616882\n"
  338. ]
  339. }
  340. ],
  341. "source": [
  342. "start = time.time()\n",
  343. "clf = MLPClassifier(hidden_layer_sizes = (50), solver = 'sgd').fit(xtrain, ytrain)\n",
  344. "end = time.time()\n",
  345. "elapsed = end - start\n",
  346. "print(clf.score(xtest, ytest))\n",
  347. "print(clf.score(xtrain, ytrain))\n",
  348. "print(elapsed)"
  349. ]
  350. },
  351. {
  352. "cell_type": "code",
  353. "execution_count": 50,
  354. "id": "f9b6cb07",
  355. "metadata": {
  356. "scrolled": true
  357. },
  358. "outputs": [
  359. {
  360. "name": "stdout",
  361. "output_type": "stream",
  362. "text": [
  363. "0.9302666666666667\n",
  364. "0.9746857142857143\n",
  365. "20.47561001777649\n"
  366. ]
  367. }
  368. ],
  369. "source": [
  370. "start = time.time()\n",
  371. "clf = MLPClassifier(hidden_layer_sizes = (50), solver = 'adam').fit(xtrain, ytrain)\n",
  372. "end = time.time()\n",
  373. "elapsed = end - start\n",
  374. "print(clf.score(xtest, ytest))\n",
  375. "print(clf.score(xtrain, ytrain))\n",
  376. "print(elapsed)"
  377. ]
  378. },
  379. {
  380. "cell_type": "code",
  381. "execution_count": 52,
  382. "id": "7a75936c",
  383. "metadata": {},
  384. "outputs": [
  385. {
  386. "data": {
  387. "image/png": "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\n",
  388. "text/plain": [
  389. "<Figure size 432x288 with 2 Axes>"
  390. ]
  391. },
  392. "metadata": {
  393. "needs_background": "light"
  394. },
  395. "output_type": "display_data"
  396. }
  397. ],
  398. "source": [
  399. "import matplotlib.pyplot as plt \n",
  400. "\n",
  401. "list_algo_optim = ['lbgfs', 'sgd', 'adam']\n",
  402. "list_score = [0.89, 0.73, 0.93]\n",
  403. "list_times = [29.908934354782104, 79.51274752616882, 20.47561001777649]\n",
  404. "\n",
  405. "plt.subplot(2,1,1)\n",
  406. "plt.plot(list_algo_optim, list_score)\n",
  407. "plt.ylabel('score')\n",
  408. "plt.xlabel('algo_optimisation')\n",
  409. "\n",
  410. "plt.subplot(2,1,2)\n",
  411. "plt.plot(list_algo_optim, list_times)\n",
  412. "plt.ylabel('time')\n",
  413. "plt.xlabel('algo_optimisation')\n",
  414. "\n",
  415. "plt.show()"
  416. ]
  417. },
  418. {
  419. "cell_type": "markdown",
  420. "id": "cf7095a5",
  421. "metadata": {},
  422. "source": [
  423. "## Fonction d'activation optimale"
  424. ]
  425. },
  426. {
  427. "cell_type": "code",
  428. "execution_count": 5,
  429. "id": "11f49da3",
  430. "metadata": {},
  431. "outputs": [
  432. {
  433. "name": "stdout",
  434. "output_type": "stream",
  435. "text": [
  436. "0.9016\n",
  437. "0.9521142857142857\n",
  438. "41.46870017051697\n"
  439. ]
  440. }
  441. ],
  442. "source": [
  443. "import time\n",
  444. "start = time.time()\n",
  445. "clf = MLPClassifier(hidden_layer_sizes = (50), activation = 'identity').fit(xtrain, ytrain)\n",
  446. "end = time.time()\n",
  447. "elapsed = end - start\n",
  448. "\n",
  449. "print(clf.score(xtest, ytest))\n",
  450. "print(clf.score(xtrain, ytrain))\n",
  451. "print(elapsed)"
  452. ]
  453. },
  454. {
  455. "cell_type": "code",
  456. "execution_count": 6,
  457. "id": "8faa5089",
  458. "metadata": {},
  459. "outputs": [
  460. {
  461. "name": "stdout",
  462. "output_type": "stream",
  463. "text": [
  464. "0.9377333333333333\n",
  465. "0.9538285714285715\n",
  466. "35.57738542556763\n"
  467. ]
  468. }
  469. ],
  470. "source": [
  471. "start = time.time()\n",
  472. "clf = MLPClassifier(hidden_layer_sizes = (50), activation = 'logistic').fit(xtrain, ytrain)\n",
  473. "end = time.time()\n",
  474. "elapsed = end - start\n",
  475. "\n",
  476. "print(clf.score(xtest, ytest))\n",
  477. "print(clf.score(xtrain, ytrain))\n",
  478. "print(elapsed)"
  479. ]
  480. },
  481. {
  482. "cell_type": "code",
  483. "execution_count": 7,
  484. "id": "c7ca3692",
  485. "metadata": {},
  486. "outputs": [
  487. {
  488. "name": "stdout",
  489. "output_type": "stream",
  490. "text": [
  491. "0.9157333333333333\n",
  492. "0.9256571428571428\n",
  493. "28.179425954818726\n"
  494. ]
  495. }
  496. ],
  497. "source": [
  498. "start = time.time()\n",
  499. "clf = MLPClassifier(hidden_layer_sizes = (50), activation = 'tanh').fit(xtrain, ytrain)\n",
  500. "end = time.time()\n",
  501. "elapsed = end - start\n",
  502. "print(clf.score(xtest, ytest))\n",
  503. "print(clf.score(xtrain, ytrain))\n",
  504. "print(elapsed)"
  505. ]
  506. },
  507. {
  508. "cell_type": "code",
  509. "execution_count": 8,
  510. "id": "0f6eca90",
  511. "metadata": {},
  512. "outputs": [
  513. {
  514. "name": "stdout",
  515. "output_type": "stream",
  516. "text": [
  517. "0.9446666666666667\n",
  518. "0.9834857142857143\n",
  519. "43.619242668151855\n"
  520. ]
  521. }
  522. ],
  523. "source": [
  524. "start = time.time()\n",
  525. "clf = MLPClassifier(hidden_layer_sizes = (50), activation = 'relu').fit(xtrain, ytrain)\n",
  526. "end = time.time()\n",
  527. "elapsed = end - start\n",
  528. "\n",
  529. "print(clf.score(xtest, ytest))\n",
  530. "print(clf.score(xtrain, ytrain))\n",
  531. "print(elapsed)"
  532. ]
  533. },
  534. {
  535. "cell_type": "code",
  536. "execution_count": 9,
  537. "id": "30bd2617",
  538. "metadata": {},
  539. "outputs": [
  540. {
  541. "data": {
  542. "image/png": "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\n",
  543. "text/plain": [
  544. "<Figure size 432x288 with 2 Axes>"
  545. ]
  546. },
  547. "metadata": {
  548. "needs_background": "light"
  549. },
  550. "output_type": "display_data"
  551. }
  552. ],
  553. "source": [
  554. "import matplotlib.pyplot as plt \n",
  555. "\n",
  556. "list_fonc_act = ['identity', 'logistic', 'tanh', 'relu']\n",
  557. "list_score = [0.8930666666666667, 0.9357333333333333, 0.928, 0.9276]\n",
  558. "list_time = [40.020830154418945, 45.64607834815979, 52.70329761505127, 23.708072662353516]\n",
  559. "\n",
  560. "plt.subplot(2,1,1)\n",
  561. "plt.ylabel('scores')\n",
  562. "plt.xlabel('activation function')\n",
  563. "plt.plot(list_fonc_act, list_score)\n",
  564. "\n",
  565. "plt.subplot(2,1,2)\n",
  566. "plt.ylabel('time')\n",
  567. "plt.xlabel('activation function')\n",
  568. "plt.plot(list_fonc_act, list_time)\n",
  569. "\n",
  570. "plt.show()"
  571. ]
  572. },
  573. {
  574. "cell_type": "markdown",
  575. "id": "569f6393",
  576. "metadata": {},
  577. "source": [
  578. "## Valeur optimale d'alpha"
  579. ]
  580. },
  581. {
  582. "cell_type": "code",
  583. "execution_count": 62,
  584. "id": "e568c62e",
  585. "metadata": {},
  586. "outputs": [],
  587. "source": [
  588. "import matplotlib.pyplot as plt \n",
  589. "\n",
  590. "list_score_test = []\n",
  591. "list_score_train = []\n",
  592. "list_times = []\n",
  593. "\n",
  594. "liste_x = [0.000000001, 0.00000001, 0.000005, 0.000025, 0.00005, 0.0001, 0.0008, 0.0032, 0.01, 0.05, 0.1]\n",
  595. "\n",
  596. "for i in liste_x:\n",
  597. " start = time.time()\n",
  598. " clf = MLPClassifier(hidden_layer_sizes = (50), alpha = i).fit(xtrain, ytrain)\n",
  599. " end = time.time()\n",
  600. " elapsed = end - start\n",
  601. " list_score_test.append(clf.score(xtest, ytest))\n",
  602. " list_score_train.append(clf.score(xtrain, ytrain))\n",
  603. " list_times.append(elapsed)"
  604. ]
  605. },
  606. {
  607. "cell_type": "code",
  608. "execution_count": 63,
  609. "id": "b00638ff",
  610. "metadata": {},
  611. "outputs": [
  612. {
  613. "data": {
  614. "image/png": "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\n",
  615. "text/plain": [
  616. "<Figure size 432x288 with 2 Axes>"
  617. ]
  618. },
  619. "metadata": {
  620. "needs_background": "light"
  621. },
  622. "output_type": "display_data"
  623. }
  624. ],
  625. "source": [
  626. "plt.subplot(2,1,1)\n",
  627. "plt.plot(liste_x, list_score_test)\n",
  628. "plt.ylabel('score')\n",
  629. "plt.xlabel('alpha')\n",
  630. "\n",
  631. "plt.subplot(2,1,2)\n",
  632. "plt.plot(liste_x, list_times)\n",
  633. "plt.ylabel('time')\n",
  634. "plt.xlabel('alpha')\n",
  635. "\n",
  636. "\n",
  637. "plt.show()"
  638. ]
  639. },
  640. {
  641. "cell_type": "code",
  642. "execution_count": 66,
  643. "id": "abc6e63e",
  644. "metadata": {},
  645. "outputs": [],
  646. "source": [
  647. "alpha = [0.000000001, 0.00000001, 0.000005, 0.000025, 0.00005, 0.0001]\n",
  648. "scores_test = []\n",
  649. "scores_train = []\n",
  650. "times = []\n",
  651. "for i in alpha:\n",
  652. " start = time.time()\n",
  653. " clf = MLPClassifier(hidden_layer_sizes = (50), alpha = i).fit(xtrain, ytrain)\n",
  654. " end = time.time()\n",
  655. " elapsed = end - start\n",
  656. " scores_test.append(clf.score(xtest, ytest))\n",
  657. " scores_train.append(clf.score(xtrain, ytrain))\n",
  658. " times.append(elapsed)"
  659. ]
  660. },
  661. {
  662. "cell_type": "code",
  663. "execution_count": 68,
  664. "id": "e25ba489",
  665. "metadata": {},
  666. "outputs": [
  667. {
  668. "data": {
  669. "image/png": "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\n",
  670. "text/plain": [
  671. "<Figure size 432x288 with 2 Axes>"
  672. ]
  673. },
  674. "metadata": {
  675. "needs_background": "light"
  676. },
  677. "output_type": "display_data"
  678. }
  679. ],
  680. "source": [
  681. "plt.subplot(2,1,1)\n",
  682. "plt.plot(alpha, scores_test)\n",
  683. "plt.ylabel('score')\n",
  684. "plt.xlabel('alpha')\n",
  685. "\n",
  686. "plt.subplot(2,1,2)\n",
  687. "plt.plot(alpha, times)\n",
  688. "plt.ylabel('time')\n",
  689. "plt.xlabel('alpha')\n",
  690. "\n",
  691. "\n",
  692. "plt.show()"
  693. ]
  694. },
  695. {
  696. "cell_type": "markdown",
  697. "id": "c46d042a",
  698. "metadata": {},
  699. "source": [
  700. "## Matrice de confusion"
  701. ]
  702. },
  703. {
  704. "cell_type": "code",
  705. "execution_count": 6,
  706. "id": "9fab621a",
  707. "metadata": {},
  708. "outputs": [],
  709. "source": [
  710. "from sklearn.metrics import confusion_matrix \n",
  711. "echantillon = np.random.randint(70000, size=25000)\n",
  712. "data = mnist.data.values[echantillon]\n",
  713. "target = mnist.target[echantillon]\n",
  714. "trainSize = 17500/25000\n",
  715. "xtrain, xtest, ytrain, ytest = train_test_split(data, target, train_size=trainSize)\n",
  716. "clf = MLPClassifier(hidden_layer_sizes = (50)).fit(xtrain, ytrain)\n",
  717. "\n",
  718. "cm = confusion_matrix(target.values, clf.predict(data))"
  719. ]
  720. },
  721. {
  722. "cell_type": "code",
  723. "execution_count": 7,
  724. "id": "e5c3afb8",
  725. "metadata": {},
  726. "outputs": [
  727. {
  728. "name": "stdout",
  729. "output_type": "stream",
  730. "text": [
  731. "[[2370 0 0 0 1 1 3 2 31 0]\n",
  732. " [ 0 2835 2 3 3 1 0 3 3 1]\n",
  733. " [ 3 6 2487 14 6 2 3 8 23 1]\n",
  734. " [ 0 1 25 2419 0 29 2 11 41 5]\n",
  735. " [ 0 6 3 1 2399 0 8 6 4 22]\n",
  736. " [ 6 1 2 24 3 2229 15 1 18 4]\n",
  737. " [ 4 2 7 0 10 12 2393 0 14 1]\n",
  738. " [ 0 4 8 2 5 1 2 2494 7 16]\n",
  739. " [ 5 9 11 6 10 11 2 4 2355 6]\n",
  740. " [ 1 6 1 6 43 5 0 19 50 2371]]\n"
  741. ]
  742. }
  743. ],
  744. "source": [
  745. "print(cm)"
  746. ]
  747. }
  748. ],
  749. "metadata": {
  750. "kernelspec": {
  751. "display_name": "Python 3",
  752. "language": "python",
  753. "name": "python3"
  754. },
  755. "language_info": {
  756. "codemirror_mode": {
  757. "name": "ipython",
  758. "version": 3
  759. },
  760. "file_extension": ".py",
  761. "mimetype": "text/x-python",
  762. "name": "python",
  763. "nbconvert_exporter": "python",
  764. "pygments_lexer": "ipython3",
  765. "version": "3.8.8"
  766. }
  767. },
  768. "nbformat": 4,
  769. "nbformat_minor": 5
  770. }