<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Python Archives - g-webservice</title>
	<atom:link href="https://www.g-webservice.de/category/python/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.g-webservice.de/category/python/</link>
	<description></description>
	<lastBuildDate>Fri, 26 Nov 2021 07:39:21 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.2</generator>

<image>
	<url>https://www.g-webservice.de/wp-content/uploads/2017/12/favicon.png</url>
	<title>Python Archives - g-webservice</title>
	<link>https://www.g-webservice.de/category/python/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Projekt: Entwicklung einer Website mit Django (Python) und Deployment auf AWS</title>
		<link>https://www.g-webservice.de/projekt-entwicklung-einer-website-mit-django-python-und-deployment-auf-aws/</link>
					<comments>https://www.g-webservice.de/projekt-entwicklung-einer-website-mit-django-python-und-deployment-auf-aws/#respond</comments>
		
		<dc:creator><![CDATA[Johannes Gengenbach]]></dc:creator>
		<pubDate>Fri, 02 Oct 2020 15:39:44 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www.g-webservice.de/?p=2233</guid>

					<description><![CDATA[<p>Johannes GengenbachDer Autor hat Wirtschaftsinformatik (M. Sc.) am Karlsruher Institut für Technologie (KIT) studiert. Dabei hat er sich auf Machine Learning, Data Science und das Web spezialisiert. Den Bachelor hat er in BWL mit Schwerpunkt Wirtschaftspsychologie absolviert. Daneben treibt er in seiner Freizeit gerne Sport oder geht auf Reisen.</p>
<p>The post <a href="https://www.g-webservice.de/projekt-entwicklung-einer-website-mit-django-python-und-deployment-auf-aws/">Projekt: Entwicklung einer Website mit Django (Python) und Deployment auf AWS</a> appeared first on <a href="https://www.g-webservice.de">g-webservice</a>.</p>
]]></description>
										<content:encoded><![CDATA[<section class="l-section wpb_row height_medium"><div class="l-section-h i-cf"><div class="g-cols vc_row via_flex valign_top type_default stacking_default"><div class="vc_col-sm-12 wpb_column vc_column_container"><div class="vc_column-inner"><div class="wpb_wrapper"><div class="wpb_text_column"><div class="wpb_wrapper"><p>Bisher hatte ich <strong>Python</strong> nur für Data Science/Machine Learning, Web Scraping und Automatisierungsaufgaben (z. B. Excel) genutzt. Wegen Vorkenntnissen in HTML, CSS und JavaScript war es nun aber naheliegend, sich auch mit Python für <strong>Web Development</strong> zu beschäftigen. Ich wollte aber nicht nur eine &#8220;Hello World&#8221; Website programmieren, sondern etwas potenziell nützliches bauen. So war meine Idee eine Website mit <a class="blog-link" href="https://toolpy.de/" target="_blank" rel="noopener noreferrer">Blog und Online-Tools</a> wie z. B. einem <a class="blog-link" href="https://toolpy.de/woerter-zaehlen/" target="_blank" rel="noopener noreferrer">Wörterzähler</a> zu entwickeln.</p>
<h2>Eingesetzte Technologien</h2>
<p><strong>Django: </strong>Python bietet zwei bedeutende Web Frameworks: Flask und Django. Flask ist leichtgewichtig und einfach zu erlernen. Es eignet sich gut für statische Websites oder Microservices. Django ist nicht leichtgewichtig und schwerer zu erlernen. Allerdings geht die Komplexität von Django einher mit umfassenden Funktionen/Werkzeugen, welche den Entwicklern mitgegeben werden. Als Beispiele dienen der Admin-Bereich oder der Object-Relational-Mapper (ORM) für die Website-Datenbank. Bei meiner Website sollte es sich um eine dynamische Website mit Datenbank hinterlegt handeln, sodass ich mich für Djang entschieden habe.</p>
<p><strong>HTML:</strong> Wer eine Website mit einem Web Framework und nicht mit einem CMS erstellen möchte, kommt nicht dabei herum eigenes HTML zu schreiben. Allerdings kann man sich die mühsame und redundante Arbeit erleichtern, indem man ein Front-End Toolkit verwendet.</p>
<p><strong>Bootstrap: </strong>Hierbei handelt es sich um das am weitesten verbreitete Front-End Toolkit. Es bietet nicht nur umfassende Styling Möglichkeiten mit CSS-Klassen sondern auch HTML Vorlagen für gängige Website-Elemente wie z. B. die Navigation.</p>
<p><strong>CSS:</strong> Bootstrap dient als guter Startpunkt für das eigene Projekt. Allerdings sind immer auch eigene Anpassungen mit CSS notwendig, um die eigene Design Vorstellungen zu realisieren.</p>
<p><strong>JavaScript: </strong>Die clientseitige Programmiersprache war unter anderem notwendig für Cookie-Banner und Google-Analytics. Allerdings wurde sie auch für den <strong>Wörter- bzw. Zeichenzähler</strong> verwendet, weil diese Aufgabe locker in jedem Browser durchgeführt werden kann.</p>
<p><strong>Ubuntu auf AWS EC2:</strong> Die Website wurde auf einer EC2 Instanz mit <strong>Ubuntu</strong> bereitgestellt. Diese Linux Distribution eignet sich hervorragend für das Hosting von Websites. <strong>AWS</strong> ermöglicht die einfache und kostengünstige Nutzung von Infrastruktur als Service (IaaS). Bei Bedarf kann die Anwendung somit leicht skaliert werden.</p>
<p><strong>Domain:</strong> Die Domain <a class="blog-link" href="https://toolpy.de/" target="_blank" rel="noopener noreferrer">toolpy.de</a> wurde über AWS registriert und eine entsprechende gehostete Zone für das DNS eingerichtet.</p>
<p><strong>Apache 2: </strong>Als <strong>Webserver</strong> wird die wohl bekannteste Open Source Lösung von Apache eingesetzt.</p>
<h2>Fazit</h2>
<p>Ich bin mit dem <strong>Projektergebnis</strong> sehr zufrieden. Sowohl der <strong>Blog</strong> als auch der <strong>Wörterzähler</strong> konnten mit Django komfortabel umgesetzt werden. Das Deployment auf AWS hat auch ohne größere Probleme funktioniert. Sowohl die Entwicklung als auch das Deployment waren insgesamt sehr lehrreich. Im Vergleich zu WordPress erfordert die Erstellung einer Website mit Django mehr technisches Fachwissen und <strong>manuellen Aufwand</strong>. Dafür ist man <strong>unabhängig von Plugin/Theme Entwicklern</strong> und die <strong>Websitegeschwindigkeit</strong> ist deutlich erhöht.</p>
</div></div></div></div></div></div></div></section>
<div style='text-align:center' class='yasr-auto-insert-visitor'></div><div class="saboxplugin-wrap" itemtype="http://schema.org/Person" itemscope itemprop="author"><div class="saboxplugin-tab"><div class="saboxplugin-gravatar"><img decoding="async" src="https://www.g-webservice.de/wp-content/uploads/2021/05/johannes_breiter.jpeg" width="100"  height="100" alt="" itemprop="image"></div><div class="saboxplugin-authorname"><a href="https://www.g-webservice.de/author/jogigwebservice/" class="vcard author" rel="author"><span class="fn">Johannes Gengenbach</span></a></div><div class="saboxplugin-desc"><div itemprop="description"><p>Der Autor hat Wirtschaftsinformatik (M. Sc.) am Karlsruher Institut für Technologie (KIT) studiert. Dabei hat er sich auf Machine Learning, Data Science und das Web spezialisiert. Den Bachelor hat er in BWL mit Schwerpunkt Wirtschaftspsychologie absolviert. Daneben treibt er in seiner Freizeit gerne Sport oder geht auf Reisen.</p>
</div></div><div class="clearfix"></div></div></div><p>The post <a href="https://www.g-webservice.de/projekt-entwicklung-einer-website-mit-django-python-und-deployment-auf-aws/">Projekt: Entwicklung einer Website mit Django (Python) und Deployment auf AWS</a> appeared first on <a href="https://www.g-webservice.de">g-webservice</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.g-webservice.de/projekt-entwicklung-einer-website-mit-django-python-und-deployment-auf-aws/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Python für Machine Learning &#8211; Tutorial zu AI in Python mit Scikit-learn, Pandas &#038; Numpy.</title>
		<link>https://www.g-webservice.de/python-machine-learning-tutorial/</link>
					<comments>https://www.g-webservice.de/python-machine-learning-tutorial/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Gengenbach]]></dc:creator>
		<pubDate>Sun, 17 Nov 2019 14:01:54 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www.g-webservice.de/?p=1759</guid>

					<description><![CDATA[<p>Johannes GengenbachDer Autor hat Wirtschaftsinformatik (M. Sc.) am Karlsruher Institut für Technologie (KIT) studiert. Dabei hat er sich auf Machine Learning, Data Science und das Web spezialisiert. Den Bachelor hat er in BWL mit Schwerpunkt Wirtschaftspsychologie absolviert. Daneben treibt er in seiner Freizeit gerne Sport oder geht auf Reisen.</p>
<p>The post <a href="https://www.g-webservice.de/python-machine-learning-tutorial/">Python für Machine Learning &#8211; Tutorial zu AI in Python mit Scikit-learn, Pandas &#038; Numpy.</a> appeared first on <a href="https://www.g-webservice.de">g-webservice</a>.</p>
]]></description>
										<content:encoded><![CDATA[<section class="l-section wpb_row height_medium"><div class="l-section-h i-cf"><div class="g-cols vc_row via_flex valign_top type_default stacking_default"><div class="vc_col-sm-12 wpb_column vc_column_container"><div class="vc_column-inner"><div class="wpb_wrapper">
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<p class="rem25">In diesem umfassenden Tutorial geht es um den Einstieg in <strong>Python für Machine Learning</strong>. Dabei werden zunächst die Vorteile von Python für AI Anwendungen erklärt. Außerdem wird eine leicht verständliche und intuitive <strong>Erklärung von Machine Learning (ML)</strong> gegeben. Das Konzept soll dann mit Scikit-learn an einem <strong>praktischen Code-Beispiel</strong> verdeutlicht werden. Davor geht es um wichtige <strong>Voraussetzungen</strong> eines gelungenen Starts in Python für Machine Learning.</p>
<p style="margin-bottom:8px;margin-top:20px"><span><strong>Inhalte</strong></span></p>
<ul>
<li class="blog-list-margin list-style-none"><a href="#warum-python" class="blog-link ps2id">Warum Python für AI?</a></li>
<li class="blog-list-margin list-style-none"><a href="#machine-learning-konzept" class="blog-link ps2id"">Was ist Machine Learning?</a></li>
<li class="blog-list-margin list-style-none"><a href="#voraussetzungen" class="blog-link ps2id"">Voraussetzungen für Machine Learning mit Python</a></li>
<li class="blog-list-margin list-style-none"><a href="#machine-learning-tutorial" class="blog-link ps2id"">Machine Learning Tutorial mit Scikit-learn, Pandas und Numpy</a></li>
<li class="blog-list-margin list-style-none"><a href="#fazit" class="blog-link ps2id"">Fazit und weitere Anmerkungen</a></li>
</ul>
<p></p>
		</div>
	</div>
<div class="wpb_text_column us_custom_0f8f44b7"><div class="wpb_wrapper"><h2 id="warum-python">Warum Python für AI?</h2>
<p>Es gibt zahlreiche Gründe für Python als erste Wahl bei AI bzw. Machine Learning.</p>
<p>Python ist <strong>Industriestandard</strong> für Machine Learning Anwendungen. Bedeutende ML Frameworks wie Tensorflow (von Google), PyTorch (von Facebook) und das in dieser Anleitung verwendete <a class="blog-link" href="https://scikit-learn.org/stable/" target="_blank" rel="noopener noreferrer">Scikit-learn</a> sind in Python geschrieben.</p>
<p>Außerdem steht die <a class="blog-link" href="https://de.wikipedia.org/wiki/Python_Software_Foundation#Python-Software-Foundation-Lizenz" target="_blank" rel="noopener noreferrer">Python Software</a> unter einer <strong>freizügigen Open-Source-Lizenz</strong>. Das bedeutet jeder kann Python kostenlos (auch für gewerbliche Zwecke) in seinen Anwendungen benutzen.</p>
<p>Der Kern von Python bietet bereits viele Funktionen. Dazu gibt es eine <strong>Vielzahl weiterer Software-Packages</strong> in Python, welche ebenfalls Open-Source sind und ML Anwendungen erheblich vereinfachen oder sogar erst möglich machen. Dazu zählen beispielsweise <a class="blog-link" href="https://scikit-learn.org/stable" target="_blank" rel="noopener noreferrer">Scikit-learn (ML Toolkit)</a>, <a class="blog-link" href="https://numpy.org/" target="_blank" rel="noopener noreferrer">Numpy (Datenmanipulation)</a>, <a class="blog-link" href="https://pandas.pydata.org/" target="_blank" rel="noopener noreferrer">Pandas (Datenmanipulation &amp; -analyse)</a> und <a class="blog-link" href="https://matplotlib.org/" target="_blank" rel="noopener noreferrer">Matplotlib (Visualisierung)</a>.</p>
<p><a class="blog-link" href="https://de.wikipedia.org/wiki/Python_(Programmiersprache)" target="_blank" rel="noopener noreferrer">Python</a> ist eine universelle Programmiersprache und <strong>einfach zu erlernen</strong>. Die Sprache lässt sich nicht nur für Data Science/ML sondern auch für Web Development, zur Systemadministration und vieles weiteres einsetzen. Außerdem werden verschiedene Programmierstile (z. B. objektorientiert, funktional) unterstützt. Python erfreut sich großer Beliebtheit und wird von einer aktiven Community stetig weiterentwickelt. <strong>Es lohnt sich Python zu lernen!</strong></p>
</div></div><div class="w-image align_left" id="python-logo"><a title="Python" target=" _blank" rel="nofollow" href="https://www.python.org/" aria-label="python-logo-master-v3-TM" class="w-image-h"><img decoding="async" width="601" height="203" src="https://www.g-webservice.de/wp-content/uploads/2019/11/python-logo-master-v3-TM.png" class="attachment-large size-large" alt="" loading="lazy" srcset="https://www.g-webservice.de/wp-content/uploads/2019/11/python-logo-master-v3-TM.png 601w, https://www.g-webservice.de/wp-content/uploads/2019/11/python-logo-master-v3-TM-300x101.png 300w, https://www.g-webservice.de/wp-content/uploads/2019/11/python-logo-master-v3-TM-600x203.png 600w" sizes="(max-width: 601px) 100vw, 601px" /></a></div></div></div></div><div class="vc_col-sm-12 wpb_column vc_column_container"><div class="vc_column-inner"><div class="wpb_wrapper"><div class="wpb_text_column"><div class="wpb_wrapper"><h2 id="machine-learning-konzept">Was ist Machine Learning?</h2>
<p>Machine Learning (oder Maschinelles Lernen) ist eine Teildisziplin der Künstlichen Intelligenz (KI) bzw. Artificial Intelligence (AI). Beide Begriffe werden oft synonym verwendet.</p>
<p>Es gibt viele Definitionen von Machine Learning. Eine bedeutende lautet:</p>
<blockquote>
<p class="p1">&#8220;Machine Learning is the field of study that gives computers the ability</p>
<p class="p1">to learn without being explicitly programmed.&#8221; &#8211; Arthur Samuel, 1959</p>
</blockquote>
<p>Wie kann ein Computer in der Lage sein zu lernen, ohne explizit dafür programmiert zu werden? Die Antwort lautet: <strong>Mit den richtigen Daten und lernenden Algorithmen. </strong>Damit lassen sich bestimmte Probleme tatsächlich sehr gut lösen. Machine Learning begegnet uns im Alltag bereits seit einigen Jahren in vielen Bereichen: Videos schauen, Musik hören, Spam-Filter, Online-Shopping, Online-Partnersuche ..</p>
<p>Machine Learning ist immer auch <a class="blog-link" href="https://de.wikipedia.org/wiki/Data_Science" target="_blank" rel="noopener noreferrer">Data Science</a>. Es geht um die automatische Extraktion von Wissen aus Daten.</p>
<p>Die Extraktion gelingt, indem spezielle lernende Algorithmen auf die Daten &#8220;losgelassen&#8221; werden und als Ergebnis (hoffentlich) brauchbare Modelle zur Problemlösung erzeugen. Die Algorithmen werden in überwachte (supervised) und nicht überwachte (unsupervised) Verfahren eingeteilt.</p>
</div></div><div class="w-image us_custom_33c3a0a5 align_none"><div class="w-image-h"><img decoding="async" width="569" height="320" src="https://www.g-webservice.de/wp-content/uploads/2019/11/Supervised_Unsupervised_Learning-e1572982884898.png" class="attachment-full size-full" alt="Supervised und Unsupervised Learning." loading="lazy" srcset="https://www.g-webservice.de/wp-content/uploads/2019/11/Supervised_Unsupervised_Learning-e1572982884898.png 569w, https://www.g-webservice.de/wp-content/uploads/2019/11/Supervised_Unsupervised_Learning-e1572982884898-300x169.png 300w" sizes="(max-width: 569px) 100vw, 569px" /></div></div><div class="wpb_text_column"><div class="wpb_wrapper"><p>Beim <strong>Supervised Learning</strong> kennt der Algorithmus die richtige Lösung, weil sie im Datensatz vorhanden ist. Beispiele für solche Verfahren sind <strong>Entscheidungsbäume (Decision Trees), Regressionsanalysen, Support Vector Machines (SVM) und Künstliche Neuronale Netze (Artificial Neural Networks)</strong>.</p>
<p>Dagegen muss die Lösung beim <strong>Unsupervised Learning </strong>vom Algorithmus selbst gefunden werden und ist nicht explizit im Datensatz ausgewiesen. Beispiele hierfür sind <strong>Clustering-Methoden </strong>und der<strong> Apriori-Algorithmus</strong>.</p>
<p>In diesem Beitrag beschränken wir uns auf <strong>Supervised Learning</strong>.</p>
<p><strong>Beispiel:</strong></p>
<p>Die Funktionsweise von Machine Learning lässt sich sehr gut anhand einer <strong>Linearen Regressionsanalyse</strong> erklären.</p>
<p>Bei diesem statistischen Verfahren wird versucht eine <strong>abhängige Variable</strong> mithilfe einer oder mehrerer <strong>unabhängiger Variable(n)</strong> vorherzusagen. Dabei wird ein linearer Zusammenhang zwischen beiden Variablen angenommen.</p>
<p>Wir wollen das Abschneiden von Studenten bei einer Prüfung in Abhängigkeit der Lerndauer mithilfe einer Regressionsanalyse vorhersagen. Dafür liegen uns <strong>Daten</strong> vor. Für 25 Studenten haben wir die Lerndauer (h) und das Abschneiden bei einem Test (erreichte Punktzahl von maximal 100 Punkten). Dabei ist die erreichte <strong>Punktzahl die abhängige Variable</strong> und die <strong>Lerndauer die unabhängige Variable</strong>.</p>
<p>Im Schaubild sind beide Variablen dargestellt. Auf der Y-Achse sieht man die erreichte Punktzahl. Auf der X-Achse steht die Lerndauer. Jeder Punkt im Schaubild steht für einen Fall (Student) in unserem Datensatz. Man erkennt leicht, dass die Daten einem linearen Trend folgen.</p>
</div></div><div class="w-image us_custom_8e09cc6b align_none meta_simple"><div class="w-image-h"><img decoding="async" width="640" height="480" src="https://www.g-webservice.de/wp-content/uploads/2019/11/python_machine_learning_regression.png" class="attachment-large size-large" alt="Regressionsanalyse: Abschneiden bei Test in Abhängigkeit der Lerndauer" loading="lazy" srcset="https://www.g-webservice.de/wp-content/uploads/2019/11/python_machine_learning_regression.png 640w, https://www.g-webservice.de/wp-content/uploads/2019/11/python_machine_learning_regression-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /></div><div class="w-image-meta"><div class="w-image-title">Erreichte Punktzahl bei einem Test in Abhängigkeit der Lerndauer. Ein linearer Trend ist deutlich erkennbar.</div><div class="w-image-description">Eigene Grafik mit Matplotlib <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></div></div></div><div class="wpb_text_column"><div class="wpb_wrapper"><p>Wir fassen den Entschluss, dass eine einfache Linie den Trend in den Daten sehr gut erfasst. Also wenden wir mit der Linearen Regression einen Algorithmus an, der uns ein lineares Modell liefert. Die allgemeine Formel der linearen Funktion lautet:</p>
<p><strong>y = mx + b</strong></p>
<p>Mit dem Algorithmus erhalten wir bestimmte Werte für m und b, sodass unsere Daten durch die resultierende Linie bestmöglich beschrieben werden. Das Ergebnis einer linearen Regression (in Python mit Scikit-learn) lautet:</p>
<p><strong>y = 9,38x + 4,82</strong></p>
<p>Im nächsten Schaubild sehen wir die ermittelte Regressionsgerade. Diese Linie (unser Modell) beschreibt die erreichte Punktzahl für eine entsprechende Lerndauer. Wenn wir die Punktzahl eines (neuen) Studenten prognostizieren möchten, so müssen wir einfach seine Lerndauer (x-Wert) in die Formel eintragen.</p>
</div></div><div class="w-image us_custom_8d5aa4e2 align_none meta_simple"><div class="w-image-h"><img decoding="async" width="640" height="480" src="https://www.g-webservice.de/wp-content/uploads/2019/11/machine_learning_regression_with_line.png" class="attachment-large size-large" alt="Regressionsgerade auf den Daten." loading="lazy" srcset="https://www.g-webservice.de/wp-content/uploads/2019/11/machine_learning_regression_with_line.png 640w, https://www.g-webservice.de/wp-content/uploads/2019/11/machine_learning_regression_with_line-300x225.png 300w" sizes="(max-width: 640px) 100vw, 640px" /></div><div class="w-image-meta"><div class="w-image-title">Die lineare Regression liefert uns eine Regressionsgerade (ein Modell) für die Daten.</div></div></div><div class="wpb_text_column"><div class="wpb_wrapper"><p>Unser <strong>einfaches Modell</strong> beschreibt die Daten ausreichend gut aber es gibt merkliche Abweichungen zwischen prognostizierten und tatsächlichen Werten. Damit sollte aber auch nur die <strong>allgemeine Funktionsweise von (supervised ) Machine Learning</strong> dargestellt werden.</p>
<p>Dabei haben wir ein einfaches Machine Learning Verfahren (Lineare Regression) auf wenig Daten (25 Fälle mit je 2 Features/Variablen) angewendet. Außerdem haben wir die <strong>Performance des Modells</strong> nur sehr rudimentär bewertet.</p>
<p>Im Folgenden <a class="blog-link ps2id" href="#machine-learning-tutorial">Code-Beispiel in Python</a> werden mehrere (komplexere) Machine Learning Verfahren auf einen anderen Datensatz angewendet. Dabei wird auch näher auf die Performance des Modells eingegangen. Zusätzlich werden wichtige Schritte bei Machine Learning verdeutlicht.</p>
</div></div><div class="wpb_text_column us_custom_0f8f44b7"><div class="wpb_wrapper"><h2 id="voraussetzungen">Voraussetzungen für Machine Learning mit Python</h2>
<p>Es gibt ein paar Voraussetzungen, die erfüllt sein sollten, bevor man Machine Learning in Python erfolgreich anwenden kann. Zum einen sind das technische Voraussetzungen (Installationen). Zum anderen erfordert Machine Learning Fachkenntnisse in bestimmten Bereichen.</p>
<p>Erfahrungsgemäß sind die technischen Voraussetzungen (Installationen) schnell erfüllt.</p>
<p>Dagegen dauert es seine Zeit bis man die Grundlagen und Konzepte hinter Machine Learning verstanden hat. Natürlich kann man sich diese nach und nach aneignen. Es ist also nicht schlimm, wenn man in (Code-)Beispielen noch nicht alles en Detail versteht.</p>
<p>Tatsächlich war es noch nie so einfach mit Machine Learning anzufangen wie heute. Vor allem im Python-Ökosystem existieren zahlreiche ausgefeilte und kostenlose Werkzeuge, die einem die Arbeit enorm erleichtern! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<h3 id="entwicklungsumgebung">Entwicklungsumgebung (Jupyter Notebook)</h3>
<p>Zunächst mal benötigt man eine Entwicklungsumgebung, um Machine Learning Anwendungen in Python programmieren zu können.</p>
<p><u>Hinweis:</u> Am besten ladet ihr euch nicht alle Komponenten der Entwicklungsumgebung einzeln herunter, sondern benutzt die Software <a class="blog-link" href="https://www.anaconda.com/distribution/" target="_blank" rel="noopener noreferrer">Anaconda</a>. Mit diesem (kostenlosen) Paket- und Umgebungsmanager für Python erhaltet ihr <strong>alle Werkzeuge (Python, Pip, Jupyter) für Machine Learning in Python</strong>.</p>
<p>Die Entwicklungsumgebung besteht aus <a class="blog-link" href="https://www.python.org/downloads/" target="_blank" rel="noopener noreferrer">Python (Version 3.7 oder höher)</a>. Python ist eine interpretierte Programmiersprache. Das bedeutet der geschriebene Python Programmcode wird von einem anderen Programm (dem Interpreter) ausgeführt. Es gibt den Standard Python-Interpreter (CPython) für alle gängigen Betriebssysteme (Windows, macOS, Linux).</p>
<p>Weiterhin benötigt man den <a class="blog-link" href="https://de.wikipedia.org/wiki/Pip_(Python)" target="_blank" rel="noopener noreferrer">Python-Paketmanager Pip</a>. Damit lassen sich ganz<strong> einfach Python Pakete herunterladen und installieren</strong>. Diese Pakete enthalten wiederum Module. Es gibt für (fast) jede Aufgabe ein entsprechendes Python Modul. Mit Pip muss man also <strong>das Rad nicht immer neu erfinden</strong>, sondern kann sich einfach die passenden Pakete/Module besorgen!</p>
<p>Das letzte Tool im Machine Learning Werkzeugkasten ist <a class="blog-link" href="https://jupyter.org/" target="_blank" rel="noopener noreferrer">Jupyter Notebook</a>. Dabei handelt es sich um eine <a class="blog-link" href="https://de.wikipedia.org/wiki/Integrierte_Entwicklungsumgebung" target="_blank" rel="noopener noreferrer">integrierte Entwicklungsumgebung</a> für Data Science im Browser. Mit Jupyter kann man <strong>schnell und einfach Python Code im Browser schreiben und interaktiv ausführen</strong>. Außerdem lassen sich die Ergebnisse sehr leicht mit anderen teilen. Python Code wird in Jupyter Notebooks in Dateien mit der Endung .ipynb abgelegt. Diese können neben Python Code auch normalen Text, Bilder, Videos und Markup (Markdown, HTML) enthalten. Eine gute Einführung in Jupyter Notebook findet ihr <a class="blog-link" href="https://www.dataquest.io/blog/jupyter-notebook-tutorial/" target="_blank" rel="noopener noreferrer">hier</a>.</p>
<h3>Python Grundlagen</h3>
<p>Machine Learning in Python erfordert grundlegende <strong>Kenntnisse in der Programmierung mit Python</strong>. Glücklicherweise gilt Python als einfach zu erlernen und zeichnet sich durch eine klare Syntax aus. Ich möchte hier nicht auf die Grundlagen der Programmierung in Python eingehen aber es gibt zahlreiche hervorragende und kostenlose Ressourcen zum Lernen von Python im Web:</p>
<p><a class="blog-link" href="https://www.learnpython.org/" target="_blank" rel="noopener noreferrer">Learn Python</a> und <a class="blog-link" href="https://www.w3schools.com/python/default.asp" target="_blank" rel="noopener noreferrer">W3Schools</a> bieten gute Tutorials für Einsteiger.</p>
<p><a class="blog-link" href="https://realpython.com/" target="_blank" rel="noopener noreferrer">Realpython</a> ist eine hervorragende Ressource für Python und bietet verschiedene Tutorials für Einsteiger und Fortgeschrittene.</p>
<p>Außerdem finden sich eine ganze Reihe guter Tutorials auf <a class="blog-link" href="https://www.youtube.com/results?search_query=python+tutorial" target="_blank" rel="noopener noreferrer">YouTube</a>.</p>
<h3>Statistik und Mathematik für Machine Learning in Python</h3>
<p>Machine Learning beinhaltet viel <strong>Statistik und Mathematik</strong>. Grundlegende Statistik und Mathematik Kenntnisse sind also von Vorteil für Machine Learning in Python.</p>
<p>Man braucht aber <strong>keinen Abschluss in Statistik oder Mathematik</strong>. Wichtige Themen wie Lineare Algebra und Analysis begegnen vielen bereits in der Schule (z. B. beim Mathe-Abi). Außerdem werden einige für Machine Learning relevante Statistik- und Mathematik-Inhalte in vielen Studiengängen (Wirtschaftswissenschaften &amp; Ingenieurswissenschaften) vermittelt. Darauf lässt sich sehr gut aufbauen.</p>
<p>Mit der nötigen Motivation kann man sich die Konzepte aber bestimmt auch aneignen, wenn man bisher wenig mit Mathe und Statistik in Berührung gekommen ist!</p>
</div></div><div class="wpb_text_column us_custom_0f8f44b7"><div class="wpb_wrapper"><h2 id="machine-learning-tutorial">Machine Learning Tutorial mit Scikit-learn, Pandas und Numpy</h2>
<h3>Daten</h3>
<p>Für dieses Tutorial verwenden wir den <a class="blog-link" href="https://www.g-webservice.de/wp-content/uploads/2019/11/iris_data.csv">Iris Datensatz (CSV Download)</a> vom <a class="blog-link" href="https://archive.ics.uci.edu/ml/datasets/Iris" target="_blank" rel="noopener noreferrer">UCI Machine Learning Repository: Iris Data Set</a>. Dieser kleine Datensatz ist häufig in der Literatur zu Data Science anzutreffen. Er besteht aus <strong>150 Fällen (Zeilen) mit jeweils 5 Features (Spalten):</strong></p>
<ol>
<li>Sepal length</li>
<li>Sepal width</li>
<li>Petal length</li>
<li>Petal width</li>
<li>Species</li>
</ol>
<p>Jeder Fall repräsentiert eine <strong>Iris-Blume </strong>mit einer Sepal length, Sepal width, Petal length, Petal width und Species (Anm.: Denglisch lässt sich in einem ML Kontext nicht immer vermeiden). Dabei gibt es <strong>3 Iris-Spezies (Iris Setosa, Iris Versicolor, Iris Virginica)</strong> im Datensatz. Jede Klasse kommt 50mal im Datensatz vor (gleiche Häufigkeit).</p>
<p>Wir möchten nun mithilfe von Machine Learning ein <strong>Klassifizierungsproblem </strong>lösen. Dabei stellt die <strong>Spezies die abhängige Variable</strong> dar und <strong>Sepal length, Sepal width, Petal length, Petal width sind unabhängige Variablen.</strong></p>
<p>Am besten erstellt ihr euch einen eigenen Projektordner für dieses Tutorial mit allen relevanten Dateien. Außerdem solltet ihr im Projektordner einen weiteren Ordner namens &#8220;data&#8221; erstellen und darin die heruntergeladene CSV-Datei (Iris Daten) ablegen.</p>
<h3>Installation von Scikit-learn, Pandas und Numpy</h3>
<p>In diesem Abschnitt gehe ich davon aus, dass die vorher beschriebene <a class="ps2id blog-link" href="#entwicklungsumgebung">Entwicklungsumgebung</a> bereit ist.</p>
<p>Zunächst müssen wir die benötigten Packages <strong>Numpy, Pandas und Scikit-learn mit Pip herunterladen</strong>.</p>
<p><u>Optional:</u> Standardmäßig werden alle installierten Packages/Module euer Standard-Python-Installation hinzugefügt. Es empfiehlt sich jedoch mit verschiedenen Umgebungen (Python-Installationen) für verschiedene Projekte zu arbeiten. Mit Conda könnt ihr ganz einfach neue Python-Umgebungen anlegen und aktivieren. Eine Anleitung dazu findet ihr <a class="blog-link" href="https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html" target="_blank" rel="noopener noreferrer">hier</a>.</p>
<p>Öffnet die Kommandozeile (Shell) und navigiert in den Projektordner.</p>
<p>Nützliche Kommandozeilen-Befehle:</p>
<ul>
<li><strong>pwd:</strong> Zeigt das aktuelle Verzeichnis (Arbeitsverzeichnis) an.</li>
<li><strong>ls:</strong> Zeigt Inhalte des aktuellen Verzeichnisses.</li>
<li><strong>cd &lt;name&gt;: </strong>Navigiert in das &lt;name&gt; Verzeichnis.</li>
<li><strong>cd .. : </strong>Navigiert zurück in das höher gelegene Verzeichnis.</li>
</ul>
<p>(Diese Befehle gelten für Linux/macOS. Bei Windows kann es zu Abweichungen kommen.)</p>
<p>Zur Installation von <strong>Numpy</strong> gebt ihr folgendes in die Kommandozeile ein:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight shell">
<pre>
<code>
<span class="jp">$</span> <span class="black-font">pip install numpy</span>
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><a class="blog-link" href="https://de.wikipedia.org/wiki/NumPy" target="_blank" rel="noopener noreferrer">Numpy</a> schafft mit der Datenstruktur <strong>&#8220;ndarray&#8221; (<i>mehrdimensionales </i>Array)</strong> eine wichtige Grundlage für Machine Learning in Python. Damit lassen sich Berechnungen für große Datenmengen effizient durchführen, weil die Werte in Numpy-Arrays alle den gleichen Datentyp besitzen. Mit normalen Python-Arrays (Listen) ist dies nicht möglich, da hier die Werte unterschiedliche Datentypen haben können.</p>
<p>Zur Installation von <strong>Pandas</strong> gebt ihr folgendes in die Kommandozeile ein:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight shell">
<pre>
<code>
<span class="jp">$</span> <span class="black-font">pip install pandas</span>
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><a class="blog-link" href="https://de.wikipedia.org/wiki/Pandas_(Software)" target="_blank" rel="noopener noreferrer">Pandas</a> bietet wichtige Methoden zur Analyse und Manipulation von Daten in Python. Beispielsweise lassen sich damit CSV- und Excel-Dateien laden. Außerdem ermöglicht Pandas mit der <strong>&#8220;DataFrame&#8221; Datenstruktur</strong> eine zweidimensionale und tabellarische Repräsentation von Daten in Python.</p>
<p>Zur Installation von <strong>Scikit-learn</strong> gebt ihr folgendes in die Kommandozeile ein:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight shell">
<pre>
<code>
<span class="jp">$</span> <span class="black-font">pip install scikit-learn</span>
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><a class="blog-link" href="https://de.wikipedia.org/wiki/Scikit-learn" target="_blank" rel="noopener noreferrer">Scikit-learn</a> ist ein umfangreiches Package für Machine Learning in Python. Darin sind zahlreiche Algorithmen effizient implementiert und es bietet Lösungen für viele Machine Learning spezifische Herausforderungen. Scikit-learn ist durch sein hervorragendes <a class="blog-link" href="https://arxiv.org/abs/1309.0238" target="_blank" rel="noopener noreferrer">API-Design</a> einfach, effizient und leicht zugänglich für Nicht-Experten.</p>
<p>Zur Installation von <strong>Matplotlib </strong>gebt ihr folgendes in die Kommandozeile ein:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight shell">
<pre>
<code>
<span class="jp">$</span> <span class="black-font">pip install matplotlib</span>
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><a class="blog-link" href="https://de.wikipedia.org/wiki/Matplotlib" target="_blank" rel="noopener noreferrer">Matplotlib</a> ist eine umfassende Bibliothek zur Visualisierung von Daten in Python.</p>
<h3>Machine Learning Code im Jupyter Notebook</h3>
<p>Damit das <strong>Jupyter Notebook</strong> startet müsst ihr folgendes in die Kommandozeile eingeben während ihr euch im Projektordner befindet:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight shell">
<pre>
<code>
<span class="jp">$</span> <span class="black-font">jupyter notebook</span>
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p>In der Shell sollte nun der Jupyter Notebook Server gestartet sein und der Browser öffnet sich automatisch.</p>
<p>Nun klickt ihr auf &#8220;New&#8221; und erstellt ein <strong>neues Python 3 Notebook</strong>. Im neuen Notebook klickt ihr am besten doppelt auf den Namen &#8220;Untitled&#8221; und benennt es um &#8211; z. B. in &#8220;Machine_Learning_Tutorial&#8221;.</p>
<p>Danach fügt ihr diesen Inhalt in die <strong>erste Code-Zelle</strong>:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p>Damit <strong>importieren wir die Module</strong> Numpy, Pandas und Matplotlib (bzw. Pyplot) aus den vorher mit Pip installierten Packages.</p>
<p>Außerdem geben wir jedem dieser Module ein Alias (&#8220;import .. as ..&#8221;). Die hier verwendeten Aliasse (np, pd und plt) sind quasi ein Standard in der Python Data Science Community.</p>
<p>Führt den Code aus, sodass wir die Module in unserem Code verwenden können.</p>
<p>Als nächstes müssen wir die <strong>Iris Daten laden</strong>. Erstellt dafür eine neue Code-Zelle mit diesem Inhalt und führt sie aus:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
df = pd.read_csv('./data/iris_data.csv')
df.head()
</code>
</pre>
</div>
		</div>
	</div>
<div class="w-image us_custom_b2452879 align_none"><div class="w-image-h"><img decoding="async" width="498" height="190" src="https://www.g-webservice.de/wp-content/uploads/2019/11/df.head-Output.png" class="attachment-full size-full" alt="Output der df.head() Methode" loading="lazy" srcset="https://www.g-webservice.de/wp-content/uploads/2019/11/df.head-Output.png 498w, https://www.g-webservice.de/wp-content/uploads/2019/11/df.head-Output-300x114.png 300w" sizes="(max-width: 498px) 100vw, 498px" /></div></div><div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p>Mit diesem Code laden wir die Daten aus der CSV-Datei. Die Funktion <em>pd.read_csv()</em> liefert uns einen DataFrame, welchen wir in der Variable <em>df</em> speichern.</p>
<p>Die Methode <em>head()</em> vom <em>df</em> Objekt zeigt uns alle Features (Spalten) und die ersten Fälle (Zeilen) in den geladenen Daten.</p>
<p>Übrigens: Funktionen innerhalb von Objekten (bzw. Klassen) nennt man Methoden. <em>read_csv()</em> ist eine Funktion aus dem Pandas Modul und <em>head()</em> eine Methode eines DataFrame-Objekts.</p>
<p>Wir möchten mehr über unsere Daten erfahren. Dafür lassen wir uns die <strong>Form des DataFrames</strong> ausgeben:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
df.shape
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><u style="color: red;">Output:</u> (150, 5)</p>
<p>Das bedeutet unser Datensatz enthält 150 Fälle (Zeilen) und 5 Features (Spalten).</p>
<p>Mit einer <strong>Visualisierung</strong> möchten wir weitere Erkenntnisse über die Daten gewinnen. Gebt folgendes in die nächste Code-Zelle und führt sie aus:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
colors = {'setosa' : 'r', 'versicolor' : 'g', 'virginica' : 'b'}

fig, ax = plt.subplots(figsize=(10, 5))

for i in range(len(df['sepal_length'])):
    ax.scatter(df['sepal_length'][i], df['sepal_width'][i],color=colors[df['species'][i]])

ax.set_title('Iris Daten')
ax.set_xlabel('Sepal length')
ax.set_ylabel('Sepal width')
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p>Matplotlib Code ist nicht unbedingt intuitiv zu verstehen für Anfänger. In diesem Tutorial soll Matplotlib Pyplot aber nicht näher behandelt werden.</p>
<p>Wir erhalten ein Scatterplot für die Features Sepal length und Sepal width. Außerdem lässt sich die Klassenzugehörigkeit der Datenpunkte anhand der Farbe (rot: Iris-Setosa, grün: Iris-versicolor, blau: Iris-virginica) ablesen.</p>
</div></div><div class="w-image align_none"><div class="w-image-h"><img decoding="async" width="719" height="340" src="https://www.g-webservice.de/wp-content/uploads/2019/11/sw_sl_scatter-e1573763733672.png" class="attachment-full size-full" alt="Scatterplot der Features Sepal length und Sepal width samt Klassenzugehörigkeit." loading="lazy" srcset="https://www.g-webservice.de/wp-content/uploads/2019/11/sw_sl_scatter-e1573763733672.png 719w, https://www.g-webservice.de/wp-content/uploads/2019/11/sw_sl_scatter-e1573763733672-300x142.png 300w" sizes="(max-width: 719px) 100vw, 719px" /></div></div><div class="wpb_text_column"><div class="wpb_wrapper"><p>Aus dem Schaubild geht hervor, dass man die 3 Klassen nicht gut mit einem Linearen Klassifizierer <strong>nur anhand der 2 Features</strong> (Sepal length und Sepal width) auseinanderhalten kann. Denkt man sich eine Linie als Modell, so würde diese zwar die roten und blauen Datenpunkte gut separieren aber nicht die grünen Punkte.</p>
<p>Allerdings haben wir mehr als 2 Features in den Daten (nämlich noch Petal length und Petal width), welche wir auch für unser Modell verwenden sollten. Mehr als 2 bzw. 3 Dimensionen lassen sich jedoch schlecht grafisch darstellen.</p>
<p><strong>Achtung: </strong>Es handelt sich bei den Iris-Daten um ein Klassifikationsproblem. Also können wir nicht wie oben eine Lineare Regression anwenden. Stattdessen werden wir eine <a class="blog-link" href="https://de.wikipedia.org/wiki/Logistische_Regression" target="_blank" rel="noopener noreferrer">Logistische Regression</a> anwenden.<br />
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><br />
<ins class="adsbygoogle" style="display: block; text-align: center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9228944523454698" data-ad-slot="2501229973"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>
<h3 style="margin-top: 5px;">Vorverarbeitung der Daten für Machine Learning</h3>
<p>Wir möchten nun <strong>verschiedene Supervised Machine Learning Algorithmen</strong> auf die Daten anwenden.</p>
<p>Die meisten ML Learning Algorithmen können <strong>nur mit Zahlen umgehen</strong>.</p>
<p>In unseren Daten in der Spalte &#8216;species&#8217; haben wir jedoch die Klassen als <strong>Strings</strong> (Zeichenketten) vorliegen. Also müssen wir diese in Zahlen (Integer) umwandeln. Es gibt verschiedene Möglichkeiten <strong>nicht-numerische in numerische Features</strong> mit Python umzuwandeln.</p>
<p>Wir halten es einfach in diesem Tutorial:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
species_to_int = {'setosa': 0, 'versicolor': 1, 'virginica': 2}

df['species'] = df['species'].map(species_to_int)
df.head()
</code>
</pre>
</div>
		</div>
	</div>
<div class="w-image us_custom_b2452879 align_none"><div class="w-image-h"><img decoding="async" width="486" height="181" src="https://www.g-webservice.de/wp-content/uploads/2019/11/Nicht-numerisches-Feature-in-numerisches.png" class="attachment-full size-full" alt="" loading="lazy" srcset="https://www.g-webservice.de/wp-content/uploads/2019/11/Nicht-numerisches-Feature-in-numerisches.png 486w, https://www.g-webservice.de/wp-content/uploads/2019/11/Nicht-numerisches-Feature-in-numerisches-300x112.png 300w" sizes="(max-width: 486px) 100vw, 486px" /></div></div><div class="wpb_text_column us_custom_0f8f44b7"><div class="wpb_wrapper"><p>Im <em>species_to_int </em>Dictionary mappen wir die Spezies zu Zahlen.</p>
<p>Dieses Dictionary geben wir <em>df[&#8216;species&#8217;].map() </em>als Input und überschreiben die alten (nicht-numerischen) Werte mit den neuen numerischen Werten. Mit <em>df.head()</em> sehen wir das Ergebnis.</p>
<p>Erinnern wir uns für den nächsten <strong>Vorverarbeitungs-Schritt</strong> an das Beispiel mit der Linearen Regression weiter oben:</p>
<p>Auch beim Iris-Problem haben wir eine <strong>abhängige Variable &#8220;y&#8221; (Species) </strong>und <strong>mehrere unabhängige Variablen &#8220;X&#8221;</strong> <strong>(Sepal length, Sepal width, Petal length und Petal width)</strong>.</p>
<p>Wir müssen also <strong>X und y</strong> aus unserem gesamten Datensatz gewinnen. Pandas eignet sich hervorragend für diese Aufgabe:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
X = df.iloc[:,:-1]
y = df.iloc[:,-1]
print('X:', X.shape,' y:', y.shape)
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><u style="color: red;">Output:</u> X: (150, 4) y: (150,)</p>
<p>Mit <em>df.iloc[] </em>lassen sich bestimmte Daten aus einem DataFrame auswählen.</p>
<p>Wir weisen den Rückgabewert von <em>df.iloc[:, :-1]</em>  unserem X zu. Dabei haben wir aus unserem DataFrame alle Zeilen (erster &#8220;:&#8221; in den eckigen Klammern) und alle Spalten bis auf die letzte (&#8220;:-1&#8221; in den eckigen Klammern) ausgewählt.</p>
<p>Den Rückgabewert von <i>df.iloc[:, -1] </i> weisen wir unserem y zu. Dabei erhalten wir alle Zeilen und nur die letzte Spalte aus unserem DataFrame.</p>
<p><strong>X</strong> besteht aus 150 Zeilen und 4 Spalten, wie sich aus X.shape (150, 4) ablesen lässt. Dabei handelt es sich um unsere <strong>Featurematrix</strong>.</p>
<p><strong>y </strong>besteht ebenfalls aus 150 Zeilen aber nur einer einzigen Spalte, wie sich aus y.shape (150, ) ablesen lässt. Dabei handelt es sich um unseren <strong>Zielvektor</strong>.</p>
</div></div><div class="w-image align_none meta_simple"><div class="w-image-h"><img decoding="async" width="600" height="400" src="https://www.g-webservice.de/wp-content/uploads/2019/11/X_y-e1573762914614-600x400.png" class="attachment-us_600_400_crop size-us_600_400_crop" alt="Featurematrix X und Zielvektor y." loading="lazy" /></div><div class="w-image-meta"><div class="w-image-title">Featurematrix X und Zielvektor y.</div></div></div><div class="wpb_text_column us_custom_0f8f44b7"><div class="wpb_wrapper"><p>Ein <strong>weiterer wichtiger Schritt</strong> fehlt noch, bevor wir verschiedene ML Algorithmen auf die Daten anwenden können.</p>
<p>Wir müssen unsere Daten in <strong>Trainings- und Testdaten</strong> aufteilen.</p>
<p>Die <strong>Trainingsdaten</strong> geben wir den ML Algorithmen als Input, sodass diese damit <strong>Modelle trainieren bzw. &#8220;lernen&#8221;</strong> können.</p>
<p>Mit den <strong>Testdaten </strong>können wir dann die Performance unserer <strong>Modelle bewerten</strong>.</p>
<p><strong>Wieso trainiert man die Modelle nicht einfach mit allen Daten?</strong></p>
<p>Dadurch möchte man vermeiden, dass in den Modellen die Daten vereinfacht gesagt &#8220;auswendig&#8221; gelernt werden. Dieses Phänomen wird als <a class="blog-link" href="https://en.wikipedia.org/wiki/Overfitting">Overfitting</a> bezeichnet und es führt dazu, dass Modelle <strong>nicht gut auf neue unbekannte Fälle anwendbar</strong> sind.</p>
<p><strong>Scikit-learn enthält eine nützliche Funktion</strong> zum Aufteilen von Daten in Trainings- und Testdaten:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

print('X_train:', X_train.shape, ' y_train:', y_train.shape)
print('X_test:', X_test.shape, ' y_test:', y_test.shape)
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><u style="color: red;">Output:</u> X_train: (120, 4) y_train: (120,)<br />
<span style="visibility: hidden;">_________</span>X_test: (30, 4) y_test: (30,)</p>
<p>Zunächst importieren wir die <em>train_test_split() </em>Funktion von Scikit-learn.</p>
<p>Danach weisen wir 4 Variablen <em>(X_train, X_test, y_train, y_test) </em>über Multiple Assignment mit dem Aufruf von <strong>train_test_split(X, y, test_size=0.2, random_state=42) </strong>die entsprechenden Werte zu.</p>
<p>Die <strong>Inputparameter</strong> der Funktion train_test_split() lauten:</p>
<ul>
<li>X: Featurematrix aller Daten</li>
<li>y: Zielvektor (Labels)</li>
<li>test_size: Prozentuale Größe des neuen Test-Datensatzes (X_test)</li>
<li>random_state: Zufallsparameter zur Reproduktion der Ergebnisse</li>
</ul>
<p>Der <strong>Output</strong> lautet:</p>
<ul>
<li>X_train: Trainingsdaten (Features)</li>
<li>y_train: Zielvektor (Labels) der Trainingsdaten</li>
<li>X_test: Testdaten (Features)</li>
<li>y_test: Zielvektor (Labels) der Testdaten</li>
</ul>
<p>Wir haben uns auch die <strong>Form (Zeilen, Spalten)</strong> der Trainings- und Testdaten ausgegeben lassen.</p>
<p>Hier ist das ganze nochmal anschaulich:</p>
</div></div><div class="w-image align_none"><div class="w-image-h"><img decoding="async" width="693" height="445" src="https://www.g-webservice.de/wp-content/uploads/2019/11/X_train_y_train_X_test_y_test-e1573906096699.png" class="attachment-full size-full" alt="" loading="lazy" srcset="https://www.g-webservice.de/wp-content/uploads/2019/11/X_train_y_train_X_test_y_test-e1573906096699.png 693w, https://www.g-webservice.de/wp-content/uploads/2019/11/X_train_y_train_X_test_y_test-e1573906096699-300x193.png 300w" sizes="(max-width: 693px) 100vw, 693px" /></div></div><div class="wpb_text_column us_custom_0f8f44b7"><div class="wpb_wrapper"><h3>Initiierung, Training und Evaluation von Machine Learning Modellen</h3>
<p>Nach der ganzen Vorarbeit können wir nun <strong>verschiedene Machine Learning Modelle</strong> initiieren, trainieren, anwenden und bewerten.</p>
<p>Mit Scikit-learn sind diese Schritte sehr einfach durchzuführen! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Zunächst <strong>initiieren und trainieren</strong> wir ein Modell mit einer <strong>Logistischen Regression:</strong></p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
from sklearn.linear_model import LogisticRegression

log_clf = LogisticRegression()

log_clf.fit(X_train, y_train)
</code>
</pre>
</div>
		</div>
	</div>
<div class="w-image align_none"><div class="w-image-h"><img decoding="async" width="716" height="82" src="https://www.g-webservice.de/wp-content/uploads/2019/11/Logistische_Regression_sklearn_Standardparameter.png" class="attachment-full size-full" alt="" loading="lazy" srcset="https://www.g-webservice.de/wp-content/uploads/2019/11/Logistische_Regression_sklearn_Standardparameter.png 716w, https://www.g-webservice.de/wp-content/uploads/2019/11/Logistische_Regression_sklearn_Standardparameter-300x34.png 300w" sizes="(max-width: 716px) 100vw, 716px" /></div></div><div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><u>Hinweis:</u> Möglicherweise bekommt ihr bei diesem Code auch eine &#8220;FutureWarning&#8221; angezeigt. Ignoriert diese einfach.</p>
<p>Machine Learning Modelle sind in Scikit-learn als Python Klassen implementiert.</p>
<p>Zuerst importieren wir den Logistischen Regressions Klassifizierer aus Scikit-learn.</p>
<p>Danach instanziieren wir die Klasse und speichern das resultierende Objekt als <strong>log_clf. </strong></p>
<p>Jede in Scikit-learn implementierte ML Methode kann mit vielen <a class="blog-link" href="https://en.wikipedia.org/wiki/Hyperparameter_(machine_learning)" target="_blank" rel="noopener noreferrer">Hyperparametern</a> modifiziert werden, welche bei der Instanziierung angegeben werden. Gibt man keine Hyperparameter an, so werden die Default-Werte für die Parameter gewählt.</p>
<p>Anschließend <strong>trainieren wir das Modell</strong> mit der <em>log_clf.fit(X_train, y_train) </em>Methode auf den Trainingsdaten.</p>
<p>Als <strong>Output</strong> erhalten wir unser Modell mit den (Standard) Hyperparametern.</p>
</div></div><div class="wpb_text_column"><div class="wpb_wrapper"><p>Im Folgenden werden wir unser <strong>gelerntes Modell anwenden</strong> und anhand einer geeigneten <strong>Performance-Metrik evaluieren:</strong></p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
from sklearn.metrics import accuracy_score

y_pred = log_clf.predict(X_test)

acc_score = accuracy_score(y_test, y_pred)
print('Accuracy:', acc_score)
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><u style="color: red;">Output:</u> Accuracy: 1.0</p>
<p>Eine geeignete Performance-Metrik ist die <a class="blog-link" href="https://developers.google.com/machine-learning/crash-course/classification/accuracy" target="_blank" rel="noopener noreferrer">Accuracy</a>. Sie beschreibt den <strong>Anteil der richtigen Vorhersagen an allen (richtigen und falschen) Vorhersagen.</strong></p>
<p>Wir importieren die Funktion <em>accuracy_score </em>aus Scikit-learn zur Berechnung der Accuracy.</p>
<p>Mit <em>log_clf.predict(X_test)</em> wenden wir unser Modell an und <strong>generieren Vorhersagen</strong> für alle Fälle im Testdatensatz. Die Ergebnisse (Numpy Array) speichern wir als <em>y_pred</em>.</p>
<p>Mit <em>accuracy_score(y_test, y_pred) </em>berechnen wir schließlich die Accuracy und speichern den Wert in der Variable <em>acc_score</em>. Dabei werden die tatsächlichen Ergebnisse (y_test) also die <strong>&#8220;Ground Truth&#8221; </strong>mit den <strong>vorhergesagten Werten</strong> verglichen.</p>
<p>In unserem Fall stimmen <em>y_pred </em>und <em>y_test </em>komplett überein, sodass die Accuracy 1.0 beträgt. Unser Modell kann also <strong>alle Fälle im Testdatensatz richtig klassifizieren!</strong></p>
</div></div><div class="wpb_text_column us_custom_0f8f44b7"><div class="wpb_wrapper"><h3>Andere Machine Learning Modelle</h3>
<p>Es ist nun auch ganz einfach möglich <strong>andere ML Modelle aus Scikit-learn</strong> auf die Daten anzuwenden und zu bewerten.</p>
<p>Lasst uns zum Abschluss noch einen <a class="blog-link" href="https://de.wikipedia.org/wiki/Entscheidungsbaum" target="_blank" rel="noopener noreferrer">Entscheidungsbaum</a> (Decision Tree) auf die Daten anwenden:</p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
from sklearn.tree import DecisionTreeClassifier

tree_clf = DecisionTreeClassifier()

tree_clf.fit(X_train, y_train)

print('Accuracy Decision Tree:', tree_clf.score(X_test, y_test))
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><u style="color: red;">Output:</u> Accuracy Decision Tree: 1.0</p>
<p>Der Prozess ist gleich wie oben:</p>
<p>Zunächst müssen wir den Entscheidungsbaum <strong>Klassifizierer aus Scikit-learn</strong> importieren.</p>
<p>Anschließend erstellen wir ein <strong>Klassifizierer-Objekt</strong> aus der importierten Klasse. Dieses trainieren wir auf den Trainingsdaten.</p>
<p>Danach lassen wir uns die <strong>Accuracy</strong> ausgeben (diesmal auf eine andere Weise wie oben).</p>
<p>Auch mit einem Entscheidungsbaum werden die <strong>Testdaten alle richtig vorhergesagt</strong>, sodass die Accuracy 1.0 beträgt!</p>
<p>Die Standardwerte der Hyperparameter sind offensichtlich auch hier gut gewählt. Wir können absichtlich weniger sinnvolle Werte auswählen, um zu sehen wie das <strong>Modell schlechter abschneidet:</strong></p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div class="jg-highlight python">
<pre>
<code>
from sklearn.tree import DecisionTreeClassifier

tree_clf = DecisionTreeClassifier(max_depth=1)

tree_clf.fit(X_train, y_train)

print('Accuracy Bad Decision Tree:', tree_clf.score(X_test, y_test))
</code>
</pre>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_b2452879"><div class="wpb_wrapper"><p><u style="color: red;">Output:</u> Accuracy Bad Decision Tree: 0.6333333333333333</p>
<p>Hier instanziieren wir einen Entscheidungsbaum mit dem Hyperparameter <em>max_depth=1. </em>Das bedeutet der Entscheidungsbaum darf nur eine maximale Tiefe von 1 haben.</p>
<p>Das ist offensichtlich nicht hilfreich für unsere Vorhersagen, sodass sich die <strong>Accuracy auf 63,33 % verringert</strong>.</p>
<p><a class="blog-link" href="https://scikit-learn.org/stable/supervised_learning.html" target="_blank" rel="noopener noreferrer">Scikit-learn</a> stellt eine Vielzahl an Machine Learning Verfahren wie z. B. <a class="blog-link" href="https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC" target="_blank" rel="noopener noreferrer">Support Vector Machines</a> oder <a class="blog-link" href="https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html" target="_blank" rel="noopener noreferrer">Künstliche Neuronale Netze</a> zur Verfügung, die ihr zusätzlich ausprobieren könnt.</p>
</div></div><div class="wpb_text_column us_custom_0f8f44b7"><div class="wpb_wrapper"><h2 id="fazit">Fazit und weitere Anmerkungen</h2>
<p>Damit neigt sich dieses umfangreiche Tutorial über Machine Learning mit Python dem <strong>Ende</strong> zu.</p>
<p>Lasst uns die behandelten Themen noch mal kurz zusammenfassen:</p>
<ul>
<li>Python ist eine weit verbreitete Programmiersprache (Technologie) und bietet <strong>hervorragende Unterstützung</strong> für Machine Learning.</li>
<li>Machine Learning erlaubt es mit den <strong>richtigen Daten und lernenden Algorithmen</strong> nützliche Modelle für Problemstellungen zu entwickeln.</li>
<li>Machine Learning in Python erfordert grundlegende Kenntnisse in <strong>Python</strong>, eine <strong>Entwicklungsumgebung</strong> sowie etwas Kenntnis in <strong>Statistik und Mathematik</strong>.</li>
<li>Dank freien Packages wie <strong>Scikit-learn, Pandas und Numpy</strong> lässt sich Machine Learning in Python <strong>praktisch und ohne viel Aufwand</strong> anwenden.</li>
</ul>
<p>Mit diesem Beitrag wollte ich eine umfassende, verständliche und praktische <strong>Einführung in Machine Learning mit Python</strong> liefern. Außerdem wollte ich auch einen <strong>konzeptionellen Rahmen</strong> für das Thema geben und nicht nur Code zeigen. Es ging darum, an einem <strong>idealisierten Beispiel</strong> grundlegende Machine Learning Konzepte (mit Python) aufzuzeigen. Viele reale <strong>Herausforderungen bei Machine Learning</strong> wurden nicht oder nur oberflächlich benannt. Aber man kann und sollte ja nicht alles in einen Beitrag packen! <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Schreibt eure<strong> Fragen, Anmerkungen und Feedback</strong> gerne in die <strong>Kommentare!</strong></p>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<div style="display:none">
<p style="font-size:12px">* Die angegebenen Preise unterliegen Schwankungen.</p>
<p>Als Amazon Partner verdiene ich an qualifizierten Verkäufen.</p>
</div>
		</div>
	</div>
<div class="wpb_text_column us_custom_2ae65f69"><div class="wpb_wrapper"><h3>Referenzen</h3>
<ul>
<li style="list-style-type: none;">
<ul>
<li><strong>Domingos, Pedro</strong>: The Master Algorithm: How the Quest for the Ultimate Learning Machine Will Remake Our World</li>
<li><strong>VanderPlas, Jake</strong>: Python Data Science Handbook: Essential Tools for working with Data</li>
<li><strong>Géron, Aurélien</strong>: Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques for Building Intelligent Systems</li>
</ul>
</li>
</ul>
</div></div>
	<div class="wpb_raw_code wpb_raw_html wpb_content_element us_custom_909b2fd0" >
		<div class="wpb_wrapper">
			<script>
window.addEventListener('load', function () {
  var progressbar = document.createElement('div');
  var blogcontent = document.querySelectorAll('#page-content section')[1];
  var fullsize = blogcontent.offsetTop + blogcontent.getBoundingClientRect().height;
  progressbar.style = "transform:scaleX(0);background: rgb(22, 98, 174);height: 4px;margin-top: -4px;transform-origin:left;will-change:transform;";
  document.querySelector('header').appendChild(progressbar);
  window.addEventListener('scroll', function () {
    var ratio = window.pageYOffset / fullsize;

    if (ratio <= 1) {
      progressbar.style.transform = "scaleX(".concat(ratio, ")");
      return;
    }

    progressbar.style.transform = 'scaleX(1)';
  });
});
</script>
		</div>
	</div>
</div></div></div></div></div></section>
<div style='text-align:center' class='yasr-auto-insert-visitor'></div><div class="saboxplugin-wrap" itemtype="http://schema.org/Person" itemscope itemprop="author"><div class="saboxplugin-tab"><div class="saboxplugin-gravatar"><img decoding="async" src="https://www.g-webservice.de/wp-content/uploads/2021/05/johannes_breiter.jpeg" width="100"  height="100" alt="" itemprop="image"></div><div class="saboxplugin-authorname"><a href="https://www.g-webservice.de/author/jogigwebservice/" class="vcard author" rel="author"><span class="fn">Johannes Gengenbach</span></a></div><div class="saboxplugin-desc"><div itemprop="description"><p>Der Autor hat Wirtschaftsinformatik (M. Sc.) am Karlsruher Institut für Technologie (KIT) studiert. Dabei hat er sich auf Machine Learning, Data Science und das Web spezialisiert. Den Bachelor hat er in BWL mit Schwerpunkt Wirtschaftspsychologie absolviert. Daneben treibt er in seiner Freizeit gerne Sport oder geht auf Reisen.</p>
</div></div><div class="clearfix"></div></div></div><p>The post <a href="https://www.g-webservice.de/python-machine-learning-tutorial/">Python für Machine Learning &#8211; Tutorial zu AI in Python mit Scikit-learn, Pandas &#038; Numpy.</a> appeared first on <a href="https://www.g-webservice.de">g-webservice</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.g-webservice.de/python-machine-learning-tutorial/feed/</wfw:commentRss>
			<slash:comments>17</slash:comments>
		
		
			</item>
	</channel>
</rss>
