├── AI-INVASION CURRICULUM.pdf ├── AI-INVASION DAY1 INTRO TO ML SLIDES.pptx ├── AN OVERVIEW OF SOME MACHINE LEARNING MODELS.pptx ├── German_Credit_Preped.csv ├── IntroToMatplotlib.ipynb ├── Intro_to_Python_Programming.ipynb ├── LICENSE ├── Numpy_tutorial.ipynb ├── README.md ├── bad_credit_classification.ipynb ├── dsn_supermarket_data.csv ├── intro-to-pandas-1-Data-Structures.ipynb ├── savedModelTF.ipynb ├── supermarket_regression.ipynb └── train.csv /AI-INVASION CURRICULUM.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalycoding/AI-Invasion2019/3f3380e7a692c03b529595cb685db1d8a61c0cf3/AI-INVASION CURRICULUM.pdf -------------------------------------------------------------------------------- /AI-INVASION DAY1 INTRO TO ML SLIDES.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalycoding/AI-Invasion2019/3f3380e7a692c03b529595cb685db1d8a61c0cf3/AI-INVASION DAY1 INTRO TO ML SLIDES.pptx -------------------------------------------------------------------------------- /AN OVERVIEW OF SOME MACHINE LEARNING MODELS.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalycoding/AI-Invasion2019/3f3380e7a692c03b529595cb685db1d8a61c0cf3/AN OVERVIEW OF SOME MACHINE LEARNING MODELS.pptx -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /Numpy_tutorial.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### AI-INVASION KADUNA DAY3\n", 8 | "\n", 9 | "### BASIC INTRODUCTION TO NUMPY BY RISING ODEGUA\n", 10 | "\n", 11 | "Numpy is a python Library for scientific and numeric computation. It provides a high performance multidimensional array object and tools for working with these arrays." 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": {}, 18 | "outputs": [], 19 | "source": [ 20 | "#Import Numpy before use\n", 21 | "import numpy as np" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "#### 1-D ARRAYS\n", 29 | "\n", 30 | "These are also called vectors (row or column vectors)" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 4, 36 | "metadata": {}, 37 | "outputs": [], 38 | "source": [ 39 | "a = [1,2,3,4]" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 5, 45 | "metadata": {}, 46 | "outputs": [ 47 | { 48 | "data": { 49 | "text/plain": [ 50 | "list" 51 | ] 52 | }, 53 | "execution_count": 5, 54 | "metadata": {}, 55 | "output_type": "execute_result" 56 | } 57 | ], 58 | "source": [ 59 | "type(a)" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 6, 65 | "metadata": {}, 66 | "outputs": [ 67 | { 68 | "data": { 69 | "text/plain": [ 70 | "array([1, 2, 3, 4])" 71 | ] 72 | }, 73 | "execution_count": 6, 74 | "metadata": {}, 75 | "output_type": "execute_result" 76 | } 77 | ], 78 | "source": [ 79 | "#create 1 D array in numpy\n", 80 | "array_1d = np.array(a)\n", 81 | "array_1d" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "#### 2-D ARRAYS\n", 89 | "\n", 90 | "This is also called a matrix" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 8, 96 | "metadata": {}, 97 | "outputs": [ 98 | { 99 | "data": { 100 | "text/plain": [ 101 | "array([[1, 2, 3, 4],\n", 102 | " [2, 4, 6, 7]])" 103 | ] 104 | }, 105 | "execution_count": 8, 106 | "metadata": {}, 107 | "output_type": "execute_result" 108 | } 109 | ], 110 | "source": [ 111 | "#create 2 D array in numpy\n", 112 | "array_2d = np.array([(1,2,3,4), (2,4,6,7)])\n", 113 | "array_2d" 114 | ] 115 | }, 116 | { 117 | "cell_type": "markdown", 118 | "metadata": {}, 119 | "source": [ 120 | "#### 3-D ARRAYS" 121 | ] 122 | }, 123 | { 124 | "cell_type": "code", 125 | "execution_count": 9, 126 | "metadata": {}, 127 | "outputs": [ 128 | { 129 | "data": { 130 | "text/plain": [ 131 | "array([[[20, 30, 40],\n", 132 | " [34, 45, 50],\n", 133 | " [60, 90, 43]]])" 134 | ] 135 | }, 136 | "execution_count": 9, 137 | "metadata": {}, 138 | "output_type": "execute_result" 139 | } 140 | ], 141 | "source": [ 142 | "#create 1 D array in numpy\n", 143 | "array_3d = np.array([[(20,30,40), (34,45,50), (60,90,43)]])\n", 144 | "array_3d" 145 | ] 146 | }, 147 | { 148 | "cell_type": "markdown", 149 | "metadata": {}, 150 | "source": [ 151 | "### Initial Placeholders/ Default Arrays" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": 14, 157 | "metadata": {}, 158 | "outputs": [ 159 | { 160 | "data": { 161 | "text/plain": [ 162 | "array([[[0., 0., 0., 0., 0.],\n", 163 | " [0., 0., 0., 0., 0.],\n", 164 | " [0., 0., 0., 0., 0.],\n", 165 | " [0., 0., 0., 0., 0.]],\n", 166 | "\n", 167 | " [[0., 0., 0., 0., 0.],\n", 168 | " [0., 0., 0., 0., 0.],\n", 169 | " [0., 0., 0., 0., 0.],\n", 170 | " [0., 0., 0., 0., 0.]],\n", 171 | "\n", 172 | " [[0., 0., 0., 0., 0.],\n", 173 | " [0., 0., 0., 0., 0.],\n", 174 | " [0., 0., 0., 0., 0.],\n", 175 | " [0., 0., 0., 0., 0.]]])" 176 | ] 177 | }, 178 | "execution_count": 14, 179 | "metadata": {}, 180 | "output_type": "execute_result" 181 | } 182 | ], 183 | "source": [ 184 | "#### Create an array of Zeros\n", 185 | "arr_zeros = np.zeros((3,4,5))\n", 186 | "arr_zeros" 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": 15, 192 | "metadata": {}, 193 | "outputs": [ 194 | { 195 | "data": { 196 | "text/plain": [ 197 | "array([[1., 1., 1., 1.],\n", 198 | " [1., 1., 1., 1.],\n", 199 | " [1., 1., 1., 1.]])" 200 | ] 201 | }, 202 | "execution_count": 15, 203 | "metadata": {}, 204 | "output_type": "execute_result" 205 | } 206 | ], 207 | "source": [ 208 | "#### Create an array of ones\n", 209 | "arr_ones = np.ones((3,4))\n", 210 | "arr_ones" 211 | ] 212 | }, 213 | { 214 | "cell_type": "code", 215 | "execution_count": 17, 216 | "metadata": {}, 217 | "outputs": [ 218 | { 219 | "data": { 220 | "text/plain": [ 221 | "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]" 222 | ] 223 | }, 224 | "execution_count": 17, 225 | "metadata": {}, 226 | "output_type": "execute_result" 227 | } 228 | ], 229 | "source": [ 230 | "list(range(0,20, 2))" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 19, 236 | "metadata": {}, 237 | "outputs": [ 238 | { 239 | "data": { 240 | "text/plain": [ 241 | "array([0, 2, 4, 6, 8])" 242 | ] 243 | }, 244 | "execution_count": 19, 245 | "metadata": {}, 246 | "output_type": "execute_result" 247 | } 248 | ], 249 | "source": [ 250 | "#### Create an array of evenly spaced values\n", 251 | "arr_even = np.arange(0,10, 2)\n", 252 | "arr_even" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": 21, 258 | "metadata": {}, 259 | "outputs": [ 260 | { 261 | "data": { 262 | "text/plain": [ 263 | "array([0. , 0.5, 1. , 1.5, 2. ])" 264 | ] 265 | }, 266 | "execution_count": 21, 267 | "metadata": {}, 268 | "output_type": "execute_result" 269 | } 270 | ], 271 | "source": [ 272 | "#### Create an array of evenly spaced values\n", 273 | "arr_line = np.linspace(0,2,5)\n", 274 | "arr_line" 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": 22, 280 | "metadata": {}, 281 | "outputs": [ 282 | { 283 | "data": { 284 | "text/plain": [ 285 | "array([[3, 3],\n", 286 | " [3, 3]])" 287 | ] 288 | }, 289 | "execution_count": 22, 290 | "metadata": {}, 291 | "output_type": "execute_result" 292 | } 293 | ], 294 | "source": [ 295 | "#### Create a constant array\n", 296 | "arr_full = np.full((2,2), 3)\n", 297 | "arr_full" 298 | ] 299 | }, 300 | { 301 | "cell_type": "code", 302 | "execution_count": 23, 303 | "metadata": {}, 304 | "outputs": [ 305 | { 306 | "data": { 307 | "text/plain": [ 308 | "array([[1., 0., 0., 0.],\n", 309 | " [0., 1., 0., 0.],\n", 310 | " [0., 0., 1., 0.],\n", 311 | " [0., 0., 0., 1.]])" 312 | ] 313 | }, 314 | "execution_count": 23, 315 | "metadata": {}, 316 | "output_type": "execute_result" 317 | } 318 | ], 319 | "source": [ 320 | "#### Create a constant array\n", 321 | "arr_diag = np.eye(4)\n", 322 | "arr_diag" 323 | ] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "execution_count": 25, 328 | "metadata": {}, 329 | "outputs": [ 330 | { 331 | "data": { 332 | "text/plain": [ 333 | "array([[0.68322739, 0.98838831, 0.00147782, 0.43655718],\n", 334 | " [0.537356 , 0.60203643, 0.27670907, 0.23336656],\n", 335 | " [0.51358947, 0.82781521, 0.48594253, 0.49020339],\n", 336 | " [0.37303187, 0.23733898, 0.27436703, 0.52859762]])" 337 | ] 338 | }, 339 | "execution_count": 25, 340 | "metadata": {}, 341 | "output_type": "execute_result" 342 | } 343 | ], 344 | "source": [ 345 | "#### Create an array with random values\n", 346 | "arr_rand = np.random.random((4,4))\n", 347 | "arr_rand" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 27, 353 | "metadata": {}, 354 | "outputs": [ 355 | { 356 | "data": { 357 | "text/plain": [ 358 | "array([[1., 1., 1., 1.],\n", 359 | " [1., 1., 1., 1.],\n", 360 | " [1., 1., 1., 1.]])" 361 | ] 362 | }, 363 | "execution_count": 27, 364 | "metadata": {}, 365 | "output_type": "execute_result" 366 | } 367 | ], 368 | "source": [ 369 | "#### Create an empty array\n", 370 | "arr_empty = np.empty((3,4))\n", 371 | "arr_empty" 372 | ] 373 | }, 374 | { 375 | "cell_type": "markdown", 376 | "metadata": {}, 377 | "source": [ 378 | "### Inspecting your Arrays" 379 | ] 380 | }, 381 | { 382 | "cell_type": "code", 383 | "execution_count": 30, 384 | "metadata": {}, 385 | "outputs": [ 386 | { 387 | "data": { 388 | "text/plain": [ 389 | "array([[2, 4, 5],\n", 390 | " [5, 6, 7],\n", 391 | " [3, 4, 5]])" 392 | ] 393 | }, 394 | "execution_count": 30, 395 | "metadata": {}, 396 | "output_type": "execute_result" 397 | } 398 | ], 399 | "source": [ 400 | "test_array = np.array([(2,4,5), (5,6,7), (3,4,5)])\n", 401 | "test_array" 402 | ] 403 | }, 404 | { 405 | "cell_type": "code", 406 | "execution_count": 31, 407 | "metadata": {}, 408 | "outputs": [ 409 | { 410 | "data": { 411 | "text/plain": [ 412 | "(3, 3)" 413 | ] 414 | }, 415 | "execution_count": 31, 416 | "metadata": {}, 417 | "output_type": "execute_result" 418 | } 419 | ], 420 | "source": [ 421 | "# Check the shape\n", 422 | "test_array.shape" 423 | ] 424 | }, 425 | { 426 | "cell_type": "code", 427 | "execution_count": 32, 428 | "metadata": {}, 429 | "outputs": [ 430 | { 431 | "data": { 432 | "text/plain": [ 433 | "3" 434 | ] 435 | }, 436 | "execution_count": 32, 437 | "metadata": {}, 438 | "output_type": "execute_result" 439 | } 440 | ], 441 | "source": [ 442 | "#check the length\n", 443 | "len(test_array)" 444 | ] 445 | }, 446 | { 447 | "cell_type": "code", 448 | "execution_count": 67, 449 | "metadata": {}, 450 | "outputs": [], 451 | "source": [ 452 | "a = np.array([(2,4,5), (3,4,7)])\n", 453 | "a" 454 | ] 455 | }, 456 | { 457 | "cell_type": "code", 458 | "execution_count": 68, 459 | "metadata": {}, 460 | "outputs": [ 461 | { 462 | "data": { 463 | "text/plain": [ 464 | "2" 465 | ] 466 | }, 467 | "execution_count": 68, 468 | "metadata": {}, 469 | "output_type": "execute_result" 470 | } 471 | ], 472 | "source": [ 473 | "a.ndim" 474 | ] 475 | }, 476 | { 477 | "cell_type": "code", 478 | "execution_count": null, 479 | "metadata": {}, 480 | "outputs": [], 481 | "source": [] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": 64, 486 | "metadata": {}, 487 | "outputs": [ 488 | { 489 | "ename": "NameError", 490 | "evalue": "name 'test_array' is not defined", 491 | "output_type": "error", 492 | "traceback": [ 493 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 494 | "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", 495 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m#Check the dimension of an array\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mtest_array\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mndim\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 496 | "\u001b[1;31mNameError\u001b[0m: name 'test_array' is not defined" 497 | ] 498 | } 499 | ], 500 | "source": [ 501 | "#Check the dimension of an array\n", 502 | "test_array.ndim" 503 | ] 504 | }, 505 | { 506 | "cell_type": "code", 507 | "execution_count": 61, 508 | "metadata": {}, 509 | "outputs": [ 510 | { 511 | "data": { 512 | "text/plain": [ 513 | "2" 514 | ] 515 | }, 516 | "execution_count": 61, 517 | "metadata": {}, 518 | "output_type": "execute_result" 519 | } 520 | ], 521 | "source": [ 522 | "array_2d.ndim" 523 | ] 524 | }, 525 | { 526 | "cell_type": "code", 527 | "execution_count": 34, 528 | "metadata": {}, 529 | "outputs": [ 530 | { 531 | "data": { 532 | "text/plain": [ 533 | "9" 534 | ] 535 | }, 536 | "execution_count": 34, 537 | "metadata": {}, 538 | "output_type": "execute_result" 539 | } 540 | ], 541 | "source": [ 542 | "#Check size\n", 543 | "test_array.size" 544 | ] 545 | }, 546 | { 547 | "cell_type": "code", 548 | "execution_count": 39, 549 | "metadata": {}, 550 | "outputs": [ 551 | { 552 | "data": { 553 | "text/plain": [ 554 | "array([[2., 4., 5.],\n", 555 | " [5., 6., 7.],\n", 556 | " [3., 4., 5.]])" 557 | ] 558 | }, 559 | "execution_count": 39, 560 | "metadata": {}, 561 | "output_type": "execute_result" 562 | } 563 | ], 564 | "source": [ 565 | "test_array = np.array([(2,4,5), (5,6,7), (3,4,5)], dtype=np.float)\n", 566 | "test_array" 567 | ] 568 | }, 569 | { 570 | "cell_type": "code", 571 | "execution_count": 40, 572 | "metadata": {}, 573 | "outputs": [ 574 | { 575 | "data": { 576 | "text/plain": [ 577 | "dtype('float64')" 578 | ] 579 | }, 580 | "execution_count": 40, 581 | "metadata": {}, 582 | "output_type": "execute_result" 583 | } 584 | ], 585 | "source": [ 586 | "#Check data types\n", 587 | "test_array.dtype" 588 | ] 589 | }, 590 | { 591 | "cell_type": "code", 592 | "execution_count": 41, 593 | "metadata": {}, 594 | "outputs": [ 595 | { 596 | "data": { 597 | "text/plain": [ 598 | "array([['2.0', '4.0', '5.0'],\n", 599 | " ['5.0', '6.0', '7.0'],\n", 600 | " ['3.0', '4.0', '5.0']], dtype='\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m#Reshape\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mtemp_arr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreshape\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 1292 | "\u001b[1;31mValueError\u001b[0m: cannot reshape array of size 6 into shape (3,5)" 1293 | ] 1294 | } 1295 | ], 1296 | "source": [ 1297 | "#Reshape\n", 1298 | "temp_arr.reshape(3,5)" 1299 | ] 1300 | }, 1301 | { 1302 | "cell_type": "code", 1303 | "execution_count": 58, 1304 | "metadata": {}, 1305 | "outputs": [ 1306 | { 1307 | "data": { 1308 | "text/plain": [ 1309 | "array([2, 3, 4, 4, 5, 6])" 1310 | ] 1311 | }, 1312 | "execution_count": 58, 1313 | "metadata": {}, 1314 | "output_type": "execute_result" 1315 | } 1316 | ], 1317 | "source": [ 1318 | "#Combining arrays\n", 1319 | "a = np.array([2,3,4])\n", 1320 | "b = np.array([4,5,6])\n", 1321 | "\n", 1322 | "np.concatenate((a,b))" 1323 | ] 1324 | }, 1325 | { 1326 | "cell_type": "code", 1327 | "execution_count": 147, 1328 | "metadata": {}, 1329 | "outputs": [ 1330 | { 1331 | "data": { 1332 | "text/plain": [ 1333 | "array([[2, 3, 4],\n", 1334 | " [4, 5, 6]])" 1335 | ] 1336 | }, 1337 | "execution_count": 147, 1338 | "metadata": {}, 1339 | "output_type": "execute_result" 1340 | } 1341 | ], 1342 | "source": [ 1343 | "#Stack Array Row wise\n", 1344 | "np.vstack((a,b))" 1345 | ] 1346 | }, 1347 | { 1348 | "cell_type": "code", 1349 | "execution_count": 148, 1350 | "metadata": {}, 1351 | "outputs": [ 1352 | { 1353 | "data": { 1354 | "text/plain": [ 1355 | "array([2, 3, 4, 4, 5, 6])" 1356 | ] 1357 | }, 1358 | "execution_count": 148, 1359 | "metadata": {}, 1360 | "output_type": "execute_result" 1361 | } 1362 | ], 1363 | "source": [ 1364 | "#Stack Array column wise\n", 1365 | "np.hstack((a,b))" 1366 | ] 1367 | }, 1368 | { 1369 | "cell_type": "code", 1370 | "execution_count": 60, 1371 | "metadata": {}, 1372 | "outputs": [ 1373 | { 1374 | "data": { 1375 | "text/plain": [ 1376 | "array([2, 3, 4])" 1377 | ] 1378 | }, 1379 | "execution_count": 60, 1380 | "metadata": {}, 1381 | "output_type": "execute_result" 1382 | } 1383 | ], 1384 | "source": [ 1385 | "a" 1386 | ] 1387 | }, 1388 | { 1389 | "cell_type": "code", 1390 | "execution_count": 151, 1391 | "metadata": {}, 1392 | "outputs": [ 1393 | { 1394 | "data": { 1395 | "text/plain": [ 1396 | "array([[2, 4],\n", 1397 | " [3, 5],\n", 1398 | " [4, 6]])" 1399 | ] 1400 | }, 1401 | "execution_count": 151, 1402 | "metadata": {}, 1403 | "output_type": "execute_result" 1404 | } 1405 | ], 1406 | "source": [ 1407 | "#Stack columns\n", 1408 | "np.column_stack((a,b))" 1409 | ] 1410 | }, 1411 | { 1412 | "cell_type": "code", 1413 | "execution_count": null, 1414 | "metadata": {}, 1415 | "outputs": [], 1416 | "source": [ 1417 | "arr" 1418 | ] 1419 | } 1420 | ], 1421 | "metadata": { 1422 | "kernelspec": { 1423 | "display_name": "Python 3", 1424 | "language": "python", 1425 | "name": "python3" 1426 | }, 1427 | "language_info": { 1428 | "codemirror_mode": { 1429 | "name": "ipython", 1430 | "version": 3 1431 | }, 1432 | "file_extension": ".py", 1433 | "mimetype": "text/x-python", 1434 | "name": "python", 1435 | "nbconvert_exporter": "python", 1436 | "pygments_lexer": "ipython3", 1437 | "version": "3.7.1" 1438 | } 1439 | }, 1440 | "nbformat": 4, 1441 | "nbformat_minor": 2 1442 | } 1443 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AI-Invasion2019 2 | This is a repository of all files, datasets and notebooks I will be using over the next two weeks for the Data Science Nigeria AI-INVASION in Kaduna and Minna. 3 | 4 | ### Day 1 5 | * Introduction to Machine learning 6 | * Introduction to Jupyter Notebooks and Lab 7 | 8 | ### Day 2 9 | * Introduction to Python programming for Data Science 10 | 11 | ### Day 3 12 | Basic Intro to Numpy, Pandas and Matplotlib 13 | 14 | ### Day 4 15 | Regression machine learning project using Supermarket Data Set. 16 | 17 | ### Day 5 18 | Classification Machine learning project using Bank credit Data Set. 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /bad_credit_classification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## AI-INVASION DAY 5\n", 8 | "#### AN INTRODUCTION TO SUPERVISED CLASSIFICATION PROBLEM\n", 9 | " " 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": {}, 16 | "outputs": [], 17 | "source": [ 18 | "import pandas as pd\n", 19 | "import matplotlib.pyplot as plt\n", 20 | "import seaborn as sns\n", 21 | "import numpy as np\n", 22 | "\n", 23 | "%matplotlib inline" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "## Load and prepare the data set\n", 31 | "\n", 32 | "As a first step, load the dataset. The code in the cell below loads the dataset and assigns human-readable names to the columns. Execute this code and examine the result. \n", 33 | "\n", 34 | "You should by now be very familiar with the next few sections as we have covered them in detail in previous labs." 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 4, 40 | "metadata": {}, 41 | "outputs": [ 42 | { 43 | "data": { 44 | "text/html": [ 45 | "
\n", 46 | "\n", 59 | "\n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | "
0123
customer_id1122334615636120513598740590
checking_account_status< 0 DM0 - 200 DMnone< 0 DM
loan_duration_mo6481242
credit_historycritical account - other non-bank loanscurrent loans paidcritical account - other non-bank loanscurrent loans paid
purposeradio/televisionradio/televisioneducationfurniture/equipment
loan_amount1169595120967882
savings_account_balanceunknown/none< 100 DM< 100 DM< 100 DM
time_employed_yrs>= 7 years1 - 4 years4 - 7 years4 - 7 years
payment_pcnt_income4222
gender_statusmale-singlefemale-divorced/separated/marriedmale-singlemale-single
other_signatorsnonenonenoneguarantor
time_in_residence4234
propertyreal estatereal estatereal estatebuilding society savings/life insurance
age_yrs67224945
other_credit_outstandingnonenonenonenone
home_ownershipownownownfor free
number_loans2111
job_categoryskilledskilledunskilled-residentskilled
dependents1122
telephoneyesnonenonenone
foreign_workeryesyesyesyes
bad_credit0100
\n", 226 | "
" 227 | ], 228 | "text/plain": [ 229 | " 0 \\\n", 230 | "customer_id 1122334 \n", 231 | "checking_account_status < 0 DM \n", 232 | "loan_duration_mo 6 \n", 233 | "credit_history critical account - other non-bank loans \n", 234 | "purpose radio/television \n", 235 | "loan_amount 1169 \n", 236 | "savings_account_balance unknown/none \n", 237 | "time_employed_yrs >= 7 years \n", 238 | "payment_pcnt_income 4 \n", 239 | "gender_status male-single \n", 240 | "other_signators none \n", 241 | "time_in_residence 4 \n", 242 | "property real estate \n", 243 | "age_yrs 67 \n", 244 | "other_credit_outstanding none \n", 245 | "home_ownership own \n", 246 | "number_loans 2 \n", 247 | "job_category skilled \n", 248 | "dependents 1 \n", 249 | "telephone yes \n", 250 | "foreign_worker yes \n", 251 | "bad_credit 0 \n", 252 | "\n", 253 | " 1 \\\n", 254 | "customer_id 6156361 \n", 255 | "checking_account_status 0 - 200 DM \n", 256 | "loan_duration_mo 48 \n", 257 | "credit_history current loans paid \n", 258 | "purpose radio/television \n", 259 | "loan_amount 5951 \n", 260 | "savings_account_balance < 100 DM \n", 261 | "time_employed_yrs 1 - 4 years \n", 262 | "payment_pcnt_income 2 \n", 263 | "gender_status female-divorced/separated/married \n", 264 | "other_signators none \n", 265 | "time_in_residence 2 \n", 266 | "property real estate \n", 267 | "age_yrs 22 \n", 268 | "other_credit_outstanding none \n", 269 | "home_ownership own \n", 270 | "number_loans 1 \n", 271 | "job_category skilled \n", 272 | "dependents 1 \n", 273 | "telephone none \n", 274 | "foreign_worker yes \n", 275 | "bad_credit 1 \n", 276 | "\n", 277 | " 2 \\\n", 278 | "customer_id 2051359 \n", 279 | "checking_account_status none \n", 280 | "loan_duration_mo 12 \n", 281 | "credit_history critical account - other non-bank loans \n", 282 | "purpose education \n", 283 | "loan_amount 2096 \n", 284 | "savings_account_balance < 100 DM \n", 285 | "time_employed_yrs 4 - 7 years \n", 286 | "payment_pcnt_income 2 \n", 287 | "gender_status male-single \n", 288 | "other_signators none \n", 289 | "time_in_residence 3 \n", 290 | "property real estate \n", 291 | "age_yrs 49 \n", 292 | "other_credit_outstanding none \n", 293 | "home_ownership own \n", 294 | "number_loans 1 \n", 295 | "job_category unskilled-resident \n", 296 | "dependents 2 \n", 297 | "telephone none \n", 298 | "foreign_worker yes \n", 299 | "bad_credit 0 \n", 300 | "\n", 301 | " 3 \n", 302 | "customer_id 8740590 \n", 303 | "checking_account_status < 0 DM \n", 304 | "loan_duration_mo 42 \n", 305 | "credit_history current loans paid \n", 306 | "purpose furniture/equipment \n", 307 | "loan_amount 7882 \n", 308 | "savings_account_balance < 100 DM \n", 309 | "time_employed_yrs 4 - 7 years \n", 310 | "payment_pcnt_income 2 \n", 311 | "gender_status male-single \n", 312 | "other_signators guarantor \n", 313 | "time_in_residence 4 \n", 314 | "property building society savings/life insurance \n", 315 | "age_yrs 45 \n", 316 | "other_credit_outstanding none \n", 317 | "home_ownership for free \n", 318 | "number_loans 1 \n", 319 | "job_category skilled \n", 320 | "dependents 2 \n", 321 | "telephone none \n", 322 | "foreign_worker yes \n", 323 | "bad_credit 0 " 324 | ] 325 | }, 326 | "execution_count": 4, 327 | "metadata": {}, 328 | "output_type": "execute_result" 329 | } 330 | ], 331 | "source": [ 332 | "credit = pd.read_csv('German_Credit_Preped.csv')\n", 333 | "credit.head(4).transpose()" 334 | ] 335 | }, 336 | { 337 | "cell_type": "markdown", 338 | "metadata": {}, 339 | "source": [ 340 | "There are 22 columns, 1 customer identifier column, 20 features, plus a label column. These features represent information a bank might have on its customers. " 341 | ] 342 | }, 343 | { 344 | "cell_type": "markdown", 345 | "metadata": {}, 346 | "source": [ 347 | "There is one other aspect of this data set which you should be aware of. The label has significant **class imbalance**. Class imbalance means that there are unequal numbers of cases for the categories of the label. \n", 348 | "\n", 349 | "To examine the class imbalance in these data, execute the code in the cell below. " 350 | ] 351 | }, 352 | { 353 | "cell_type": "code", 354 | "execution_count": 5, 355 | "metadata": {}, 356 | "outputs": [ 357 | { 358 | "name": "stdout", 359 | "output_type": "stream", 360 | "text": [ 361 | "0 700\n", 362 | "1 300\n", 363 | "Name: bad_credit, dtype: int64\n" 364 | ] 365 | } 366 | ], 367 | "source": [ 368 | "credit_counts = credit['bad_credit'].value_counts()\n", 369 | "print(credit_counts)" 370 | ] 371 | }, 372 | { 373 | "cell_type": "markdown", 374 | "metadata": {}, 375 | "source": [ 376 | "Notice that only 30% of the cases have bad credit. This is not surprising, since a bank would typically retain customers with good credit. However, this imbalance will bias the training of any model. " 377 | ] 378 | }, 379 | { 380 | "cell_type": "markdown", 381 | "metadata": {}, 382 | "source": [ 383 | "## Prepare data" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": 6, 389 | "metadata": {}, 390 | "outputs": [ 391 | { 392 | "data": { 393 | "text/html": [ 394 | "
\n", 395 | "\n", 408 | "\n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | "
customer_idchecking_account_statusloan_duration_mocredit_historypurposeloan_amountsavings_account_balancetime_employed_yrspayment_pcnt_incomegender_status...propertyage_yrsother_credit_outstandinghome_ownershipnumber_loansjob_categorydependentstelephoneforeign_workerbad_credit
01122334< 0 DM6critical account - other non-bank loansradio/television1169unknown/none>= 7 years4male-single...real estate67noneown2skilled1yesyes0
\n", 462 | "

