Proseminar: Maschinelles Lernen
Dozent |
Johannes Eichner,
Lars Rosenbaum
|
Sprechstunde |
nach Vereinbarung |
Zeit |
dienstags, um 10:15 Uhr |
Umfang |
2 SWS, 4 LP |
Beginn |
Dienstag, den 06.11.2012, 10:15 Uhr |
Vorbesprechung |
Dienstag, den 16.10.2012, 10:00 Uhr, Raum A302 |
Ort |
Sand 14, Raum C311 |
Turnus |
jährlich |
Beschreibung
Maschinelle Lernverfahren spielen
eine wichtige Rolle bei der Datenanalyse und
Modellierung sowohl in der Industrie als auch in der
Forschung.
Diese Verfahren können aus Daten Modelle lernen und
diese Modelle auf unbekannte Instanzen anwenden. Beispiele
für die praktische Anwendung sind z.B.
Schrifterkennung, Bilderkennung, Warenkorbanalysen,
Spamfilter, oder Eigenschaftvorsage chemischer
Verbindungen.
In diesem Seminar werden grundlegende maschinelle
Lernverfahren, ihre theoretischen Grundlagen und deren
praktischen Anwendung vorgestellt. Zudem werden
Validierungsstrategien und Parameteroptimerungs-Methoden
vorgestellt.
Literatur wird in der Vorbesprechung angegeben. Eine Woche
vor dem Vortrag müssen die Vortragsfolien mit dem
Betreuer besprochen werden; der Student muss seine
Ausarbeitung spätestens zwei Wochen nach dem Vortrag
beim jeweiligen Betreuer abgeben. Der Vortrag und die
Ausarbeitung dürfen gerne in Englisch sein.
Themen
- Einfache Klassifikatoren: kNN, Naive Bayes, Decision Trees
- Entscheidungsbäume: C4.5 und ID3, Random Forests
- Regression und Klassifikation mit SVMs
- Optimierung und Evaluation von Maschinellen Lernverfahren
- Hidden-Markov-Modelle
- Neuronale Netze
- Ranking-Algorithmen
- Regression: Least-squares, Maximum Likelihood und Bayes
- Graph Kernels: Lernen mit problemspezifischen Ähnlichkeiten
- Lineare Diskriminanten: Fisher Linear Discriminants
/****************************************************************
* zeigeTeilnehmer
*
* Eingabeparameter: $seminar = ID des Seminars
*
* Zeigt alle Termine eines Seminares an.
* Noch offene Termine weisen eine "Anmelden"-Schaltfläche auf,
* bereits vergebene Temine zeigen den Namen des Referenten.
*
* 2000-03-15 S. Wiest WSI-RA University of Tuebingen
* 2005-10-27 A. Sung Anpassung für die neue Serverumgebung
* 2011-03-10 A. Masselli Überarbeitung: - neues CD der Uni
* - RA wird KS
* - CC der Email an Betreuer
* - Kommentare
* - Zeichenkodierung
* - Einfrieren älterer Veranstaltungen (Deaktivieren der Anmeldefunktion)
* - Identifikation der Veranstaltungen über URL der WWW-Seite
****************************************************************/
// Eingabeparameter für die neue php-Version aus den superglobals auslesen
if (!isset($url)) {
$url = $_GET['url'];
}
echo "";
// Sollen Anmeldebuttons gezeigt werden?
if (!isset($isActive)) {
$isActive = ($_GET['isActive'] == 'yes');
}
// Inkludiere Parameter
include_once("globalSettings.php");
// Variablen
$tableHead = "background-color:#f0ece1;";
$tableRowStyle = "height:28";
$rowHeight = "18";
$tableRow1st = "background-color:#f4f1f0";
$tableRow2nd = "background-color:#ffffff";
$anmeldenButton = "

