Contents
Treffen vom 22. 9. 2016
Agenda
- Begrüßung (heute mal durch bschlapsi)
- Vorstellungsrunde: 2 first timers
Wiki, MailingLists, Twitter, Meetup, IRC: #pyugat on freenode, Flattr
- Anwesenheitsliste pflegen
Am Wiki anmelden & persönliche Seite anlegen (Kontaktinfos, Name, Interessen, Foto,…)
Mögliche Themen in FutureTalks eintragen
Nächsten Termin festlegen: war schon eingetragen: 2016-10-27
- Events
- Buchbesprechungen?
- Zeiteinteilung für den Abend festlegen
- Wer hat Kurzvorträge mitgebracht?
- Groben Zeitplan für Hauptvortrag festlegen
Programm
(Notes by daxim, with additions from ibu.)
Modulvorstellung: problog
- Aussagen mit Wahrscheinlichkeiten bewerten
- und neue Aussagen daraus generieren
- so wie ein Bayessches Netzwerk
problog-Kommando vorhanden nach der Installation
Codebeispiel: Verknüpfung und Inferenz von Aussagen, logische Dis- und Konjunktion, query-Befehl
Sampling: problog sample myprogram -N 1000 --with-probability --with-facts --estimate
- Evidenz hinzufügen: Sachen werden als sicher vorausgesetzt, z.B. kommen gewisse Kombinationen nie vor
mpe.pdf Most Probable Explanation hilft beim Verstehen von Implikationen, beim Rückschließen auf Symptome
- Erklärung von Deduktion, Induktion und Abduktion
konkretes Beispiel: warum ist der Vortragende nicht zu hören? problog mpe speaker_silent.pl
%% why do we understand the speaker so badly 0.7::speaker_loud. 0.95::door_closed. 0.5::window_closed. 0.99::wall_present. 0.9::loud :- speaker_loud. 1.0::loud :- environment_silent. 1.0::environment_silent :- door_closed, window_closed, wall_present. evidence(\+ loud). query(loud).
Add more evidence:
evidence(window_closed). evidence(speaker_loud).
Exclude most probable and 2nd most probable explanation:
mpe1 :- \+speaker_loud, \+window_closed, wall_present, door_closed. evidence(\+ mpe1). mpe2 :- \+speaker_loud, window_closed, wall_present, door_closed. evidence(\+ mpe2).
In general, understanding means mpe ist much more probable than 2nd-mpe.
Exercises with thp++
dis
>>> import dis >>> help(dis) >>> def example_function(a, b): .. return a + Bayessches >>> example_function <function example_function at 0x…> >>> dir(example_function) >>> example_function.__code__ >>> dir(example_function.__code__) >>> example_function.__code__.co_code b'|\x00\x00|\x01\x00\x17S' >>> [c for c in example_function.__code__.co_code] [124, 0, 0, 124, 1, 0, 23, 83] >>> example_function(42, 23) 65 >>> dis.dis(example_function) 2 0 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6 BINARY_ADD 7 RETURN_VALUES >>> example_function.__code__.co_varnames ('a', 'b') >>> def example2(a, b, c): return a+b/c >>> dis.dis(example2) >>> def example3(a, b): return a // b >>> dis.dis(example3) >>> def foo(): a = 0 b = 1 c = 2 return b/a+c >>> foo() >>> dis.distb() # Dies zeigt den genauen Ort an, wo die Exception auftrat, nicht nur die Zeile. … --> 24 BINARY_TRUE_DIVIDE >>> gen = (x*2 for x in range(10)) >>> gen <generator object <genexpr> at 0x…> >>> dis.dis(gen) >>> gen.gi_code >>> gen.gi_frame >>> gen.gi_running >>> next(gen) >>> next(gen) >>> next(gen) … … … >>> next(gen) StopIteration >>> dis.distb()
benannte Funktionsparameter
*args, **kwargs und *,foo,bar (Lone Star) Variablen als Default-Parameter werden zur Deklarationszeit angelegt: >>> def collectors_edition(name, gesammelt=[]): gesammelt.append(name) return gesammelt >>> collectors_edition('claus') ['claus'] >>> collectors_edition('dieter') ['claus', 'dieter']
... (Typ Ellipsis)
datetime(0,0) ist False in Py2, True in Py3
Livecoding
zum Schluss: Livecoding mit dem CSV-Modul
extrahieren von Teilen von gewissen Spalten
Parser für den Fall, dass ein split auf Komma nicht gelten soll, weil es sich innerhalb von Klammern befindet