1 rows × 22 columns

\n", 463 | "
" 464 | ], 465 | "text/plain": [ 466 | " customer_id checking_account_status loan_duration_mo \\\n", 467 | "0 1122334 < 0 DM 6 \n", 468 | "\n", 469 | " credit_history purpose loan_amount \\\n", 470 | "0 critical account - other non-bank loans radio/television 1169 \n", 471 | "\n", 472 | " savings_account_balance time_employed_yrs payment_pcnt_income \\\n", 473 | "0 unknown/none >= 7 years 4 \n", 474 | "\n", 475 | " gender_status ... property age_yrs other_credit_outstanding \\\n", 476 | "0 male-single ... real estate 67 none \n", 477 | "\n", 478 | " home_ownership number_loans job_category dependents telephone \\\n", 479 | "0 own 2 skilled 1 yes \n", 480 | "\n", 481 | " foreign_worker bad_credit \n", 482 | "0 yes 0 \n", 483 | "\n", 484 | "[1 rows x 22 columns]" 485 | ] 486 | }, 487 | "execution_count": 6, 488 | "metadata": {}, 489 | "output_type": "execute_result" 490 | } 491 | ], 492 | "source": [ 493 | "credit.head(1)" 494 | ] 495 | }, 496 | { 497 | "cell_type": "code", 498 | "execution_count": 7, 499 | "metadata": {}, 500 | "outputs": [], 501 | "source": [ 502 | "#separate labels from data\n", 503 | "y_target = credit['bad_credit']\n", 504 | "credit_new = credit.drop(['bad_credit', \"customer_id\"], axis=1)" 505 | ] 506 | }, 507 | { 508 | "cell_type": "code", 509 | "execution_count": 8, 510 | "metadata": {}, 511 | "outputs": [ 512 | { 513 | "data": { 514 | "text/plain": [ 515 | "(1000, 20)" 516 | ] 517 | }, 518 | "execution_count": 8, 519 | "metadata": {}, 520 | "output_type": "execute_result" 521 | } 522 | ], 523 | "source": [ 524 | "credit_new.shape" 525 | ] 526 | }, 527 | { 528 | "cell_type": "markdown", 529 | "metadata": {}, 530 | "source": [ 531 | "### ENCODE CATEGORICAL FEATURES\n" 532 | ] 533 | }, 534 | { 535 | "cell_type": "code", 536 | "execution_count": 21, 537 | "metadata": {}, 538 | "outputs": [ 539 | { 540 | "data": { 541 | "text/html": [ 542 | "
\n", 543 | "\n", 556 | "\n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | "
checking_account_statusloan_duration_mocredit_historypurposeloan_amountsavings_account_balancetime_employed_yrspayment_pcnt_incomegender_statusother_signatorstime_in_residencepropertyage_yrsother_credit_outstandinghome_ownershipnumber_loansjob_categorydependentstelephoneforeign_worker
0< 0 DM6critical account - other non-bank loansradio/television1169unknown/none>= 7 years4male-singlenone4real estate67noneown2skilled1yesyes
10 - 200 DM48current loans paidradio/television5951< 100 DM1 - 4 years2female-divorced/separated/marriednone2real estate22noneown1skilled1noneyes
\n", 631 | "
" 632 | ], 633 | "text/plain": [ 634 | " checking_account_status loan_duration_mo \\\n", 635 | "0 < 0 DM 6 \n", 636 | "1 0 - 200 DM 48 \n", 637 | "\n", 638 | " credit_history purpose loan_amount \\\n", 639 | "0 critical account - other non-bank loans radio/television 1169 \n", 640 | "1 current loans paid radio/television 5951 \n", 641 | "\n", 642 | " savings_account_balance time_employed_yrs payment_pcnt_income \\\n", 643 | "0 unknown/none >= 7 years 4 \n", 644 | "1 < 100 DM 1 - 4 years 2 \n", 645 | "\n", 646 | " gender_status other_signators time_in_residence \\\n", 647 | "0 male-single none 4 \n", 648 | "1 female-divorced/separated/married none 2 \n", 649 | "\n", 650 | " property age_yrs other_credit_outstanding home_ownership number_loans \\\n", 651 | "0 real estate 67 none own 2 \n", 652 | "1 real estate 22 none own 1 \n", 653 | "\n", 654 | " job_category dependents telephone foreign_worker \n", 655 | "0 skilled 1 yes yes \n", 656 | "1 skilled 1 none yes " 657 | ] 658 | }, 659 | "execution_count": 21, 660 | "metadata": {}, 661 | "output_type": "execute_result" 662 | } 663 | ], 664 | "source": [ 665 | "credit_new.head(2)" 666 | ] 667 | }, 668 | { 669 | "cell_type": "code", 670 | "execution_count": 22, 671 | "metadata": {}, 672 | "outputs": [ 673 | { 674 | "data": { 675 | "text/plain": [ 676 | "checking_account_status object\n", 677 | "loan_duration_mo int64\n", 678 | "credit_history object\n", 679 | "purpose object\n", 680 | "loan_amount int64\n", 681 | "savings_account_balance object\n", 682 | "time_employed_yrs object\n", 683 | "payment_pcnt_income int64\n", 684 | "gender_status object\n", 685 | "other_signators object\n", 686 | "time_in_residence int64\n", 687 | "property object\n", 688 | "age_yrs int64\n", 689 | "other_credit_outstanding object\n", 690 | "home_ownership object\n", 691 | "number_loans int64\n", 692 | "job_category object\n", 693 | "dependents int64\n", 694 | "telephone object\n", 695 | "foreign_worker object\n", 696 | "dtype: object" 697 | ] 698 | }, 699 | "execution_count": 22, 700 | "metadata": {}, 701 | "output_type": "execute_result" 702 | } 703 | ], 704 | "source": [ 705 | "credit_new.dtypes" 706 | ] 707 | }, 708 | { 709 | "cell_type": "code", 710 | "execution_count": 23, 711 | "metadata": {}, 712 | "outputs": [], 713 | "source": [ 714 | "cat_col = []\n", 715 | "\n", 716 | "cat_index = list(credit_new.dtypes.index)\n", 717 | "\n", 718 | "for i, cat in enumerate(credit_new.dtypes):\n", 719 | " if cat == 'object':\n", 720 | " cat_col.append(cat_index[i])\n" 721 | ] 722 | }, 723 | { 724 | "cell_type": "code", 725 | "execution_count": 26, 726 | "metadata": { 727 | "scrolled": false 728 | }, 729 | "outputs": [ 730 | { 731 | "name": "stdout", 732 | "output_type": "stream", 733 | "text": [ 734 | "Unique values for checking_account_status\n", 735 | "none 394\n", 736 | "< 0 DM 274\n", 737 | "0 - 200 DM 269\n", 738 | "> 200 DM or salary assignment 63\n", 739 | "Name: checking_account_status, dtype: int64\n", 740 | "--------------------------\n", 741 | "\n", 742 | "\n", 743 | "Unique values for credit_history\n", 744 | "current loans paid 530\n", 745 | "critical account - other non-bank loans 293\n", 746 | "past payment delays 88\n", 747 | "all loans at bank paid 49\n", 748 | "no credit - paid 40\n", 749 | "Name: credit_history, dtype: int64\n", 750 | "--------------------------\n", 751 | "\n", 752 | "\n", 753 | "Unique values for purpose\n", 754 | "radio/television 280\n", 755 | "car (new) 234\n", 756 | "furniture/equipment 181\n", 757 | "car (used) 103\n", 758 | "business 97\n", 759 | "education 50\n", 760 | "repairs 22\n", 761 | "other 12\n", 762 | "domestic appliances 12\n", 763 | "retraining 9\n", 764 | "Name: purpose, dtype: int64\n", 765 | "--------------------------\n", 766 | "\n", 767 | "\n", 768 | "Unique values for savings_account_balance\n", 769 | "< 100 DM 603\n", 770 | "unknown/none 183\n", 771 | "100 - 500 DM 103\n", 772 | "500 - 1000 DM 63\n", 773 | ">= 1000 DM 48\n", 774 | "Name: savings_account_balance, dtype: int64\n", 775 | "--------------------------\n", 776 | "\n", 777 | "\n", 778 | "Unique values for time_employed_yrs\n", 779 | "1 - 4 years 339\n", 780 | ">= 7 years 253\n", 781 | "4 - 7 years 174\n", 782 | "< 1 year 172\n", 783 | "unemployed 62\n", 784 | "Name: time_employed_yrs, dtype: int64\n", 785 | "--------------------------\n", 786 | "\n", 787 | "\n", 788 | "Unique values for gender_status\n", 789 | "male-single 548\n", 790 | "female-divorced/separated/married 310\n", 791 | "male-married/widowed 92\n", 792 | "male-divorced/separated 50\n", 793 | "Name: gender_status, dtype: int64\n", 794 | "--------------------------\n", 795 | "\n", 796 | "\n", 797 | "Unique values for other_signators\n", 798 | "none 907\n", 799 | "guarantor 52\n", 800 | "co-applicant 41\n", 801 | "Name: other_signators, dtype: int64\n", 802 | "--------------------------\n", 803 | "\n", 804 | "\n", 805 | "Unique values for property\n", 806 | "car or other 332\n", 807 | "real estate 282\n", 808 | "building society savings/life insurance 232\n", 809 | "unknown-none 154\n", 810 | "Name: property, dtype: int64\n", 811 | "--------------------------\n", 812 | "\n", 813 | "\n", 814 | "Unique values for other_credit_outstanding\n", 815 | "none 814\n", 816 | "bank 139\n", 817 | "stores 47\n", 818 | "Name: other_credit_outstanding, dtype: int64\n", 819 | "--------------------------\n", 820 | "\n", 821 | "\n", 822 | "Unique values for home_ownership\n", 823 | "own 713\n", 824 | "rent 179\n", 825 | "for free 108\n", 826 | "Name: home_ownership, dtype: int64\n", 827 | "--------------------------\n", 828 | "\n", 829 | "\n", 830 | "Unique values for job_category\n", 831 | "skilled 630\n", 832 | "unskilled-resident 200\n", 833 | "highly skilled 148\n", 834 | "unemployed-unskilled-non-resident 22\n", 835 | "Name: job_category, dtype: int64\n", 836 | "--------------------------\n", 837 | "\n", 838 | "\n", 839 | "Unique values for telephone\n", 840 | "none 596\n", 841 | "yes 404\n", 842 | "Name: telephone, dtype: int64\n", 843 | "--------------------------\n", 844 | "\n", 845 | "\n", 846 | "Unique values for foreign_worker\n", 847 | "yes 963\n", 848 | "no 37\n", 849 | "Name: foreign_worker, dtype: int64\n", 850 | "--------------------------\n", 851 | "\n", 852 | "\n" 853 | ] 854 | } 855 | ], 856 | "source": [ 857 | "# Print the value count \n", 858 | "\n", 859 | "for cat in cat_col:\n", 860 | " print(\"Unique values for\", cat)\n", 861 | " count = credit[cat].value_counts()\n", 862 | " print(count)\n", 863 | " print(\"--------------------------\")\n", 864 | " print(\"\\n\")" 865 | ] 866 | }, 867 | { 868 | "cell_type": "code", 869 | "execution_count": 27, 870 | "metadata": {}, 871 | "outputs": [ 872 | { 873 | "data": { 874 | "text/html": [ 875 | "
\n", 876 | "\n", 889 | "\n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | "
loan_duration_moloan_amountpayment_pcnt_incometime_in_residenceage_yrsnumber_loansdependents
count1000.0000001000.0000001000.0000001000.0000001000.0000001000.0000001000.000000
mean20.9030003271.2580002.9730002.84500035.5460001.4070001.155000
std12.0588142822.7368761.1187151.10371811.3754690.5776540.362086
min4.000000250.0000001.0000001.00000019.0000001.0000001.000000
25%12.0000001365.5000002.0000002.00000027.0000001.0000001.000000
50%18.0000002319.5000003.0000003.00000033.0000001.0000001.000000
75%24.0000003972.2500004.0000004.00000042.0000002.0000001.000000
max72.00000018424.0000004.0000004.00000075.0000004.0000002.000000
\n", 985 | "
" 986 | ], 987 | "text/plain": [ 988 | " loan_duration_mo loan_amount payment_pcnt_income time_in_residence \\\n", 989 | "count 1000.000000 1000.000000 1000.000000 1000.000000 \n", 990 | "mean 20.903000 3271.258000 2.973000 2.845000 \n", 991 | "std 12.058814 2822.736876 1.118715 1.103718 \n", 992 | "min 4.000000 250.000000 1.000000 1.000000 \n", 993 | "25% 12.000000 1365.500000 2.000000 2.000000 \n", 994 | "50% 18.000000 2319.500000 3.000000 3.000000 \n", 995 | "75% 24.000000 3972.250000 4.000000 4.000000 \n", 996 | "max 72.000000 18424.000000 4.000000 4.000000 \n", 997 | "\n", 998 | " age_yrs number_loans dependents \n", 999 | "count 1000.000000 1000.000000 1000.000000 \n", 1000 | "mean 35.546000 1.407000 1.155000 \n", 1001 | "std 11.375469 0.577654 0.362086 \n", 1002 | "min 19.000000 1.000000 1.000000 \n", 1003 | "25% 27.000000 1.000000 1.000000 \n", 1004 | "50% 33.000000 1.000000 1.000000 \n", 1005 | "75% 42.000000 2.000000 1.000000 \n", 1006 | "max 75.000000 4.000000 2.000000 " 1007 | ] 1008 | }, 1009 | "execution_count": 27, 1010 | "metadata": {}, 1011 | "output_type": "execute_result" 1012 | } 1013 | ], 1014 | "source": [ 1015 | "credit_new.describe()" 1016 | ] 1017 | }, 1018 | { 1019 | "cell_type": "code", 1020 | "execution_count": 32, 1021 | "metadata": {}, 1022 | "outputs": [ 1023 | { 1024 | "data": { 1025 | "text/plain": [ 1026 | "" 1027 | ] 1028 | }, 1029 | "execution_count": 32, 1030 | "metadata": {}, 1031 | "output_type": "execute_result" 1032 | }, 1033 | { 1034 | "data": { 1035 | "image/png": "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\n", 1036 | "text/plain": [ 1037 | "
" 1038 | ] 1039 | }, 1040 | "metadata": { 1041 | "needs_background": "light" 1042 | }, 1043 | "output_type": "display_data" 1044 | } 1045 | ], 1046 | "source": [ 1047 | "credit_new['payment_pcnt_income'].plot.hist(bins=4)" 1048 | ] 1049 | }, 1050 | { 1051 | "cell_type": "markdown", 1052 | "metadata": {}, 1053 | "source": [ 1054 | "#### CONVERT CATEGORICAL FEATURES TO NUMERICAL FEATURES" 1055 | ] 1056 | }, 1057 | { 1058 | "cell_type": "code", 1059 | "execution_count": 33, 1060 | "metadata": {}, 1061 | "outputs": [ 1062 | { 1063 | "name": "stdout", 1064 | "output_type": "stream", 1065 | "text": [ 1066 | "Shape of data before encoding is (1000, 20)\n" 1067 | ] 1068 | } 1069 | ], 1070 | "source": [ 1071 | "print(\"Shape of data before encoding is\", credit_new.shape)" 1072 | ] 1073 | }, 1074 | { 1075 | "cell_type": "code", 1076 | "execution_count": 34, 1077 | "metadata": {}, 1078 | "outputs": [ 1079 | { 1080 | "name": "stdout", 1081 | "output_type": "stream", 1082 | "text": [ 1083 | "New shape of data after encoding is (1000, 61)\n" 1084 | ] 1085 | } 1086 | ], 1087 | "source": [ 1088 | "credit_new = pd.get_dummies(credit_new)\n", 1089 | "print(\"New shape of data after encoding is\", credit_new.shape)" 1090 | ] 1091 | }, 1092 | { 1093 | "cell_type": "code", 1094 | "execution_count": 35, 1095 | "metadata": {}, 1096 | "outputs": [ 1097 | { 1098 | "data": { 1099 | "text/html": [ 1100 | "
\n", 1101 | "\n", 1114 | "\n", 1115 | " \n", 1116 | " \n", 1117 | " \n", 1118 | " \n", 1119 | " \n", 1120 | " \n", 1121 | " \n", 1122 | " \n", 1123 | " \n", 1124 | " \n", 1125 | " \n", 1126 | " \n", 1127 | " \n", 1128 | " \n", 1129 | " \n", 1130 | " \n", 1131 | " \n", 1132 | " \n", 1133 | " \n", 1134 | " \n", 1135 | " \n", 1136 | " \n", 1137 | " \n", 1138 | " \n", 1139 | " \n", 1140 | " \n", 1141 | " \n", 1142 | " \n", 1143 | " \n", 1144 | " \n", 1145 | " \n", 1146 | " \n", 1147 | " \n", 1148 | " \n", 1149 | " \n", 1150 | " \n", 1151 | " \n", 1152 | " \n", 1153 | " \n", 1154 | " \n", 1155 | " \n", 1156 | " \n", 1157 | " \n", 1158 | " \n", 1159 | " \n", 1160 | " \n", 1161 | " \n", 1162 | " \n", 1163 | " \n", 1164 | " \n", 1165 | " \n", 1166 | " \n", 1167 | " \n", 1168 | " \n", 1169 | " \n", 1170 | " \n", 1171 | " \n", 1172 | " \n", 1173 | " \n", 1174 | " \n", 1175 | " \n", 1176 | " \n", 1177 | " \n", 1178 | " \n", 1179 | " \n", 1180 | " \n", 1181 | " \n", 1182 | " \n", 1183 | " \n", 1184 | " \n", 1185 | " \n", 1186 | " \n", 1187 | " \n", 1188 | " \n", 1189 | " \n", 1190 | " \n", 1191 | " \n", 1192 | " \n", 1193 | " \n", 1194 | " \n", 1195 | " \n", 1196 | " \n", 1197 | " \n", 1198 | " \n", 1199 | " \n", 1200 | " \n", 1201 | " \n", 1202 | " \n", 1203 | " \n", 1204 | " \n", 1205 | " \n", 1206 | " \n", 1207 | " \n", 1208 | " \n", 1209 | " \n", 1210 | " \n", 1211 | " \n", 1212 | " \n", 1213 | " \n", 1214 | " \n", 1215 | " \n", 1216 | " \n", 1217 | " \n", 1218 | " \n", 1219 | " \n", 1220 | " \n", 1221 | " \n", 1222 | " \n", 1223 | " \n", 1224 | " \n", 1225 | " \n", 1226 | " \n", 1227 | " \n", 1228 | " \n", 1229 | " \n", 1230 | " \n", 1231 | " \n", 1232 | " \n", 1233 | " \n", 1234 | " \n", 1235 | " \n", 1236 | " \n", 1237 | " \n", 1238 | " \n", 1239 | " \n", 1240 | " \n", 1241 | " \n", 1242 | " \n", 1243 | " \n", 1244 | " \n", 1245 | " \n", 1246 | " \n", 1247 | " \n", 1248 | " \n", 1249 | " \n", 1250 | " \n", 1251 | " \n", 1252 | " \n", 1253 | " \n", 1254 | " \n", 1255 | " \n", 1256 | " \n", 1257 | " \n", 1258 | " \n", 1259 | " \n", 1260 | " \n", 1261 | " \n", 1262 | " \n", 1263 | "
loan_duration_moloan_amountpayment_pcnt_incometime_in_residenceage_yrsnumber_loansdependentschecking_account_status_0 - 200 DMchecking_account_status_< 0 DMchecking_account_status_> 200 DM or salary assignment...home_ownership_ownhome_ownership_rentjob_category_highly skilledjob_category_skilledjob_category_unemployed-unskilled-non-residentjob_category_unskilled-residenttelephone_nonetelephone_yesforeign_worker_noforeign_worker_yes
061169446721010...1001000101
1485951222211100...1001001001
2122096234912000...1000011001
3427882244512010...0001001001
4244870345322010...0001001001
\n", 1264 | "