";
$anmeldenURL = "/php/wwwseminar/anmeldung.php";
// Beginne Tabelle
// print "\n
\n";
print "\n\n\n";
// Ermittle, ob es sich um ein Praktikum handelt, und ob man sich anmelden kann
// Suche nach dem Schlüsselwort "Praktikum" im Titel des Seminars
$query = "SELECT titel,querycode FROM seminar WHERE seminarURL = '$url'";
$result = mysql_query($query);
$titel = mysql_result($result, 0,"titel");
$querycode = mysql_result($result, 0, "querycode");
$isPraktikum = (stristr($titel,"praktikum")!==false);
// Prüfe, ob Veranstaltung zum laufenden Semester gehört
$semester = getSemester($url);
// $isActive = ($semester == $currentSemester);
// Liste aller Termine einer Veranstaltung abrufen
$query = "SELECT * FROM termin
LEFT JOIN referent USING (ID_termin)
LEFT JOIN seminar USING (ID_seminar)
LEFT JOIN betreuer USING (betreuer)
WHERE (termin.datum > '$WAITDATE_SQL')
AND (seminarURL = '$url')
ORDER BY termin.datum, termin.ID_termin";
$result = mysql_query($query);
$number = mysql_numrows($result);
if ($number <= 0) { // wenn keine Termine gefunden
print "Themen werden so schnell wie möglich online gestellt.
";
// Liste aller Termine einer Veranstaltung abrufen
$query = "SELECT * FROM seminar
WHERE (seminarURL = '$url')";
$result = mysql_query($query);
$number = mysql_numrows($result);
if ($number <= 0) { // wenn kein Eintrag in DB vorhanden
// Veranstaltung eintragen
$querycode = getRandomString(8);
$query = "INSERT INTO seminar (titel, seminarURL, querycode)
VALUES ('Titel','$url','$querycode')";
$result = mysql_query($query);
}
}
else { // wenn Termine gefunden
$i = 0;
$HTMLrowcount = 0;
$ID_temin_old = -1;
if ($isPraktikum) {
// print " \n";
print "
\n";
print " Praktikumsplatz | \n";
print " Betreuung | \n";
print " Teilnehmer(in) | \n";
print "
\n";
while ($i < $number):
// Daten aus SQL-Abfrage-Ergebnis extrahieren
$ID_termin = mysql_result($result, $i, "ID_termin");
$betreuer = mysql_result($result, $i, "betreuer");
$betreuerURL = mysql_result($result, $i, "betreuer.url");
$maxReferenten = mysql_result($result, $i, "maxReferenten");
$vorname = htmlentities(mysql_result($result, $i, "vorname"));
$name = htmlentities(mysql_result($result, $i, "name"));
if (($vorname > "") || ($name > "")) {
$referent = $vorname . " " . $name;
} elseif ($maxReferenten > 0 and $isActive) {
$referent = "$anmeldenButton";
} else {
$referent = "";
}
// Wechselnder Hintergrund für gerade/ungerade Tabellenzeilen
// $style = ++$HTMLrowcount % 2 ? 'tr-even' : 'tr-odd';
// Ausgabe einer Tabellenzeile
// print " \n";
print "
\n";
$ii = $i + 1;
print " $ii | \n";
if ($betreuerURL != "") {
print " $betreuer | \n";
} else {
print " $betreuer | \n";
}
print " $referent | \n";
print "
\n";
$i++;
endwhile;
}
else { // wenn kein Praktikum
// print " \n";
print "
\n";
print " Datum | \n";
print " Thema | \n";
print " Betreuung | \n";
print " Referent(in) | \n";
print "
\n";
while ($i < $number):
// Daten aus SQL-Abfrage-Ergebnis extrahieren
$datum = formatDate(mysql_result($result,$i,"datum"));
$ID_termin = mysql_result($result,$i,"ID_termin");
$titel = mysql_result($result,$i,"titel");
$betreuer = mysql_result($result,$i,"betreuer");
$betreuerURL = mysql_result($result,$i,"betreuer.url");
$maxReferenten = mysql_result($result,$i,"maxReferenten");
$vorname = mysql_result($result,$i,"vorname");
$name = mysql_result($result,$i,"name");
if (($vorname > "") || ($name > "")) {
$referent = $vorname . " " . $name;
} elseif ($maxReferenten > 0 and $isActive) {
$referent = "$anmeldenButton";
} else {
$referent = "";
}
// Wechselnder Hintergrund für gerade/ungerade Tabellenzeilen
// $style = ++$HTMLrowcount % 2 ? 'tr-even' : 'tr-odd';
// Ausgabe einer Tabellenzeile
// print " \n";
print "
\n";
print " $datum | \n";
print " $titel | \n";
if ($betreuerURL != "") {
print " $betreuer | \n";
} else {
print " $betreuer | \n";
}
print " $referent | \n";
print "
\n";
$i++;
endwhile;
}
}
// Warteliste eines Seminars abrufen
// Als Warteliste wird ein Termin mit einem speziellen Datum ($WAITDATE_SQL) für ein bestimmtes Seminar angenommen.
$query = "SELECT * FROM termin
LEFT JOIN referent USING (ID_termin)
LEFT JOIN seminar USING (ID_seminar)
LEFT JOIN betreuer USING (betreuer)
WHERE (termin.datum<='$WAITDATE_SQL')
AND (seminarURL = '$url')
ORDER BY referent.datum DESC";
$result = mysql_query($query);
$number = mysql_numrows($result);
if ($number > 0) { // Wenn Warteliste gefunden (Info: Eine Warteliste kann auch leer sein, d.h. noch keinen Namen enthalten)
$j = 0;
// Muster für Befehl vor Serverumstellung im März 2008:
// $titel = mysql_result($result,$j,"termin.titel");
$titel = mysql_result($result,$j,"titel");
$ID_termin = mysql_result($result,$j,"ID_termin");
$warteliste = "";
while ($j < $number):
// Daten aus SQL-Abfrage-Ergebnis extrahieren
$vorname = htmlentities(mysql_result($result,$j,"vorname"));
$name = htmlentities(mysql_result($result,$j,"name"));
if(($vorname > "") || ($name > "")) {
$warteliste = "$vorname $name
\n" . $warteliste;
};
$j++;
endwhile;
$warteliste .= $isActive ? "$anmeldenButton" : "";
// Wechselnder Hintergrund für gerade/ungerade Tabellenzeilen
// $style = i % 2 ? 'tr-odd' : 'tr-even';
// Ausgabe einer Tabellenzeile
// print " \n";
print "
\n";
if (!$isPraktikum) {
print " | \n";
}
print " $titel | \n";
print " | \n";
print " $warteliste | \n";
print "
\n";
}
print "\n
\n";
if ($isActive) {
if ($isPraktikum) {
print "
Zur Reservierung eines Platzes tragen Sie sich bitte mit den Schaltflächen ganz rechts in der Tabelle ein.
Diese Anmeldung ersetzt nicht die offizielle Anmeldung über das Campus-System!
Sie dient zur Vorreservierung der einzelnen Plätze bis zur Vorbesprechung,
an der Sie persönlich anwesend sein müssen.
";
}
else
{
print "
Zur Reservierung eines Themas tragen Sie sich bitte mit den Schaltflächen ganz rechts in der Termin-Tabelle ein.
Diese Anmeldung ersetzt nicht die offizielle Anmeldung über das Campus-System!
Sie dient zur Vorreservierung der einzelnen Termine bis zur Vorbesprechung,
an der Sie persönlich anwesend sein müssen.
";
}
}
$getquery = explode('=', $_GET["query"]);
if ( ($getquery[0] === "getlist") && ($getquery[1] === $querycode) ) {
print "Liste aller Teilnehmer
\n";
print "\n\n\n";
print " \n";
print " Name | \n";
print " Vorname | \n";
print " Matr.-Nr. | \n";
print " Email | \n";
print " Studiengang | \n";
print " Sem. | \n";
print " Betreuer | \n";
print "
\n";
$query = "SELECT * FROM termin
LEFT JOIN referent USING (ID_termin)
LEFT JOIN seminar USING (ID_seminar)
LEFT JOIN betreuer USING (betreuer)
WHERE seminarURL = '$url'
ORDER BY referent.datum DESC";
$result = mysql_query($query);
$number = mysql_numrows($result);
for ($i = 0; $i < $number; ++$i) {
// Daten aus SQL-Abfrage-Ergebnis extrahieren
$name = htmlentities(mysql_result($result, $i, "name"));
$vorname = htmlentities(mysql_result($result, $i, "vorname"));
$semester = htmlentities(mysql_result($result, $i, "semester"));
$matrikelnr = htmlentities(mysql_result($result, $i, "matrikelnr"));
$studiengang = htmlentities(mysql_result($result, $i, "studiengang"));
$email = htmlentities(mysql_result($result, $i, "email"));
$betreuer = htmlentities(mysql_result($result, $i, "betreuer"));
print " \n";
print " $name | \n";
print " $vorname | \n";
print " $matrikelnr | \n";
print " $email | \n";
print " $studiengang | \n";
print " $semester | \n";
print " $betreuer | \n";
print "
\n";
}
print "\n
\n";
// print email list
print "Email-Liste
\n";
for ($i = 0; $i < 1; ++$i) {
$email = htmlentities(mysql_result($result, $i, "email"));
print "$email";
}
for ($i = 1; $i < $number; ++$i) {
$email = htmlentities(mysql_result($result, $i, "email"));
print ", $email";
}
print "
";
}
?>
Literaturempfehlungen
- Witten, Frank. Data Mining. Practical Machine Learning Tools and Techniques. Elsevier, 2005.
- Mitchell, Tom: "Machine Learning", McGraw-Hill, 1997.
- Bishop: "Pattern recognition and machine learning", Springer, 2007.
- Duda/Hart: "Pattern Classification (2nd Edition)", Wiley, 200.
- Ralf Herbich: "Learning kernel classifiers", MIT Press, 2002.
- Andreas Zell: "Simulation Neuronaler Netze", Addison Wesley, 1994.
- Hans Otto Georgii: "Stochastik", Gruyter, 2007.
- Schölkopf et al., Kernel Methods in Computational Biology, 2004.
- UCI Machine Learning Group
Stilvorlage
- Für die Erstellung der Ausarbeitungmit
Word97/2000 gibt es hier eine Stilvorlage(
, 27kB).
- Wenn Sie eine andere Textverarbeitungbevorzugen,
orientieren Sie sich bitte an diesem Muster (
, 13kB).
- Für
-Fans gibt es einen Stylemit kleinem Demo.
Diese Seite drucken