{"id":180207,"date":"2023-07-16T20:06:13","date_gmt":"2023-07-16T19:06:13","guid":{"rendered":"https:\/\/liora.io\/de\/?p=180207"},"modified":"2026-02-06T06:33:18","modified_gmt":"2026-02-06T05:33:18","slug":"variablen-scannen-fuer-deine-machine-learning-algorithmen","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/variablen-scannen-fuer-deine-machine-learning-algorithmen","title":{"rendered":"Variablen scannen f\u00fcr deine Machine-Learning-Algorithmen"},"content":{"rendered":"<style>\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style>\n<h3>Das war&#8217;s! Der Datensatz ist bereinigt! Es gibt keine fehlenden Werte mehr, die Modellierungsentscheidungen wurden getroffen! Wir haben einige Variablen beibehalten und andere entfernt. Jetzt m\u00fcssen wir den letzten Schritt vor dem Einsatz von Machine-Learning-Algorithmen machen: die Variablen scannen bzw. sie an den Algorithmus anpassen.<\/h3>\n<p>Die meisten <a href=\"https:\/\/liora.io\/de\/top-5-der-branchen-die-machine-learning-als-wettbewerbsvorteil-nutzen\">Machine-Learning-Algorithmen<\/a> erlauben es nicht, andere als numerische Variablen zu verwenden: Abgesehen von Entscheidungsb\u00e4umen und ihren Ableitungen <a href=\"https:\/\/liora.io\/de\/random-forest-definition\">(Zufallsw\u00e4lder,<\/a> Gradient Boosting Tree usw.) beruhen die am h\u00e4ufigsten verwendeten Machine-Learning-Algorithmen auf der Berechnung von Abst\u00e4nden zwischen verschiedenen Beobachtungen.<br \/>\nIn diesem Artikel besch\u00e4ftigen wir uns damit, wie man Daten f\u00fcr einen Machine-Learning-Algorithmus aufbereitet und wie man Variablen scannen kann.<\/p>\n<h3>Variablen scannen &#8211; Eine quantitative Variable vorbereiten<\/h3>\n<p>Wenn man Machine Learning betreibt, st\u00f6\u00dft man sehr schnell auf <a href=\"https:\/\/liora.io\/de\/quantitative-analyse-was-ist-das-und-wie-wird-lernt-man-es\">quantitative Variablen<\/a>: das Alter eines Kunden, der Preis eines Autos, die Fl\u00e4che eines Grundst\u00fccks&#8230;. Es gibt \u00fcbrigens letztendlich nur wenige Unterschiede zwischen einer diskreten und einer kontinuierlichen Variable: Die Transformationen, die wir an ihnen vornehmen, haben keinen Einfluss auf die <strong>Qualit\u00e4t der enthaltenen Informationen.<\/strong><\/p>\n<p>Um eine quantitative Variable aufzubereiten, wird eine Standard- oder <strong>Min-Max-Normierung<\/strong> verwendet. Diese Normalisierung bringt die Werte in einen normalisierten Bereich: 0 bis 1 f\u00fcr Min-Max und -1 bis 1 f\u00fcr die meisten Daten f\u00fcr Standard.<\/p>\n<p>Eine der Hauptfunktionen der Datennormalisierung ist die Verbesserung und Beschleunigung der <strong>Konvergenz von Algorithmen,<\/strong> die auf dem Gradientenabstieg basieren (SVMs,<a href=\"https:\/\/liora.io\/de\/logistische-regression-was-ist-das-denn\"> Regressionen&#8230;<\/a>), aber sie kann auch zu relevanteren Ergebnissen beim Clustering f\u00fchren: Im folgenden Beispiel werden Zufallsdaten erzeugt, wobei versucht wird, recht anschauliche Cluster und etwas ausrei\u00dferischere Daten zu definieren. Anschlie\u00dfend wird ein<a href=\"https:\/\/liora.io\/de\/was-ist-k-means\"><strong> KMeans<\/strong><\/a> mit oder ohne Normalisierung durchgef\u00fchrt:<\/p>\n<pre data-line=\"\">\t\t\t\t<code readonly=\"true\">\n\t\t\t\t\t<xmp>import numpy as np\nimport pandas as pd\nfrom sklearn.preprocessing import StandardScaler, MinMaxScaler\nfrom sklearn.cluster import KMeans\nimport matplotlib.pyplot as plt\n%matplotlib inline\na = np.random.normal(size=100)\na[:50] = a[:50] + 100\na[50] = a[50] + 60\na[51] = a[51] + 40\nb = np.random.normal(size=100)\nb[25:75] = b[25:75] + 10\nb[51] = b[51] - 10\ndf = pd.DataFrame({'a': a, 'b':b})\ndf_standard = df.copy(deep=True)\ndf_minmax = df.copy(deep=True)\ndf['cluster'] = KMeans(n_clusters=4).fit_predict(df)\ndf_standard[df_standard.columns] = StandardScaler().fit_transform(df_standard)\ndf_standard['cluster'] = KMeans(n_clusters=4).fit_predict(df_standard)\ndf_minmax[df_minmax.columns] = MinMaxScaler().fit_transform(df_minmax)\ndf_minmax['cluster'] = KMeans(n_clusters=4).fit_predict(df_minmax)\nfig, axes = plt.subplots(ncols=3, nrows=2, figsize=(15, 10))\naxes[0, 0].scatter(df['a'], df['b'], color='b', alpha=.5)\naxes[0, 1].scatter(df_standard['a'], df_standard['b'], color='b', alpha=.5)\naxes[0, 2].scatter(df_minmax['a'], df_minmax['b'], color='b', alpha=.5)\naxes[0, 0].set_title('No scaler')\naxes[0, 1].set_title('Standard scaler')\naxes[0, 2].set_title('MinMax scaler')\n<\/xmp>\n\t\t\t\t<\/code>\n<\/pre>\n<p>Du erh\u00e4ltst eine Abbildung, die der folgenden \u00e4hnlich ist:<\/p>\n<style>\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1080\" height=\"720\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image7.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image7.png 1080w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image7-300x200.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image7-1024x683.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image7-768x512.png 768w\" sizes=\"(max-width: 1080px) 100vw, 1080px\"><figcaption><\/figcaption><\/figure>\n<p>Man sieht, dass die <a href=\"https:\/\/liora.io\/de\/machine-learning-clustering\">gefundenen Cluster im Fall der Normalisierung logischer<\/a> sind als im Fall vor der Normalisierung.<\/p>\n<p>Der Hauptunterschied zwischen der <strong>Standardnormalisierung und der Min-Max-Normalisierung<\/strong> liegt in den F\u00e4llen, in denen extreme Werte gefunden werden. Bei der Standardnormalisierung wird eine Normalverteilung der Variablen angenommen, um die Werte f\u00fcr die Mehrheit zwischen -1 und 1 zu reduzieren. Im folgenden Beispiel hat die Variable b einige extreme Werte. Es f\u00e4llt auf, dass die <strong>Normalisierung<\/strong> die Werte nicht auf dieses Intervall reduziert:<\/p>\n<pre data-line=\"\">\t\t\t\t<code readonly=\"true\">\n\t\t\t\t\t<xmp>a = np.random.normal(loc=0, scale=2, size=1000)\na[:500] = a[:500]\nb = a.copy()\nb[:20] = b[:20] + 10\ndf = pd.DataFrame({'a': a, 'b': b})\ndf_standard = df.copy(deep=True)\ndf_minmax = df.copy(deep=True)\ndf_standard[df_standard.columns] = StandardScaler().fit_transform(df_standard)\ndf_minmax[df_minmax.columns] = MinMaxScaler().fit_transform(df_minmax)\nfig, axes = plt.subplots(nrows=2, ncols=3, figsize=(20, 15))\naxes[0, 0].hist(df['a'], bins=100, color='b')\naxes[0, 1].hist(df_standard['a'], bins=100, color='r')\naxes[0, 2].hist(df_minmax['a'], bins=100, color='g')\naxes[0, 0].set_title('No scaler')\naxes[0, 1].set_title('Standard scaler')\naxes[0, 2].set_title('MinMax scaler')\naxes[0, 0].set_ylabel('a')\naxes[1, 0].set_ylabel('b')\naxes[1, 0].hist(df['b'], bins=100, color='b')<\/xmp>\n\t\t\t\t<\/code>\n<\/pre>\n<p>Du erh\u00e4ltst eine Abbildung, die der folgenden \u00e4hnlich ist:<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1440\" height=\"1080\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image4-1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image4-1.png 1440w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image4-1-300x225.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image4-1-1024x768.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image4-1-768x576.png 768w\" sizes=\"(max-width: 1440px) 100vw, 1440px\"><figcaption><\/figcaption><\/figure>\n<p>Diese <strong>Histogramme<\/strong> zeigen einen Bereich von -3 bis 6 f\u00fcr die Variable b, w\u00e4hrend der Bereich f\u00fcr a von -3 bis 3 reichte.<\/p>\n<p>Nat\u00fcrlich haben wir in beiden F\u00e4llen absichtlich Ausrei\u00dfer hinzugef\u00fcgt, um den Effekt zu verst\u00e4rken. In einem <a href=\"https:\/\/liora.io\/de\/dendrogramm\">Data-Science-Projekt<\/a> w\u00e4ren diese Werte fr\u00fcher entfernt worden, aber diese Beispiele geben eine Vorstellung davon, was Normalisierung f\u00fcr quantitative Variablen leisten kann.<\/p>\n<h3>Eine qualitative Variable vorbereiten<\/h3>\n<p>Es wurde bereits erw\u00e4hnt, aber <a href=\"https:\/\/liora.io\/de\/machine-learning-engineer-bootcamp-dein-karrieresprung\">Machine-Learning-Algorithmen<\/a> nehmen keine nicht-numerischen Variablen als Eingabe (zumindest nicht f\u00fcr Python und <a href=\"https:\/\/scikit-learn.org\/stable\/\">scikit-learn<\/a>). Daher m\u00fcssen diese Daten umgewandelt werden. Auch hier muss zwischen mehreren F\u00e4llen unterschieden werden.<\/p>\n<p>Wenn es eine<strong> klare Hierarchie<\/strong> zwischen den verschiedenen Modalit\u00e4ten gibt, dann kann man wahrscheinlich auf eine quantitative Variable zur\u00fcckgreifen: Wenn zum Beispiel eine unserer Variablen eine Note von A bis F ist, dann muss man diese Noten auf Werte zwischen 0 und 20 zur\u00fcckf\u00fchren k\u00f6nnen, wobei F &lt; E &lt; D &lt; C &lt; B &lt; A ist. Bei Produkten, die auf einer <a href=\"https:\/\/liora.io\/de\/die-verwendung-von-data-science-im-e-commerce\">E-Commerce-Website<\/a> angeboten werden, k\u00f6nnte neu 20, gut 15, m\u00e4\u00dfig 10, besch\u00e4digt 7, &#8230; sein. In diesem Fall gen\u00fcgt es, auf den vorherigen Absatz zu verweisen.<\/p>\n<p>Aber wenn es keine Hierarchie gibt, was ist dann das Problem, dieselbe Art von Signatur zu verwenden? Wenn ich z. B. einen<strong> Datensatz<\/strong> mit Automodellen betrachte und die Variable Farbe mit drei Modalit\u00e4ten (z. B. blau, rot und gr\u00fcn) habe: Wenn ich den Farben die Codes 0, 1 und 2 zuweise, dann erkenne ich, dass blau &lt; rot &lt; gr\u00fcn ist, was sehr fragw\u00fcrdig ist! Mathematisch gesehen w\u00fcrde dies bedeuten, dass Blau + Blau = Blau ist, was bis jetzt ziemlich richtig ist, aber auch, dass Blau + Rot = Rot ist, was langsam l\u00e4stig wird, und schlie\u00dflich, dass Rot + Rot = Gr\u00fcn ist, was nur bei Farbenblindheit zutrifft!<\/p>\n<p>Ein weiteres Problem ist, dass der Unterschied zwischen Blau und Gr\u00fcn doppelt so gro\u00df ist wie zwischen Blau und Gr\u00fcn, was wiederum fragw\u00fcrdig ist.<\/p>\n<pre data-line=\"\">\t\t\t\t<code readonly=\"true\">\n\t\t\t\t\t<xmp>df = pd.DataFrame({'couleur': ['bleu', 'rouge', 'vert']})\n# encoder avec 0, 1, 2\ncode = {'bleu': 0, 'rouge': 1, 'vert': 2}\ndf_1 = df.copy(deep=True)\ndf_1['couleur'] = df_1['couleur'].apply(lambda c: code.get(c))\nprint(df_1.head())\nfrom scipy.spatial import distance_matrix\nimport seaborn as sns\nprint('nMatrices de distance')\nplt.figure(figsize=(20, 20))\nsns.heatmap(distance_matrix(df_1, df_1), annot=True)\nplt.show()<\/xmp>\n\t\t\t\t<\/code>\n<\/pre>\n<p>In diesem <strong>Beispiel wird deutlich, dass der Abstand<\/strong> zwischen den Beobachtungen, die den Farben blau und gr\u00fcn entsprechen, gr\u00f6\u00dfer ist als zwischen den Beobachtungen, die den Farben blau und rot oder rot und gr\u00fcn entsprechen.<\/p>\n<p>Statt einer Variable haben wir drei Variablen mit jeweils 0 und 1: In der roten Spalte sind nur die Beobachtungen, die roten Fahrzeugen entsprechen, 1&#8230;<\/p>\n<pre data-line=\"\">\t\t\t\t<code readonly=\"true\">\n\t\t\t\t\t<xmp>df_2 = df.copy(deep=True)\ndf_2 = pd.get_dummies(df_2)\nprint(df_2.head())\nprint('nMatrices de distance')\nplt.figure(figsize=(20, 20))\nsns.heatmap(distance_matrix(df_2, df_2), annot=True)\nplt.show()<\/xmp>\n\t\t\t\t<\/code>\n<\/pre>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1440\" height=\"1440\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image5-1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image5-1.png 1440w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image5-1-300x300.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image5-1-1024x1024.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image5-1-150x150.png 150w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image5-1-768x768.png 768w\" sizes=\"(max-width: 1440px) 100vw, 1440px\"><figcaption><\/figcaption><\/figure>\n<p>Es gibt jedoch einen Punkt, auf den wir in dieser Geschichte zur\u00fcckkommen m\u00fcssen: Wenn wir so viele<strong> Spalten wie Modalit\u00e4ten<\/strong> nehmen, dann ist die Information in meinem Datensatz redundant. Wir k\u00f6nnen also auf eine dieser Modalit\u00e4ten verzichten, da sie von den anderen Modalit\u00e4ten impliziert wird, die dann alle null sind: Diese Technik erm\u00f6glicht es, den Datensatz zu verschlanken, aber vor allem eine Variable zu entfernen, die zu stark mit den anderen korreliert ist: Wenn es viele Modalit\u00e4ten gibt, dann werden die meisten <strong>Indikatoren dieser Variablen f\u00fcr viele Beobachtungen<\/strong> null sein und sie werden gleichzeitig null sein.<\/p>\n<p>Es gibt jedoch noch eine Kategorie, die wir erw\u00e4hnen m\u00fcssen: zirkul\u00e4re Variablen.<\/p>\n<p>?Auch interessant:<\/p>\n<table dir=\"ltr\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"426\"><\/colgroup>\n<tbody>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Machine Learning Clustering: CAH Algorithmus&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/machine-learning-clustering-fokus-auf-den-cah-algorithmus\"><a href=\"https:\/\/liora.io\/de\/machine-learning-clustering-fokus-auf-den-cah-algorithmus\" target=\"_blank\" rel=\"noopener\">Machine Learning Clustering: CAH Algorithmus<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Deep Learning vs. Machine Learning&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/deep-learning-vs-machine-learning\"><a href=\"https:\/\/liora.io\/de\/deep-learning-vs-machine-learning\" target=\"_blank\" rel=\"noopener\">Deep Learning vs. Machine Learning<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Data Poisoning&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/data-poisoning-eine-bedrohung-fuer-machine-learning-modelle\"><a href=\"https:\/\/liora.io\/de\/data-poisoning-eine-bedrohung-fuer-machine-learning-modelle\" target=\"_blank\" rel=\"noopener\">Data Poisoning<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Machine Learning Data Sets Top 5&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/machine-learning-data-sets-top-5-websites\"><a href=\"https:\/\/liora.io\/de\/machine-learning-data-sets-top-5-websites\" target=\"_blank\" rel=\"noopener\">Machine Learning Data Sets Top 5<\/a><\/td>\n<\/tr>\n<tr>\n<td data-sheets-value=\"{&quot;1&quot;:2,&quot;2&quot;:&quot;Die Top 3 Machine Learning Algorithmen&quot;}\" data-sheets-hyperlink=\"https:\/\/liora.io\/de\/3-machine-learning-algorithmen-fuer-deinen-job\"><a href=\"https:\/\/liora.io\/de\/3-machine-learning-algorithmen-fuer-deinen-job\" target=\"_blank\" rel=\"noopener\">Die Top 3 Machine Learning Algorithmen<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Eine zirkul\u00e4re Variable vorbereiten<\/h3>\n<p>Eine zirkul\u00e4re Variable ist eine quantitative oder qualitative Variable, die in sich geschlossen ist: die Monate des Jahres, die Tageszeit, die Jahreszeiten, das Lebensstadium eines Produkts, das unendlich oft recycelt werden kann, &#8230; Das Besondere an diesen Variablen ist, dass man eine Hierarchie zwischen den verschiedenen Werten definieren kann, dass diese Hierarchie aber zirkul\u00e4r ist: 1 Uhr morgens w\u00e4re gr\u00f6\u00dfer als 0 Uhr, genauso wie 0 Uhr gr\u00f6\u00dfer als 23 Uhr w\u00e4re; ebenso w\u00e4re Fr\u00fchling &lt; Sommer &lt; Herbst &lt; Winter &lt; Fr\u00fchling &lt; &#8230;<\/p>\n<p>Du musst also einen Weg finden, diese Daten zu kodieren, ohne dabei zu viel Sinn zu verlieren. Bisher werden diese Daten als Zahlen von 0 bis 23 dargestellt.<\/p>\n<pre data-line=\"\">\t\t\t\t<code readonly=\"true\">\n\t\t\t\t\t<xmp>df = pd.DataFrame({'heure': [i for i in range(24)]})\nprint(df.head())<\/xmp>\n\t\t\t\t<\/code>\n<\/pre>\n<p>Wenn wir dieses Format beibehalten, haben wir die Distanz zwischen 23:00 und 0:00 Uhr, die 23 Mal so gro\u00df ist wie die <strong>Distanz zwischen 0:00 und 1:00 Uhr.<\/strong> Im Gegenteil, das Verhalten einer Person um 23 Uhr, um Mitternacht oder um 1 Uhr morgens ist sehr \u00e4hnlich.<\/p>\n<pre data-line=\"\">\t\t\t\t<code readonly=\"true\">\n\t\t\t\t\t<xmp>plt.figure(figsize=(20, 20))\nsns.heatmap(distance_matrix(df, df), annot=True)\nplt.show()<\/xmp>\n\t\t\t\t<\/code>\n<\/pre>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1440\" height=\"1440\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image6-3.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image6-3.png 1440w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image6-3-300x300.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image6-3-1024x1024.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image6-3-150x150.png 150w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image6-3-768x768.png 768w\" sizes=\"(max-width: 1440px) 100vw, 1440px\"><figcaption><\/figcaption><\/figure>\n<p>Was ist mit der <strong>Binarisierung<\/strong>? Diesmal haben wir nicht mehr das gleiche Problem. Der Abstand zwischen Mitternacht und 1 Uhr ist derselbe wie zwischen 23 Uhr und Mitternacht.<\/p>\n<pre data-line=\"\">\t\t\t\t<code readonly=\"true\">\n\t\t\t\t\t<xmp>df_2 = df.copy(deep=True)\ndf_2 = pd.get_dummies(df_2, columns=['heure'])\nprint(df_2.head())\nplt.figure(figsize=(20, 20))\nsns.heatmap(distance_matrix(df_2, df_2), annot=True)\nplt.show()<\/xmp>\n\t\t\t\t<\/code>\n<\/pre>\n<p><img decoding=\"async\" width=\"1440\" height=\"1440\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image3-1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image3-1.png 1440w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image3-1-300x300.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image3-1-1024x1024.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image3-1-150x150.png 150w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image3-1-768x768.png 768w\" sizes=\"(max-width: 1440px) 100vw, 1440px\"><\/p>\n<p>Tats\u00e4chlich sind die Abst\u00e4nde zwischen allen Stunden gleich&#8230; Der Abstand zwischen Mitternacht und 1 Uhr ist genauso gro\u00df wie zwischen<strong> Mitternacht und Mittag&#8230;<\/strong> Aber auch das ist nicht gut.<\/p>\n<p>Es muss also eine andere L\u00f6sung gefunden werden. Diese andere L\u00f6sung kommt aus der Trigonometrie. Wir behalten nicht die absoluten Werte, sondern nehmen einfach den Kosinus und den Sinus dieser Werte:<\/p>\n<pre data-line=\"\">\t\t\t\t<code readonly=\"true\">\n\t\t\t\t\t<xmp>df_3 = df.copy(deep=True)\ndf_3['sin_heure'] = df_3['heure'].apply(lambda h: np.sin(2 * np.pi * h \/ 24))\ndf_3['cos_heure'] = df_3['heure'].apply(lambda h: np.cos(2 * np.pi * h \/ 24))\ndf_3.drop(['heure'], axis=1, inplace=True)\nplt.figure(figsize=(20, 20))\nsns.heatmap(distance_matrix(df_3, df_3), annot=True)\nplt.show()<\/xmp>\n\t\t\t\t<\/code>\n<\/pre>\n<p><img decoding=\"async\" width=\"1440\" height=\"1440\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image2-1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image2-1.png 1440w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image2-1-300x300.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image2-1-1024x1024.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image2-1-150x150.png 150w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image2-1-768x768.png 768w\" sizes=\"(max-width: 1440px) 100vw, 1440px\"><\/p>\n<p>Die Entfernungen sind viel nuancierter! Du kannst die Punkte sogar in einer Ebene darstellen, um zu sehen, dass wir gerade die Uhr neu erfunden haben:<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1440\" height=\"1440\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image1.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image1.png 1440w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image1-300x300.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image1-1024x1024.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image1-150x150.png 150w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/image1-768x768.png 768w\" sizes=\"(max-width: 1440px) 100vw, 1440px\"><figcaption><\/figcaption><\/figure>\n<h3>Fazit<\/h3>\n<p>Dieser Schritt des<strong> Aufbaus und der Vorbereitung der Variablen<\/strong> unmittelbar vor dem Training eines Machine-Learning-<a href=\"https:\/\/liora.io\/de\/der-knn-algorithmus-einfach-erklart\">Algorithmus<\/a> ist entscheidend, da er sowohl die Algorithmen beschleunigt als auch die Ergebnisse verbessert. Die Techniken sind f\u00fcr die verschiedenen Variablentypen unterschiedlich, aber du solltest sie im Hinterkopf behalten, um vor der Anwendung der Algorithmen einen guten Start zu haben.<\/p>\n<p>M\u00f6chtest du mehr dar\u00fcber erfahren? Nimm an einer unserer n\u00e4chsten Schulungen im Bootcamp- oder fortlaufenden Format teil.<\/p>\n<p>Kontaktiere uns unter contact@liora.io oder auf Linkedin auf der Liora-Seite!<\/p>\n<p><a href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\"><br \/>\nEntdecke unsere Weiterbildungen<br \/>\n<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das war&#8217;s! Der Datensatz ist bereinigt! Es gibt keine fehlenden Werte mehr, die Modellierungsentscheidungen wurden getroffen! Wir haben einige Variablen beibehalten und andere entfernt. Jetzt m\u00fcssen wir den letzten Schritt vor dem Einsatz von Machine-Learning-Algorithmen machen: die Variablen scannen bzw. sie an den Algorithmus anpassen. Die meisten Machine-Learning-Algorithmen erlauben es nicht, andere als numerische Variablen [&hellip;]<\/p>\n","protected":false},"author":76,"featured_media":180208,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2472],"class_list":["post-180207","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ki"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/180207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=180207"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/180207\/revisions"}],"predecessor-version":[{"id":217372,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/180207\/revisions\/217372"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/180208"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=180207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=180207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}