├── .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": "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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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------