├── .gitignore ├── LICENSE ├── README.md ├── lgr ├── __init__.py ├── batchLGR │ ├── __init__.py │ ├── lgr.py │ └── localmodel.py └── options.py ├── notebooks ├── .ipynb_checkpoints │ ├── NIPS1-checkpoint.ipynb │ └── demo-checkpoint.ipynb └── demo.ipynb └── setup.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # (incremental) Local Gaussian Regression 2 | 3 | This is a python implementation of (incremental) Local Gaussian 4 | Regression, as presented in [Incremental Local Gaussian Regression](https://papers.nips.cc/paper/5594-incremental-local-gaussian-regression.pdf). 5 | Currently only the batch version of the algorithm is available, but the fully incremental version will follow soon. 6 | 7 | # Dependencies 8 | 9 | python 2.7 10 | jupyter 11 | 12 | # Installation 13 | 14 | python setup.py install 15 | 16 | 17 | # Usage 18 | 19 | jupyter notebook 20 | 21 | then open the 'demo' notebook and run it 22 | -------------------------------------------------------------------------------- /lgr/__init__.py: -------------------------------------------------------------------------------- 1 | # author: Franziska Meier 2 | 3 | import batchLGR 4 | # from localmodel import LocalModel 5 | from options import Options 6 | -------------------------------------------------------------------------------- /lgr/batchLGR/__init__.py: -------------------------------------------------------------------------------- 1 | # batch LGR 2 | 3 | from localmodel import LocalModel 4 | from lgr import LGR 5 | -------------------------------------------------------------------------------- /lgr/batchLGR/lgr.py: -------------------------------------------------------------------------------- 1 | # author: Franziska Meier 2 | # implements incremental LGR 3 | 4 | import numpy as np 5 | from localmodel import LocalModel 6 | 7 | 8 | 9 | class LGR(object): 10 | ''' (batch) Local Gaussian Regression''' 11 | 12 | def __init__(self, opt, dim): 13 | #opt.print_options() 14 | 15 | self.D = dim # dim of data 16 | self.K = dim + 1 # number of dim of each local model 17 | self.lmD = opt.lmD # number of dim of each localizer 18 | self.M = 0 # number of local models 19 | self.opt = opt 20 | self.betay = opt.betay 21 | 22 | self.lmodels = [None] * opt.max_num_lm 23 | for i in range(0, opt.max_num_lm): 24 | self.lmodels[i] = LocalModel(opt, dim, self.K, self.lmD) 25 | 26 | def add_local_model(self, x, X=None, Yh=None): 27 | 28 | if(self.M + 1 < self.opt.max_num_lm): 29 | self.lmodels[self.M].init_lm(x, X, Yh) 30 | self.M = self.M + 1 31 | else: 32 | print "maximum number of local models reached" 33 | 34 | return 0 35 | 36 | def update(self, X, Y): 37 | 38 | yp = 0.0 39 | lm_var = np.zeros(self.M) 40 | for m in range(0, self.M): 41 | lm = self.lmodels[m] 42 | lm_var[m] = lm.get_variance() 43 | wm = lm.get_activation(X) 44 | yp += wm * lm.predict(X) 45 | 46 | yh = Y - yp 47 | s = 1.0 / self.betay + lm_var.sum() # total amount of variance 48 | # ipdb.set_trace() 49 | for m in range(0, self.M): 50 | lm = self.lmodels[m] 51 | wm = lm.get_activation(X) 52 | lm.update(X, Y, yh, wm, s) 53 | 54 | # pruning 55 | if self.opt.do_pruning: 56 | m = 0 57 | while m < self.M: 58 | rel_dim = self.lmodels[m].update_relevant_dimensions() 59 | if rel_dim == 0: 60 | # swap the pruned out model with the last model 61 | self.lmodels[m], self.lmodels[self.M - 1] = self.lmodels[self.M - 1], self.lmodels[m] 62 | 63 | # reset the pruned out model which is now the last one 64 | self.lmodels[self.M - 1].reset() 65 | self.M = self.M - 1 66 | m -= 1 67 | 68 | m += 1 69 | 70 | if self.lmodels[self.M].UsedK.size < 2: 71 | dum = 0 72 | 73 | # return prediction before new local model was added 74 | return yp 75 | 76 | def initialize_local_models(self, X): 77 | n_data = X.shape[0] 78 | 79 | self.add_local_model(X[0, :]) 80 | 81 | for n in range(0, n_data): 82 | xn = X[n, :] 83 | w = np.zeros(self.M) 84 | for m in range(0, self.M): 85 | lm = self.lmodels[m] 86 | w[m] = lm.get_activation(xn[np.newaxis, :]) 87 | 88 | max_act = w.max() 89 | if max_act < self.opt.activ_thresh: 90 | self.add_local_model(xn) 91 | 92 | def run(self, X, Y, n_iter, debug): 93 | 94 | n_data = np.size(Y) 95 | Yp = self.predict(X) 96 | sse = ((Yp - Y) ** 2).sum() 97 | mse = sse / n_data 98 | print "initial nmse: " + str(mse/np.var(Y)) 99 | nmse = np.zeros(n_iter) 100 | 101 | # learn parameters 102 | for i in range(0, n_iter): 103 | 104 | sse = 0.0 105 | # batch update parameters 106 | self.update(X, Y) 107 | 108 | Yp = self.predict(X) 109 | sse = sse + ((Y - Yp) ** 2).sum() 110 | mse = sse / n_data 111 | nmse[i] = mse / np.var(Y) 112 | 113 | # compute current mse 114 | if debug and i > 0 and np.mod(i, 100) == 0: 115 | print "iter: {}, nmse: {}, M: {}".format(i, nmse[i], self.M) 116 | 117 | # models final prediction on training data 118 | # Yp = self.predict(X) 119 | # sse = sse + ((Y - Yp) ** 2).sum() 120 | # mse = sse / n_data 121 | # nmse = mse / np.var(Y) 122 | return nmse 123 | 124 | def predict(self, x): 125 | 126 | yp = 0.0 127 | for m in range(0, self.M): 128 | w = self.lmodels[m].get_activation(x) 129 | yp = yp + w * self.lmodels[m].predict(x) 130 | 131 | return yp 132 | 133 | 134 | def get_local_model_activations(self, X): 135 | 136 | local_models_act = np.zeros((X.shape[0], self.M)) 137 | for m in range(self.M): 138 | local_models_act[:, m] = self.lmodels[m].get_activation(X)[:, 0] 139 | 140 | return local_models_act 141 | 142 | -------------------------------------------------------------------------------- /lgr/batchLGR/localmodel.py: -------------------------------------------------------------------------------- 1 | # author: Franziska Meier 2 | import numpy as np 3 | from numpy import dot 4 | from scipy.linalg import cholesky, inv 5 | 6 | 7 | class LocalModel(object): 8 | 9 | def __init__(self, opt, D, K, lmD): 10 | self.K = K 11 | self.lmD = lmD 12 | self.D = D 13 | self.opt = opt 14 | 15 | self.set_initial_state() 16 | 17 | def set_initial_state(self): 18 | self.center = np.array(self.lmD) 19 | self.lengthscale = np.ones((1, self.lmD)) * self.opt.init_lambda 20 | 21 | self.muw = np.zeros((self.K, 1)) 22 | self.Sigmaw = np.zeros((self.K, self.K)) 23 | self.alpha_b_N = np.ones(self.K) * self.opt.alpha_b_0 24 | self.UsedK = np.arange(self.K, dtype=int) 25 | 26 | self.betaf_a_N = self.opt.betaf_a_0 27 | self.betaf_b_N = self.opt.betaf_b_0 28 | self.alpha_a_N = self.opt.alpha_a_0 29 | 30 | self.num_data = 0 31 | self.eta = self.opt.init_eta 32 | 33 | return 34 | 35 | def init_lm(self, c, X=None, Yh=None): 36 | self.center = c 37 | N = np.size(Yh) 38 | betaf = self.betaf_a_N / self.betaf_b_N 39 | alpha = self.alpha_a_N / self.alpha_b_N 40 | 41 | if (X is not None) and (Y is not None): 42 | w = self.get_activation(X) 43 | 44 | dist = X - c # subtract center from each input data point 45 | Xh = np.zeros((N, self.K)) 46 | Xh[:, 0:self.D] = w * dist 47 | Xh[:, -1] = w.squeeze() # set bias term to 1.0 48 | 49 | if self.opt.var_approx_type == 1: 50 | SigmawI = np.dot(Xh.T, Xh) + np.diag(alpha) 51 | else: 52 | SigmawI = betaf * np.dot(Xh.T, Xh) + np.diag(alpha) 53 | 54 | L = cholesky(SigmawI, lower=True) 55 | LI = inv(L) 56 | self.Sigmaw = dot(LI.T, LI) 57 | 58 | if self.opt.var_approx_type == 1: 59 | self.muw = dot(dot(self.Sigmaw, Xh.T), Yh) 60 | else: 61 | self.muw = betaf * dot(dot(self.Sigmaw, Xh.T), Yh) 62 | 63 | return dot(Xh, self.muw) 64 | return 65 | 66 | def update(self, X, Y, Yh, w, s): 67 | # import ipdb 68 | # ipdb.set_trace() 69 | N = np.size(Y) 70 | Xh = self.center_and_prune_input(X) 71 | actK = np.size(self.UsedK) 72 | wXh = Xh * w 73 | # compute mean and var of hidden var f^n 74 | sigma = self.betaf_b_N / self.betaf_a_N 75 | sigmaf = sigma - (sigma ** 2) / s 76 | muf = np.dot(wXh, self.muw) + (1 / s) * sigma * Yh 77 | 78 | PhiPhi = np.dot(wXh.T, wXh) 79 | PhiF = dot(wXh.T, muf) 80 | muf2 = muf ** 2 81 | # update posterior over local regression parameters 82 | alpha = self.alpha_a_N / self.alpha_b_N 83 | betaf = self.betaf_a_N / self.betaf_b_N 84 | 85 | if self.opt.var_approx_type == 1: 86 | SigmawI = PhiPhi + np.diag(alpha) 87 | else: 88 | SigmawI = betaf * PhiPhi + np.diag(alpha) 89 | 90 | SigmawI = SigmawI + 1e-10 * np.eye(np.size(alpha)) 91 | 92 | L = cholesky(SigmawI, lower=True) 93 | # TODO: can we prevent the inverse? 94 | LI = inv(L) 95 | self.Sigmaw = dot(LI.T, LI) 96 | 97 | if self.opt.var_approx_type == 1: 98 | self.muw = dot(self.Sigmaw, PhiF) 99 | else: 100 | self.muw = betaf * dot(self.Sigmaw, PhiF) 101 | 102 | self.betaf_a_N = self.opt.betaf_a_0 + 0.5 * (N + 1.0) 103 | 104 | # update posterior over precision parameters 105 | if self.opt.var_approx_type == 1: 106 | Nsigmaf = N * sigmaf 107 | self.betaf_b_N = self.opt.betaf_b_0 + 0.5 * (muf2.sum() - dot(dot(self.muw.T, SigmawI), self.muw) + N * sigmaf) 108 | else: 109 | muPhiPhimu = dot(self.muw.T, dot(PhiPhi, self.muw)) 110 | sse = muf2.sum() - 2 * dot(PhiF.T, self.muw) + muPhiPhimu 111 | 112 | # TODO: check whether component wise multiplication is correct here 113 | tmp2 = (dot(PhiPhi, self.Sigmaw)).trace() 114 | 115 | Nsigmaf = N * sigmaf 116 | self.betaf_b_N = self.opt.betaf_b_0 + 0.5 * (sse + tmp2 + Nsigmaf) 117 | 118 | # TODO: check if algo is more robust if we change alpha updates 119 | self.alpha_a_N = self.opt.alpha_a_0 + 0.5 120 | dSigmaw = np.diag(self.Sigmaw) 121 | 122 | if self.opt.var_approx_type == 1: 123 | self.alpha_b_N = self.opt.alpha_a_0 + 0.5 * ( (self.betaf_a_N / self.betaf_a_N) * self.muw.T ** 2 + dSigmaw) 124 | else: 125 | self.alpha_b_N = self.opt.alpha_b_0 + 0.5 * (self.muw.T ** 2 + dSigmaw) 126 | 127 | # update length scales if we have seen enough data 128 | # TODO: can we replace the continuous lengthscale optimization through a discrete optimization? 129 | if self.opt.do_bwa: 130 | betaf = self.betaf_a_N / self.betaf_b_N 131 | 132 | dfx = self.lengthscale_gradient(X, wXh, muf, betaf) 133 | 134 | self.lengthscale = np.exp(np.log(self.lengthscale) - self.eta * dfx) 135 | 136 | return 137 | 138 | def predict(self, X): 139 | Xh = self.center_and_prune_input(X) 140 | return dot(Xh, self.muw) 141 | 142 | def center_and_prune_input(self, X): 143 | N = np.shape(X)[0] 144 | # centered data point, without bias element 145 | Xh = X - self.center 146 | nActK = np.size(self.UsedK) 147 | # if bias element is still active 148 | if self.UsedK[-1] == (self.K - 1): 149 | Xh = Xh[:, self.UsedK[0:(nActK - 1)] - 1] 150 | Xh = np.hstack((Xh, np.ones((N, 1)))) 151 | else: 152 | Xh = Xh[:, self.UsedK - 1] 153 | 154 | return Xh 155 | 156 | def lengthscale_gradient(self, X, phi, muf, betaf): 157 | # N = np.shape(X)[0] 158 | sdist = (X - self.center) ** 2 159 | fp = dot(phi, self.muw) 160 | lengthscalesq = self.lengthscale ** 2 161 | 162 | if self.opt.var_approx_type == 1: 163 | E = dot(self.muw, self.muw.T) + self.get_variance()*self.Sigmaw 164 | else: 165 | E = dot(self.muw, self.muw.T) + self.Sigmaw 166 | 167 | phi_E = dot(phi, E) # N x actK 168 | phi_E_phi = (phi_E * phi).sum(1, keepdims=True) # N 169 | 170 | # ipdb.set_trace() 171 | sumvd = sdist * (phi_E_phi - fp * muf) # N x D 172 | dfx = betaf * (sumvd.sum(0, keepdims=True) / lengthscalesq) # D 173 | return dfx 174 | 175 | # def get_activation(self, x): 176 | # sdist = (x - self.center) ** 2 177 | # lengthscalesq = self.lengthscale ** 2 178 | # return np.exp(-0.5 * (sdist / lengthscalesq).sum()) 179 | def get_activation(self, X): 180 | # N = np.shape(X)[0] 181 | sdist = (X - self.center) ** 2 182 | lengthscalesq = self.lengthscale ** 2 183 | mdist = sdist / lengthscalesq 184 | return np.exp(-0.5 * np.sum(mdist, axis=1, keepdims=True)) 185 | 186 | def get_variance(self): 187 | return self.betaf_b_N / self.betaf_a_N 188 | 189 | def get_alpha(self): 190 | return self.alpha_a_N / self.alpha_b_N 191 | 192 | def update_relevant_dimensions(self): 193 | nActK = np.size(self.UsedK) 194 | alpha = self.alpha_a_N / self.alpha_b_N 195 | 196 | alpha_upthresh = 999.999 197 | keep_idx = np.where(alpha[0] < alpha_upthresh) 198 | 199 | # check_idx = np.where(alpha[0] < 1e-10) 200 | # if np.size(check_idx) > 0: 201 | # remove_idx = np.where(self.lengthscale[0] < 0.01) 202 | # keep_idx = np.setdiff1d(keep_idx, remove_idx) 203 | 204 | new_size = np.size(keep_idx) 205 | if new_size == 0: 206 | return 0 207 | elif new_size < nActK: 208 | mask = np.zeros(nActK, dtype=bool) 209 | mask[keep_idx] = True 210 | self.alpha_b_N = self.alpha_b_N.T[mask].T 211 | self.UsedK = self.UsedK[mask] 212 | self.muw = self.muw[mask] 213 | 214 | return new_size 215 | 216 | def reset(self): 217 | self.set_initial_state() 218 | return 219 | 220 | -------------------------------------------------------------------------------- /lgr/options.py: -------------------------------------------------------------------------------- 1 | # author: Franziska Meier 2 | class Options(object): 3 | '''parameter settings for LGR''' 4 | 5 | def __init__(self, lmD): 6 | ''' setting default params ''' 7 | self.max_iter = 100 8 | self.init_lambda = 0.3 9 | self.activ_thresh = 0.5 10 | self.init_eta = 0.0001 11 | self.fr = 0.999 12 | self.norm_out = 1.0 13 | self.max_num_lm = 1000 14 | self.alpha_a_0 = 1e-6 15 | self.alpha_b_0 = 1e-6 16 | self.betaf_a_0 = 1e-6 17 | self.betaf_b_0 = 1e-6 18 | 19 | self.betay = 1e9 20 | self.lmD = lmD 21 | self.do_bwa = True # do lenghtscale optimization 22 | self.do_pruning = True 23 | 24 | self.var_approx_type = 0 # 0: fully factorized, 1: w,beta one factor 25 | 26 | def print_options(self): 27 | print "options: " 28 | print " norm_out: " + str(self.norm_out) 29 | print " max_iter: " + str(self.max_iter) 30 | print " init_lambda: " + str(self.init_lambda) 31 | print " activ thresh: " + str(self.activ_thresh) 32 | -------------------------------------------------------------------------------- /notebooks/.ipynb_checkpoints/demo-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "from numpy import exp\n", 11 | "\n", 12 | "from ilgr.options import Options\n", 13 | "from ilgr.batchLGR.lgr import LGR" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": {}, 20 | "outputs": [], 21 | "source": [ 22 | "N = 200 \n", 23 | "D = 1 \n", 24 | "stds = 0.2\n", 25 | "seed = 411\n", 26 | "np.random.seed(seed)" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 3, 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "# plotting doesn't work for 2D data - but learning does\n", 36 | "def generate_2d_data():\n", 37 | " X = (np.random.rand(N, D) - 0.5)*2\n", 38 | " Yorig = np.vstack((exp(-X[:, 0] ** 2 * 10), exp(-X[:, 1] ** 2 * 50), 1.25 * exp(-(X[:, 0] ** 2 + X[:, 1] ** 2) * 5))).max(0)\n", 39 | " Y = np.reshape(Yorig, [N, 1]) + stds * np.random.randn(N, 1)\n", 40 | " return X, Y\n", 41 | "\n", 42 | "def generate_1d_data_simple():\n", 43 | " N = 200\n", 44 | " XX = ((np.random.rand(N,1)-.5)*4)+2;\n", 45 | " YY = np.sin(XX) +np.random.randn(N,1)*0.01\n", 46 | " return XX, YY\n", 47 | "\n", 48 | "def generate_1d_data_nonstationary():\n", 49 | " X = (np.random.rand(N, 1) - 0.5)*4\n", 50 | " Yorig = np.sin(2*X)+2*np.exp(-16*X*X)\n", 51 | " Y = np.reshape(Yorig, [N, 1]) + stds * np.random.randn(N, 1)\n", 52 | " return X, Y" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 4, 58 | "metadata": {}, 59 | "outputs": [ 60 | { 61 | "name": "stdout", 62 | "output_type": "stream", 63 | "text": [ 64 | "options: \n", 65 | " norm_out: 1.0\n", 66 | " max_iter: 100\n", 67 | " init_lambda: 0.3\n", 68 | " activ thresh: 0.4\n" 69 | ] 70 | } 71 | ], 72 | "source": [ 73 | "opt = Options(D)\n", 74 | "opt.activ_thresh = 0.4\n", 75 | "opt.print_options()" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 5, 81 | "metadata": {}, 82 | "outputs": [ 83 | { 84 | "name": "stdout", 85 | "output_type": "stream", 86 | "text": [ 87 | "initial nmse: 1.05549647102\n", 88 | "final nmse: 0.0517165544991\n" 89 | ] 90 | } 91 | ], 92 | "source": [ 93 | "X, Y = generate_1d_data_nonstationary()\n", 94 | "model = LGR(opt, D)\n", 95 | "debug = False\n", 96 | "model.initialize_local_models(X)\n", 97 | "initial_local_models = model.get_local_model_activations(X)\n", 98 | "nmse = model.run(X, Y, 100, debug)\n", 99 | "print \"final nmse: {}\".format(nmse[-1])" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 6, 105 | "metadata": {}, 106 | "outputs": [], 107 | "source": [ 108 | "Yp = model.predict(X)\n", 109 | "final_local_models = model.get_local_model_activations(X)" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": 16, 115 | "metadata": {}, 116 | "outputs": [ 117 | { 118 | "data": { 119 | "text/plain": [ 120 | "" 121 | ] 122 | }, 123 | "execution_count": 16, 124 | "metadata": {}, 125 | "output_type": "execute_result" 126 | }, 127 | { 128 | "data": { 129 | "image/png": "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jh3L2LFjAXjuuecIBAIMHz6cM888k6+++gqAZ555hsMPP5zhw4fz8MMPp+Yvnl7fBDYZY94zxkSBB4DTW5xzCbDQGPMZgDHm36m6uHa4V8p7dOZL9Rid6ecVrun5rSgSV3Dm58Py5RBIwVDfeecdFi9ezOjRo5k8eTK33XYbAEVFRaxduxaAsrIy7rjjDgYPHswrr7zC5ZdfzvPPP89PfvITLrvsMsrLy1m4cGHS56+srKS6upp169bh9/v59NNP6du3L7fccgsrVqxgn3324ZNPPuHXv/41f/vb39h111258cYbueWWW7j66qu55JJLeP755zn00EP54Q9/2P2/cPr1A2oSjmuBUS3O+QaAiLwE+IDrjTHPpOLimnZUyns0+FK9RjzgKupTxPRnphO1o+T78pk/bj512+t6XCAWCrmBl227t6FQaoKv4uJiRo8eDcB5553H73//e4DGQOerr77i73//O2eeeWbj90QiEQBeeuklli5dCsD555/PzJkzd3r+v/3tb1x66aX4/e6vh759++50zssvv8xbb73VOI5oNEogEODtt99m4MCBDB48uHF8lZWV3f9LZ58fGAwEgf7AShEpNcZ8nniSiFQAFQADBgzo0BN7Y4G+UiqRBl+qVwjXhCmrKiNqRxERHOPgGIeIHWHqsqkYY5r1BOsJgkF3xis+85WwtVi3tOynEz/eddddAXAch7322ot169Z16Pu7whjDSSedxJ/+9Kdm97d2zR5uC1CccNy/4b5EtcArxph64H0R+SduMLY68SRjTCVQCTBy5MgOTWVZmnZUynO05kv1CqHqEFE7im1sHMfBJ77GP47jYBu7sSdYTxEIuKnGOXNSl3IE+PDDDwk3FJHdf//9HH/88c0e32OPPRg4cCB/+ctfADdQWr9+PQCjR4/mgQceAOC+++5L+vwnnXQSixYtIhaLAfDpp58CsPvuu/Pll18CcNxxx/HSSy+xadMmAP773//yz3/+k8MPP5zq6mo2b94MsFNw1kOtBgaLyEARyQfOBh5vcc6juLNeiMg+uGnI91JxcU07KuU9GnypXiFYEiTfl49PfBT4C1hwygLmjJ3DglMWUOAvwJfQE6wnCQRg9uzUBV4Ahx12GAsXLmTIkCF89tlnXHbZZTudc99997F48WKGDh3KkUceyWOPPQbA7373OxYuXEhpaSlbtrSc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\n", 130 | "text/plain": [ 131 | "" 132 | ] 133 | }, 134 | "metadata": {}, 135 | "output_type": "display_data" 136 | } 137 | ], 138 | "source": [ 139 | "%matplotlib inline\n", 140 | "import matplotlib.pyplot as plt\n", 141 | "\n", 142 | "plt.figure(figsize=(10, 4))\n", 143 | "plt.subplot(121)\n", 144 | "plt.plot(X[:, 0], Y[:, 0], '.g', label='gt')\n", 145 | "plt.plot(X[:, 0], Yp[:, 0], '.b', label='predicted')\n", 146 | "plt.legend()\n", 147 | "plt.subplot(122)\n", 148 | "plt.plot(nmse, label='nmse')\n", 149 | "plt.legend()" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 8, 155 | "metadata": {}, 156 | "outputs": [ 157 | { 158 | "data": { 159 | "text/plain": [ 160 | "[,\n", 161 | " ,\n", 162 | " ,\n", 163 | " ,\n", 164 | " ,\n", 165 | " ,\n", 166 | " ,\n", 167 | " ]" 168 | ] 169 | }, 170 | "execution_count": 8, 171 | "metadata": {}, 172 | "output_type": "execute_result" 173 | }, 174 | { 175 | "data": { 176 | "image/png": "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\n", 177 | "text/plain": [ 178 | "" 179 | ] 180 | }, 181 | "metadata": {}, 182 | "output_type": "display_data" 183 | } 184 | ], 185 | "source": [ 186 | "plt.figure()\n", 187 | "\n", 188 | "plt.plot(X[:, 0], initial_local_models, '.k')" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": 9, 194 | "metadata": {}, 195 | "outputs": [ 196 | { 197 | "data": { 198 | "text/plain": [ 199 | "[,\n", 200 | " ,\n", 201 | " ,\n", 202 | " ,\n", 203 | " ,\n", 204 | " ,\n", 205 | " ,\n", 206 | " ]" 207 | ] 208 | }, 209 | "execution_count": 9, 210 | "metadata": {}, 211 | "output_type": "execute_result" 212 | }, 213 | { 214 | "data": { 215 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4xLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvAOZPmwAAIABJREFUeJztnX+UHNV157+3qn9IskWUaeSMQUgYS+uVWC2/5gzpEIth5Qw/1jFjKdkFDxkMNqMRoz2RnfVIOhgfjvEOltYnmSRos93mR9Sx1vZuhrCQxSsRMh072w1mCNhCJGDEJhhsx2R28TrHUc9M990/uquprukf1d2vqt6rfp9z6kxXd03VrVev7rvvvvvuI2aGRqPRaMKFEbQAGo1GoxGPVu4ajUYTQrRy12g0mhCilbtGo9GEEK3cNRqNJoRo5a7RaDQhRCt3jUajCSFauWs0Gk0I0cpdo9FoQkgkqAufe+65fOGFFwZ1eY1Go1GS55577h+YeX2r4wJT7hdeeCHm5+eDurxGo9EoCRH9nZvjtFtGo9FoQohW7hqNRhNCtHLXaDSaEKKVu0aj0YQQrdw1Go0mhLRU7kT0EBH9mIhebPA7EdHvEdGrRPRdIrpcvJgajUajaQc3lvsfAriuye/XA9hS2cYB/EH3YsnBLbfcgnPOOQeXXnop8vl80OIIIZ1O49prr0U6nQ5alJYcOHAAGzZswNVXXx1I+efzeezduxd79+4N9Pmn02lceeWV+OhHPxqYHLLVGxnKpBUHDhzAli1bcODAgWAEYOaWG4ALAbzY4LcUgJtt+y8DeG+rc15xxRUsK7lcji+99FIGUN1M0+RcLhe0aF2RSqVq7mlkZETKe8rlcrxjx44aWSORiK+y5nI5jsVi1evH4/FAysr5zIiIU6mUb9fP5XI8MjIiVb1xlolpmjwxMSFNXa5Xf6empoSdH8A8u9Hbrg5qrtz/FMAv2/afAjDQ4NhxAPMA5jdu3CjsZkWSy+V49erVNQ/G2qanp4MWryNyuRxPT0/z4ODginsiIh4dHQ1axCqpVIqj0Wjd8h8eHvbtBZ6enmYiqimnIJ7/8PBw3Wfmh4Jv9i5Eo9HAlGmjMlm9enXgCr5RmW3evFnYNdwqd18HVJk5zcwDzDywfn3L2bOBkM1msbi4uOJ70zQxNDTkv0Bdkk6nsWPHDnz2s5/F888/v+J3Zsbx48eD6zrayOfzmJycxNLSUt3fn3zySezYscNz10A+n8frr78O0zSr38VisUCe/+7du1d8x8zYt2+f5+6IRu8CACwtLeHgwYOeXr8RjcpkcXER2WzWf4FsNCqzXbt2+S+MmxYAPeKWyeVyPDExwbFYjE3TZMMweM2aNXzJJZdwLperWsBBWwduyeVybJpm1XowDINHRkbqWvAiLYtOmZ6eZsMwauSt5CCqsaK9tBoty8s0TY7H4zwyMhJ4l39qaqrm/lGxVCcmJjy9rr0sIpEIv+td76qRwTCMwMollUrx4OAg79ixg+PxOJumKZXlbpomm6bJGzZsEOqSYfbXLfOvAXwDAAH4RQDfdnNO2ZS786V2vtD232WoRG6YmJhoOG4wOjrqmU+wU6wyNgyDI5FI1fWQy+U4EonUKBWvXCTT09PVBtE0zUBcMfWMCMv3bW/8TNP03D1jl8Xp6/byOTSSoZPf/cZreYQpdwBfBfBDAEsA3gDwCQATACYqvxOAowDOADiFBv525yabcm/1Utt/R2VQSXacyt0p89TUFG/evFkKxW7R6MWwfPGGYXjauAbdiLe6z4mJiRor3u+B5qmpKTYMw/PnYNHJ80ilUjw8POzrwLOfCLXcvdhkU+6tKlEul1sx0Cd75cnlchyPx5mIAov2EIlfFlpQlmA9N5rTyHDWQ7+sZ6cMfpWP3VXn5l6dvQvZ39FO0Mq9DazKmkqlmlZap696cHDQZ0nbp50XUbbuba/RzI1mJ5VKcSQS8c16DpKpqam2lLUzkmZ4eNgnSf1DK3eXtPOiOK2CIMPBRBO0O0J2/Ojqt3Kj2ZGhIfZahk7GWlSZy9ENWrm7oJMurn1CR1ADbl4gw0BiO/ip3Pzq6qvkRvPDGHCOL7g1pqxImkgkIqWx0m3d1crdBc7QOzeDU40iOlRHJcvdb1n97OrLYJG7wWtjwGm1txsZJKuxIqLuulXuPZ0VcmhoCPF4HIZhIBqN4ujRo0gmk03/J5lMYmZmBqZpolgsYu/evVJMAOqWZDKJp556Cvfeey+eeuqpluUginw+j/vuu6+tCTnWRJFisSh04kojWZyTZupNohF1bQA4dOiQb+XfKUNDQ4jFYjBN05MJXkeOHMHy8nJ1/6qrrsL4+Hjb8hmGASJCIpEQKl+neFV36+KmBfBik8FyZ+7MUnJOTUdIR+W9ptPwRi8s91bn9NLnLlOvqZ379LKXsXXr1q6DF/wKn20HPy33nlfunZDL5WrcOQjpqLyXdDsxSbRiCbIbL4sLQZYwQmdIaKey+FGundRD7XP3mG4L2OmHlSH5lpU+Iejp8m5w9n6CjjwK0nqWxXKXJYzQGTW0Y8eOjs5jlSsReZIgL6jnppV7E0Q8FFleBAtn5E8sFpNawTutxE5nyYp0lwQ5mCnDQGqnlrto2Z3pcrvJoeNlmg17NI+fPS6t3JsgorsmSjmJwmntBJWi1i3tzjyshyxuhDDRbmMp2nqtl6u9m3Nu2LCh5nwbNmzoSj4LK2w1CGPKrXLvyWgZESP94+PjmJqaqo7G//7v/75UK8IYhtFVBEMnUSztYEUqmaaJeDzekayzs7M1+w8++KAg6XqX8fFxnDhxwnVkiujoD+czveKKK7qKHLroooua7ndKNputRvMQEW6//Xb5IpzctABebKr73JnlGQhjfmflICLqOlugX77Ebp9BmGcMq4LXlnu3vTH74KzI1dSCHCeBS8s9ElirEjDJZLLrltbqASwuLga2mINFMplENptFNpvF0NBQV/dWzxrzwirp9hmMj4/jG9/4Bh599FEAQKlU8kxWTX2s+REi6h2Aao9hdnYWu3fvbiu2vZF83/rWt5DNZpFIJKo9i27lfPTRR9HX14f3v//9+OIXvyhnnXPTAnixBT2gKmoASIaBMNHIEr3hBnuPRfZBZE1wiKzTzmRmfo+3QVvu9Umn09i3bx+KxSLi8XjXszFF9ABkQ7Q15jVEVPNXo3GSzWZRKBRQKpVQKBS66uE98sgjK/YPHz4sQkyh9NSAqn2NTvtD1qwkmUx6Ng1e5GCtNbDFzFheXtbPU1OXRCKBUqkEoOy+6yYdwZVXXtl0XxZ6ynLPZrPVBwyou+i1yuTzeezcubM6TtFtz0mmcQ9N5+TzeU97igsLCzAMA6VSCYZhYGFhoeNzrV27tvqZiHDxxReLEFE4PaXcrfC7QqEAwzBw//33S+9yCBuiB2tVcyFpViK6wa+H9e53awTk83k88MAD1X2ZDYqeUu5aEQRPIpEAEcEwDGEvRhjHPXoJP6KzRL37mUymJlvl9ddfL23d6ynlDmhFECT2wexIJIKZmRn9LDS+uda8ePf7+/uFnk8kPTWgqgkO+2A2M6NYLHbl99SEh6DWEuiEsbExxONxEBHi8TjGxsaCFqkhPWe5e4nXg0Iq48dgti5/NVHpuSWTSczNzakhr5tgeC+2oNMPiCaoiT+qTKLyenlC1SZeyfTMgs6GqcpzkwXoSUz+4teUfTt+RBlY1+nWUvF6MDuI8u8Ev56ZKvKInFykqUX73AXh9ZqS9fBjPUbr5b/77ruxc+fOjice3XLLLfjwhz+M06dPe/LyBlH+neDrGpoKyCNycpGmFm25CyKIMEs/ogxEWMS33HILjh8/DgDVv1/5yleEymmVfyaTEXpe0cg26Uq0PO328kROLtI4cOO78WILm889KLz2l4rwifb19dUkWurr6/NAUn/9t92Uu5eLbXeCqDrUSflrn3v7QK/EpBFFty+/c6kzr9ab9Su/fjeZKMOszOzlT0Qtl8ez6lUqlZJqgFl2tHLXSEMul+NLLrmE165d6+lC4n4pTueShu2s8SnTAi+isRo9q1zi8XjDZxDmRs5r3Cp3PaCq8RRrQPbFF1/E8vIyJicnPbuWCpNhVBn47YRkMonbb7+9mnq5WZbOoAdyewFXyp2IriOil4noVSI6WOf3jUQ0R0TPE9F3iegG8aJqVMTvl9jLVMUW3cxSVKEB6oaxsTGsWrWqZeOlYiPn9brCoqGyld/kACITwCsAfgXAGwCeBXAzM79kOyYN4Hlm/gMi2gbgCWa+sNl5BwYGeH5+vkvxNbITdBy1V6g0q9Jv3JaNSmUoUz0moueYeaDVcW5CIQcBvMrMr1VO/DUANwJ4yXYMAzin8vnnAPygPXE1KtDJyxjWTJw6AV1j3JaNSmWoyiQ5O26U+/kAvm/bfwOAc+mRewCcJKJ/B+BdAD4kRDqNNHRjucj6EqtkOWqCRbb5CW4QNaB6M4A/ZOYNAG4A8EdEtOLcRDRORPNENP/WW28JurTGD8I2ACZq5m271/TbZ5tOp3HttdcinU77ds2wcuutt+KOO+5QxrXoxnJ/E8AFtv0Nle/sfALAdQDAzHkiWgXgXAA/th/EzGkAaaDsc+9QZk0AqGi5NMPvbnYQPtt0Oo09e/YAAE6ePAkAGB8f9/SaKtKqB+d8djKn+bXjxnJ/FsAWInofEcUA3ATgMccxrwPYCQBEtBXAKgCBm+aqjW7LTNiiPPyO1gii5zM7O9t0X1PWEddccw3uuusuXHPNNXV1haq91paWOzMvE9E+ACcAmAAeYubTRPR5lIPpHwPwWwC+TESfQnlw9ePcKgzHY2QY3Q6bT1dW33kn+D3QG0TPZ/fu3VWL3drX1JLJZFAoFAAAhUIBmUxmRV1QtdfqKnEYMz8B4AnHd5+zfX4JwFViReuOoEe3ZWhcNM3xs7EKImrIcsHMzs5i9+7d2iXTIcpGfLmZxurF5nX6gVwux/F4nImo6TRorwjzNHON+si2YEhQdJMnKCigF+soN1z2v34yNDSESCSCUqmESCSiTFfODWFzN/mBTGWme5XvkEwmkc1mpXk2Igmtcs9msygWi2AuL8YcxKSDIBsXr9CKoX3y+TyGhoawtLSEaDQa+ASYoF2WshGmsSQ7oU0cFnTuinqNSxhQNXIgSDKZDBYXF8HMWFxcDHxBEb/ejXrRaqpFsKkmr53QWu5BD4KoOsLeirDeV69x6623Aign+vJq3V1nDw+AUr0+1XupoVXuQLDdLVWWfWuXoBtNFRkbG8PDDz8sxSQYvybkNOrhqeQOUt19FWrlLgPHjh3D4uIijh071nXLL8ugXFh9lF6RTCYxNzcnxbPzS2HV6+GdOnUKRATDMJTo9aneS9XK3UNEvkiqdxF7HVkaRL8UlrOHBwD79+9HqVSCaZqYmZmRojzsOI0n1XupWrl7iMgXKZvNolAooFQqoVAoKNdFlA1ZekF+46fCsjdo9913HxYXF1EqlUBEWFhY8Oy6ndDIeJKlUe4Erdw9ROSL9Pbbb6NUKgEASqUSEomEKDGFI7vi7PVeUBAKS3YXh+r+9Xpo5e4xIl6kfD6P3/md36nuy2j5WKigOP18kWVv6PxCdheH7I1PJ2jlrgBWzLyFaZpSVL56iksFC8ivF1mFhs5PZHZxyN74dIJW7gowNDSEeDyOQqEA0zRx//33B175GikuFdIu+PUiq9DQad7B2fio3uvSyl0BZLQqmikuFdIu+GFFhrGr3yuEodellbtPdGsFyNalbaS4stkslpeXwcxYXl7uaWtVxkZZ444w9LpCp9xl7EqFwQpw0khxJRIJKaN6gqgXstVF2eSRmTD0ukKl3GXLvmcRBiugHvV6EwsLCzAMA6VSCYZhSBHVE0TjKluDLuu7ITNe59/xmlBlhZQt+57F0NAQTNMEEUkT6eIV1uCvaZqIx+NS3Gu9xjWM12yGrO+GjKTTaVx99dVIp9M4duxY0OJ0TKgsd5khopq/YUVGP3MQXewwdOt7kXw+j8nJSSwvLwOA0rPBQ6XcZcq+Z6fXBhllG/wNosGRrZGT9d2QjWw2Wx0zAuSZU9IJFFS42sDAAM/Pzws/r4yDRrL5XzW9iYzvhmxY72qhUIBhGDh69Kh0C4sT0XPMPNDyuDApd5krr8yyaTSad5D9Xe055a6tY41G0wu4Ve6hiZaRLTpBIycqr4mp8Yd8Po+9e/di7969SteT0Ayo6ugETSt0707Tinw+j2uuuQaFQgEA8NBDDykbABEay92KTrj33nv1S+szqljDundXRpXnFQRWHbFYWlpStp6ExnIH5AvB6wVUsoa97N3JPghn4efzUqVM7Fh1xLLcDcOQJoVG2zBzINsVV1zBGvWZnp5m0zQZAJumydPT00GL1JRcLsfT09Ocy+WEnnP16tVsmiavXr1a6LlF49fzUqlMnORyOR4ZGWHTNNkwDOnkBzDPLnRsaNwymmCwLB3TNJUY60gmkzh06JBQS1Ild49fz0ulMnGSTCYxODgIoJz8TjX5LULlltH4j2wzMVvhhavA6e5JJBK47777pCwP63l5nVtG9QAH1eUHQhTnrtG0wkt/s9VoJBIJ7N+/X+oxCL/87ir63O3IKr/QOHciuo6IXiaiV4noYINj/g0RvUREp4nov7QrsEbjNV66Cix3z8LCgvTuCL9cJl64wPxEdflbKnciMgEcBXA9gG0AbiaibY5jtgA4BOAqZr4YwH4PZNVIiiqhdX74m1UYgwhKRlXqiR0VZbZw43MfBPAqM78GAET0NQA3AnjJdswdAI4y8/8FAGb+sWhBNXKiUiikl+MDdreM7Is8BDFOolI9sVBRZjtulPv5AL5v238DwJWOY/4ZABDR/wJgAriHmf+n80RENA5gHAA2btzYibw9g6z+Pif1uvgyy+vFXAh7JkFrBap4PC51Wl2/54SoVk8ANWW2IypaJgJgC4AhABsAfJOItjPz2/aDmDkNIA2UB1QFXTt0qGQxhCGqoFssJWBfO1blRR68QMV6oqLMdtwo9zcBXGDb31D5zs4bAJ5h5iUA/5uIXkFZ2T8rRMoeQyWLQbVQSAuRPSP7rEYZFweXARXriYoy23Gj3J8FsIWI3oeyUr8JwMccxzwK4GYADxPRuSi7aV4TKWgjVHFftINqFoNqaR9E94wsJXDPPffgySefLM8OlGRx8CBo9E5an63oHNnqTD25VavbNbiZxgrgBgCvADgD4K7Kd58H8JHKZwLw2ygPsp4CcFOrc4pIP6DyFOdWeDFNXlPGqyn4Ya6PbmlWBjKXj8yyOYHL9AOufO7M/ASAJxzffc72mQF8urL5hkrui3ZR2mKQHK96Rqp340WQyWRw9uxZMPOKd1Lm97WVbCp6CJROP6Ca+0IjB14q4V5ulPP5PB566CGrt49IJFLzTsr8vjaTTaUABztKK3dtKWk6pZeVsFdks1kUi0UAABHhtttuW+Fzl/V9bSabzD2OZiit3IHwvaQqdv808pJOpzE7O4vdu3djfHzc02s5rd96cf4yv6+NZLNHQxGROlFQbhzzXmw6n/tKcrkcx2IxJiKOxWJSD+o0oxcHg2W851QqxQCqWyqV8vyaMpaDCFKpFEejUSnyu0PkgKrGHzKZTHWJr8XFRWQyGWmtnEao5J8U1UuS9Z5nZ2dX7HttvctsmXfDwsICSqVSTX532e9TL9ahEUo2m0WhUECxWKzO0pQRSyHffffd2LlzZ1eJofzKstguu3fvbrpvoXJyLL9QISGcE225S8TY2Bgefvjhpj5L2UkkEkrM0hQ5SCZrFIhlpTfzucva65ANmQeDG6GVu0Qkk0nMzc0pU4HquTUWFhZgGEY1gZasszRFKuRkMomZmZmqEpXpuY2Pjzd1xagaCRIEyrmc3Djmvdj0gKraNJrRp9KgsKjBP3tZxGIxnpiYkPq+7ag0M1NTBmEfUNUhg8HSzOIjopq/MuBl3hB7WRSLRaRSKRw7dkwJF4eK7gaNO5RU7mH1E6rUYDVya2SzWSwvL4OZsby8LEU33+v6YpWFNe2e60y9lxnl3A0aVygZLSNrdEI3iIze8APL4rv33ntrlKWMUQVe1xerLPbs2YN4PC7VvWt6FyUtd1mjE7pBxYGtehafjN18P+qLVRaXXXaZlAOrmsao1GNuB2IOZkGkgYEBnp+f7/j/w/ZAwupqkgU/6ot+huqRz+cxNDSEpaUlRKNRJYwqInqOmQdaHaek5Q6Ez08oo8UbJvyoLyr2vkSgsqHVyaxwVe5XWeUeRsLWYPUaYXQXtqLXeiv5fB7XXHNN9X7n5uakvV8lB1Q1GhlpNMgcZlQPbhgbG0M8HgcRIR6Pt5wVnslkUCgUwMwoFArIZDI+Sdo+ylnuqnSJwox+Bo3ptd6X6r2VbmeF/+hHP/JIsu5RakC117qAMqKfgcZJLzX2+XweO3bswPLyMgAgHo/77ppxO6CqlFtG9S5gGNDPoDW9lmUxmUzi0KFDoVfsQPleP/nJT1b3ZX4HlHLLqN4FDAP6GTRH92zCz09/+tPqZ2bG6dOnA5SmMUopdx0uGDz6GTSnV8MhO0FVd84zzzzTdF8WlFLuQLgHrFSp7GF+Bt2iezbuULmHs2vXLhw5cqRmX0aUU+5hReXKrnkH1Xs27Syo3Y0xonIP5/DhwwCA48eP4/3vfz9GRkYClqgBbvICe7HpfO61TE9Ps2maDIBN0+Tp6emgReo5wrq4s1vaWVC72zzwqueRD1J+uMznrlS0TJiRMZuikzBHgaiWldML6i2o3Yhuo6ZUn/ClQtSYdstIguzd+bC7jVR2E4hi9+7dOHnyZM1+I0SMLag8dmPdf6FQgGEYcq4V7Ma892LTbhm1CLvbSHU3gShSqRQPDw83dclYaDdWiiORCBuG4WudQdiX2dP4S9ijQNrtObUz8KgSrRbUtqOy5S2ChYUFMDNKpZKUvT2t3CVD1nDIbtxGst6TE7fKKp1OY8+ePQBQdWOEScH7jSr1w4n0Bo8b8x7AdQBeBvAqgINNjtuN8kj7QKtzarfMSsLoGgjjPQ0PD9dElQwPDwctkrKoXj+CcE1BVLQMEZkAjgK4HsA2ADcT0bY6x60F8JsA5JyupQDZbBaFQgHFYhGFQkHKEfh2USGqoF2cA43NBh41zVG9zsucV8eNW2YQwKvM/BoAENHXANwI4CXHcfcCOAzgM0Il7CESiQRKpRIAoFQqyTkC3yZKRBW0ieWCCaPP3W/CWOdlwU2c+/kAvm/bf6PyXRUiuhzABcz8PwTK1nMsLCzAMMqPxDAMLCwsBCxR9ySTSczMzAAAlpaWMDk5GYoY8vHxcZw4caInFbvI+Q5hrPOy0PUkJiIyAPw2gN9ycew4Ec0T0fxbb73V7aVDx9DQEOLxOEzTRDwel2+ApkOOHz9etc6Wl5dx8ODBgCVqTpgna3VLOp3G1Vdfjc9+9rNCJnuFtc7LgBu3zJsALrDtb6h8Z7EWwL8AkCUiAOgH8BgRfYSZa1bjYOY0gDRQXqyjC7lDiewTmTrlzJkzTfdlIuyTtbohn8/jzjvvRLFYBICqj7yb8glrnZcBN8r9WQBbiOh9KCv1mwB8zPqRmX8C4Fxrn4iyAP69U7Fr3CFj7HC3oWqjo6M1WfRGR0dFiicUPVO1MZlMpqrYAYCIhFjaMtb5MNBSuTPzMhHtA3ACgAngIWY+TUSfRzkk5zGvhexFZIn9FWHJWln0HnnkEezatau6LyPSxy4HiHO90KuuukorZYlxNYmJmZ8A8ITju881OHaoe7F6G5lcA6Is2cOHD2NkZATZbBb5fF5apaDdBI3p7++v2d+2bUVEtEYi9AxVCZHJNSDKkrUaLCsk8ujRo9JGmmg3QX3Gxsbw8MMPV+vC2NhY0CJpmqCVu4TI5BoQZclak1VKpRJKpRL27duH7du3ayWqEMlkEnNzc570amRxQ4YJrdwlRDbXgAhLdmhoCIZhVEMii8WiHqxUEC96NTK5IcOEXqxDUmSe1twJyWQSR48eRTQahWEYPRHTrOPl3RHGFBUyoC13jW+Mj49j+/btyGQyQYviim5cBdoadY9MbsgwoZW7xneOHTuGxcVFHDt2TFql161ylmlQXARe5q+XzQ0ZFrRy1/iKKkrPKeeRI0fws5/9zLVyC5M16kf+ej8ilHpu0NZNXmAvNp3PvTdRJX+3JadhGGwYRk3+djdL0FnnUH0Zulwux5s3b1Y+f30ul+NYLMZExLFYTOlnAlH53DUakaiy6r2VzdI0zWqEj8Xs7Kzrc6g8KG65ppy5gFTMX5/JZLC4uAhmxuLioqfjPrIMpGu3jMZ3VJkktLCwsEKxA2oqt06wXFPMDMMwcNFFF+Ezn/mMtJPPZECmgXRtuWs0DbD85qZpIhqNYnBwEKlUqi3lJosV1wn2+4/H48hkMsoq9rGxMcTjcRAR4vG4Z7NrZQrr1Ja7pi49N/hUh26jOGSy4jrBck1ZUTIqye7Ey9m1dqQaSHfjmPdi67UBVZUG11QZ9JSd6elpNk2TAbBpmjw9PR20SG2h60FneP2uw+WAqrbcfUA1C86vcMWw9w6ksuI6QJWwVdmQZUxJK3cfsCfNErF6jdf4oZRUa/A6QfXJOfZ6YJomXn/9dV/SNYe90fcNN+a9F1svuWVSqVRHcdJB4nXXUnWXRa+Qy+V4YmKCo9EoExHH43FP3TNeuIJSqRQPDw/7/t5NTU3x5s2beWpqSuh5od0y8mCt8F4qlZRZ4d3rruXQ0FA1htw0TeVcFr1CMplEJpPB0tISgPK6qZlMxrO6IbqX68fs2nocOHCgurSk9dfvFch0KKQP6BXe60NEYGYUi0WcOnUqaHE0EpBIJKpzC0qlEhKJRFfne/DBB5vue8UjjzzSdN8PtHL3ARGzMlWOl65HNputWoPFYhH79u0Lzb2FjbGxMcRiMRCR5yswWb1cAEJ6uatWrWq67xW7du1quu8H2i3jE924OcI4+KjK4h3W4N7bb7+NF154wZOsiLKTTCaRzWZ9GeS0ermFQgGmaXZtuW/btg3f/OY3a/b9QIpF4d045r3YemlAtVvsg49ExBMTE0GLJIRUKsXRaJQNw5Ayjtoa3CMi5QbEVSaVSlXre7f9rh76AAAYzklEQVRJvnK5HMfjcV8Gg/0COnGYHIhwpwwNDSESKXeymBkPPPBAKFwY4+Pj+Iu/+At84QtfENYbEem+ymQyOHv2LMrv0zu4TRzmlVxh5/nnn0exWAQAIUm+brvtNuzZswdzc3PS9Qw9xU0L4MXWC5a7yLCukZGRGusxLNa7SESWt5Ui1l7m6NByD9NMTz9mWk9MTAip62EqdzvQlnvwiEwi1N/fL06wkCKyvLPZbNV6JCLs2LEDw8PDbScOs85VKBRQLBar4X3dEkRPwBr7ufvuu7Fz507Pri0qyZdMSbyCQCt3D0kkEjAMA4ZhdD3T04+sdqq7DuxZDLstb/u5Vq1ahS9+8Ys4ceJER4OposP7/FKyTrLZLM6ePYtisYizZ896piytJF833ngjLrnkko7DZEXWBxXR0TIekc/nsX//fhSLRRiGgZmZma78fV5ntQtDRI7I6f4izyV6EltQOV/efvvt6vgDM+P06dOeXevUqVN49NFHAQDf/va3AbQ/+Uj19A/dopW7R9hn2gEQMivVy1mjYUkSJbKMRJ3LCu8TlasnkUiAiIT0CNvhhRdeqNn/6le/isnJSU/qiXPQenZ2tm3l3us5arRbxiNEd8W9pte7sF4icmlBq0dopW3otkfoJJ1O49prr0U6nV7xW70VqLxyzTiv1e7qV0G5rmRCW+4eoVo+mTB0YWW21ET1AqweVqlUAhEJrVet8rCMj4/jzJkz+NKXvgQAnqbS2L59O6LRKJaWlhCNRrF9+/a2/j8sPdFu0MrdI0R3xf1AljzUnSByzEDmRsLLdMxuXCGHDx/GyMiI5+WTzWZrer7tKmfVc+mLQCt3jwiDJawSoiw12QeWvaxXu3fvrlrs1n4jGbwuE0s5FwoFGIbRtltTv39wN4kJwHUAXgbwKoCDdX7/NICXAHwXwFMANrU6Zy9MYtL4h6gJK17mmRcxAcjrSURB5T5vJEskEpE2PUVQwOUkJjeK3QRwBsBFAGIAvgNgm+OYawCsqXzeC+Drrc6rlbtGNKKUp5tGol0lKKLxCeuMy0boBV3q41a5u3HLDAJ4lZlfAwAi+hqAGyuWumX9z9mOfxrALe32IDSabhHhLnDTne9kAQgRbqNeGyS0u2aIyLVrJp1OY3Z2ticzeNbQSvsD+DUAD9j2fwPA/U2Ovx/AZxv8Ng5gHsD8xo0bvW/iNMrhR+6SbhkeHq7JfTI8PNzyf8JoufvxrNrNHKrCkpbdlhsEumVcK3eULfanAcRbnVe7ZTROZFNejehUgajgc29HDj+eVbuumU4aXj8RUW5ulbubSUxvArjAtr+h8l0NRPQhAHcB+AgzF1ycVxMwBw4cwJYtW3DgwIGgRQEQfKInt7l1xsfHkUql2k4klkwmcejQoa7TInR7Died5BTy61lZ6a6JCJFIpGVIY7eTn7zG1zreSvujHC75GoD34Z0B1Ysdx1yG8qDrFjctCofUcg/Cqur0mlNTUzUWjugV2jvBsmoMw+BIJOJrl1qFXoMX9avT+/arvKzUy0TkeuEOmSJ+nPhpubtSxABuAPBKRYHfVfnu8yhb6QDwZwD+HsALle2xVucMm3IPQjl0c83NmzfXKPfNmzd7KKl7glqdSfbIDK/CAru5bz+MGdmfSyf45XN3NYmJmZ8A8ITju8/ZPn+ojc5CKAkikqGba+7atQtHjhyp2ZeBhYUFlEollEolXyNCZJ7RmM/nsW/fPiwvLwNANSe8qKRmnd63n5OZZHwuneLXTHA9Q1UQQVTCbq45MjKCp59+Gq+99ho+9rGPBbOAbx06uScR6QJkntGYtS0cAgCGYQirXyLu28t0DTI/F+lxY957sYXNLcOsjs9ddv9yO/ck+73Uo91nZl/k2TRNqXzJKpa/6kCkW0bjjiASb3VyTdknw1j3lE6ncc899zSdjCL7vTjpJHfNqVOnqi4Z0zTbzpDoJaqVfy+h87n3GPl8Hq+//jpM05Q6d7s1C/TkyZPYs2dP3fzigDx56N2GE7YbCpfP5zE5OYlisQhmxvLyspDwOVFLKspS/po6uDHvvdjC6JaRHXv3PhqN8sTEhLTd6MHBwZponsHBwYbHBh361o5rol03xvT0NBNRtRyi0WjXz0x0RJIsE6t6BWi3jD/InPvbSSaTQaFQnl+2tLQEANLKfN5559Xsr1q1qu5x1spEi4uL+Na3voXt27f7fk9Z25KKrSJZkskkZmZmqrlPWsmaSCSscGQAwKc+9amuV3KanJwUGnkT9DoAKr2DfqKVexfInvtbZaampvD4449Xo0SeeeYZ5PP5FeXbjc9XlFJoZ0nFdhsj54pe69at61hOoHYRDKDsw1fZlaLfwcZon3sXHDlyBP/0T/8U2HR5J83WvwSAsbExxGIxEBFisRjGxsZ8ltA9yWQSd9xxB4gIABr6mt9++20wc9uLRYtcY9NSwABaLqnYrs/dWtHLNE0hy9pZ5zMMA5FIBPfff7/SyjDolBVS48Z348Wmus/dmTxKhC9UpDyN0gmo5B9t5Z92e8/1EDnz0S5nPB5vOpbRSeigqGdmnSeVSnlWB/yuX70YigmR6Qe82FRX7lu3bq1RLNu2bQtUHmc2PMMwQlHRmymLbjIAilYKuVyOJyYmOBKJtMyDEtR8CK+VYFC5gVQyWETgVrlrt0wH5PN5vPzyyzXfnXvuuQFJU8aZ/Y6ZQ9FFtbIgAsDevXuxd+/eqgul2wyAt956K+644w4hflrr/5eXl8HMWFxcrEnv4DxWdGbHVvjhvrAPLC8vL2Pfvn1dh1q6IYjyVAE9oNoB2Wy2JoIBALZt2xaQNGXGx8dx5swZfOlLXwIzY9WqVVX/rOrRBPl8HkNDQ1hcXAQAPPzww5ibm6tObGp31R3nIJxXYw+PP/543UHgIPAjPcbQ0FB18BcAisWiZ5Oa8vk8MpkMgPJYkgxlLB1uzHsvNpXdMqlUquqvhQT+djvOLmoYFhl2xnoTUVc+cq8yDeZyuZp6YRiGVFkMZVw5qRNyuRxHo9FqObtNBRwWoH3u3jA1NcWGYVQVw8jIiLQVy/kSyKZs3GLl9LbuIx6Pd1zmlm88Ho974n8OQ2PaLV43IhMTEzVjLQCUrNedopW7BzijM7q1IL3GafFGIhFllY2llLuZVWsfVIzFYp7N0JVpgC/I2btelcOOHTtWvIcylLVfuFXu2ufeBg8++GDNPhFJPQHEObvx05/+tLK+SecsyE7GEeyDigCwceNGT8rDktXK39LuWIeoMRIrPw8AnDx5EgBcj0t0i5eTi86ePSvkPKHHTQvgxaaa5e50cUCSpema4ey+TkxMBC2SEOw5ctpx0fgZE20PC4xGo64tZ5E+6yAXi/ZyBSVnD1pVd2OnQIdCisU5bXtkZESaBS56DStHDjOjUChUoyaaYVnDMzMzuPfeez2fpm4PC1xaWsLk5GTLsMB8Po8777wTS0tLNXlqOiXIxaK9zBY5Pj6OqakpGIYBwzCEzNwNI9ot4xJnKNnU1FTQIrXksssuq9k/55xzApIkWILIPzI0NATTNGtyzrQKC8xkMjUrLnXr9us0VFQEXq+gdPjwYYyMjCCbzSKRSFQbQVXdjp7gxrz3YlPNLcMs10CZG8I0oGrHip6xViYaHBxs6vYIapFle+RMJBJpKafTjTYyMuKLnCqj0w/oaJmewBlREpZQyHrkcjkeGRlxnU8nKAXgVk7r2UWj0bbHEnqZoBruINHKXQCjo6O8du1avuSSS6R/0RpN7Ahz3LVzwLBZSFyQva5WeX/sPZFIJCL1Iird0OkzaPZ/2nLXyr1tRkdHa15I0zSlrjjOLr09Bt/+cgS9apFInFETkDQiqN78iOHh4Wp9CmtUk51Oo4fsDV+jmaiquUu7RSv3LrAqolNxyNzlcyqIeo2RU8nIPLu2HvVeYueElsHBQSnvyZrZbI2B2JVVLyj36enp6szudsZ/nC6tMJZNu2jl3iGNFLuslrs9R7d9kLGeZeR0D1gvmQpWfKP4b3vMu93tIeMchFwut2JtWMsF00ncvkp0Mv6TSqVqnqtb5R6m3mk9tHLvgFwux8PDwzUWRiwWk9bn7vQ3tlqEoZ4bo54PWDZyuRxHIpGGisF6bs77kvHlbmSlW4301NRUS8UkIhVDEDjHf5rV13qK3Y2B5azjMtaBbtHKvU3sPkFLgcg+QNNJpEAqleLBwcEVL47MYXfOLn29LJz1Gi4/Z2S6xW7BOu/DzcpSzoykqmVEtPc0LcPEGSY6NTW14lkSkStF7WzkN2/erFT5uEErd5dYVtDg4GCNYrcPeMlKN5ECzpWkLF+1bANT1vOJxWINV/hJpVK8efNmJSz3Rso9l8utuAd7j8oKqXQ2yrInr2uE3TBxNsj1epdbt251dd56jbwqrke3aOXeAntcsfOFktFit15u50SYThVyPStRtpCy0dFRJqKqL7qeG8IZ1dTI5y5Dw9XM57569eqGintqamrFb6pa7haNxrYabe0o50aNvYw9uU7Qyr0BlpI0TbPuyySjxV4vaZkIS8Q+8OR08UxMTASmDHO5XN20rk4/uzOSolE33N7DabWAtRf3Mj09zaOjozWuJbtyb2TFAqjbeFnloVq0k5NUKsXbtm1rqdgHBwfbPrdznMba+vv7lbfihSp3ANcBeBnAqwAO1vk9DuDrld+fAXBhq3P6odyd1poVM9uoEslgBVkKd2pqqir79PS051aIXQHGYrGaxSws5d9qwFYEVlRMveczMjLCExMTVX+tWwvPqTytMETrfF7djzWA2Kq+WdEy9Y7ZsGFD15asTDh97o16JCKUcqMAApXLj9m9cqfysY0hIhPAKwB+BcAbAJ4FcDMzv2Q75k4A/5KZJ4joJgAfZeZ/2+y8AwMDPD8/3/TabrDnvgaAI0eO4Ac/+AGGhobwu7/7u9VkUXNzc8hms7jrrrtgv2fTNPGrv/qr6O/vD3wtxgMHDtQsqkxEWLVqFWZmZrBv3z4sLS1Vf0ulUsITQVll+frrr+PLX/4yisViNfNeqVRCqVSCYRiIRCK4/fbbcdlll2FhYQGJRAILCwsdJYhyPr8PfvCDNcmz6mGaJpi5JksnAIyOjuIrX/lK3Wvs3LkTZ8+eRb36Ho/HMTc3BwDVRFTWfT3//PMAWq/TmU6nMTs7i/Xr1+N73/seVq1ahb/8y79cIaPF+eefj9HRURw+fHjFGrF21q9fj7feemvF94lEAu95z3uwf/9+XxOCtYMzL306ncbk5GS1Hll1qh2sep9Op/Hggw/ivPPOw/XXX9+w/l177bXVXPZ2hoeHceLECQDvPLtLL70U69at66o++wERPcfMAy0PbKX9ASQBnLDtHwJwyHHMCQDJyucIgH8Ayg1Ho61Ty33r1q3VWW5uW33YfJvO7+1W4po1azgSiVT/2o8bHBxc4S+t97s18s/MvGbNmhXHrVmzpu591ZPN2qanp2uubT/H8PAwr169moeHh7mvr2+FZe/8ztq3W7Kmadacq140jZvNmv5v/46Zm5abtRmGUdfN0s62Zs0ajsViHIvFeHR0tKZ8h4eHG1rHVv2o5zZxbn19fTXl2tfX19RCbLVZvaFGv59zzjmuztEIu5zW8+3r62PDMKqBA/XqkHWf1m/13EZ9fX3V81n/b4US2+uPNe+inhvUec5NmzY1vVfLjdioDuVyuZo63uiZWmXm9tnVe5ftm911ZOkB53vg/L0TdxOzQLcMgF8D8IBt/zcA3O845kUAG2z7ZwCc2+y8nSh3Z4RHO5uVPbDT/xe51VPwW7ZsaXj82rVr675YjSIL7Pcc9L22szVzYXSyWQq+kd/avr373e8O5J7Xrl3bVL5mDZK1XXjhhXXfF3vD3skmsv64uQ83W19fX9NzuWmgrfMws9A618oAZF5p6HSi4CGjcgcwDmAewPzGjRvbvim3D67RJlp5dLM56aTytxNt0Iub08qWcTMMo25kRzvb+vXrGymB0G2d9CgbbaLLKBKJNNUxzCsbk0gk0rYehMCVmN4EcIFtf0Plu7rHEFEEwM8BWHCeiJnTzDzAzAPr1693celaPvCBD7T9PxZr1qzB5Zdf3vH/i2TNmjUrvrv66qsbHt/X11f3uw9+8INNr2OaZvvCBUh/f7/Q811//fU1f5uxadMmodd2y8DAAHbt2tXwdzdlctttt9X9vl69aQeR9UdU+W7cuLHpuaLRqKvzWGXTbRnZufzyy1vqGOfvnuqkVtofZR/6awDeByAG4DsALnYcMwngP1c+3wTgv7Y6rwifu2EYHI/Hq/4rp1/a8pPZ3SDObpHdlxakz525dnadFali+c7tv1kWqfW9aJ+70w9r99U2+2td036/9cq83mb97+joaNVvbu+pbdq0qcafPjo6yn19fSueXyOfu3X8pk2bqn+dxzY7xhqbqedzZ2betGkTE1FVZiLirVu38rp163jdunXc399fjdLp7+9f4XOdmprizZs3V4+Lx+PVWH17+RmGUY1mWrduXcscOkH53A3D4P7+fu7r66sp32bPkIh4dHS0od9906ZN1fuyjiGi6vOyrtPK525/f5zHW/fj7CGo6HNvGS0DAER0A4AZACaAh5j5PxDR5ysXeYyIVgH4IwCXAfg/AG5i5teanVNUtIxGo9H0Em6jZVytocrMTwB4wvHd52yfzwL49XaF1Gg0Go03uPG5azQajUYxtHLXaDSaEKKVu0aj0YQQrdw1Go0mhGjlrtFoNCHEVSikJxcmegvA33Xwr+einLtGNmSVC5BXNlnlAuSVTVa5AHllk1UuoDPZNjFzy1mggSn3TiGieTcxnn4jq1yAvLLJKhcgr2yyygXIK5uscgHeyqbdMhqNRhNCtHLXaDSaEKKick8HLUADZJULkFc2WeUC5JVNVrkAeWWTVS7AQ9mU87lrNBqNpjUqWu4ajUajaYH0yp2I/iMR/Q0RfZeI/oSI1jU47joiepmIXiWigz7I9etEdJqISkTUcLSbiP6WiE4R0QtE5EsazDZk87vM+ojoSSL6XuXvzzc4rlgprxeI6DGPZWpaBkQUJ6KvV35/hogu9FKeNuT6OBG9ZSunT/ok10NE9GMierHB70REv1eR+7tE5MsiCi7kGiKin9jK63P1jvNArguIaI6IXqq8k79Z5xhvysxNXuAgNwDDACKVz4cBHK5zjIny6k8X4Z2c89s8lmsrgA8AyAIYaHLc36LFkoNByBZQmR0BcLDy+WC9Z1n57R99KqeWZQDgTtSuVfB1SeT6OBwrovlUZjsAXA7gxQa/3wDgGwAIwC8CeEYSuYYA/GkA5fVeAJdXPq8F8EqdZ+lJmUlvuTPzSWZeruw+jfJKUE4GAbzKzK8x8yKArwG40WO5/pqZX/byGp3iUjbfy6xy/mOVz8cAjHh8vVa4KQO7zH8MYCcRkQRyBQIzfxPlNRsacSOADJd5GsA6InqvBHIFAjP/kJn/qvL5pwD+GsD5jsM8KTPplbuD21Fu4ZycD+D7tv03sLIAg4IBnCSi54hoPGhhbARRZr/AzD+sfP4RgF9ocNwqIponoqeJyMsGwE0ZVI+pGBk/AZDwUCa3cgHA7ko3/o+J6II6vweBzO9ikoi+Q0TfIKKL/b54xaV3GYBnHD95UmauFuvwGiL6MwD1Fou8i5n/e+WYuwAsAzguk1wu+GVmfpOI3gPgSSL6m4qVIYNswmkml32Hma2lzOqxqVJmFwH4cyI6xcxnRMuqOI8D+CozF4hoD8q9i38VsEwy81co16t/rKws9yiALX5dnIjeDWAWwH5m/n9+XFMK5c7MH2r2OxF9HMCHAezkipPKgZtFvIXL5fIcb1b+/piI/gTlLnfXyl2AbL6XGRH9PRG9l5l/WOl2/rjBOawye42IsihbO14o93YWf3+Dmiz+7rdczGyX4QGUxzNkwJN61S12hcrMTxDRfyKic5nZ85wzRBRFWbEfZ+ZH6hziSZlJ75YhousATAH4CDP/rMFhzwLYQkTvI6IYygNfnkZZuIGI3kVEa63PKA8O1x3ND4AgyuwxALdWPt8KYEUPg4h+nojilc/nArgKwEseyeOmDOwy/xqAP29gYPgql8Mn+xGUfbky8BiAsUoEyC8C+InNFRcYRNRvjZUQ0SDKus/rRhqVaz4I4K+Z+bcbHOZNmfk9etzBaPOrKPujXqhsVuTCeQCecIw4v4KyhXeXD3J9FGXfWAHA3wM44ZQL5WiH71S2037I5Va2gMosAeApAN8D8GcA+irfDwB4oPL5lwCcqpTZKQCf8FimFWUA4PMoGxMAsArAf6vUw28DuMinZ9hKrvsqdeo7AOYA/HOf5PoqgB8CWKrUsU8AmAAwUfmdABytyH0KTSLJfJZrn628ngbwSz7J9csoj7t916bDbvCjzPQMVY1Gowkh0rtlNBqNRtM+WrlrNBpNCNHKXaPRaEKIVu4ajUYTQrRy12g0mhCilbtGo9GEEK3cNRqNJoRo5a7RaDQh5P8DdmoOrSA2HXYAAAAASUVORK5CYII=\n", 216 | "text/plain": [ 217 | "" 218 | ] 219 | }, 220 | "metadata": {}, 221 | "output_type": "display_data" 222 | } 223 | ], 224 | "source": [ 225 | "plt.figure()\n", 226 | "plt.plot(X[:, 0], final_local_models, '.k')" 227 | ] 228 | } 229 | ], 230 | "metadata": { 231 | "kernelspec": { 232 | "display_name": "Python 2", 233 | "language": "python", 234 | "name": "python2" 235 | }, 236 | "language_info": { 237 | "codemirror_mode": { 238 | "name": "ipython", 239 | "version": 2 240 | }, 241 | "file_extension": ".py", 242 | "mimetype": "text/x-python", 243 | "name": "python", 244 | "nbconvert_exporter": "python", 245 | "pygments_lexer": "ipython2", 246 | "version": "2.7.10" 247 | } 248 | }, 249 | "nbformat": 4, 250 | "nbformat_minor": 2 251 | } 252 | -------------------------------------------------------------------------------- /notebooks/demo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "from numpy import exp\n", 11 | "\n", 12 | "from lgr.options import Options\n", 13 | "from lgr.batchLGR.lgr import LGR" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": {}, 20 | "outputs": [], 21 | "source": [ 22 | "N = 200 \n", 23 | "D = 1 \n", 24 | "stds = 0.2\n", 25 | "seed = 411\n", 26 | "np.random.seed(seed)" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 3, 32 | "metadata": {}, 33 | "outputs": [], 34 | "source": [ 35 | "# plotting doesn't work for 2D data - but learning does\n", 36 | "def generate_2d_data():\n", 37 | " X = (np.random.rand(N, D) - 0.5)*2\n", 38 | " Yorig = np.vstack((exp(-X[:, 0] ** 2 * 10), exp(-X[:, 1] ** 2 * 50), 1.25 * exp(-(X[:, 0] ** 2 + X[:, 1] ** 2) * 5))).max(0)\n", 39 | " Y = np.reshape(Yorig, [N, 1]) + stds * np.random.randn(N, 1)\n", 40 | " return X, Y\n", 41 | "\n", 42 | "def generate_1d_data_simple():\n", 43 | " N = 200\n", 44 | " XX = ((np.random.rand(N,1)-.5)*4)+2;\n", 45 | " YY = np.sin(XX) +np.random.randn(N,1)*0.01\n", 46 | " return XX, YY\n", 47 | "\n", 48 | "def generate_1d_data_nonstationary():\n", 49 | " X = (np.random.rand(N, 1) - 0.5)*4\n", 50 | " Yorig = np.sin(2*X)+2*np.exp(-16*X*X)\n", 51 | " Y = np.reshape(Yorig, [N, 1]) + stds * np.random.randn(N, 1)\n", 52 | " return X, Y" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 4, 58 | "metadata": {}, 59 | "outputs": [ 60 | { 61 | "name": "stdout", 62 | "output_type": "stream", 63 | "text": [ 64 | "options: \n", 65 | " norm_out: 1.0\n", 66 | " max_iter: 100\n", 67 | " init_lambda: 0.3\n", 68 | " activ thresh: 0.4\n" 69 | ] 70 | } 71 | ], 72 | "source": [ 73 | "opt = Options(D)\n", 74 | "opt.activ_thresh = 0.4\n", 75 | "opt.print_options()" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 5, 81 | "metadata": {}, 82 | "outputs": [ 83 | { 84 | "name": "stdout", 85 | "output_type": "stream", 86 | "text": [ 87 | "initial nmse: 1.0554964710196393\n", 88 | "final nmse: 0.0556217516894\n" 89 | ] 90 | } 91 | ], 92 | "source": [ 93 | "X, Y = generate_1d_data_nonstationary()\n", 94 | "model = LGR(opt, D)\n", 95 | "debug = False\n", 96 | "model.initialize_local_models(X)\n", 97 | "initial_local_models = model.get_local_model_activations(X)\n", 98 | "nmse = model.run(X, Y, 100, debug)\n", 99 | "print \"final nmse: {}\".format(nmse[-1])" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": 6, 105 | "metadata": {}, 106 | "outputs": [], 107 | "source": [ 108 | "Yp = model.predict(X)\n", 109 | "final_local_models = model.get_local_model_activations(X)" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": 7, 115 | "metadata": {}, 116 | "outputs": [ 117 | { 118 | "data": { 119 | "text/plain": [ 120 | "" 121 | ] 122 | }, 123 | "execution_count": 7, 124 | "metadata": {}, 125 | "output_type": "execute_result" 126 | }, 127 | { 128 | "data": { 129 | "image/png": "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\n", 130 | "text/plain": [ 131 | "" 132 | ] 133 | }, 134 | "metadata": {}, 135 | "output_type": "display_data" 136 | } 137 | ], 138 | "source": [ 139 | "%matplotlib inline\n", 140 | "import matplotlib.pyplot as plt\n", 141 | "\n", 142 | "plt.figure(figsize=(10, 4))\n", 143 | "plt.subplot(121)\n", 144 | "plt.plot(X[:, 0], Y[:, 0], '.g', label='gt')\n", 145 | "plt.plot(X[:, 0], Yp[:, 0], '.b', label='predicted')\n", 146 | "plt.legend()\n", 147 | "plt.subplot(122)\n", 148 | "plt.plot(nmse, label='nmse')\n", 149 | "plt.legend()" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 8, 155 | "metadata": {}, 156 | "outputs": [ 157 | { 158 | "data": { 159 | "text/plain": [ 160 | "[,\n", 161 | " ,\n", 162 | " ,\n", 163 | " ,\n", 164 | " ,\n", 165 | " ,\n", 166 | " ,\n", 167 | " ]" 168 | ] 169 | }, 170 | "execution_count": 8, 171 | "metadata": {}, 172 | "output_type": "execute_result" 173 | }, 174 | { 175 | "data": { 176 | "image/png": "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\n", 177 | "text/plain": [ 178 | "" 179 | ] 180 | }, 181 | "metadata": {}, 182 | "output_type": "display_data" 183 | } 184 | ], 185 | "source": [ 186 | "plt.figure()\n", 187 | "\n", 188 | "plt.plot(X[:, 0], initial_local_models, '.k')" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": 9, 194 | "metadata": {}, 195 | "outputs": [ 196 | { 197 | "data": { 198 | "text/plain": [ 199 | "[,\n", 200 | " ,\n", 201 | " ,\n", 202 | " ,\n", 203 | " ,\n", 204 | " ,\n", 205 | " ,\n", 206 | " ]" 207 | ] 208 | }, 209 | "execution_count": 9, 210 | "metadata": {}, 211 | "output_type": "execute_result" 212 | }, 213 | { 214 | "data": { 215 | "image/png": "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\n", 216 | "text/plain": [ 217 | "" 218 | ] 219 | }, 220 | "metadata": {}, 221 | "output_type": "display_data" 222 | } 223 | ], 224 | "source": [ 225 | "plt.figure()\n", 226 | "plt.plot(X[:, 0], final_local_models, '.k')" 227 | ] 228 | } 229 | ], 230 | "metadata": { 231 | "kernelspec": { 232 | "display_name": "Python 2", 233 | "language": "python", 234 | "name": "python2" 235 | }, 236 | "language_info": { 237 | "codemirror_mode": { 238 | "name": "ipython", 239 | "version": 2 240 | }, 241 | "file_extension": ".py", 242 | "mimetype": "text/x-python", 243 | "name": "python", 244 | "nbconvert_exporter": "python", 245 | "pygments_lexer": "ipython2", 246 | "version": "2.7.10" 247 | } 248 | }, 249 | "nbformat": 4, 250 | "nbformat_minor": 2 251 | } 252 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | ###################################################################### 3 | # Copyright (c) 2017, Max Planck Society 4 | # \file setup.py 5 | # \author Franziska Meier 6 | ####################################################################### 7 | from setuptools import setup 8 | 9 | __author__ = 'Franziska Meier' 10 | __copyright__ = '2017, Max Planck Society' 11 | 12 | 13 | setup( 14 | name='lgr', 15 | author='Franziska Meier', 16 | author_email='franzi.meier@gmail.com', 17 | version=1.0, 18 | packages=['lgr'], 19 | package_dir={'lgr': ''}, 20 | install_requires=[ 21 | 'ipdb', 22 | 'numpy', 23 | 'jupyter', 24 | ], 25 | zip_safe=False 26 | ) 27 | --------------------------------------------------------------------------------