5 rows × 61 columns

\n", 1265 | "
" 1266 | ], 1267 | "text/plain": [ 1268 | " loan_duration_mo loan_amount payment_pcnt_income time_in_residence \\\n", 1269 | "0 6 1169 4 4 \n", 1270 | "1 48 5951 2 2 \n", 1271 | "2 12 2096 2 3 \n", 1272 | "3 42 7882 2 4 \n", 1273 | "4 24 4870 3 4 \n", 1274 | "\n", 1275 | " age_yrs number_loans dependents checking_account_status_0 - 200 DM \\\n", 1276 | "0 67 2 1 0 \n", 1277 | "1 22 1 1 1 \n", 1278 | "2 49 1 2 0 \n", 1279 | "3 45 1 2 0 \n", 1280 | "4 53 2 2 0 \n", 1281 | "\n", 1282 | " checking_account_status_< 0 DM \\\n", 1283 | "0 1 \n", 1284 | "1 0 \n", 1285 | "2 0 \n", 1286 | "3 1 \n", 1287 | "4 1 \n", 1288 | "\n", 1289 | " checking_account_status_> 200 DM or salary assignment ... \\\n", 1290 | "0 0 ... \n", 1291 | "1 0 ... \n", 1292 | "2 0 ... \n", 1293 | "3 0 ... \n", 1294 | "4 0 ... \n", 1295 | "\n", 1296 | " home_ownership_own home_ownership_rent job_category_highly skilled \\\n", 1297 | "0 1 0 0 \n", 1298 | "1 1 0 0 \n", 1299 | "2 1 0 0 \n", 1300 | "3 0 0 0 \n", 1301 | "4 0 0 0 \n", 1302 | "\n", 1303 | " job_category_skilled job_category_unemployed-unskilled-non-resident \\\n", 1304 | "0 1 0 \n", 1305 | "1 1 0 \n", 1306 | "2 0 0 \n", 1307 | "3 1 0 \n", 1308 | "4 1 0 \n", 1309 | "\n", 1310 | " job_category_unskilled-resident telephone_none telephone_yes \\\n", 1311 | "0 0 0 1 \n", 1312 | "1 0 1 0 \n", 1313 | "2 1 1 0 \n", 1314 | "3 0 1 0 \n", 1315 | "4 0 1 0 \n", 1316 | "\n", 1317 | " foreign_worker_no foreign_worker_yes \n", 1318 | "0 0 1 \n", 1319 | "1 0 1 \n", 1320 | "2 0 1 \n", 1321 | "3 0 1 \n", 1322 | "4 0 1 \n", 1323 | "\n", 1324 | "[5 rows x 61 columns]" 1325 | ] 1326 | }, 1327 | "execution_count": 35, 1328 | "metadata": {}, 1329 | "output_type": "execute_result" 1330 | } 1331 | ], 1332 | "source": [ 1333 | "credit_new.head()" 1334 | ] 1335 | }, 1336 | { 1337 | "cell_type": "markdown", 1338 | "metadata": {}, 1339 | "source": [ 1340 | "### NORMALIZED OUR DATA" 1341 | ] 1342 | }, 1343 | { 1344 | "cell_type": "code", 1345 | "execution_count": 38, 1346 | "metadata": {}, 1347 | "outputs": [], 1348 | "source": [ 1349 | "from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler" 1350 | ] 1351 | }, 1352 | { 1353 | "cell_type": "code", 1354 | "execution_count": 47, 1355 | "metadata": {}, 1356 | "outputs": [ 1357 | { 1358 | "name": "stderr", 1359 | "output_type": "stream", 1360 | "text": [ 1361 | "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\preprocessing\\data.py:625: DataConversionWarning: Data with input dtype uint8, int64 were all converted to float64 by StandardScaler.\n", 1362 | " return self.partial_fit(X, y)\n", 1363 | "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:3: DataConversionWarning: Data with input dtype uint8, int64 were all converted to float64 by StandardScaler.\n", 1364 | " This is separate from the ipykernel package so we can avoid doing imports until\n" 1365 | ] 1366 | } 1367 | ], 1368 | "source": [ 1369 | "scaler = StandardScaler()\n", 1370 | "scaler.fit(credit_new)\n", 1371 | "credit_new2 = scaler.transform(credit_new)" 1372 | ] 1373 | }, 1374 | { 1375 | "cell_type": "markdown", 1376 | "metadata": {}, 1377 | "source": [ 1378 | "### SPLIT DATA INTO TRAINING AND TEST SETS" 1379 | ] 1380 | }, 1381 | { 1382 | "cell_type": "code", 1383 | "execution_count": 50, 1384 | "metadata": {}, 1385 | "outputs": [], 1386 | "source": [ 1387 | "from sklearn.model_selection import train_test_split" 1388 | ] 1389 | }, 1390 | { 1391 | "cell_type": "code", 1392 | "execution_count": 51, 1393 | "metadata": {}, 1394 | "outputs": [], 1395 | "source": [ 1396 | "X_train, X_test, y_train, y_test = train_test_split(credit_new2, y_target, test_size = 0.2)" 1397 | ] 1398 | }, 1399 | { 1400 | "cell_type": "code", 1401 | "execution_count": 52, 1402 | "metadata": {}, 1403 | "outputs": [ 1404 | { 1405 | "name": "stdout", 1406 | "output_type": "stream", 1407 | "text": [ 1408 | "shape of training data is (800, 61)\n", 1409 | "shape of training target is (800,)\n", 1410 | "shape of test data is (200, 61)\n", 1411 | "shape of test target is (200,)\n" 1412 | ] 1413 | } 1414 | ], 1415 | "source": [ 1416 | "print(\"shape of training data is\", X_train.shape)\n", 1417 | "print(\"shape of training target is\", y_train.shape)\n", 1418 | "print(\"shape of test data is\", X_test.shape)\n", 1419 | "print(\"shape of test target is\", y_test.shape)" 1420 | ] 1421 | }, 1422 | { 1423 | "cell_type": "markdown", 1424 | "metadata": {}, 1425 | "source": [ 1426 | "## MODELLING\n", 1427 | "\n", 1428 | "### Using logistic regression model\n" 1429 | ] 1430 | }, 1431 | { 1432 | "cell_type": "code", 1433 | "execution_count": 53, 1434 | "metadata": {}, 1435 | "outputs": [], 1436 | "source": [ 1437 | "from sklearn.linear_model import LogisticRegression" 1438 | ] 1439 | }, 1440 | { 1441 | "cell_type": "code", 1442 | "execution_count": 69, 1443 | "metadata": {}, 1444 | "outputs": [ 1445 | { 1446 | "name": "stderr", 1447 | "output_type": "stream", 1448 | "text": [ 1449 | "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n", 1450 | " FutureWarning)\n" 1451 | ] 1452 | }, 1453 | { 1454 | "data": { 1455 | "text/plain": [ 1456 | "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", 1457 | " intercept_scaling=1, max_iter=150, multi_class='warn',\n", 1458 | " n_jobs=None, penalty='l2', random_state=None, solver='warn',\n", 1459 | " tol=0.0001, verbose=0, warm_start=False)" 1460 | ] 1461 | }, 1462 | "execution_count": 69, 1463 | "metadata": {}, 1464 | "output_type": "execute_result" 1465 | } 1466 | ], 1467 | "source": [ 1468 | "log_reg_model = LogisticRegression()\n", 1469 | "log_reg_model.fit(X_train, y_train)" 1470 | ] 1471 | }, 1472 | { 1473 | "cell_type": "code", 1474 | "execution_count": 70, 1475 | "metadata": {}, 1476 | "outputs": [], 1477 | "source": [ 1478 | "lr_pred = log_reg_model.predict(X_test)" 1479 | ] 1480 | }, 1481 | { 1482 | "cell_type": "code", 1483 | "execution_count": 71, 1484 | "metadata": {}, 1485 | "outputs": [], 1486 | "source": [ 1487 | "from sklearn.metrics import accuracy_score, confusion_matrix" 1488 | ] 1489 | }, 1490 | { 1491 | "cell_type": "code", 1492 | "execution_count": 72, 1493 | "metadata": {}, 1494 | "outputs": [ 1495 | { 1496 | "name": "stdout", 1497 | "output_type": "stream", 1498 | "text": [ 1499 | "Accuracy is 76.0\n" 1500 | ] 1501 | } 1502 | ], 1503 | "source": [ 1504 | "acc = accuracy_score(y_test, lr_pred)\n", 1505 | "print(\"Accuracy is \", round(acc * 100))" 1506 | ] 1507 | }, 1508 | { 1509 | "cell_type": "code", 1510 | "execution_count": 66, 1511 | "metadata": {}, 1512 | "outputs": [ 1513 | { 1514 | "data": { 1515 | "text/plain": [ 1516 | "array([[125, 21],\n", 1517 | " [ 26, 28]], dtype=int64)" 1518 | ] 1519 | }, 1520 | "execution_count": 66, 1521 | "metadata": {}, 1522 | "output_type": "execute_result" 1523 | } 1524 | ], 1525 | "source": [ 1526 | "conf = confusion_matrix(y_test, lr_pred)" 1527 | ] 1528 | }, 1529 | { 1530 | "cell_type": "code", 1531 | "execution_count": 65, 1532 | "metadata": {}, 1533 | "outputs": [ 1534 | { 1535 | "name": "stdout", 1536 | "output_type": "stream", 1537 | "text": [ 1538 | " Score positive Score negative\n", 1539 | "Actual positive 125 21\n", 1540 | "Actual negative 26 28\n", 1541 | "\n" 1542 | ] 1543 | } 1544 | ], 1545 | "source": [ 1546 | "print(' Score positive Score negative')\n", 1547 | "print('Actual positive %6d' % conf[0,0] + ' %5d' % conf[0,1])\n", 1548 | "print('Actual negative %6d' % conf[1,0] + ' %5d' % conf[1,1])\n", 1549 | "print('')" 1550 | ] 1551 | }, 1552 | { 1553 | "cell_type": "markdown", 1554 | "metadata": {}, 1555 | "source": [ 1556 | "### USING RANDOMFOREST CLASSIFIER" 1557 | ] 1558 | }, 1559 | { 1560 | "cell_type": "code", 1561 | "execution_count": 67, 1562 | "metadata": {}, 1563 | "outputs": [], 1564 | "source": [ 1565 | "from sklearn.ensemble import RandomForestClassifier" 1566 | ] 1567 | }, 1568 | { 1569 | "cell_type": "code", 1570 | "execution_count": 143, 1571 | "metadata": {}, 1572 | "outputs": [ 1573 | { 1574 | "data": { 1575 | "text/plain": [ 1576 | "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n", 1577 | " max_depth=21, max_features='auto', max_leaf_nodes=None,\n", 1578 | " min_impurity_decrease=0.0, min_impurity_split=None,\n", 1579 | " min_samples_leaf=1, min_samples_split=2,\n", 1580 | " min_weight_fraction_leaf=0.0, n_estimators=200, n_jobs=None,\n", 1581 | " oob_score=False, random_state=None, verbose=0,\n", 1582 | " warm_start=False)" 1583 | ] 1584 | }, 1585 | "execution_count": 143, 1586 | "metadata": {}, 1587 | "output_type": "execute_result" 1588 | } 1589 | ], 1590 | "source": [ 1591 | "rf_model = RandomForestClassifier(n_estimators=200, max_depth=21)\n", 1592 | "rf_model.fit(X_train, y_train)" 1593 | ] 1594 | }, 1595 | { 1596 | "cell_type": "code", 1597 | "execution_count": 144, 1598 | "metadata": {}, 1599 | "outputs": [], 1600 | "source": [ 1601 | "rf_pred = rf_model.predict(X_test)" 1602 | ] 1603 | }, 1604 | { 1605 | "cell_type": "code", 1606 | "execution_count": 145, 1607 | "metadata": {}, 1608 | "outputs": [ 1609 | { 1610 | "name": "stdout", 1611 | "output_type": "stream", 1612 | "text": [ 1613 | "Accuracy is 79.0\n" 1614 | ] 1615 | } 1616 | ], 1617 | "source": [ 1618 | "rf_acc = accuracy_score(y_test, rf_pred)\n", 1619 | "print(\"Accuracy is \", round(rf_acc * 100))" 1620 | ] 1621 | }, 1622 | { 1623 | "cell_type": "code", 1624 | "execution_count": 131, 1625 | "metadata": {}, 1626 | "outputs": [ 1627 | { 1628 | "data": { 1629 | "text/plain": [ 1630 | "array([[139, 7],\n", 1631 | " [ 35, 19]], dtype=int64)" 1632 | ] 1633 | }, 1634 | "execution_count": 131, 1635 | "metadata": {}, 1636 | "output_type": "execute_result" 1637 | } 1638 | ], 1639 | "source": [ 1640 | "rf_conf = confusion_matrix(y_test, rf_pred)\n", 1641 | "rf_conf" 1642 | ] 1643 | }, 1644 | { 1645 | "cell_type": "markdown", 1646 | "metadata": {}, 1647 | "source": [ 1648 | "### USING BOOSTING" 1649 | ] 1650 | }, 1651 | { 1652 | "cell_type": "code", 1653 | "execution_count": 132, 1654 | "metadata": {}, 1655 | "outputs": [], 1656 | "source": [ 1657 | "from sklearn.ensemble import GradientBoostingClassifier, AdaBoostClassifier" 1658 | ] 1659 | }, 1660 | { 1661 | "cell_type": "code", 1662 | "execution_count": 141, 1663 | "metadata": {}, 1664 | "outputs": [], 1665 | "source": [ 1666 | "gb_model = GradientBoostingClassifier(n_estimators=100)\n", 1667 | "gb_model.fit(X_train, y_train)\n", 1668 | "gb_pred = gb_model.predict(X_test)" 1669 | ] 1670 | }, 1671 | { 1672 | "cell_type": "code", 1673 | "execution_count": 142, 1674 | "metadata": {}, 1675 | "outputs": [ 1676 | { 1677 | "name": "stdout", 1678 | "output_type": "stream", 1679 | "text": [ 1680 | "Accuracy is 80.0\n" 1681 | ] 1682 | } 1683 | ], 1684 | "source": [ 1685 | "gb_acc = accuracy_score(y_test, gb_pred)\n", 1686 | "print(\"Accuracy is \", round(gb_acc * 100))" 1687 | ] 1688 | }, 1689 | { 1690 | "cell_type": "code", 1691 | "execution_count": 154, 1692 | "metadata": {}, 1693 | "outputs": [], 1694 | "source": [ 1695 | "ada_model = AdaBoostClassifier(n_estimators=50)\n", 1696 | "ada_model.fit(X_train, y_train)\n", 1697 | "ada_pred = ada_model.predict(X_test)" 1698 | ] 1699 | }, 1700 | { 1701 | "cell_type": "code", 1702 | "execution_count": 155, 1703 | "metadata": {}, 1704 | "outputs": [ 1705 | { 1706 | "name": "stdout", 1707 | "output_type": "stream", 1708 | "text": [ 1709 | "Accuracy is 77.0\n" 1710 | ] 1711 | } 1712 | ], 1713 | "source": [ 1714 | "ada_acc = accuracy_score(y_test, ada_pred)\n", 1715 | "print(\"Accuracy is \", round(ada_acc * 100))" 1716 | ] 1717 | }, 1718 | { 1719 | "cell_type": "markdown", 1720 | "metadata": {}, 1721 | "source": [ 1722 | "### AVERAGING TWO MODELS" 1723 | ] 1724 | }, 1725 | { 1726 | "cell_type": "code", 1727 | "execution_count": 162, 1728 | "metadata": {}, 1729 | "outputs": [ 1730 | { 1731 | "name": "stdout", 1732 | "output_type": "stream", 1733 | "text": [ 1734 | "Accuracy is 79.0\n" 1735 | ] 1736 | } 1737 | ], 1738 | "source": [ 1739 | "avg = np.int16((rf_pred + gb_pred + ada_pred) / 3)\n", 1740 | "avg_acc = accuracy_score(y_test, avg)\n", 1741 | "print(\"Accuracy is \", round(avg_acc * 100))" 1742 | ] 1743 | }, 1744 | { 1745 | "cell_type": "code", 1746 | "execution_count": null, 1747 | "metadata": {}, 1748 | "outputs": [], 1749 | "source": [] 1750 | } 1751 | ], 1752 | "metadata": { 1753 | "kernelspec": { 1754 | "display_name": "Python 3", 1755 | "language": "python", 1756 | "name": "python3" 1757 | }, 1758 | "language_info": { 1759 | "codemirror_mode": { 1760 | "name": "ipython", 1761 | "version": 3 1762 | }, 1763 | "file_extension": ".py", 1764 | "mimetype": "text/x-python", 1765 | "name": "python", 1766 | "nbconvert_exporter": "python", 1767 | "pygments_lexer": "ipython3", 1768 | "version": "3.7.1" 1769 | } 1770 | }, 1771 | "nbformat": 4, 1772 | "nbformat_minor": 2 1773 | } 1774 | -------------------------------------------------------------------------------- /savedModelTF.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "name": "savedModelTF.ipynb", 7 | "provenance": [], 8 | "collapsed_sections": [], 9 | "authorship_tag": "ABX9TyM1Cz679Zm75qIxVacH27uH", 10 | "include_colab_link": true 11 | }, 12 | "kernelspec": { 13 | "name": "python3", 14 | "display_name": "Python 3" 15 | } 16 | }, 17 | "cells": [ 18 | { 19 | "cell_type": "markdown", 20 | "metadata": { 21 | "id": "view-in-github", 22 | "colab_type": "text" 23 | }, 24 | "source": [ 25 | "\"Open" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "metadata": { 31 | "id": "g8pjTcQnjPYs", 32 | "colab_type": "code", 33 | "colab": { 34 | "base_uri": "https://localhost:8080/", 35 | "height": 80 36 | }, 37 | "outputId": "8433e0cc-7bbb-4859-e0ac-175a07bbf55b" 38 | }, 39 | "source": [ 40 | "from tensorflow.examples.tutorials.mnist import input_data" 41 | ], 42 | "execution_count": 1, 43 | "outputs": [ 44 | { 45 | "output_type": "display_data", 46 | "data": { 47 | "text/html": [ 48 | "

