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.

TODS Notebook Master-Branch.ipynb 117 kB

4 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "# TODS"
  8. ]
  9. },
  10. {
  11. "cell_type": "markdown",
  12. "metadata": {},
  13. "source": [
  14. "## Introduction Summary"
  15. ]
  16. },
  17. {
  18. "cell_type": "markdown",
  19. "metadata": {},
  20. "source": [
  21. "TODS is a full-stack automated machine learning system for outlier detection on multivariate time-series data. TODS provides exhaustive modules for building machine learning-based outlier detection systems, including: data processing, time series processing, feature analysis (extraction), detection algorithms, and reinforcement module. The functionalities provided via these modules include data preprocessing for general purposes, time series data smoothing/transformation, extracting features from time/frequency domains, various detection algorithms, and involving human expertise to calibrate the system. Three common outlier detection scenarios on time-series data can be performed: point-wise detection (time points as outliers), pattern-wise detection (subsequences as outliers), and system-wise detection (sets of time series as outliers), and a wide-range of corresponding algorithms are provided in TODS. This package is developed by DATA Lab @ Texas A&M University."
  22. ]
  23. },
  24. {
  25. "cell_type": "markdown",
  26. "metadata": {},
  27. "source": [
  28. "## Packages"
  29. ]
  30. },
  31. {
  32. "cell_type": "code",
  33. "execution_count": 1,
  34. "metadata": {},
  35. "outputs": [
  36. {
  37. "name": "stdout",
  38. "output_type": "stream",
  39. "text": [
  40. "Python 3.6.10 :: Anaconda, Inc.\r\n"
  41. ]
  42. }
  43. ],
  44. "source": [
  45. "!python -V\n",
  46. "# Make sure python version is 3.6"
  47. ]
  48. },
  49. {
  50. "cell_type": "code",
  51. "execution_count": 2,
  52. "metadata": {},
  53. "outputs": [
  54. {
  55. "data": {
  56. "text/plain": [
  57. "'1.4.1'"
  58. ]
  59. },
  60. "execution_count": 2,
  61. "metadata": {},
  62. "output_type": "execute_result"
  63. }
  64. ],
  65. "source": [
  66. "import scipy\n",
  67. "scipy.__version__"
  68. ]
  69. },
  70. {
  71. "cell_type": "code",
  72. "execution_count": 3,
  73. "metadata": {},
  74. "outputs": [
  75. {
  76. "name": "stdout",
  77. "output_type": "stream",
  78. "text": [
  79. "TODS Notebook Master-Branch.ipynb TODS Official Demo Notebook.ipynb\r\n"
  80. ]
  81. }
  82. ],
  83. "source": [
  84. "!ls"
  85. ]
  86. },
  87. {
  88. "cell_type": "markdown",
  89. "metadata": {},
  90. "source": [
  91. "## Imports"
  92. ]
  93. },
  94. {
  95. "cell_type": "code",
  96. "execution_count": 4,
  97. "metadata": {},
  98. "outputs": [],
  99. "source": [
  100. "import warnings\n",
  101. "warnings.filterwarnings(\"ignore\")"
  102. ]
  103. },
  104. {
  105. "cell_type": "code",
  106. "execution_count": 5,
  107. "metadata": {},
  108. "outputs": [
  109. {
  110. "name": "stderr",
  111. "output_type": "stream",
  112. "text": [
  113. "d3m.primitives.tods.detection_algorithm.LSTMODetector: Primitive is not providing a description through its docstring.\n"
  114. ]
  115. }
  116. ],
  117. "source": [
  118. "import sys\n",
  119. "import argparse\n",
  120. "import os\n",
  121. "import numpy as np\n",
  122. "import pandas as pd\n",
  123. "from sklearn.metrics import precision_recall_curve\n",
  124. "from sklearn.metrics import accuracy_score\n",
  125. "from sklearn.metrics import confusion_matrix\n",
  126. "from sklearn.metrics import classification_report\n",
  127. "import matplotlib.pyplot as plt\n",
  128. "from sklearn import metrics\n",
  129. "from d3m import index\n",
  130. "from d3m.metadata.base import ArgumentType\n",
  131. "from d3m.metadata.pipeline import Pipeline, PrimitiveStep\n",
  132. "from axolotl.backend.simple import SimpleRunner\n",
  133. "from tods import generate_dataset, generate_problem\n",
  134. "from tods.searcher import BruteForceSearch\n",
  135. "from tods import generate_dataset, load_pipeline, evaluate_pipeline\n",
  136. "from tods.sk_interface.detection_algorithm.DeepLog_skinterface import DeepLogSKI\n",
  137. "from tods.sk_interface.detection_algorithm.Telemanom_skinterface import TelemanomSKI\n"
  138. ]
  139. },
  140. {
  141. "cell_type": "markdown",
  142. "metadata": {},
  143. "source": [
  144. "## Dataset"
  145. ]
  146. },
  147. {
  148. "cell_type": "markdown",
  149. "metadata": {},
  150. "source": [
  151. "### UCR Dataset"
  152. ]
  153. },
  154. {
  155. "cell_type": "code",
  156. "execution_count": 6,
  157. "metadata": {},
  158. "outputs": [],
  159. "source": [
  160. "data_UCR = np.loadtxt(\"../../datasets/anomaly/raw_data/500_UCR_Anomaly_robotDOG1_10000_19280_19360.txt\")"
  161. ]
  162. },
  163. {
  164. "cell_type": "code",
  165. "execution_count": 7,
  166. "metadata": {},
  167. "outputs": [
  168. {
  169. "name": "stdout",
  170. "output_type": "stream",
  171. "text": [
  172. "shape: (20000,)\n",
  173. "datatype of data: float64\n",
  174. "First 5 rows:\n",
  175. " [0.145299 0.128205 0.094017 0.076923 0.111111]\n"
  176. ]
  177. }
  178. ],
  179. "source": [
  180. "print(\"shape:\", data_UCR.shape)\n",
  181. "print(\"datatype of data:\",data_UCR.dtype)\n",
  182. "print(\"First 5 rows:\\n\", data_UCR[:5])"
  183. ]
  184. },
  185. {
  186. "cell_type": "code",
  187. "execution_count": 8,
  188. "metadata": {},
  189. "outputs": [],
  190. "source": [
  191. "X_train = np.expand_dims(data_UCR[:10000], axis=1)\n",
  192. "X_test = np.expand_dims(data_UCR[10000:], axis=1)"
  193. ]
  194. },
  195. {
  196. "cell_type": "code",
  197. "execution_count": 9,
  198. "metadata": {},
  199. "outputs": [
  200. {
  201. "name": "stdout",
  202. "output_type": "stream",
  203. "text": [
  204. "First 5 rows train:\n",
  205. " [[0.145299]\n",
  206. " [0.128205]\n",
  207. " [0.094017]\n",
  208. " [0.076923]\n",
  209. " [0.111111]]\n",
  210. "First 5 rows test:\n",
  211. " [[0.076923]\n",
  212. " [0.076923]\n",
  213. " [0.076923]\n",
  214. " [0.094017]\n",
  215. " [0.145299]]\n"
  216. ]
  217. }
  218. ],
  219. "source": [
  220. "print(\"First 5 rows train:\\n\", X_train[:5])\n",
  221. "print(\"First 5 rows test:\\n\", X_test[:5])"
  222. ]
  223. },
  224. {
  225. "cell_type": "markdown",
  226. "metadata": {},
  227. "source": [
  228. "### Yahoo Dataset"
  229. ]
  230. },
  231. {
  232. "cell_type": "code",
  233. "execution_count": 10,
  234. "metadata": {},
  235. "outputs": [],
  236. "source": [
  237. "data_yahoo = pd.read_csv('../../datasets/anomaly/raw_data/yahoo_sub_5.csv')"
  238. ]
  239. },
  240. {
  241. "cell_type": "code",
  242. "execution_count": 11,
  243. "metadata": {},
  244. "outputs": [
  245. {
  246. "name": "stdout",
  247. "output_type": "stream",
  248. "text": [
  249. "shape: (1400, 7)\n",
  250. "First 5 rows:\n",
  251. " timestamp value_0 value_1 value_2 value_3 value_4 anomaly\n",
  252. "0 1 12183 0.000000 3.716667 5 2109 0\n",
  253. "1 2 12715 0.091758 3.610833 60 3229 0\n",
  254. "2 3 12736 0.172297 3.481389 88 3637 0\n",
  255. "3 4 12716 0.226219 3.380278 84 1982 0\n",
  256. "4 5 12739 0.176358 3.193333 111 2751 0\n"
  257. ]
  258. }
  259. ],
  260. "source": [
  261. "print(\"shape:\", data_yahoo.shape)\n",
  262. "print(\"First 5 rows:\\n\", data_yahoo[:5])"
  263. ]
  264. },
  265. {
  266. "cell_type": "markdown",
  267. "metadata": {},
  268. "source": [
  269. "## SK Example 1: DeepLog"
  270. ]
  271. },
  272. {
  273. "cell_type": "code",
  274. "execution_count": 12,
  275. "metadata": {},
  276. "outputs": [
  277. {
  278. "name": "stdout",
  279. "output_type": "stream",
  280. "text": [
  281. "Epoch 1/10\n",
  282. "282/282 [==============================] - 1s 5ms/step - loss: 0.4255 - val_loss: 0.2777\n",
  283. "Epoch 2/10\n",
  284. "282/282 [==============================] - 1s 2ms/step - loss: 0.3367 - val_loss: 0.2802\n",
  285. "Epoch 3/10\n",
  286. "282/282 [==============================] - 1s 2ms/step - loss: 0.3545 - val_loss: 0.2595\n",
  287. "Epoch 4/10\n",
  288. "282/282 [==============================] - 1s 2ms/step - loss: 0.3572 - val_loss: 0.2674\n",
  289. "Epoch 5/10\n",
  290. "282/282 [==============================] - 1s 2ms/step - loss: 0.3457 - val_loss: 0.2880\n",
  291. "Epoch 6/10\n",
  292. "282/282 [==============================] - 1s 2ms/step - loss: 0.3503 - val_loss: 0.2619\n",
  293. "Epoch 7/10\n",
  294. "282/282 [==============================] - 1s 2ms/step - loss: 0.3559 - val_loss: 0.2818\n",
  295. "Epoch 8/10\n",
  296. "282/282 [==============================] - 1s 2ms/step - loss: 0.3439 - val_loss: 0.2620\n",
  297. "Epoch 9/10\n",
  298. "282/282 [==============================] - 1s 2ms/step - loss: 0.3390 - val_loss: 0.2690\n",
  299. "Epoch 10/10\n",
  300. "282/282 [==============================] - 1s 2ms/step - loss: 0.3425 - val_loss: 0.2683\n"
  301. ]
  302. }
  303. ],
  304. "source": [
  305. "transformer = DeepLogSKI()\n",
  306. "transformer.fit(X_train)\n",
  307. "prediction_labels_train = transformer.predict(X_train)\n",
  308. "prediction_labels_test = transformer.predict(X_test)\n",
  309. "prediction_score = transformer.predict_score(X_test)"
  310. ]
  311. },
  312. {
  313. "cell_type": "code",
  314. "execution_count": 13,
  315. "metadata": {},
  316. "outputs": [
  317. {
  318. "name": "stdout",
  319. "output_type": "stream",
  320. "text": [
  321. "Prediction Labels\n",
  322. " [[0]\n",
  323. " [0]\n",
  324. " [0]\n",
  325. " ...\n",
  326. " [0]\n",
  327. " [0]\n",
  328. " [0]]\n",
  329. "Prediction Score\n",
  330. " [[0]\n",
  331. " [0]\n",
  332. " [0]\n",
  333. " ...\n",
  334. " [0]\n",
  335. " [0]\n",
  336. " [0]]\n"
  337. ]
  338. }
  339. ],
  340. "source": [
  341. "print(\"Prediction Labels\\n\", prediction_labels_test)\n",
  342. "print(\"Prediction Score\\n\", prediction_score)"
  343. ]
  344. },
  345. {
  346. "cell_type": "code",
  347. "execution_count": 14,
  348. "metadata": {},
  349. "outputs": [],
  350. "source": [
  351. "y_true = prediction_labels_train\n",
  352. "y_pred = prediction_labels_test\n",
  353. "precision, recall, thresholds = precision_recall_curve(y_true, y_pred)\n",
  354. "f1_scores = 2*recall*precision/(recall+precision)\n",
  355. "fpr, tpr, threshold = metrics.roc_curve(y_true, y_pred)\n",
  356. "roc_auc = metrics.auc(fpr, tpr)"
  357. ]
  358. },
  359. {
  360. "cell_type": "code",
  361. "execution_count": 15,
  362. "metadata": {},
  363. "outputs": [
  364. {
  365. "name": "stdout",
  366. "output_type": "stream",
  367. "text": [
  368. "Accuracy Score: 0.9042\n"
  369. ]
  370. }
  371. ],
  372. "source": [
  373. "print('Accuracy Score: ', accuracy_score(y_true, y_pred))"
  374. ]
  375. },
  376. {
  377. "cell_type": "code",
  378. "execution_count": 16,
  379. "metadata": {},
  380. "outputs": [
  381. {
  382. "name": "stdout",
  383. "output_type": "stream",
  384. "text": [
  385. " precision recall f1-score support\n",
  386. "\n",
  387. " 0 0.93 0.97 0.95 9004\n",
  388. " 1 0.53 0.35 0.42 996\n",
  389. "\n",
  390. " accuracy 0.90 10000\n",
  391. " macro avg 0.73 0.66 0.68 10000\n",
  392. "weighted avg 0.89 0.90 0.90 10000\n",
  393. "\n"
  394. ]
  395. }
  396. ],
  397. "source": [
  398. "print(classification_report(y_true, y_pred))"
  399. ]
  400. },
  401. {
  402. "cell_type": "code",
  403. "execution_count": 17,
  404. "metadata": {},
  405. "outputs": [
  406. {
  407. "name": "stdout",
  408. "output_type": "stream",
  409. "text": [
  410. "Best threshold: 1\n",
  411. "Best F1-Score: 0.42219541616405304\n"
  412. ]
  413. }
  414. ],
  415. "source": [
  416. "print('Best threshold: ', thresholds[np.argmax(f1_scores)])\n",
  417. "print('Best F1-Score: ', np.max(f1_scores))"
  418. ]
  419. },
  420. {
  421. "cell_type": "code",
  422. "execution_count": 18,
  423. "metadata": {},
  424. "outputs": [
  425. {
  426. "data": {
  427. "image/png": "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\n",
  428. "text/plain": [
  429. "<Figure size 432x288 with 1 Axes>"
  430. ]
  431. },
  432. "metadata": {
  433. "needs_background": "light"
  434. },
  435. "output_type": "display_data"
  436. }
  437. ],
  438. "source": [
  439. "plt.title('ROC')\n",
  440. "plt.plot(fpr, tpr, 'b', label = 'AUC = %0.2f' % roc_auc)\n",
  441. "plt.legend(loc = 'lower right')\n",
  442. "plt.ylabel('True Positive Rate')\n",
  443. "plt.xlabel('False Positive Rate')\n",
  444. "plt.show()"
  445. ]
  446. },
  447. {
  448. "cell_type": "markdown",
  449. "metadata": {},
  450. "source": [
  451. "## SK Example 2: Telemanom"
  452. ]
  453. },
  454. {
  455. "cell_type": "code",
  456. "execution_count": 19,
  457. "metadata": {},
  458. "outputs": [
  459. {
  460. "name": "stdout",
  461. "output_type": "stream",
  462. "text": [
  463. "125/125 [==============================] - 1s 7ms/step - loss: 0.0134 - val_loss: 0.0051\n"
  464. ]
  465. }
  466. ],
  467. "source": [
  468. "transformer = TelemanomSKI(l_s= 2, n_predictions= 1)\n",
  469. "transformer.fit(X_train)\n",
  470. "prediction_labels_train = transformer.predict(X_train)\n",
  471. "prediction_labels_test = transformer.predict(X_test)\n",
  472. "prediction_score = transformer.predict_score(X_test)"
  473. ]
  474. },
  475. {
  476. "cell_type": "code",
  477. "execution_count": 20,
  478. "metadata": {},
  479. "outputs": [
  480. {
  481. "name": "stdout",
  482. "output_type": "stream",
  483. "text": [
  484. "Prediction Labels\n",
  485. " [[1]\n",
  486. " [1]\n",
  487. " [1]\n",
  488. " ...\n",
  489. " [1]\n",
  490. " [1]\n",
  491. " [1]]\n",
  492. "Prediction Score\n",
  493. " [[1]\n",
  494. " [1]\n",
  495. " [1]\n",
  496. " ...\n",
  497. " [1]\n",
  498. " [1]\n",
  499. " [1]]\n"
  500. ]
  501. }
  502. ],
  503. "source": [
  504. "print(\"Prediction Labels\\n\", prediction_labels_test)\n",
  505. "print(\"Prediction Score\\n\", prediction_score)"
  506. ]
  507. },
  508. {
  509. "cell_type": "code",
  510. "execution_count": 21,
  511. "metadata": {},
  512. "outputs": [],
  513. "source": [
  514. "y_true = prediction_labels_train\n",
  515. "y_pred = prediction_labels_test\n",
  516. "precision, recall, thresholds = precision_recall_curve(y_true, y_pred)\n",
  517. "f1_scores = 2*recall*precision/(recall+precision)\n",
  518. "fpr, tpr, threshold = metrics.roc_curve(y_true, y_pred)\n",
  519. "roc_auc = metrics.auc(fpr, tpr)"
  520. ]
  521. },
  522. {
  523. "cell_type": "code",
  524. "execution_count": 22,
  525. "metadata": {},
  526. "outputs": [
  527. {
  528. "name": "stdout",
  529. "output_type": "stream",
  530. "text": [
  531. "Accuracy Score: 0.18055416624987497\n"
  532. ]
  533. }
  534. ],
  535. "source": [
  536. "print('Accuracy Score: ', accuracy_score(y_true, y_pred))"
  537. ]
  538. },
  539. {
  540. "cell_type": "code",
  541. "execution_count": 23,
  542. "metadata": {},
  543. "outputs": [
  544. {
  545. "data": {
  546. "text/plain": [
  547. "array([[ 958, 8039],\n",
  548. " [ 153, 847]])"
  549. ]
  550. },
  551. "execution_count": 23,
  552. "metadata": {},
  553. "output_type": "execute_result"
  554. }
  555. ],
  556. "source": [
  557. "confusion_matrix(y_true, y_pred)"
  558. ]
  559. },
  560. {
  561. "cell_type": "code",
  562. "execution_count": 24,
  563. "metadata": {},
  564. "outputs": [
  565. {
  566. "name": "stdout",
  567. "output_type": "stream",
  568. "text": [
  569. " precision recall f1-score support\n",
  570. "\n",
  571. " 0 0.86 0.11 0.19 8997\n",
  572. " 1 0.10 0.85 0.17 1000\n",
  573. "\n",
  574. " accuracy 0.18 9997\n",
  575. " macro avg 0.48 0.48 0.18 9997\n",
  576. "weighted avg 0.79 0.18 0.19 9997\n",
  577. "\n"
  578. ]
  579. }
  580. ],
  581. "source": [
  582. "print(classification_report(y_true, y_pred))"
  583. ]
  584. },
  585. {
  586. "cell_type": "code",
  587. "execution_count": 25,
  588. "metadata": {},
  589. "outputs": [
  590. {
  591. "name": "stdout",
  592. "output_type": "stream",
  593. "text": [
  594. "Best threshold: 0\n",
  595. "Best F1-Score: 0.18186778212239701\n"
  596. ]
  597. }
  598. ],
  599. "source": [
  600. "print('Best threshold: ', thresholds[np.argmax(f1_scores)])\n",
  601. "print('Best F1-Score: ', np.max(f1_scores))"
  602. ]
  603. },
  604. {
  605. "cell_type": "code",
  606. "execution_count": 26,
  607. "metadata": {},
  608. "outputs": [
  609. {
  610. "data": {
  611. "image/png": "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\n",
  612. "text/plain": [
  613. "<Figure size 432x288 with 1 Axes>"
  614. ]
  615. },
  616. "metadata": {
  617. "needs_background": "light"
  618. },
  619. "output_type": "display_data"
  620. }
  621. ],
  622. "source": [
  623. "plt.title('ROC')\n",
  624. "plt.plot(fpr, tpr, 'b', label = 'AUC = %0.2f' % roc_auc)\n",
  625. "plt.legend(loc = 'lower right')\n",
  626. "plt.ylabel('True Positive Rate')\n",
  627. "plt.xlabel('False Positive Rate')\n",
  628. "plt.show()"
  629. ]
  630. },
  631. {
  632. "cell_type": "markdown",
  633. "metadata": {},
  634. "source": [
  635. "## Pipline Example: AutoEncoder"
  636. ]
  637. },
  638. {
  639. "cell_type": "markdown",
  640. "metadata": {},
  641. "source": [
  642. "### Build Pipeline"
  643. ]
  644. },
  645. {
  646. "cell_type": "code",
  647. "execution_count": 27,
  648. "metadata": {},
  649. "outputs": [
  650. {
  651. "data": {
  652. "text/plain": [
  653. "'inputs.0'"
  654. ]
  655. },
  656. "execution_count": 27,
  657. "metadata": {},
  658. "output_type": "execute_result"
  659. }
  660. ],
  661. "source": [
  662. "# Creating pipeline\n",
  663. "pipeline_description = Pipeline()\n",
  664. "pipeline_description.add_input(name='inputs')"
  665. ]
  666. },
  667. {
  668. "cell_type": "code",
  669. "execution_count": 28,
  670. "metadata": {},
  671. "outputs": [
  672. {
  673. "name": "stderr",
  674. "output_type": "stream",
  675. "text": [
  676. "While loading primitive 'tods.data_processing.dataset_to_dataframe', an error has been detected: (scikit-learn 0.22.2.post1 (/Users/wangyanghe/anaconda3/envs/tods2/lib/python3.6/site-packages), Requirement.parse('scikit-learn==0.22.0'))\n",
  677. "Attempting to load primitive 'tods.data_processing.dataset_to_dataframe' without checking requirements.\n"
  678. ]
  679. }
  680. ],
  681. "source": [
  682. "# Step 0: dataset_to_dataframe\n",
  683. "step_0 = PrimitiveStep(primitive=index.get_primitive('d3m.primitives.tods.data_processing.dataset_to_dataframe'))\n",
  684. "step_0.add_argument(name='inputs', argument_type=ArgumentType.CONTAINER, data_reference='inputs.0')\n",
  685. "step_0.add_output('produce')\n",
  686. "pipeline_description.add_step(step_0)"
  687. ]
  688. },
  689. {
  690. "cell_type": "code",
  691. "execution_count": 29,
  692. "metadata": {},
  693. "outputs": [
  694. {
  695. "name": "stderr",
  696. "output_type": "stream",
  697. "text": [
  698. "While loading primitive 'tods.data_processing.column_parser', an error has been detected: (scikit-learn 0.22.2.post1 (/Users/wangyanghe/anaconda3/envs/tods2/lib/python3.6/site-packages), Requirement.parse('scikit-learn==0.22.0'))\n",
  699. "Attempting to load primitive 'tods.data_processing.column_parser' without checking requirements.\n"
  700. ]
  701. }
  702. ],
  703. "source": [
  704. "# Step 1: column_parser\n",
  705. "step_1 = PrimitiveStep(primitive=index.get_primitive('d3m.primitives.tods.data_processing.column_parser'))\n",
  706. "step_1.add_argument(name='inputs', argument_type=ArgumentType.CONTAINER, data_reference='steps.0.produce')\n",
  707. "step_1.add_output('produce')\n",
  708. "pipeline_description.add_step(step_1)"
  709. ]
  710. },
  711. {
  712. "cell_type": "code",
  713. "execution_count": 30,
  714. "metadata": {},
  715. "outputs": [
  716. {
  717. "name": "stderr",
  718. "output_type": "stream",
  719. "text": [
  720. "While loading primitive 'tods.data_processing.extract_columns_by_semantic_types', an error has been detected: (scikit-learn 0.22.2.post1 (/Users/wangyanghe/anaconda3/envs/tods2/lib/python3.6/site-packages), Requirement.parse('scikit-learn==0.22.0'))\n",
  721. "Attempting to load primitive 'tods.data_processing.extract_columns_by_semantic_types' without checking requirements.\n"
  722. ]
  723. }
  724. ],
  725. "source": [
  726. "# Step 2: extract_columns_by_semantic_types(attributes)\n",
  727. "step_2 = PrimitiveStep(primitive=index.get_primitive('d3m.primitives.tods.data_processing.extract_columns_by_semantic_types'))\n",
  728. "step_2.add_argument(name='inputs', argument_type=ArgumentType.CONTAINER, data_reference='steps.1.produce')\n",
  729. "step_2.add_output('produce')\n",
  730. "step_2.add_hyperparameter(name='semantic_types', argument_type=ArgumentType.VALUE,\n",
  731. "\t\t\t\t\t\t\t data=['https://metadata.datadrivendiscovery.org/types/Attribute'])\n",
  732. "pipeline_description.add_step(step_2)"
  733. ]
  734. },
  735. {
  736. "cell_type": "code",
  737. "execution_count": 31,
  738. "metadata": {},
  739. "outputs": [],
  740. "source": [
  741. "# Step 3: extract_columns_by_semantic_types(targets)\n",
  742. "step_3 = PrimitiveStep(primitive=index.get_primitive('d3m.primitives.tods.data_processing.extract_columns_by_semantic_types'))\n",
  743. "step_3.add_argument(name='inputs', argument_type=ArgumentType.CONTAINER, data_reference='steps.0.produce')\n",
  744. "step_3.add_output('produce')\n",
  745. "step_3.add_hyperparameter(name='semantic_types', argument_type=ArgumentType.VALUE,\n",
  746. "\t\t\t\t\t\t\tdata=['https://metadata.datadrivendiscovery.org/types/TrueTarget'])\n",
  747. "pipeline_description.add_step(step_3)"
  748. ]
  749. },
  750. {
  751. "cell_type": "code",
  752. "execution_count": 32,
  753. "metadata": {},
  754. "outputs": [],
  755. "source": [
  756. "attributes = 'steps.2.produce'\n",
  757. "targets = 'steps.3.produce'"
  758. ]
  759. },
  760. {
  761. "cell_type": "code",
  762. "execution_count": 33,
  763. "metadata": {},
  764. "outputs": [
  765. {
  766. "name": "stderr",
  767. "output_type": "stream",
  768. "text": [
  769. "While loading primitive 'tods.feature_analysis.statistical_maximum', an error has been detected: (scikit-learn 0.22.2.post1 (/Users/wangyanghe/anaconda3/envs/tods2/lib/python3.6/site-packages), Requirement.parse('scikit-learn==0.22.0'))\n",
  770. "Attempting to load primitive 'tods.feature_analysis.statistical_maximum' without checking requirements.\n"
  771. ]
  772. }
  773. ],
  774. "source": [
  775. "# Step 4: processing\n",
  776. "step_4 = PrimitiveStep(primitive=index.get_primitive('d3m.primitives.tods.feature_analysis.statistical_maximum'))\n",
  777. "step_4.add_argument(name='inputs', argument_type=ArgumentType.CONTAINER, data_reference=attributes)\n",
  778. "step_4.add_output('produce')\n",
  779. "pipeline_description.add_step(step_4)"
  780. ]
  781. },
  782. {
  783. "cell_type": "code",
  784. "execution_count": 34,
  785. "metadata": {},
  786. "outputs": [
  787. {
  788. "name": "stderr",
  789. "output_type": "stream",
  790. "text": [
  791. "While loading primitive 'tods.detection_algorithm.pyod_ae', an error has been detected: (scikit-learn 0.22.2.post1 (/Users/wangyanghe/anaconda3/envs/tods2/lib/python3.6/site-packages), Requirement.parse('scikit-learn==0.22.0'))\n",
  792. "Attempting to load primitive 'tods.detection_algorithm.pyod_ae' without checking requirements.\n"
  793. ]
  794. }
  795. ],
  796. "source": [
  797. "# Step 5: algorithm`\n",
  798. "step_5 = PrimitiveStep(primitive=index.get_primitive('d3m.primitives.tods.detection_algorithm.pyod_ae'))\n",
  799. "step_5.add_argument(name='inputs', argument_type=ArgumentType.CONTAINER, data_reference='steps.4.produce')\n",
  800. "step_5.add_output('produce')\n",
  801. "pipeline_description.add_step(step_5)"
  802. ]
  803. },
  804. {
  805. "cell_type": "code",
  806. "execution_count": 35,
  807. "metadata": {},
  808. "outputs": [
  809. {
  810. "name": "stderr",
  811. "output_type": "stream",
  812. "text": [
  813. "While loading primitive 'tods.data_processing.construct_predictions', an error has been detected: (scikit-learn 0.22.2.post1 (/Users/wangyanghe/anaconda3/envs/tods2/lib/python3.6/site-packages), Requirement.parse('scikit-learn==0.22.0'))\n",
  814. "Attempting to load primitive 'tods.data_processing.construct_predictions' without checking requirements.\n"
  815. ]
  816. }
  817. ],
  818. "source": [
  819. "# Step 6: Predictions\n",
  820. "step_6 = PrimitiveStep(primitive=index.get_primitive('d3m.primitives.tods.data_processing.construct_predictions'))\n",
  821. "step_6.add_argument(name='inputs', argument_type=ArgumentType.CONTAINER, data_reference='steps.5.produce')\n",
  822. "step_6.add_argument(name='reference', argument_type=ArgumentType.CONTAINER, data_reference='steps.1.produce')\n",
  823. "step_6.add_output('produce')\n",
  824. "pipeline_description.add_step(step_6)"
  825. ]
  826. },
  827. {
  828. "cell_type": "code",
  829. "execution_count": 36,
  830. "metadata": {},
  831. "outputs": [
  832. {
  833. "data": {
  834. "text/plain": [
  835. "'outputs.0'"
  836. ]
  837. },
  838. "execution_count": 36,
  839. "metadata": {},
  840. "output_type": "execute_result"
  841. }
  842. ],
  843. "source": [
  844. "# Final Output\n",
  845. "pipeline_description.add_output(name='output predictions', data_reference='steps.6.produce')"
  846. ]
  847. },
  848. {
  849. "cell_type": "code",
  850. "execution_count": 37,
  851. "metadata": {},
  852. "outputs": [
  853. {
  854. "name": "stdout",
  855. "output_type": "stream",
  856. "text": [
  857. "{\"id\": \"44caca5f-ed2a-42d6-bede-777fd96e5a90\", \"schema\": \"https://metadata.datadrivendiscovery.org/schemas/v0/pipeline.json\", \"created\": \"2021-06-29T04:06:32.108192Z\", \"inputs\": [{\"name\": \"inputs\"}], \"outputs\": [{\"data\": \"steps.6.produce\", \"name\": \"output predictions\"}], \"steps\": [{\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"c78138d9-9377-31dc-aee8-83d9df049c60\", \"version\": \"0.3.0\", \"python_path\": \"d3m.primitives.tods.data_processing.dataset_to_dataframe\", \"name\": \"Extract a DataFrame from a Dataset\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"inputs.0\"}}, \"outputs\": [{\"id\": \"produce\"}]}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"81235c29-aeb9-3828-911a-1b25319b6998\", \"version\": \"0.6.0\", \"python_path\": \"d3m.primitives.tods.data_processing.column_parser\", \"name\": \"Parses strings into their types\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.0.produce\"}}, \"outputs\": [{\"id\": \"produce\"}]}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"a996cd89-ddf0-367f-8e7f-8c013cbc2891\", \"version\": \"0.4.0\", \"python_path\": \"d3m.primitives.tods.data_processing.extract_columns_by_semantic_types\", \"name\": \"Extracts columns by semantic type\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.1.produce\"}}, \"outputs\": [{\"id\": \"produce\"}], \"hyperparams\": {\"semantic_types\": {\"type\": \"VALUE\", \"data\": [\"https://metadata.datadrivendiscovery.org/types/Attribute\"]}}}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"a996cd89-ddf0-367f-8e7f-8c013cbc2891\", \"version\": \"0.4.0\", \"python_path\": \"d3m.primitives.tods.data_processing.extract_columns_by_semantic_types\", \"name\": \"Extracts columns by semantic type\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.0.produce\"}}, \"outputs\": [{\"id\": \"produce\"}], \"hyperparams\": {\"semantic_types\": {\"type\": \"VALUE\", \"data\": [\"https://metadata.datadrivendiscovery.org/types/TrueTarget\"]}}}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"f07ce875-bbc7-36c5-9cc1-ba4bfb7cf48e\", \"version\": \"0.1.0\", \"python_path\": \"d3m.primitives.tods.feature_analysis.statistical_maximum\", \"name\": \"Time Series Decompostional\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.2.produce\"}}, \"outputs\": [{\"id\": \"produce\"}]}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"67e7fcdf-d645-3417-9aa4-85cd369487d9\", \"version\": \"0.0.1\", \"python_path\": \"d3m.primitives.tods.detection_algorithm.pyod_ae\", \"name\": \"TODS.anomaly_detection_primitives.AutoEncoder\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.4.produce\"}}, \"outputs\": [{\"id\": \"produce\"}]}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"2530840a-07d4-3874-b7d8-9eb5e4ae2bf3\", \"version\": \"0.3.0\", \"python_path\": \"d3m.primitives.tods.data_processing.construct_predictions\", \"name\": \"Construct pipeline predictions output\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.5.produce\"}, \"reference\": {\"type\": \"CONTAINER\", \"data\": \"steps.1.produce\"}}, \"outputs\": [{\"id\": \"produce\"}]}], \"digest\": \"3f4eb364201fc5fc403cc66c847ce1597fe8b0a91d130bded4d21c2a6ef2eef2\"}\n"
  858. ]
  859. }
  860. ],
  861. "source": [
  862. "# Output to json\n",
  863. "data = pipeline_description.to_json()\n",
  864. "with open('autoencoder_pipeline.json', 'w') as f:\n",
  865. " f.write(data)\n",
  866. " print(data)"
  867. ]
  868. },
  869. {
  870. "cell_type": "markdown",
  871. "metadata": {},
  872. "source": [
  873. "### Run Pipeline"
  874. ]
  875. },
  876. {
  877. "cell_type": "code",
  878. "execution_count": 38,
  879. "metadata": {},
  880. "outputs": [],
  881. "source": [
  882. "this_path = os.path.dirname(os.path.abspath(\"__file__\"))\n",
  883. "default_data_path = os.path.join(this_path, '../../datasets/anomaly/raw_data/yahoo_sub_5.csv')"
  884. ]
  885. },
  886. {
  887. "cell_type": "code",
  888. "execution_count": 39,
  889. "metadata": {},
  890. "outputs": [
  891. {
  892. "data": {
  893. "text/plain": [
  894. "_StoreAction(option_strings=['--pipeline_path'], dest='pipeline_path', nargs=None, const=None, default='/Users/wangyanghe/Desktop/Research/tods/examples/Demo Notebook/autoencoder_pipeline.json', type=None, choices=None, help='Input the path of the pre-built pipeline description', metavar=None)"
  895. ]
  896. },
  897. "execution_count": 39,
  898. "metadata": {},
  899. "output_type": "execute_result"
  900. }
  901. ],
  902. "source": [
  903. "parser = argparse.ArgumentParser(description='Arguments for running predefined pipelin.')\n",
  904. "parser.add_argument('--table_path', type=str, default=default_data_path,\n",
  905. " help='Input the path of the input data table')\n",
  906. "parser.add_argument('--target_index', type=int, default=6,\n",
  907. " help='Index of the ground truth (for evaluation)')\n",
  908. "parser.add_argument('--metric',type=str, default='F1_MACRO',\n",
  909. " help='Evaluation Metric (F1, F1_MACRO)')\n",
  910. "parser.add_argument('--pipeline_path', \n",
  911. " default=os.path.join(this_path, 'autoencoder_pipeline.json'),\n",
  912. " help='Input the path of the pre-built pipeline description')"
  913. ]
  914. },
  915. {
  916. "cell_type": "code",
  917. "execution_count": 40,
  918. "metadata": {},
  919. "outputs": [],
  920. "source": [
  921. "args, unknown = parser.parse_known_args()\n",
  922. "table_path = args.table_path \n",
  923. "target_index = args.target_index # what column is the target\n",
  924. "pipeline_path = args.pipeline_path\n",
  925. "metric = args.metric # F1 on both label 0 and 1"
  926. ]
  927. },
  928. {
  929. "cell_type": "code",
  930. "execution_count": 41,
  931. "metadata": {},
  932. "outputs": [],
  933. "source": [
  934. "# Read data and generate dataset\n",
  935. "df = pd.read_csv(table_path)\n",
  936. "dataset = generate_dataset(df, target_index)"
  937. ]
  938. },
  939. {
  940. "cell_type": "code",
  941. "execution_count": 42,
  942. "metadata": {},
  943. "outputs": [],
  944. "source": [
  945. "# Load the default pipeline\n",
  946. "pipeline = load_pipeline(pipeline_path)"
  947. ]
  948. },
  949. {
  950. "cell_type": "code",
  951. "execution_count": 43,
  952. "metadata": {},
  953. "outputs": [
  954. {
  955. "name": "stderr",
  956. "output_type": "stream",
  957. "text": [
  958. "Not all provided hyper-parameters for the data preparation pipeline 79ce71bd-db96-494b-a455-14f2e2ac5040 were used: ['method', 'number_of_folds', 'randomSeed', 'shuffle', 'stratified']\n"
  959. ]
  960. },
  961. {
  962. "name": "stdout",
  963. "output_type": "stream",
  964. "text": [
  965. "Model: \"sequential_2\"\n",
  966. "_________________________________________________________________\n",
  967. "Layer (type) Output Shape Param # \n",
  968. "=================================================================\n",
  969. "dense_2 (Dense) (None, 12) 156 \n",
  970. "_________________________________________________________________\n",
  971. "dropout_2 (Dropout) (None, 12) 0 \n",
  972. "_________________________________________________________________\n",
  973. "dense_3 (Dense) (None, 12) 156 \n",
  974. "_________________________________________________________________\n",
  975. "dropout_3 (Dropout) (None, 12) 0 \n",
  976. "_________________________________________________________________\n",
  977. "dense_4 (Dense) (None, 1) 13 \n",
  978. "_________________________________________________________________\n",
  979. "dropout_4 (Dropout) (None, 1) 0 \n",
  980. "_________________________________________________________________\n",
  981. "dense_5 (Dense) (None, 4) 8 \n",
  982. "_________________________________________________________________\n",
  983. "dropout_5 (Dropout) (None, 4) 0 \n",
  984. "_________________________________________________________________\n",
  985. "dense_6 (Dense) (None, 1) 5 \n",
  986. "_________________________________________________________________\n",
  987. "dropout_6 (Dropout) (None, 1) 0 \n",
  988. "_________________________________________________________________\n",
  989. "dense_7 (Dense) (None, 12) 24 \n",
  990. "=================================================================\n",
  991. "Total params: 362\n",
  992. "Trainable params: 362\n",
  993. "Non-trainable params: 0\n",
  994. "_________________________________________________________________\n",
  995. "None\n",
  996. "Epoch 1/20\n",
  997. "40/40 [==============================] - 0s 4ms/step - loss: 1.8796 - val_loss: 1.4306\n",
  998. "Epoch 2/20\n",
  999. "40/40 [==============================] - 0s 1ms/step - loss: 1.7280 - val_loss: 1.3324\n",
  1000. "Epoch 3/20\n",
  1001. "40/40 [==============================] - 0s 1ms/step - loss: 1.6184 - val_loss: 1.2660\n",
  1002. "Epoch 4/20\n",
  1003. "40/40 [==============================] - 0s 1ms/step - loss: 1.5448 - val_loss: 1.2157\n",
  1004. "Epoch 5/20\n",
  1005. "40/40 [==============================] - 0s 1ms/step - loss: 1.4950 - val_loss: 1.1736\n",
  1006. "Epoch 6/20\n",
  1007. "40/40 [==============================] - 0s 1ms/step - loss: 1.4282 - val_loss: 1.1391\n",
  1008. "Epoch 7/20\n",
  1009. "40/40 [==============================] - 0s 1ms/step - loss: 1.3967 - val_loss: 1.1090\n",
  1010. "Epoch 8/20\n",
  1011. "40/40 [==============================] - 0s 1ms/step - loss: 1.3643 - val_loss: 1.0819\n",
  1012. "Epoch 9/20\n",
  1013. "40/40 [==============================] - 0s 2ms/step - loss: 1.3212 - val_loss: 1.0579\n",
  1014. "Epoch 10/20\n",
  1015. "40/40 [==============================] - 0s 2ms/step - loss: 1.2965 - val_loss: 1.0358\n",
  1016. "Epoch 11/20\n",
  1017. "40/40 [==============================] - 0s 1ms/step - loss: 1.2677 - val_loss: 1.0152\n",
  1018. "Epoch 12/20\n",
  1019. "40/40 [==============================] - 0s 1ms/step - loss: 1.2449 - val_loss: 0.9960\n",
  1020. "Epoch 13/20\n",
  1021. "40/40 [==============================] - 0s 1ms/step - loss: 1.2246 - val_loss: 0.9778\n",
  1022. "Epoch 14/20\n",
  1023. "40/40 [==============================] - 0s 1ms/step - loss: 1.2096 - val_loss: 0.9606\n",
  1024. "Epoch 15/20\n",
  1025. "40/40 [==============================] - 0s 1ms/step - loss: 1.1837 - val_loss: 0.9444\n",
  1026. "Epoch 16/20\n",
  1027. "40/40 [==============================] - 0s 2ms/step - loss: 1.1703 - val_loss: 0.9288\n",
  1028. "Epoch 17/20\n",
  1029. "40/40 [==============================] - 0s 1ms/step - loss: 1.1430 - val_loss: 0.9140\n",
  1030. "Epoch 18/20\n",
  1031. "40/40 [==============================] - 0s 2ms/step - loss: 1.1249 - val_loss: 0.8997\n",
  1032. "Epoch 19/20\n",
  1033. "40/40 [==============================] - 0s 2ms/step - loss: 1.1178 - val_loss: 0.8861\n",
  1034. "Epoch 20/20\n",
  1035. "40/40 [==============================] - 0s 2ms/step - loss: 1.0976 - val_loss: 0.8732\n",
  1036. "{'method_called': 'evaluate',\n",
  1037. " 'outputs': \"[{'outputs.0': d3mIndex anomaly\"\n",
  1038. " '0 0 1'\n",
  1039. " '1 1 0'\n",
  1040. " '2 2 0'\n",
  1041. " '3 3 1'\n",
  1042. " '4 4 0'\n",
  1043. " '... ... ...'\n",
  1044. " '1395 1395 1'\n",
  1045. " '1396 1396 0'\n",
  1046. " '1397 1397 1'\n",
  1047. " '1398 1398 1'\n",
  1048. " '1399 1399 1'\n",
  1049. " ''\n",
  1050. " \"[1400 rows x 2 columns]}, {'outputs.0': d3mIndex anomaly\"\n",
  1051. " '0 0 1'\n",
  1052. " '1 1 0'\n",
  1053. " '2 2 0'\n",
  1054. " '3 3 1'\n",
  1055. " '4 4 0'\n",
  1056. " '... ... ...'\n",
  1057. " '1395 1395 1'\n",
  1058. " '1396 1396 0'\n",
  1059. " '1397 1397 1'\n",
  1060. " '1398 1398 1'\n",
  1061. " '1399 1399 1'\n",
  1062. " ''\n",
  1063. " '[1400 rows x 2 columns]}]',\n",
  1064. " 'pipeline': '<d3m.metadata.pipeline.Pipeline object at 0x1551d0ba8>',\n",
  1065. " 'scores': ' metric value normalized randomSeed fold'\n",
  1066. " '0 F1_MACRO 0.509059 0.509059 0 0',\n",
  1067. " 'status': 'COMPLETED'}\n"
  1068. ]
  1069. }
  1070. ],
  1071. "source": [
  1072. "# Run the pipeline\n",
  1073. "pipeline_result = evaluate_pipeline(dataset, pipeline, metric)\n",
  1074. "print(pipeline_result)"
  1075. ]
  1076. },
  1077. {
  1078. "cell_type": "markdown",
  1079. "metadata": {},
  1080. "source": [
  1081. "## Searcher Example:"
  1082. ]
  1083. },
  1084. {
  1085. "cell_type": "code",
  1086. "execution_count": 44,
  1087. "metadata": {},
  1088. "outputs": [],
  1089. "source": [
  1090. "table_path = '../../datasets/anomaly/raw_data/yahoo_sub_5.csv'\n",
  1091. "target_index = 6 # column of the target label\n",
  1092. "time_limit = 30 # How many seconds you wanna search"
  1093. ]
  1094. },
  1095. {
  1096. "cell_type": "code",
  1097. "execution_count": 45,
  1098. "metadata": {},
  1099. "outputs": [],
  1100. "source": [
  1101. "metric = 'F1_MACRO' # F1 on both label 0 and 1"
  1102. ]
  1103. },
  1104. {
  1105. "cell_type": "code",
  1106. "execution_count": 46,
  1107. "metadata": {},
  1108. "outputs": [],
  1109. "source": [
  1110. "# Read data and generate dataset and problem\n",
  1111. "df = pd.read_csv(table_path)\n",
  1112. "dataset = generate_dataset(df, target_index=target_index)\n",
  1113. "problem_description = generate_problem(dataset, metric)"
  1114. ]
  1115. },
  1116. {
  1117. "cell_type": "code",
  1118. "execution_count": 47,
  1119. "metadata": {},
  1120. "outputs": [],
  1121. "source": [
  1122. "# Start backend\n",
  1123. "backend = SimpleRunner(random_seed=0)"
  1124. ]
  1125. },
  1126. {
  1127. "cell_type": "code",
  1128. "execution_count": 48,
  1129. "metadata": {},
  1130. "outputs": [],
  1131. "source": [
  1132. "# Start search algorithm\n",
  1133. "search = BruteForceSearch(problem_description=problem_description,\n",
  1134. " backend=backend)"
  1135. ]
  1136. },
  1137. {
  1138. "cell_type": "code",
  1139. "execution_count": 49,
  1140. "metadata": {},
  1141. "outputs": [
  1142. {
  1143. "name": "stderr",
  1144. "output_type": "stream",
  1145. "text": [
  1146. "Not all provided hyper-parameters for the data preparation pipeline 79ce71bd-db96-494b-a455-14f2e2ac5040 were used: ['method', 'number_of_folds', 'randomSeed', 'shuffle', 'stratified']\n"
  1147. ]
  1148. },
  1149. {
  1150. "name": "stdout",
  1151. "output_type": "stream",
  1152. "text": [
  1153. "Model: \"sequential_3\"\n",
  1154. "_________________________________________________________________\n",
  1155. "Layer (type) Output Shape Param # \n",
  1156. "=================================================================\n",
  1157. "dense_8 (Dense) (None, 12) 156 \n",
  1158. "_________________________________________________________________\n",
  1159. "dropout_7 (Dropout) (None, 12) 0 \n",
  1160. "_________________________________________________________________\n",
  1161. "dense_9 (Dense) (None, 12) 156 \n",
  1162. "_________________________________________________________________\n",
  1163. "dropout_8 (Dropout) (None, 12) 0 \n",
  1164. "_________________________________________________________________\n",
  1165. "dense_10 (Dense) (None, 1) 13 \n",
  1166. "_________________________________________________________________\n",
  1167. "dropout_9 (Dropout) (None, 1) 0 \n",
  1168. "_________________________________________________________________\n",
  1169. "dense_11 (Dense) (None, 4) 8 \n",
  1170. "_________________________________________________________________\n",
  1171. "dropout_10 (Dropout) (None, 4) 0 \n",
  1172. "_________________________________________________________________\n",
  1173. "dense_12 (Dense) (None, 1) 5 \n",
  1174. "_________________________________________________________________\n",
  1175. "dropout_11 (Dropout) (None, 1) 0 \n",
  1176. "_________________________________________________________________\n",
  1177. "dense_13 (Dense) (None, 12) 24 \n",
  1178. "=================================================================\n",
  1179. "Total params: 362\n",
  1180. "Trainable params: 362\n",
  1181. "Non-trainable params: 0\n",
  1182. "_________________________________________________________________\n",
  1183. "None\n",
  1184. "Epoch 1/20\n",
  1185. "40/40 [==============================] - 0s 4ms/step - loss: 1.4187 - val_loss: 1.0009\n",
  1186. "Epoch 2/20\n",
  1187. "40/40 [==============================] - 0s 1ms/step - loss: 1.2895 - val_loss: 0.9167\n",
  1188. "Epoch 3/20\n",
  1189. "40/40 [==============================] - 0s 2ms/step - loss: 1.2010 - val_loss: 0.8517\n",
  1190. "Epoch 4/20\n",
  1191. "40/40 [==============================] - 0s 1ms/step - loss: 1.1463 - val_loss: 0.7988\n",
  1192. "Epoch 5/20\n",
  1193. "40/40 [==============================] - 0s 1ms/step - loss: 1.0777 - val_loss: 0.7531\n",
  1194. "Epoch 6/20\n",
  1195. "40/40 [==============================] - 0s 1ms/step - loss: 1.0281 - val_loss: 0.7135\n",
  1196. "Epoch 7/20\n",
  1197. "40/40 [==============================] - 0s 1ms/step - loss: 0.9993 - val_loss: 0.6791\n",
  1198. "Epoch 8/20\n",
  1199. "40/40 [==============================] - 0s 1ms/step - loss: 0.9634 - val_loss: 0.6496\n",
  1200. "Epoch 9/20\n",
  1201. "40/40 [==============================] - 0s 1ms/step - loss: 0.9320 - val_loss: 0.6239\n",
  1202. "Epoch 10/20\n",
  1203. "40/40 [==============================] - 0s 1ms/step - loss: 0.8982 - val_loss: 0.6019\n",
  1204. "Epoch 11/20\n",
  1205. "40/40 [==============================] - 0s 1ms/step - loss: 0.8760 - val_loss: 0.5825\n",
  1206. "Epoch 12/20\n",
  1207. "40/40 [==============================] - 0s 2ms/step - loss: 0.8527 - val_loss: 0.5652\n",
  1208. "Epoch 13/20\n",
  1209. "40/40 [==============================] - 0s 2ms/step - loss: 0.8399 - val_loss: 0.5510\n",
  1210. "Epoch 14/20\n",
  1211. "40/40 [==============================] - 0s 2ms/step - loss: 0.8218 - val_loss: 0.5378\n",
  1212. "Epoch 15/20\n",
  1213. "40/40 [==============================] - 0s 2ms/step - loss: 0.8096 - val_loss: 0.5263\n",
  1214. "Epoch 16/20\n",
  1215. "40/40 [==============================] - 0s 2ms/step - loss: 0.7945 - val_loss: 0.5162\n",
  1216. "Epoch 17/20\n",
  1217. "40/40 [==============================] - 0s 2ms/step - loss: 0.7836 - val_loss: 0.5069\n",
  1218. "Epoch 18/20\n",
  1219. "40/40 [==============================] - 0s 2ms/step - loss: 0.7713 - val_loss: 0.4988\n",
  1220. "Epoch 19/20\n",
  1221. "40/40 [==============================] - 0s 2ms/step - loss: 0.7561 - val_loss: 0.4908\n",
  1222. "Epoch 20/20\n",
  1223. "40/40 [==============================] - 0s 1ms/step - loss: 0.7538 - val_loss: 0.4840\n"
  1224. ]
  1225. },
  1226. {
  1227. "name": "stderr",
  1228. "output_type": "stream",
  1229. "text": [
  1230. "Traceback (most recent call last):\n",
  1231. " File \"/Users/wangyanghe/Desktop/Research/tods/tods/searcher/brute_force_search.py\", line 62, in _search\n",
  1232. " for error in pipeline_result.error:\n",
  1233. "TypeError: 'NoneType' object is not iterable\n",
  1234. "Not all provided hyper-parameters for the data preparation pipeline 79ce71bd-db96-494b-a455-14f2e2ac5040 were used: ['method', 'number_of_folds', 'randomSeed', 'shuffle', 'stratified']\n"
  1235. ]
  1236. },
  1237. {
  1238. "name": "stdout",
  1239. "output_type": "stream",
  1240. "text": [
  1241. "Model: \"sequential_4\"\n",
  1242. "_________________________________________________________________\n",
  1243. "Layer (type) Output Shape Param # \n",
  1244. "=================================================================\n",
  1245. "dense_14 (Dense) (None, 12) 156 \n",
  1246. "_________________________________________________________________\n",
  1247. "dropout_12 (Dropout) (None, 12) 0 \n",
  1248. "_________________________________________________________________\n",
  1249. "dense_15 (Dense) (None, 12) 156 \n",
  1250. "_________________________________________________________________\n",
  1251. "dropout_13 (Dropout) (None, 12) 0 \n",
  1252. "_________________________________________________________________\n",
  1253. "dense_16 (Dense) (None, 1) 13 \n",
  1254. "_________________________________________________________________\n",
  1255. "dropout_14 (Dropout) (None, 1) 0 \n",
  1256. "_________________________________________________________________\n",
  1257. "dense_17 (Dense) (None, 4) 8 \n",
  1258. "_________________________________________________________________\n",
  1259. "dropout_15 (Dropout) (None, 4) 0 \n",
  1260. "_________________________________________________________________\n",
  1261. "dense_18 (Dense) (None, 1) 5 \n",
  1262. "_________________________________________________________________\n",
  1263. "dropout_16 (Dropout) (None, 1) 0 \n",
  1264. "_________________________________________________________________\n",
  1265. "dense_19 (Dense) (None, 12) 24 \n",
  1266. "=================================================================\n",
  1267. "Total params: 362\n",
  1268. "Trainable params: 362\n",
  1269. "Non-trainable params: 0\n",
  1270. "_________________________________________________________________\n",
  1271. "None\n",
  1272. "Epoch 1/20\n",
  1273. "40/40 [==============================] - 0s 4ms/step - loss: 1.4226 - val_loss: 1.0312\n",
  1274. "Epoch 2/20\n",
  1275. "40/40 [==============================] - 0s 1ms/step - loss: 1.3035 - val_loss: 0.9579\n",
  1276. "Epoch 3/20\n",
  1277. "40/40 [==============================] - 0s 1ms/step - loss: 1.2140 - val_loss: 0.9087\n",
  1278. "Epoch 4/20\n",
  1279. "40/40 [==============================] - 0s 1ms/step - loss: 1.1662 - val_loss: 0.8710\n",
  1280. "Epoch 5/20\n",
  1281. "40/40 [==============================] - 0s 1ms/step - loss: 1.1229 - val_loss: 0.8401\n",
  1282. "Epoch 6/20\n",
  1283. "40/40 [==============================] - 0s 1ms/step - loss: 1.0874 - val_loss: 0.8141\n",
  1284. "Epoch 7/20\n",
  1285. "40/40 [==============================] - 0s 1ms/step - loss: 1.0573 - val_loss: 0.7913\n",
  1286. "Epoch 8/20\n",
  1287. "40/40 [==============================] - 0s 1ms/step - loss: 1.0292 - val_loss: 0.7709\n",
  1288. "Epoch 9/20\n",
  1289. "40/40 [==============================] - 0s 1ms/step - loss: 1.0038 - val_loss: 0.7525\n",
  1290. "Epoch 10/20\n",
  1291. "40/40 [==============================] - 0s 1ms/step - loss: 0.9837 - val_loss: 0.7353\n",
  1292. "Epoch 11/20\n",
  1293. "40/40 [==============================] - 0s 1ms/step - loss: 0.9654 - val_loss: 0.7190\n",
  1294. "Epoch 12/20\n",
  1295. "40/40 [==============================] - 0s 1ms/step - loss: 0.9444 - val_loss: 0.7040\n",
  1296. "Epoch 13/20\n",
  1297. "40/40 [==============================] - 0s 1ms/step - loss: 0.9280 - val_loss: 0.6898\n",
  1298. "Epoch 14/20\n",
  1299. "40/40 [==============================] - 0s 1ms/step - loss: 0.9117 - val_loss: 0.6762\n",
  1300. "Epoch 15/20\n",
  1301. "40/40 [==============================] - 0s 1ms/step - loss: 0.8950 - val_loss: 0.6634\n",
  1302. "Epoch 16/20\n",
  1303. "40/40 [==============================] - 0s 1ms/step - loss: 0.8789 - val_loss: 0.6515\n",
  1304. "Epoch 17/20\n",
  1305. "40/40 [==============================] - 0s 1ms/step - loss: 0.8663 - val_loss: 0.6400\n",
  1306. "Epoch 18/20\n",
  1307. "40/40 [==============================] - 0s 1ms/step - loss: 0.8541 - val_loss: 0.6290\n",
  1308. "Epoch 19/20\n",
  1309. "40/40 [==============================] - 0s 1ms/step - loss: 0.8419 - val_loss: 0.6187\n",
  1310. "Epoch 20/20\n",
  1311. "40/40 [==============================] - 0s 2ms/step - loss: 0.8293 - val_loss: 0.6088\n"
  1312. ]
  1313. },
  1314. {
  1315. "name": "stderr",
  1316. "output_type": "stream",
  1317. "text": [
  1318. "Traceback (most recent call last):\n",
  1319. " File \"/Users/wangyanghe/Desktop/Research/tods/tods/searcher/brute_force_search.py\", line 62, in _search\n",
  1320. " for error in pipeline_result.error:\n",
  1321. "TypeError: 'NoneType' object is not iterable\n",
  1322. "Not all provided hyper-parameters for the data preparation pipeline 79ce71bd-db96-494b-a455-14f2e2ac5040 were used: ['method', 'number_of_folds', 'randomSeed', 'shuffle', 'stratified']\n"
  1323. ]
  1324. },
  1325. {
  1326. "name": "stdout",
  1327. "output_type": "stream",
  1328. "text": [
  1329. "Model: \"sequential_5\"\n",
  1330. "_________________________________________________________________\n",
  1331. "Layer (type) Output Shape Param # \n",
  1332. "=================================================================\n",
  1333. "dense_20 (Dense) (None, 12) 156 \n",
  1334. "_________________________________________________________________\n",
  1335. "dropout_17 (Dropout) (None, 12) 0 \n",
  1336. "_________________________________________________________________\n",
  1337. "dense_21 (Dense) (None, 12) 156 \n",
  1338. "_________________________________________________________________\n",
  1339. "dropout_18 (Dropout) (None, 12) 0 \n",
  1340. "_________________________________________________________________\n",
  1341. "dense_22 (Dense) (None, 1) 13 \n",
  1342. "_________________________________________________________________\n",
  1343. "dropout_19 (Dropout) (None, 1) 0 \n",
  1344. "_________________________________________________________________\n",
  1345. "dense_23 (Dense) (None, 4) 8 \n",
  1346. "_________________________________________________________________\n",
  1347. "dropout_20 (Dropout) (None, 4) 0 \n",
  1348. "_________________________________________________________________\n",
  1349. "dense_24 (Dense) (None, 1) 5 \n",
  1350. "_________________________________________________________________\n",
  1351. "dropout_21 (Dropout) (None, 1) 0 \n",
  1352. "_________________________________________________________________\n",
  1353. "dense_25 (Dense) (None, 12) 24 \n",
  1354. "=================================================================\n",
  1355. "Total params: 362\n",
  1356. "Trainable params: 362\n",
  1357. "Non-trainable params: 0\n",
  1358. "_________________________________________________________________\n",
  1359. "None\n",
  1360. "Epoch 1/20\n",
  1361. "40/40 [==============================] - 0s 4ms/step - loss: 1.5037 - val_loss: 0.9548\n",
  1362. "Epoch 2/20\n",
  1363. "40/40 [==============================] - 0s 1ms/step - loss: 1.3846 - val_loss: 0.8790\n",
  1364. "Epoch 3/20\n",
  1365. "40/40 [==============================] - 0s 1ms/step - loss: 1.2879 - val_loss: 0.8227\n",
  1366. "Epoch 4/20\n",
  1367. "40/40 [==============================] - 0s 1ms/step - loss: 1.2069 - val_loss: 0.7754\n",
  1368. "Epoch 5/20\n",
  1369. "40/40 [==============================] - 0s 1ms/step - loss: 1.1539 - val_loss: 0.7350\n",
  1370. "Epoch 6/20\n",
  1371. "40/40 [==============================] - 0s 1ms/step - loss: 1.1092 - val_loss: 0.6988\n",
  1372. "Epoch 7/20\n",
  1373. "40/40 [==============================] - 0s 2ms/step - loss: 1.0573 - val_loss: 0.6661\n",
  1374. "Epoch 8/20\n",
  1375. "40/40 [==============================] - 0s 2ms/step - loss: 1.0250 - val_loss: 0.6363\n",
  1376. "Epoch 9/20\n",
  1377. "40/40 [==============================] - 0s 1ms/step - loss: 0.9841 - val_loss: 0.6097\n",
  1378. "Epoch 10/20\n",
  1379. "40/40 [==============================] - 0s 1ms/step - loss: 0.9457 - val_loss: 0.5857\n",
  1380. "Epoch 11/20\n",
  1381. "40/40 [==============================] - 0s 1ms/step - loss: 0.9316 - val_loss: 0.5643\n",
  1382. "Epoch 12/20\n",
  1383. "40/40 [==============================] - 0s 1ms/step - loss: 0.9055 - val_loss: 0.5456\n",
  1384. "Epoch 13/20\n",
  1385. "40/40 [==============================] - 0s 1ms/step - loss: 0.8854 - val_loss: 0.5292\n",
  1386. "Epoch 14/20\n",
  1387. "40/40 [==============================] - 0s 1ms/step - loss: 0.8633 - val_loss: 0.5146\n",
  1388. "Epoch 15/20\n",
  1389. "40/40 [==============================] - 0s 2ms/step - loss: 0.8412 - val_loss: 0.5022\n",
  1390. "Epoch 16/20\n",
  1391. "40/40 [==============================] - 0s 2ms/step - loss: 0.8335 - val_loss: 0.4911\n",
  1392. "Epoch 17/20\n",
  1393. "40/40 [==============================] - 0s 1ms/step - loss: 0.8192 - val_loss: 0.4814\n",
  1394. "Epoch 18/20\n",
  1395. "40/40 [==============================] - 0s 1ms/step - loss: 0.8071 - val_loss: 0.4726\n",
  1396. "Epoch 19/20\n",
  1397. "40/40 [==============================] - 0s 1ms/step - loss: 0.7888 - val_loss: 0.4646\n",
  1398. "Epoch 20/20\n",
  1399. "40/40 [==============================] - 0s 1ms/step - loss: 0.7846 - val_loss: 0.4576\n"
  1400. ]
  1401. },
  1402. {
  1403. "name": "stderr",
  1404. "output_type": "stream",
  1405. "text": [
  1406. "Traceback (most recent call last):\n",
  1407. " File \"/Users/wangyanghe/Desktop/Research/tods/tods/searcher/brute_force_search.py\", line 62, in _search\n",
  1408. " for error in pipeline_result.error:\n",
  1409. "TypeError: 'NoneType' object is not iterable\n",
  1410. "Not all provided hyper-parameters for the data preparation pipeline 79ce71bd-db96-494b-a455-14f2e2ac5040 were used: ['method', 'number_of_folds', 'randomSeed', 'shuffle', 'stratified']\n"
  1411. ]
  1412. },
  1413. {
  1414. "name": "stdout",
  1415. "output_type": "stream",
  1416. "text": [
  1417. "Model: \"sequential_6\"\n",
  1418. "_________________________________________________________________\n",
  1419. "Layer (type) Output Shape Param # \n",
  1420. "=================================================================\n",
  1421. "dense_26 (Dense) (None, 12) 156 \n",
  1422. "_________________________________________________________________\n",
  1423. "dropout_22 (Dropout) (None, 12) 0 \n",
  1424. "_________________________________________________________________\n",
  1425. "dense_27 (Dense) (None, 12) 156 \n",
  1426. "_________________________________________________________________\n",
  1427. "dropout_23 (Dropout) (None, 12) 0 \n",
  1428. "_________________________________________________________________\n",
  1429. "dense_28 (Dense) (None, 1) 13 \n",
  1430. "_________________________________________________________________\n",
  1431. "dropout_24 (Dropout) (None, 1) 0 \n",
  1432. "_________________________________________________________________\n",
  1433. "dense_29 (Dense) (None, 4) 8 \n",
  1434. "_________________________________________________________________\n",
  1435. "dropout_25 (Dropout) (None, 4) 0 \n",
  1436. "_________________________________________________________________\n",
  1437. "dense_30 (Dense) (None, 1) 5 \n",
  1438. "_________________________________________________________________\n",
  1439. "dropout_26 (Dropout) (None, 1) 0 \n",
  1440. "_________________________________________________________________\n",
  1441. "dense_31 (Dense) (None, 12) 24 \n",
  1442. "=================================================================\n",
  1443. "Total params: 362\n",
  1444. "Trainable params: 362\n",
  1445. "Non-trainable params: 0\n",
  1446. "_________________________________________________________________\n",
  1447. "None\n",
  1448. "Epoch 1/20\n",
  1449. "40/40 [==============================] - 0s 6ms/step - loss: 1.5385 - val_loss: 0.9377\n",
  1450. "Epoch 2/20\n",
  1451. "40/40 [==============================] - 0s 2ms/step - loss: 1.4001 - val_loss: 0.8741\n",
  1452. "Epoch 3/20\n",
  1453. "40/40 [==============================] - 0s 1ms/step - loss: 1.3243 - val_loss: 0.8293\n",
  1454. "Epoch 4/20\n",
  1455. "40/40 [==============================] - 0s 1ms/step - loss: 1.2663 - val_loss: 0.7954\n",
  1456. "Epoch 5/20\n",
  1457. "40/40 [==============================] - 0s 1ms/step - loss: 1.2048 - val_loss: 0.7677\n",
  1458. "Epoch 6/20\n",
  1459. "40/40 [==============================] - 0s 1ms/step - loss: 1.1459 - val_loss: 0.7439\n",
  1460. "Epoch 7/20\n",
  1461. "40/40 [==============================] - 0s 1ms/step - loss: 1.1224 - val_loss: 0.7230\n",
  1462. "Epoch 8/20\n",
  1463. "40/40 [==============================] - 0s 1ms/step - loss: 1.0832 - val_loss: 0.7042\n",
  1464. "Epoch 9/20\n",
  1465. "40/40 [==============================] - 0s 1ms/step - loss: 1.0554 - val_loss: 0.6868\n",
  1466. "Epoch 10/20\n",
  1467. "40/40 [==============================] - 0s 2ms/step - loss: 1.0283 - val_loss: 0.6708\n",
  1468. "Epoch 11/20\n",
  1469. "40/40 [==============================] - 0s 2ms/step - loss: 1.0062 - val_loss: 0.6558\n",
  1470. "Epoch 12/20\n",
  1471. "40/40 [==============================] - 0s 2ms/step - loss: 0.9902 - val_loss: 0.6417\n",
  1472. "Epoch 13/20\n",
  1473. "40/40 [==============================] - 0s 2ms/step - loss: 0.9738 - val_loss: 0.6284\n",
  1474. "Epoch 14/20\n",
  1475. "40/40 [==============================] - 0s 2ms/step - loss: 0.9461 - val_loss: 0.6158\n",
  1476. "Epoch 15/20\n",
  1477. "40/40 [==============================] - 0s 2ms/step - loss: 0.9323 - val_loss: 0.6038\n",
  1478. "Epoch 16/20\n",
  1479. "40/40 [==============================] - 0s 2ms/step - loss: 0.9126 - val_loss: 0.5925\n",
  1480. "Epoch 17/20\n",
  1481. "40/40 [==============================] - 0s 1ms/step - loss: 0.9007 - val_loss: 0.5817\n",
  1482. "Epoch 18/20\n",
  1483. "40/40 [==============================] - 0s 1ms/step - loss: 0.8846 - val_loss: 0.5715\n",
  1484. "Epoch 19/20\n",
  1485. "40/40 [==============================] - 0s 1ms/step - loss: 0.8657 - val_loss: 0.5617\n",
  1486. "Epoch 20/20\n",
  1487. "40/40 [==============================] - 0s 1ms/step - loss: 0.8551 - val_loss: 0.5524\n"
  1488. ]
  1489. },
  1490. {
  1491. "name": "stderr",
  1492. "output_type": "stream",
  1493. "text": [
  1494. "Traceback (most recent call last):\n",
  1495. " File \"/Users/wangyanghe/Desktop/Research/tods/tods/searcher/brute_force_search.py\", line 62, in _search\n",
  1496. " for error in pipeline_result.error:\n",
  1497. "TypeError: 'NoneType' object is not iterable\n",
  1498. "Not all provided hyper-parameters for the data preparation pipeline 79ce71bd-db96-494b-a455-14f2e2ac5040 were used: ['method', 'number_of_folds', 'randomSeed', 'shuffle', 'stratified']\n"
  1499. ]
  1500. },
  1501. {
  1502. "name": "stdout",
  1503. "output_type": "stream",
  1504. "text": [
  1505. "Model: \"sequential_7\"\n",
  1506. "_________________________________________________________________\n",
  1507. "Layer (type) Output Shape Param # \n",
  1508. "=================================================================\n",
  1509. "dense_32 (Dense) (None, 12) 156 \n",
  1510. "_________________________________________________________________\n",
  1511. "dropout_27 (Dropout) (None, 12) 0 \n",
  1512. "_________________________________________________________________\n",
  1513. "dense_33 (Dense) (None, 12) 156 \n",
  1514. "_________________________________________________________________\n",
  1515. "dropout_28 (Dropout) (None, 12) 0 \n",
  1516. "_________________________________________________________________\n",
  1517. "dense_34 (Dense) (None, 1) 13 \n",
  1518. "_________________________________________________________________\n",
  1519. "dropout_29 (Dropout) (None, 1) 0 \n",
  1520. "_________________________________________________________________\n",
  1521. "dense_35 (Dense) (None, 4) 8 \n",
  1522. "_________________________________________________________________\n",
  1523. "dropout_30 (Dropout) (None, 4) 0 \n",
  1524. "_________________________________________________________________\n",
  1525. "dense_36 (Dense) (None, 1) 5 \n",
  1526. "_________________________________________________________________\n",
  1527. "dropout_31 (Dropout) (None, 1) 0 \n",
  1528. "_________________________________________________________________\n",
  1529. "dense_37 (Dense) (None, 12) 24 \n",
  1530. "=================================================================\n",
  1531. "Total params: 362\n",
  1532. "Trainable params: 362\n",
  1533. "Non-trainable params: 0\n",
  1534. "_________________________________________________________________\n",
  1535. "None\n",
  1536. "Epoch 1/20\n",
  1537. "40/40 [==============================] - 0s 5ms/step - loss: 1.4187 - val_loss: 1.0796\n",
  1538. "Epoch 2/20\n",
  1539. "40/40 [==============================] - 0s 2ms/step - loss: 1.2828 - val_loss: 0.9882\n",
  1540. "Epoch 3/20\n",
  1541. "40/40 [==============================] - 0s 2ms/step - loss: 1.1966 - val_loss: 0.9252\n",
  1542. "Epoch 4/20\n",
  1543. "40/40 [==============================] - 0s 2ms/step - loss: 1.1363 - val_loss: 0.8790\n",
  1544. "Epoch 5/20\n",
  1545. "40/40 [==============================] - 0s 1ms/step - loss: 1.0851 - val_loss: 0.8430\n",
  1546. "Epoch 6/20\n",
  1547. "40/40 [==============================] - 0s 1ms/step - loss: 1.0490 - val_loss: 0.8141\n",
  1548. "Epoch 7/20\n",
  1549. "40/40 [==============================] - 0s 1ms/step - loss: 1.0228 - val_loss: 0.7893\n",
  1550. "Epoch 8/20\n",
  1551. "40/40 [==============================] - 0s 1ms/step - loss: 0.9927 - val_loss: 0.7679\n",
  1552. "Epoch 9/20\n",
  1553. "40/40 [==============================] - 0s 2ms/step - loss: 0.9690 - val_loss: 0.7490\n",
  1554. "Epoch 10/20\n",
  1555. "40/40 [==============================] - 0s 2ms/step - loss: 0.9507 - val_loss: 0.7316\n",
  1556. "Epoch 11/20\n",
  1557. "40/40 [==============================] - 0s 2ms/step - loss: 0.9298 - val_loss: 0.7158\n",
  1558. "Epoch 12/20\n",
  1559. "40/40 [==============================] - 0s 1ms/step - loss: 0.9132 - val_loss: 0.7011\n",
  1560. "Epoch 13/20\n",
  1561. "40/40 [==============================] - 0s 1ms/step - loss: 0.8952 - val_loss: 0.6873\n",
  1562. "Epoch 14/20\n",
  1563. "40/40 [==============================] - 0s 1ms/step - loss: 0.8818 - val_loss: 0.6743\n",
  1564. "Epoch 15/20\n",
  1565. "40/40 [==============================] - 0s 1ms/step - loss: 0.8682 - val_loss: 0.6620\n",
  1566. "Epoch 16/20\n",
  1567. "40/40 [==============================] - 0s 1ms/step - loss: 0.8537 - val_loss: 0.6504\n",
  1568. "Epoch 17/20\n",
  1569. "40/40 [==============================] - 0s 1ms/step - loss: 0.8404 - val_loss: 0.6394\n",
  1570. "Epoch 18/20\n",
  1571. "40/40 [==============================] - 0s 1ms/step - loss: 0.8283 - val_loss: 0.6289\n",
  1572. "Epoch 19/20\n",
  1573. "40/40 [==============================] - 0s 1ms/step - loss: 0.8162 - val_loss: 0.6190\n",
  1574. "Epoch 20/20\n",
  1575. "40/40 [==============================] - 0s 1ms/step - loss: 0.8059 - val_loss: 0.6095\n"
  1576. ]
  1577. },
  1578. {
  1579. "name": "stderr",
  1580. "output_type": "stream",
  1581. "text": [
  1582. "Traceback (most recent call last):\n",
  1583. " File \"/Users/wangyanghe/Desktop/Research/tods/tods/searcher/brute_force_search.py\", line 62, in _search\n",
  1584. " for error in pipeline_result.error:\n",
  1585. "TypeError: 'NoneType' object is not iterable\n",
  1586. "Not all provided hyper-parameters for the data preparation pipeline 79ce71bd-db96-494b-a455-14f2e2ac5040 were used: ['method', 'number_of_folds', 'randomSeed', 'shuffle', 'stratified']\n"
  1587. ]
  1588. },
  1589. {
  1590. "name": "stdout",
  1591. "output_type": "stream",
  1592. "text": [
  1593. "Model: \"sequential_8\"\n",
  1594. "_________________________________________________________________\n",
  1595. "Layer (type) Output Shape Param # \n",
  1596. "=================================================================\n",
  1597. "dense_38 (Dense) (None, 12) 156 \n",
  1598. "_________________________________________________________________\n",
  1599. "dropout_32 (Dropout) (None, 12) 0 \n",
  1600. "_________________________________________________________________\n",
  1601. "dense_39 (Dense) (None, 12) 156 \n",
  1602. "_________________________________________________________________\n",
  1603. "dropout_33 (Dropout) (None, 12) 0 \n",
  1604. "_________________________________________________________________\n",
  1605. "dense_40 (Dense) (None, 1) 13 \n",
  1606. "_________________________________________________________________\n",
  1607. "dropout_34 (Dropout) (None, 1) 0 \n",
  1608. "_________________________________________________________________\n",
  1609. "dense_41 (Dense) (None, 4) 8 \n",
  1610. "_________________________________________________________________\n",
  1611. "dropout_35 (Dropout) (None, 4) 0 \n",
  1612. "_________________________________________________________________\n",
  1613. "dense_42 (Dense) (None, 1) 5 \n",
  1614. "_________________________________________________________________\n",
  1615. "dropout_36 (Dropout) (None, 1) 0 \n",
  1616. "_________________________________________________________________\n",
  1617. "dense_43 (Dense) (None, 12) 24 \n",
  1618. "=================================================================\n",
  1619. "Total params: 362\n",
  1620. "Trainable params: 362\n",
  1621. "Non-trainable params: 0\n",
  1622. "_________________________________________________________________\n",
  1623. "None\n",
  1624. "Epoch 1/20\n",
  1625. "40/40 [==============================] - 0s 4ms/step - loss: 1.5237 - val_loss: 1.0177\n",
  1626. "Epoch 2/20\n",
  1627. "40/40 [==============================] - 0s 1ms/step - loss: 1.3755 - val_loss: 0.9350\n",
  1628. "Epoch 3/20\n",
  1629. "40/40 [==============================] - 0s 1ms/step - loss: 1.2795 - val_loss: 0.8795\n",
  1630. "Epoch 4/20\n",
  1631. "40/40 [==============================] - 0s 1ms/step - loss: 1.2211 - val_loss: 0.8374\n",
  1632. "Epoch 5/20\n",
  1633. "40/40 [==============================] - 0s 2ms/step - loss: 1.1686 - val_loss: 0.8039\n",
  1634. "Epoch 6/20\n",
  1635. "40/40 [==============================] - 0s 2ms/step - loss: 1.1298 - val_loss: 0.7758\n",
  1636. "Epoch 7/20\n",
  1637. "40/40 [==============================] - 0s 2ms/step - loss: 1.0982 - val_loss: 0.7514\n",
  1638. "Epoch 8/20\n",
  1639. "40/40 [==============================] - 0s 2ms/step - loss: 1.0670 - val_loss: 0.7298\n",
  1640. "Epoch 9/20\n",
  1641. "40/40 [==============================] - 0s 2ms/step - loss: 1.0382 - val_loss: 0.7106\n",
  1642. "Epoch 10/20\n",
  1643. "40/40 [==============================] - 0s 2ms/step - loss: 1.0145 - val_loss: 0.6931\n",
  1644. "Epoch 11/20\n",
  1645. "40/40 [==============================] - 0s 2ms/step - loss: 0.9928 - val_loss: 0.6770\n",
  1646. "Epoch 12/20\n",
  1647. "40/40 [==============================] - 0s 1ms/step - loss: 0.9743 - val_loss: 0.6621\n",
  1648. "Epoch 13/20\n",
  1649. "40/40 [==============================] - 0s 2ms/step - loss: 0.9573 - val_loss: 0.6483\n",
  1650. "Epoch 14/20\n",
  1651. "40/40 [==============================] - 0s 2ms/step - loss: 0.9370 - val_loss: 0.6353\n",
  1652. "Epoch 15/20\n",
  1653. "40/40 [==============================] - 0s 1ms/step - loss: 0.9207 - val_loss: 0.6231\n",
  1654. "Epoch 16/20\n",
  1655. "40/40 [==============================] - 0s 1ms/step - loss: 0.9041 - val_loss: 0.6116\n",
  1656. "Epoch 17/20\n",
  1657. "40/40 [==============================] - 0s 1ms/step - loss: 0.8930 - val_loss: 0.6007\n",
  1658. "Epoch 18/20\n",
  1659. "40/40 [==============================] - 0s 1ms/step - loss: 0.8765 - val_loss: 0.5904\n",
  1660. "Epoch 19/20\n",
  1661. "40/40 [==============================] - 0s 1ms/step - loss: 0.8633 - val_loss: 0.5806\n",
  1662. "Epoch 20/20\n",
  1663. "40/40 [==============================] - 0s 1ms/step - loss: 0.8528 - val_loss: 0.5713\n"
  1664. ]
  1665. },
  1666. {
  1667. "name": "stderr",
  1668. "output_type": "stream",
  1669. "text": [
  1670. "Traceback (most recent call last):\n",
  1671. " File \"/Users/wangyanghe/Desktop/Research/tods/tods/searcher/brute_force_search.py\", line 62, in _search\n",
  1672. " for error in pipeline_result.error:\n",
  1673. "TypeError: 'NoneType' object is not iterable\n"
  1674. ]
  1675. },
  1676. {
  1677. "name": "stdout",
  1678. "output_type": "stream",
  1679. "text": [
  1680. "Model: \"sequential_9\"\n",
  1681. "_________________________________________________________________\n",
  1682. "Layer (type) Output Shape Param # \n",
  1683. "=================================================================\n",
  1684. "dense_44 (Dense) (None, 12) 156 \n",
  1685. "_________________________________________________________________\n",
  1686. "dropout_37 (Dropout) (None, 12) 0 \n",
  1687. "_________________________________________________________________\n",
  1688. "dense_45 (Dense) (None, 12) 156 \n",
  1689. "_________________________________________________________________\n",
  1690. "dropout_38 (Dropout) (None, 12) 0 \n",
  1691. "_________________________________________________________________\n",
  1692. "dense_46 (Dense) (None, 1) 13 \n",
  1693. "_________________________________________________________________\n",
  1694. "dropout_39 (Dropout) (None, 1) 0 \n",
  1695. "_________________________________________________________________\n",
  1696. "dense_47 (Dense) (None, 4) 8 \n",
  1697. "_________________________________________________________________\n",
  1698. "dropout_40 (Dropout) (None, 4) 0 \n",
  1699. "_________________________________________________________________\n",
  1700. "dense_48 (Dense) (None, 1) 5 \n",
  1701. "_________________________________________________________________\n",
  1702. "dropout_41 (Dropout) (None, 1) 0 \n",
  1703. "_________________________________________________________________\n",
  1704. "dense_49 (Dense) (None, 12) 24 \n",
  1705. "=================================================================\n",
  1706. "Total params: 362\n",
  1707. "Trainable params: 362\n",
  1708. "Non-trainable params: 0\n",
  1709. "_________________________________________________________________\n",
  1710. "None\n",
  1711. "Epoch 1/20\n",
  1712. "40/40 [==============================] - 0s 4ms/step - loss: 1.5013 - val_loss: 1.5361\n",
  1713. "Epoch 2/20\n",
  1714. "40/40 [==============================] - 0s 1ms/step - loss: 1.3749 - val_loss: 1.4108\n",
  1715. "Epoch 3/20\n",
  1716. "40/40 [==============================] - 0s 1ms/step - loss: 1.2565 - val_loss: 1.3262\n",
  1717. "Epoch 4/20\n",
  1718. "40/40 [==============================] - 0s 1ms/step - loss: 1.1685 - val_loss: 1.2589\n",
  1719. "Epoch 5/20\n",
  1720. "40/40 [==============================] - 0s 1ms/step - loss: 1.1140 - val_loss: 1.2080\n",
  1721. "Epoch 6/20\n",
  1722. "40/40 [==============================] - 0s 1ms/step - loss: 1.0896 - val_loss: 1.1662\n",
  1723. "Epoch 7/20\n",
  1724. "40/40 [==============================] - 0s 2ms/step - loss: 1.0621 - val_loss: 1.1308\n",
  1725. "Epoch 8/20\n",
  1726. "40/40 [==============================] - 0s 2ms/step - loss: 1.0299 - val_loss: 1.0962\n",
  1727. "Epoch 9/20\n",
  1728. "40/40 [==============================] - 0s 2ms/step - loss: 0.9957 - val_loss: 1.0679\n",
  1729. "Epoch 10/20\n",
  1730. "40/40 [==============================] - 0s 1ms/step - loss: 0.9738 - val_loss: 1.0435\n",
  1731. "Epoch 11/20\n",
  1732. "40/40 [==============================] - 0s 1ms/step - loss: 0.9496 - val_loss: 1.0196\n",
  1733. "Epoch 12/20\n",
  1734. "40/40 [==============================] - 0s 1ms/step - loss: 0.9224 - val_loss: 1.0000\n",
  1735. "Epoch 13/20\n",
  1736. "40/40 [==============================] - 0s 1ms/step - loss: 0.9094 - val_loss: 0.9790\n",
  1737. "Epoch 14/20\n",
  1738. "40/40 [==============================] - 0s 1ms/step - loss: 0.8959 - val_loss: 0.9610\n",
  1739. "Epoch 15/20\n",
  1740. "40/40 [==============================] - 0s 1ms/step - loss: 0.8703 - val_loss: 0.9438\n",
  1741. "Epoch 16/20\n",
  1742. "40/40 [==============================] - 0s 2ms/step - loss: 0.8584 - val_loss: 0.9280\n",
  1743. "Epoch 17/20\n",
  1744. "40/40 [==============================] - 0s 2ms/step - loss: 0.8485 - val_loss: 0.9134\n",
  1745. "Epoch 18/20\n",
  1746. "40/40 [==============================] - 0s 2ms/step - loss: 0.8315 - val_loss: 0.8994\n",
  1747. "Epoch 19/20\n",
  1748. "40/40 [==============================] - 0s 2ms/step - loss: 0.8147 - val_loss: 0.8818\n",
  1749. "Epoch 20/20\n",
  1750. "40/40 [==============================] - 0s 2ms/step - loss: 0.8000 - val_loss: 0.8617\n"
  1751. ]
  1752. }
  1753. ],
  1754. "source": [
  1755. "# Find the best pipeline\n",
  1756. "best_runtime, best_pipeline_result = search.search_fit(input_data=[dataset], time_limit=time_limit)\n",
  1757. "best_pipeline = best_runtime.pipeline\n",
  1758. "best_output = best_pipeline_result.output"
  1759. ]
  1760. },
  1761. {
  1762. "cell_type": "code",
  1763. "execution_count": 50,
  1764. "metadata": {},
  1765. "outputs": [
  1766. {
  1767. "name": "stderr",
  1768. "output_type": "stream",
  1769. "text": [
  1770. "Not all provided hyper-parameters for the data preparation pipeline 79ce71bd-db96-494b-a455-14f2e2ac5040 were used: ['method', 'number_of_folds', 'randomSeed', 'shuffle', 'stratified']\n"
  1771. ]
  1772. },
  1773. {
  1774. "name": "stdout",
  1775. "output_type": "stream",
  1776. "text": [
  1777. "Model: \"sequential_10\"\n",
  1778. "_________________________________________________________________\n",
  1779. "Layer (type) Output Shape Param # \n",
  1780. "=================================================================\n",
  1781. "dense_50 (Dense) (None, 12) 156 \n",
  1782. "_________________________________________________________________\n",
  1783. "dropout_42 (Dropout) (None, 12) 0 \n",
  1784. "_________________________________________________________________\n",
  1785. "dense_51 (Dense) (None, 12) 156 \n",
  1786. "_________________________________________________________________\n",
  1787. "dropout_43 (Dropout) (None, 12) 0 \n",
  1788. "_________________________________________________________________\n",
  1789. "dense_52 (Dense) (None, 1) 13 \n",
  1790. "_________________________________________________________________\n",
  1791. "dropout_44 (Dropout) (None, 1) 0 \n",
  1792. "_________________________________________________________________\n",
  1793. "dense_53 (Dense) (None, 4) 8 \n",
  1794. "_________________________________________________________________\n",
  1795. "dropout_45 (Dropout) (None, 4) 0 \n",
  1796. "_________________________________________________________________\n",
  1797. "dense_54 (Dense) (None, 1) 5 \n",
  1798. "_________________________________________________________________\n",
  1799. "dropout_46 (Dropout) (None, 1) 0 \n",
  1800. "_________________________________________________________________\n",
  1801. "dense_55 (Dense) (None, 12) 24 \n",
  1802. "=================================================================\n",
  1803. "Total params: 362\n",
  1804. "Trainable params: 362\n",
  1805. "Non-trainable params: 0\n",
  1806. "_________________________________________________________________\n",
  1807. "None\n",
  1808. "Epoch 1/20\n",
  1809. "40/40 [==============================] - 0s 4ms/step - loss: 1.3728 - val_loss: 2.2095\n",
  1810. "Epoch 2/20\n",
  1811. "40/40 [==============================] - 0s 1ms/step - loss: 1.2507 - val_loss: 2.0598\n",
  1812. "Epoch 3/20\n",
  1813. "40/40 [==============================] - 0s 1ms/step - loss: 1.1434 - val_loss: 1.9599\n",
  1814. "Epoch 4/20\n",
  1815. "40/40 [==============================] - 0s 1ms/step - loss: 1.0993 - val_loss: 1.8894\n",
  1816. "Epoch 5/20\n",
  1817. "40/40 [==============================] - 0s 2ms/step - loss: 1.0486 - val_loss: 1.8368\n",
  1818. "Epoch 6/20\n",
  1819. "40/40 [==============================] - 0s 2ms/step - loss: 1.0115 - val_loss: 1.7958\n",
  1820. "Epoch 7/20\n",
  1821. "40/40 [==============================] - 0s 2ms/step - loss: 0.9806 - val_loss: 1.7621\n",
  1822. "Epoch 8/20\n",
  1823. "40/40 [==============================] - 0s 2ms/step - loss: 0.9481 - val_loss: 1.7337\n",
  1824. "Epoch 9/20\n",
  1825. "40/40 [==============================] - 0s 1ms/step - loss: 0.9264 - val_loss: 1.6992\n",
  1826. "Epoch 10/20\n",
  1827. "40/40 [==============================] - 0s 2ms/step - loss: 0.8929 - val_loss: 1.6732\n",
  1828. "Epoch 11/20\n",
  1829. "40/40 [==============================] - 0s 2ms/step - loss: 0.8834 - val_loss: 1.6493\n",
  1830. "Epoch 12/20\n",
  1831. "40/40 [==============================] - 0s 1ms/step - loss: 0.8608 - val_loss: 1.6288\n",
  1832. "Epoch 13/20\n",
  1833. "40/40 [==============================] - 0s 2ms/step - loss: 0.8382 - val_loss: 1.6080\n",
  1834. "Epoch 14/20\n",
  1835. "40/40 [==============================] - 0s 1ms/step - loss: 0.8256 - val_loss: 1.5866\n",
  1836. "Epoch 15/20\n",
  1837. "40/40 [==============================] - 0s 1ms/step - loss: 0.8124 - val_loss: 1.5684\n",
  1838. "Epoch 16/20\n",
  1839. "40/40 [==============================] - 0s 2ms/step - loss: 0.7965 - val_loss: 1.5524\n",
  1840. "Epoch 17/20\n",
  1841. "40/40 [==============================] - 0s 2ms/step - loss: 0.7840 - val_loss: 1.5353\n",
  1842. "Epoch 18/20\n",
  1843. "40/40 [==============================] - 0s 2ms/step - loss: 0.7678 - val_loss: 1.5211\n",
  1844. "Epoch 19/20\n",
  1845. "40/40 [==============================] - 0s 2ms/step - loss: 0.7594 - val_loss: 1.5052\n",
  1846. "Epoch 20/20\n",
  1847. "40/40 [==============================] - 0s 2ms/step - loss: 0.7455 - val_loss: 1.4914\n"
  1848. ]
  1849. }
  1850. ],
  1851. "source": [
  1852. "# Evaluate the best pipeline\n",
  1853. "best_scores = search.evaluate(best_pipeline).scores"
  1854. ]
  1855. },
  1856. {
  1857. "cell_type": "code",
  1858. "execution_count": 51,
  1859. "metadata": {},
  1860. "outputs": [
  1861. {
  1862. "name": "stdout",
  1863. "output_type": "stream",
  1864. "text": [
  1865. "Search History:\n",
  1866. "----------------------------------------------------\n",
  1867. "Pipeline id: f6665410-4d1d-4695-9f00-5d5f457ef95d\n",
  1868. " metric value normalized randomSeed fold\n",
  1869. "0 F1_MACRO 0.708549 0.708549 0 0\n",
  1870. "----------------------------------------------------\n",
  1871. "Pipeline id: 34ae48fe-fb5c-4dbd-940b-00098300cb9f\n",
  1872. " metric value normalized randomSeed fold\n",
  1873. "0 F1_MACRO 0.616695 0.616695 0 0\n",
  1874. "----------------------------------------------------\n",
  1875. "Pipeline id: fc287cdb-2958-4117-8e20-ba7645caa23c\n",
  1876. " metric value normalized randomSeed fold\n",
  1877. "0 F1_MACRO 0.55474 0.55474 0 0\n",
  1878. "----------------------------------------------------\n",
  1879. "Pipeline id: e510c088-369b-4b04-8b25-a320b4a86530\n",
  1880. " metric value normalized randomSeed fold\n",
  1881. "0 F1_MACRO 0.531302 0.531302 0 0\n",
  1882. "----------------------------------------------------\n",
  1883. "Pipeline id: b42e188a-ea92-4dc0-b7d3-8983b0e659e9\n",
  1884. " metric value normalized randomSeed fold\n",
  1885. "0 F1_MACRO 0.509059 0.509059 0 0\n",
  1886. "----------------------------------------------------\n",
  1887. "Pipeline id: 5e641e81-9e0e-46f3-b487-c37ccd1b9573\n",
  1888. " metric value normalized randomSeed fold\n",
  1889. "0 F1_MACRO 0.483604 0.483604 0 0\n"
  1890. ]
  1891. }
  1892. ],
  1893. "source": [
  1894. "print('Search History:')\n",
  1895. "for pipeline_result in search.history:\n",
  1896. " print('-' * 52)\n",
  1897. " print('Pipeline id:', pipeline_result.pipeline.id)\n",
  1898. " print(pipeline_result.scores)"
  1899. ]
  1900. },
  1901. {
  1902. "cell_type": "code",
  1903. "execution_count": 52,
  1904. "metadata": {},
  1905. "outputs": [
  1906. {
  1907. "name": "stdout",
  1908. "output_type": "stream",
  1909. "text": [
  1910. "Best pipeline:\n",
  1911. "----------------------------------------------------\n",
  1912. "Pipeline id: f6665410-4d1d-4695-9f00-5d5f457ef95d\n",
  1913. "Pipeline json: {\"id\": \"f6665410-4d1d-4695-9f00-5d5f457ef95d\", \"schema\": \"https://metadata.datadrivendiscovery.org/schemas/v0/pipeline.json\", \"created\": \"2021-06-29T04:06:53.685353Z\", \"inputs\": [{\"name\": \"inputs\"}], \"outputs\": [{\"data\": \"steps.7.produce\", \"name\": \"output predictions\"}], \"steps\": [{\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"c78138d9-9377-31dc-aee8-83d9df049c60\", \"version\": \"0.3.0\", \"python_path\": \"d3m.primitives.tods.data_processing.dataset_to_dataframe\", \"name\": \"Extract a DataFrame from a Dataset\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"inputs.0\"}}, \"outputs\": [{\"id\": \"produce\"}]}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"81235c29-aeb9-3828-911a-1b25319b6998\", \"version\": \"0.6.0\", \"python_path\": \"d3m.primitives.tods.data_processing.column_parser\", \"name\": \"Parses strings into their types\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.0.produce\"}}, \"outputs\": [{\"id\": \"produce\"}]}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"a996cd89-ddf0-367f-8e7f-8c013cbc2891\", \"version\": \"0.4.0\", \"python_path\": \"d3m.primitives.tods.data_processing.extract_columns_by_semantic_types\", \"name\": \"Extracts columns by semantic type\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.1.produce\"}}, \"outputs\": [{\"id\": \"produce\"}], \"hyperparams\": {\"semantic_types\": {\"type\": \"VALUE\", \"data\": [\"https://metadata.datadrivendiscovery.org/types/Attribute\"]}}}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"a996cd89-ddf0-367f-8e7f-8c013cbc2891\", \"version\": \"0.4.0\", \"python_path\": \"d3m.primitives.tods.data_processing.extract_columns_by_semantic_types\", \"name\": \"Extracts columns by semantic type\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.0.produce\"}}, \"outputs\": [{\"id\": \"produce\"}], \"hyperparams\": {\"semantic_types\": {\"type\": \"VALUE\", \"data\": [\"https://metadata.datadrivendiscovery.org/types/TrueTarget\"]}}}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"642de2e7-5590-3cab-9266-2a53c326c461\", \"version\": \"0.0.1\", \"python_path\": \"d3m.primitives.tods.timeseries_processing.transformation.axiswise_scaler\", \"name\": \"Axis_wise_scale\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.2.produce\"}}, \"outputs\": [{\"id\": \"produce\"}]}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"30bc7cec-2ccc-34bc-9df8-2095bf3b1ae2\", \"version\": \"0.1.0\", \"python_path\": \"d3m.primitives.tods.feature_analysis.statistical_mean\", \"name\": \"Time Series Decompostional\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.4.produce\"}}, \"outputs\": [{\"id\": \"produce\"}]}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"67e7fcdf-d645-3417-9aa4-85cd369487d9\", \"version\": \"0.0.1\", \"python_path\": \"d3m.primitives.tods.detection_algorithm.pyod_ae\", \"name\": \"TODS.anomaly_detection_primitives.AutoEncoder\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.5.produce\"}}, \"outputs\": [{\"id\": \"produce\"}], \"hyperparams\": {\"contamination\": {\"type\": \"VALUE\", \"data\": 0.01}}}, {\"type\": \"PRIMITIVE\", \"primitive\": {\"id\": \"2530840a-07d4-3874-b7d8-9eb5e4ae2bf3\", \"version\": \"0.3.0\", \"python_path\": \"d3m.primitives.tods.data_processing.construct_predictions\", \"name\": \"Construct pipeline predictions output\"}, \"arguments\": {\"inputs\": {\"type\": \"CONTAINER\", \"data\": \"steps.6.produce\"}, \"reference\": {\"type\": \"CONTAINER\", \"data\": \"steps.1.produce\"}}, \"outputs\": [{\"id\": \"produce\"}]}], \"digest\": \"af9c67055b7d50ecf3dce829af31051781b757f648d138836d827b6dfb699e8e\"}\n",
  1914. "Output:\n",
  1915. " d3mIndex anomaly\n",
  1916. "0 0 0\n",
  1917. "1 1 0\n",
  1918. "2 2 0\n",
  1919. "3 3 0\n",
  1920. "4 4 0\n",
  1921. "... ... ...\n",
  1922. "1395 1395 0\n",
  1923. "1396 1396 0\n",
  1924. "1397 1397 1\n",
  1925. "1398 1398 1\n",
  1926. "1399 1399 0\n",
  1927. "\n",
  1928. "[1400 rows x 2 columns]\n",
  1929. "Scores:\n",
  1930. " metric value normalized randomSeed fold\n",
  1931. "0 F1_MACRO 0.708549 0.708549 0 0\n"
  1932. ]
  1933. }
  1934. ],
  1935. "source": [
  1936. "print('Best pipeline:')\n",
  1937. "print('-' * 52)\n",
  1938. "print('Pipeline id:', best_pipeline.id)\n",
  1939. "print('Pipeline json:', best_pipeline.to_json())\n",
  1940. "print('Output:')\n",
  1941. "print(best_output)\n",
  1942. "print('Scores:')\n",
  1943. "print(best_scores)"
  1944. ]
  1945. },
  1946. {
  1947. "cell_type": "code",
  1948. "execution_count": null,
  1949. "metadata": {},
  1950. "outputs": [],
  1951. "source": []
  1952. }
  1953. ],
  1954. "metadata": {
  1955. "kernelspec": {
  1956. "display_name": "Python 3",
  1957. "language": "python",
  1958. "name": "python3"
  1959. },
  1960. "language_info": {
  1961. "codemirror_mode": {
  1962. "name": "ipython",
  1963. "version": 3
  1964. },
  1965. "file_extension": ".py",
  1966. "mimetype": "text/x-python",
  1967. "name": "python",
  1968. "nbconvert_exporter": "python",
  1969. "pygments_lexer": "ipython3",
  1970. "version": "3.6.10"
  1971. }
  1972. },
  1973. "nbformat": 4,
  1974. "nbformat_minor": 4
  1975. }

全栈的自动化机器学习系统,主要针对多变量时间序列数据的异常检测。TODS提供了详尽的用于构建基于机器学习的异常检测系统的模块,它们包括:数据处理(data processing),时间序列处理( time series processing),特征分析(feature analysis),检测算法(detection algorithms),和强化模块( reinforcement module)。这些模块所提供的功能包括常见的数据预处理、时间序列数据的平滑或变换,从时域或频域中抽取特征、多种多样的检测算