\n", 49 | "The default version of TensorFlow in Colab will soon switch to TensorFlow 2.x.
\n", 50 | "We recommend you upgrade now \n", 51 | "or ensure your notebook will continue to use TensorFlow 1.x via the %tensorflow_version 1.x magic:\n", 52 | "more info.

\n" 53 | ], 54 | "text/plain": [ 55 | "" 56 | ] 57 | }, 58 | "metadata": { 59 | "tags": [] 60 | } 61 | } 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "metadata": { 67 | "id": "yi5aHMC5gvXi", 68 | "colab_type": "code", 69 | "colab": { 70 | "base_uri": "https://localhost:8080/", 71 | "height": 552 72 | }, 73 | "outputId": "b611ec51-f78b-4b3a-faff-53815b6a9fc6" 74 | }, 75 | "source": [ 76 | "mnist = input_data.read_data_sets(\"Mnist/\",one_hot=True)" 77 | ], 78 | "execution_count": 2, 79 | "outputs": [ 80 | { 81 | "output_type": "stream", 82 | "text": [ 83 | "WARNING:tensorflow:From :1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 84 | "Instructions for updating:\n", 85 | "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n", 86 | "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n", 87 | "Instructions for updating:\n", 88 | "Please write your own downloading logic.\n", 89 | "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/contrib/learn/python/learn/datasets/base.py:252: _internal_retry..wrap..wrapped_fn (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n", 90 | "Instructions for updating:\n", 91 | "Please use urllib or similar directly.\n", 92 | "Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\n", 93 | "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 94 | "Instructions for updating:\n", 95 | "Please use tf.data to implement this functionality.\n", 96 | "Extracting Mnist/train-images-idx3-ubyte.gz\n", 97 | "Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\n", 98 | "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 99 | "Instructions for updating:\n", 100 | "Please use tf.data to implement this functionality.\n", 101 | "Extracting Mnist/train-labels-idx1-ubyte.gz\n", 102 | "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 103 | "Instructions for updating:\n", 104 | "Please use tf.one_hot on tensors.\n", 105 | "Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\n", 106 | "Extracting Mnist/t10k-images-idx3-ubyte.gz\n", 107 | "Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\n", 108 | "Extracting Mnist/t10k-labels-idx1-ubyte.gz\n", 109 | "WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n", 110 | "Instructions for updating:\n", 111 | "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n" 112 | ], 113 | "name": "stdout" 114 | } 115 | ] 116 | }, 117 | { 118 | "cell_type": "code", 119 | "metadata": { 120 | "id": "wQRG8ylphmGr", 121 | "colab_type": "code", 122 | "colab": {} 123 | }, 124 | "source": [ 125 | "import tensorflow as tf\n", 126 | "import os\n", 127 | "import numpy as np" 128 | ], 129 | "execution_count": 0, 130 | "outputs": [] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "metadata": { 135 | "id": "g5y0MxOvhq4L", 136 | "colab_type": "code", 137 | "colab": {} 138 | }, 139 | "source": [ 140 | "x = tf.placeholder(tf.float32,[None,784])\n", 141 | "W = tf.Variable(tf.zeros([784,10]))\n", 142 | "b = tf.Variable(tf.zeros([10]))" 143 | ], 144 | "execution_count": 0, 145 | "outputs": [] 146 | }, 147 | { 148 | "cell_type": "code", 149 | "metadata": { 150 | "id": "O6pbTGdSiGPd", 151 | "colab_type": "code", 152 | "colab": {} 153 | }, 154 | "source": [ 155 | "y = tf.nn.softmax(tf.matmul(x,W)+b)\n", 156 | "y_ = tf.placeholder(tf.float32,[None,10])" 157 | ], 158 | "execution_count": 0, 159 | "outputs": [] 160 | }, 161 | { 162 | "cell_type": "code", 163 | "metadata": { 164 | "id": "qzjKI5PfjwwN", 165 | "colab_type": "code", 166 | "colab": {} 167 | }, 168 | "source": [ 169 | "cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ *tf.log(y),reduction_indices=[1]))" 170 | ], 171 | "execution_count": 0, 172 | "outputs": [] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "metadata": { 177 | "id": "ks2Y090CkApz", 178 | "colab_type": "code", 179 | "colab": {} 180 | }, 181 | "source": [ 182 | "train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)" 183 | ], 184 | "execution_count": 0, 185 | "outputs": [] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "metadata": { 190 | "id": "PKjrS5sYkLDB", 191 | "colab_type": "code", 192 | "colab": {} 193 | }, 194 | "source": [ 195 | "init = tf.global_variables_initializer()\n", 196 | "sess = tf.Session()" 197 | ], 198 | "execution_count": 0, 199 | "outputs": [] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "metadata": { 204 | "id": "GcMod4h8kOA6", 205 | "colab_type": "code", 206 | "colab": {} 207 | }, 208 | "source": [ 209 | "sess.run(init)" 210 | ], 211 | "execution_count": 0, 212 | "outputs": [] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "metadata": { 217 | "id": "Up1JvcHtkPlb", 218 | "colab_type": "code", 219 | "colab": {} 220 | }, 221 | "source": [ 222 | "saver = tf.train.Saver()" 223 | ], 224 | "execution_count": 0, 225 | "outputs": [] 226 | }, 227 | { 228 | "cell_type": "code", 229 | "metadata": { 230 | "id": "uxWlO3xZkbSj", 231 | "colab_type": "code", 232 | "colab": { 233 | "base_uri": "https://localhost:8080/", 234 | "height": 34 235 | }, 236 | "outputId": "85ace5fd-6b00-4587-f974-9a486ffdde4f" 237 | }, 238 | "source": [ 239 | "for i in range(1000):\n", 240 | " batch_xs, batch_ys = mnist.train.next_batch(100)\n", 241 | " sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys})\n", 242 | "print('Finished Training')" 243 | ], 244 | "execution_count": 18, 245 | "outputs": [ 246 | { 247 | "output_type": "stream", 248 | "text": [ 249 | "Finished Training\n" 250 | ], 251 | "name": "stdout" 252 | } 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "metadata": { 258 | "id": "FQ06IL8dk68d", 259 | "colab_type": "code", 260 | "colab": {} 261 | }, 262 | "source": [ 263 | "model_dir = 'Mnist_model1'\n", 264 | "model_name = 'ckp'\n", 265 | "\n", 266 | "if not os.path.exists(model_dir):\n", 267 | " os.mkdir(model_dir)" 268 | ], 269 | "execution_count": 0, 270 | "outputs": [] 271 | }, 272 | { 273 | "cell_type": "code", 274 | "metadata": { 275 | "id": "A-GBQ91PlPt8", 276 | "colab_type": "code", 277 | "colab": { 278 | "base_uri": "https://localhost:8080/", 279 | "height": 34 280 | }, 281 | "outputId": "abd1d63f-5cf0-4408-f743-8f979a3ceb9c" 282 | }, 283 | "source": [ 284 | "saver.save(sess,os.path.join(model_dir,model_name))" 285 | ], 286 | "execution_count": 38, 287 | "outputs": [ 288 | { 289 | "output_type": "execute_result", 290 | "data": { 291 | "text/plain": [ 292 | "'Mnist_model1/ckp'" 293 | ] 294 | }, 295 | "metadata": { 296 | "tags": [] 297 | }, 298 | "execution_count": 38 299 | } 300 | ] 301 | }, 302 | { 303 | "cell_type": "markdown", 304 | "metadata": { 305 | "id": "MO2G16OIpAbk", 306 | "colab_type": "text" 307 | }, 308 | "source": [ 309 | "**Using the Model**" 310 | ] 311 | }, 312 | { 313 | "cell_type": "code", 314 | "metadata": { 315 | "id": "nRo67EUPpHRv", 316 | "colab_type": "code", 317 | "colab": { 318 | "base_uri": "https://localhost:8080/", 319 | "height": 158 320 | }, 321 | "outputId": "298bd08b-dd0f-4003-8145-4e2474c00d0c" 322 | }, 323 | "source": [ 324 | "from tensorflow.examples.tutorials.mnist import input_data\n", 325 | "mnist = input_data.read_data_sets(\"Mnist_model/\",one_hot=True)" 326 | ], 327 | "execution_count": 21, 328 | "outputs": [ 329 | { 330 | "output_type": "stream", 331 | "text": [ 332 | "Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\n", 333 | "Extracting Mnist_model/train-images-idx3-ubyte.gz\n", 334 | "Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\n", 335 | "Extracting Mnist_model/train-labels-idx1-ubyte.gz\n", 336 | "Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\n", 337 | "Extracting Mnist_model/t10k-images-idx3-ubyte.gz\n", 338 | "Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\n", 339 | "Extracting Mnist_model/t10k-labels-idx1-ubyte.gz\n" 340 | ], 341 | "name": "stdout" 342 | } 343 | ] 344 | }, 345 | { 346 | "cell_type": "code", 347 | "metadata": { 348 | "id": "TDQ_Jbd1pUQD", 349 | "colab_type": "code", 350 | "colab": {} 351 | }, 352 | "source": [ 353 | "import tensorflow as tf\n", 354 | "import os" 355 | ], 356 | "execution_count": 0, 357 | "outputs": [] 358 | }, 359 | { 360 | "cell_type": "code", 361 | "metadata": { 362 | "id": "07cGJC8SpYYo", 363 | "colab_type": "code", 364 | "colab": {} 365 | }, 366 | "source": [ 367 | "x = tf.placeholder(tf.float32,[None,784])\n", 368 | "W = tf.Variable(tf.zeros([784,10]))\n", 369 | "b = tf.Variable(tf.zeros([10]))" 370 | ], 371 | "execution_count": 0, 372 | "outputs": [] 373 | }, 374 | { 375 | "cell_type": "code", 376 | "metadata": { 377 | "id": "oyct7UXlpuqj", 378 | "colab_type": "code", 379 | "colab": {} 380 | }, 381 | "source": [ 382 | "y = tf.nn.softmax(tf.matmul(x,W)+b)" 383 | ], 384 | "execution_count": 0, 385 | "outputs": [] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "metadata": { 390 | "id": "KqK0I4G7qh-C", 391 | "colab_type": "code", 392 | "colab": {} 393 | }, 394 | "source": [ 395 | "init = tf.global_variables_initializer()" 396 | ], 397 | "execution_count": 0, 398 | "outputs": [] 399 | }, 400 | { 401 | "cell_type": "code", 402 | "metadata": { 403 | "id": "5r5y6G9Lqvm-", 404 | "colab_type": "code", 405 | "colab": {} 406 | }, 407 | "source": [ 408 | "sess = tf.Session()" 409 | ], 410 | "execution_count": 0, 411 | "outputs": [] 412 | }, 413 | { 414 | "cell_type": "code", 415 | "metadata": { 416 | "id": "ZOHySHkbqxW2", 417 | "colab_type": "code", 418 | "colab": {} 419 | }, 420 | "source": [ 421 | "sess.run(init)" 422 | ], 423 | "execution_count": 0, 424 | "outputs": [] 425 | }, 426 | { 427 | "cell_type": "code", 428 | "metadata": { 429 | "id": "yRy2IUCBqyVr", 430 | "colab_type": "code", 431 | "colab": {} 432 | }, 433 | "source": [ 434 | "saver = tf.train.Saver([W,b])" 435 | ], 436 | "execution_count": 0, 437 | "outputs": [] 438 | }, 439 | { 440 | "cell_type": "code", 441 | "metadata": { 442 | "id": "nQoApbJaq4F3", 443 | "colab_type": "code", 444 | "colab": { 445 | "base_uri": "https://localhost:8080/", 446 | "height": 34 447 | }, 448 | "outputId": "6615ee64-6b6b-491d-9bb7-5ce76b39f293" 449 | }, 450 | "source": [ 451 | "saver.restore(sess,save_path=\"Mnist_model1/ckp\")" 452 | ], 453 | "execution_count": 42, 454 | "outputs": [ 455 | { 456 | "output_type": "stream", 457 | "text": [ 458 | "INFO:tensorflow:Restoring parameters from Mnist_model1/ckp\n" 459 | ], 460 | "name": "stdout" 461 | } 462 | ] 463 | }, 464 | { 465 | "cell_type": "code", 466 | "metadata": { 467 | "id": "oLBH0e4srJPV", 468 | "colab_type": "code", 469 | "colab": {} 470 | }, 471 | "source": [ 472 | "idx = 0\n", 473 | "img = mnist.test.images[idx]" 474 | ], 475 | "execution_count": 0, 476 | "outputs": [] 477 | }, 478 | { 479 | "cell_type": "code", 480 | "metadata": { 481 | "id": "6THFgG_uraGN", 482 | "colab_type": "code", 483 | "colab": {} 484 | }, 485 | "source": [ 486 | "ret = sess.run(y,feed_dict={x:img.reshape(1,784)})" 487 | ], 488 | "execution_count": 0, 489 | "outputs": [] 490 | }, 491 | { 492 | "cell_type": "code", 493 | "metadata": { 494 | "id": "q7qZtKg1riJ8", 495 | "colab_type": "code", 496 | "colab": { 497 | "base_uri": "https://localhost:8080/", 498 | "height": 34 499 | }, 500 | "outputId": "4f42f6a8-3e4c-43be-83fd-cd7205cf5ea5" 501 | }, 502 | "source": [ 503 | "ret.argmax()" 504 | ], 505 | "execution_count": 47, 506 | "outputs": [ 507 | { 508 | "output_type": "execute_result", 509 | "data": { 510 | "text/plain": [ 511 | "0" 512 | ] 513 | }, 514 | "metadata": { 515 | "tags": [] 516 | }, 517 | "execution_count": 47 518 | } 519 | ] 520 | }, 521 | { 522 | "cell_type": "code", 523 | "metadata": { 524 | "id": "gmQcpcqPrkm8", 525 | "colab_type": "code", 526 | "colab": {} 527 | }, 528 | "source": [ 529 | "" 530 | ], 531 | "execution_count": 0, 532 | "outputs": [] 533 | } 534 | ] 535 | } --------------------------------------------------------------------------------