Maschinelles Lernen auf R: Expertentechniken für die prädiktive Analyse

BildHallo habrozhiteli! Die R-Sprache bietet eine Reihe leistungsstarker Methoden für maschinelles Lernen, mit denen Sie Ihre Daten schnell und nicht trivial analysieren können. Das Buch ist ein Leitfaden, der dabei hilft, Methoden des maschinellen Lernens anzuwenden, um alltägliche Probleme zu lösen. Brett Lanz bringt Ihnen alles bei, was Sie für die Datenanalyse, Prognose und Datenvisualisierung benötigen. Hier finden Sie Informationen zu neuen und verbesserten Bibliotheken, Tipps zu ethischen Aspekten des maschinellen Lernens und zu Voreingenommenheit sowie ausführliche Schulungen.

In diesem Buch - Grundlagen des maschinellen Lernens und Funktionen des Computertrainings an Beispielen. - Vorbereitung von Daten zur Verwendung beim maschinellen Lernen mittels der Sprache R. - Klassifizierung der Signifikanz der Ergebnisse. - Vorhersage von Ereignissen mithilfe von Entscheidungsbäumen, Regeln und Referenzvektoren. - Vorhersage numerischer Daten und Bewertung von Finanzdaten mithilfe von Regressionsmethoden. - Die Modellierung komplexer Prozesse mithilfe neuronaler Netze ist die Grundlage für tiefes Lernen. - Bewertung von Modellen und Verbesserung ihrer Leistung. - Die neuesten Technologien zur Verarbeitung von Big Data, insbesondere R 3.6, Spark, H2O und TensorFlow.

Für wen ist das Buch?


Das Buch richtet sich an Personen, die Daten in einem bestimmten Bereich verwenden möchten. Sie sind vielleicht schon ein wenig mit maschinellem Lernen vertraut, haben aber noch nie mit der R-Sprache gearbeitet. oder umgekehrt wissen Sie ein wenig über R, wissen aber fast nichts über maschinelles Lernen. In jedem Fall hilft Ihnen dieses Buch, schnell loszulegen. Es wäre nützlich, die Grundkonzepte der Mathematik und Programmierung ein wenig aufzufrischen, aber es wären keine Vorkenntnisse erforderlich. Alles was Sie brauchen ist der Wunsch zu lernen.

Was werden Sie in der Publikation lesen?
1 « » , , , , .

2 « » R. , , .

3 « : » , : .

4 « : » , . , .

5 « : » , , . , .

6 « : » , . , , .

7 « “ ”: » , . , , .

8 « : » , , . - , , , .

9 « : k-» . -.

10 « » , .

11 « » , , . , .

12 « » : R. , , R.


Beispiel: Modellierung der Betonfestigkeit mithilfe eines neuronalen Netzwerks


Im Bereich des Bauingenieurwesens ist es äußerst wichtig, genaue Schätzungen der Wirksamkeit von Baustoffen zu haben. Diese Bewertungen sind erforderlich, um Sicherheitsregeln für die Verwendung von Materialien beim Bau von Gebäuden, Brücken und Straßen zu entwickeln.

Von besonderem Interesse ist die Beurteilung der Betonfestigkeit. Beton wird in fast jeder Konstruktion verwendet. Die Leistungsmerkmale von Beton sind sehr unterschiedlich, da er aus einer Vielzahl von Bestandteilen besteht, die in einem Komplex zusammenwirken. Infolgedessen ist es schwierig, genau zu sagen, wie stark das fertige Produkt sein wird. Ein Modell, mit dem die Festigkeit von Beton unter Berücksichtigung der Zusammensetzung der Ausgangsmaterialien sicher bestimmt werden kann, könnte ein höheres Sicherheitsniveau für Baustellen bieten.

Schritt 1. Datenerfassung


Für diese Analyse verwenden wir die konkreten Druckfestigkeitsdaten, die I-Cheng Yeh dem UCI Machine Learning Repository (http://archive.ics.uci.edu/ml) zur Verfügung gestellt hat. Da Ai-Cheng Ye erfolgreich neuronale Netze zur Modellierung dieser Daten verwendet hat, werden wir versuchen, seine Arbeit durch Anwendung eines einfachen neuronalen Netzmodells in R zu reproduzieren.

Nach dem Standort zu urteilen, enthält dieser Datensatz 1030 Aufzeichnungen über verschiedene Betonsorten mit acht Merkmalen, die die für die Zusammensetzung der Betonmischung verwendeten Komponenten beschreiben. Es wird angenommen, dass diese Eigenschaften die endgültige Druckfestigkeit beeinflussen. Dazu gehören: die Menge (in Kilogramm pro Kubikmeter) Zement, Wasser, verschiedene Zusatzstoffe, große und kleine Zuschlagstoffe wie Schotter und Sand, die im Endprodukt verwendet werden, sowie die Abbindezeit (in Tagen).

Laden Sie zum Ausführen dieses Beispiels die Dateicrete.csv herunter und speichern Sie sie im Arbeitsverzeichnis R.

Schritt 2. Recherche und Datenaufbereitung


Wie üblich starten wir die Analyse, indem wir die Daten mit der Funktion read.csv () in das R-Objekt laden und sicherstellen, dass das Ergebnis der erwarteten Struktur entspricht:

> concrete <- read.csv("concrete.csv")
> str(concrete)
'data.frame':        1030 obs. of 9 variables:
$ cement       : num 141 169 250 266 155 ...
$ slag            : num 212 42.2 0 114 183.4 ...
$ ash             : num 0 124.3 95.7 0 0 ...
$ water          : num 204 158 187 228 193 ...
$ superplastic : num 0 10.8 5.5 0 9.1 0 0 6.4 0 9 ...
$ coarseagg    : num 972 1081 957 932 1047 ...
$ fineagg        : num 748 796 861 670 697 ...
$ age             : int 28 14 28 28 28 90 7 56 28 28 ...
$ strength      : num 29.9 23.5 29.2 45.9 18.3 ...

Neun Variablen im Datenrahmen entsprechen acht Merkmalen und einem erwarteten Ergebnis, es wurde jedoch offensichtlich, dass ein Problem vorliegt. Neuronale Netze funktionieren am besten, wenn die Eingabedaten auf einen engen Bereich um 0 skaliert werden. Hier sehen wir Werte im Bereich von 0 bis mehr als 1000.

In der Regel besteht die Lösung für dieses Problem darin, die Daten mithilfe der Normalisierungs- oder Standardisierungsfunktion zu skalieren. Wenn die Datenverteilung einer glockenförmigen Kurve entspricht (Normalverteilung, siehe Kapitel 2), kann es sinnvoll sein, die Standardisierung mit der integrierten Funktion scale () zu verwenden. Wenn die Datenverteilung nahezu gleichmäßig ist oder sich stark von der Normalverteilung unterscheidet, ist eine Normalisierung auf den Bereich von 0 bis 1 möglicherweise besser geeignet. In diesem Fall verwenden wir die letztere Option.

In Kapitel 3 haben wir unsere eigene normalize () -Funktion erstellt:

> normalize <- function(x) {
       return((x - min(x)) / (max(x) — min(x)))
}

Nachdem dieser Code ausgeführt wurde, können Sie die Funktion normalize () mit der Funktion lapply () auf alle Spalten des ausgewählten Datenrahmens anwenden:

> concrete_norm <- as.data.frame(lapply(concrete, normalize))

Um zu überprüfen, ob die Normalisierung funktioniert hat, können Sie überprüfen, ob die Minimal- und Maximalwerte des Stärkeattributs 0 bzw. 1 sind:

> summary(concrete_norm$strength)
       Min.     1st Qu.         Median     Mean      3rd Qu.      Max.
   0.0000     0.2664         0.4001  0.4172      0.5457   1.0000

Zum Vergleich: Die anfänglichen Minimal- und Maximalwerte dieses Attributs betrugen 2,33 bzw. 82,60:

> summary(concrete$strength)
     Min.       1st Qu.     Median       Mean      3rd Qu.       Max.
    2.33         23.71       34.44      35.82        46.14      82.60

Jede Konvertierung, die vor dem Training des Modells auf die Daten angewendet wird, sollte anschließend in umgekehrter Reihenfolge angewendet werden, um das Attribut wieder in die ursprünglichen Einheiten zu konvertieren. Um die Skalierung zu erleichtern, ist es ratsam, die Quelldaten oder zumindest eine Zusammenfassung der Statistiken der Quelldaten zu speichern.

Nach dem von Ye im Originalartikel beschriebenen Szenario werden wir die Daten in einen Trainingssatz, der 75% aller Beispiele enthält, und einen Testsatz, der aus 25% besteht, aufteilen. Die verwendete CSV-Datei ist in zufälliger Reihenfolge sortiert, sodass wir sie nur in zwei Teile unterteilen können: Wir werden einen Trainingsdatensatz verwenden, um ein neuronales Netzwerk aufzubauen, und einen Testdatensatz, um zu bewerten, wie gut das Modell für zukünftige Ergebnisse verallgemeinert wird. Da das neuronale Netz leicht in einen Umschulungszustand versetzt werden kann, ist dieser Schritt sehr wichtig.

> concrete_train <- concrete_norm[1:773, ]
> concrete_test <- concrete_norm[774:1030, ]




Schritt 3. Trainieren Sie das Modell anhand von Daten


Um die Beziehung zwischen den bei der Betonherstellung verwendeten Inhaltsstoffen und der Festigkeit des Endprodukts zu modellieren, werden wir ein mehrschichtiges neuronales Netzwerk mit direkter Verteilung aufbauen. Das von Stefan Fritsch und Frauke Guenther entwickelte Neuralnet-Paket bietet eine standardmäßige und benutzerfreundliche Implementierung solcher Netzwerke. Dieses Paket enthält auch eine Funktion zum Erstellen einer Netzwerktopologie. Die Implementierung von Neuralnet ist ein guter Weg, um zusätzliche Informationen über neuronale Netze zu erhalten, obwohl dies nicht bedeutet, dass es auch nicht für echte Arbeit verwendet werden kann - wie Sie gleich sehen werden, ist es ein ziemlich leistungsfähiges Werkzeug.

R , , . nnet R, , , . , . — RSNNS, , , .

Da das Neuralnet-Paket nicht in der Basis R enthalten ist, müssen Sie es installieren, indem Sie install.packages ("neuralnet") eingeben und es mit dem Befehl library (neuralnet) herunterladen. Die Funktion neuralnet () im Paket kann verwendet werden, um neuronale Netze in numerischer Vorhersage unter Verwendung der folgenden Syntax zu trainieren.

Syntax des neuronalen Netzwerks


Verwenden der Funktion neuralnet () aus dem Neuralnet-Paket Erstellen

eines Modells:

m <- neuralnet(target ~ predictors, data = mydata,
                       hidden = 1, act.fct = "logistic")

• Ziel - ein Modell, das als Ergebnis des Trainings im mydata-Datenrahmen erstellt wird.

• Prädiktoren - R-Formel, die die Merkmale aus dem Mydata-Datenrahmen bestimmt, die für die Prognose verwendet werden sollen;

• Daten - Datenrahmen, zu dem Ziel und Prädiktoren gehören;

• versteckt - Die Anzahl der Neuronen in der verborgenen Ebene (Standard ist 1). Hinweis: Um mehrere verborgene Schichten zu beschreiben, wird ein Vektor von ganzen Zahlen verwendet, z. B. c (2, 2).

• act.fct - Aktivierungsfunktion: "logistic" oder "tanh". Hinweis: Es kann auch jede andere differenzierbare Funktion verwendet werden.

Die Funktion gibt ein neuronales Netzwerkobjekt zurück, das für die Vorhersage verwendet werden kann.

Vorhersage:

p <- berechnen (m, Test)

• m - Modell, das mit der Funktion neuralnet () trainiert wurde;

• test - Ein Datenrahmen, der Testdaten mit denselben Eigenschaften wie die Trainingsdaten enthält, die zur Erstellung des Klassifikators verwendet wurden.

Die Funktion gibt eine Liste zurück, die aus zwei Komponenten besteht: $ neuron, in der Neuronen für jede Netzwerkschicht gespeichert sind, und $ net.result, in der die mit diesem Modell vorhergesagten Werte gespeichert sind.

Beispiele:



concrete_model <- neuralnet(strength ~ cement + slag + ash,
      data = concrete, hidden = c(5, 5), act.fct = "tanh")
model_results <- compute(concrete_model, concrete_data)
strength_predictions <- model_results$net.result

Beginnen wir mit dem Training des einfachsten mehrstufigen Direktverteilungsnetzwerks mit Standardparametern, das nur einen versteckten Knoten hat:

> concrete_model <- neuralnet(strength ~ cement + slag
         + ash + water + superplastic + coarseagg + fineagg + age,
         data = concrete_train)

Dann, wie in Abb. 7.11 können Sie die Netzwerktopologie mit der Funktion plot () visualisieren und das resultierende Modellobjekt übergeben:

> plot(concrete_model)

Bild

In diesem einfachen Modell gibt es einen Eingangsknoten für jedes der acht Merkmale, dann gibt es einen versteckten und einen Ausgangsknoten, die eine Vorhersage der konkreten Festigkeit geben. Das Diagramm zeigt auch die Gewichte für jede Verbindung und den Versatzwert, der für die mit der Nummer 1 gekennzeichneten Knoten angegeben ist. Der Versatzwert ist eine numerische Konstante, mit der Sie den Wert im angegebenen Knoten nach oben oder unten verschieben können, ungefähr wie eine Verschiebung in einer linearen Gleichung.

Ein neuronales Netzwerk mit einem versteckten Knoten kann als „Cousin“ der in Kapitel 6 diskutierten linearen Regressionsmodelle betrachtet werden. Die Gewichte zwischen den Eingabeknoten und dem versteckten Knoten ähneln den Beta-Koeffizienten, und das Offsetgewicht ist wie eine Verschiebung.

Am unteren Rand der Abbildung werden die Anzahl der Trainingsschritte und die Größe des Fehlers angezeigt - der mittlere quadratische Gesamtfehler (Summe der quadratischen Fehler, SSE), der erwartungsgemäß die Summe der quadratischen Differenzen zwischen den vorhergesagten und den tatsächlichen Werten ist. Je kleiner die SSE ist, desto genauer stimmt das Modell mit den Trainingsdaten überein. Dies zeigt die Wirksamkeit dieser Daten an, sagt jedoch wenig darüber aus, wie das Modell mit unbekannten Daten funktioniert.

Schritt 4. Bewertung der Wirksamkeit des Modells


Das Netzwerktopologiediagramm bietet die Möglichkeit, einen Blick in die „Black Box“ eines neuronalen Netzwerks zu werfen, bietet jedoch nicht viele Informationen darüber, wie gut das Modell mit zukünftigen Daten übereinstimmt. Um Vorhersagen für einen Testdatensatz zu generieren, können Sie die

> model_results <- compute(concrete_model, concrete_test[1:8])

Funktion compute () verwenden : Die Funktion compute () funktioniert etwas anders als die bisher verwendeten Funktionen prognost (). Es gibt eine Liste zurück, die aus zwei Komponenten besteht: $ neuron, in der Neuronen für jede Netzwerkschicht gespeichert sind, und $ net.result, in der vorhergesagte Werte gespeichert sind. Es ist $ net.result, das wir brauchen:

> predicted_strength <- model_results$net.result

Da wir die Aufgabe der numerischen Vorhersage und nicht der Klassifizierung haben, können wir die Inkonsistenzmatrix nicht verwenden, um die Genauigkeit des Modells zu überprüfen. Wir messen die Korrelation zwischen dem vorhergesagten und dem wahren Wert der Betonfestigkeit. Wenn die vorhergesagten und tatsächlichen Werte stark korrelieren, ist das Modell wahrscheinlich nützlich, um die Festigkeit von Beton zu bestimmen.

Ich möchte Sie daran erinnern, dass die Funktion cor () verwendet wird, um die Korrelation zwischen zwei numerischen Vektoren zu erhalten:

> cor(predicted_strength, concrete_test$strength)
                    [,1]
[1,] 0.8064655576

Seien Sie nicht beunruhigt, wenn Ihr Ergebnis von unserem abweicht. Da das neuronale Netzwerk mit zufälligen Gewichten arbeitet, können die im Buch dargestellten Vorhersagen für verschiedene Modelle unterschiedlich sein. Wenn Sie die Ergebnisse genau abgleichen möchten, versuchen Sie den Befehl set.seed (12345), bevor Sie mit dem Aufbau eines neuronalen Netzwerks beginnen.

Wenn die Korrelation nahe bei 1 liegt, weist dies auf eine starke lineare Beziehung zwischen den beiden Variablen hin. Eine Korrelation von ungefähr 0,806 zeigt daher eine ziemlich starke Beziehung an. Dies bedeutet, dass das Modell auch mit einem einzelnen versteckten Knoten recht gut funktioniert. Da wir nur einen versteckten Knoten verwendet haben, ist es wahrscheinlich, dass wir die Effizienz des Modells verbessern können, was wir versuchen werden.

Schritt 5. Verbesserung der Modelleffizienz


Da Netzwerke mit einer komplexeren Topologie komplexere Konzepte untersuchen können, wollen wir sehen, was passiert, wenn Sie die Anzahl der versteckten Knoten auf fünf erhöhen. Wir werden die Funktion neuralnet () wie zuvor verwenden, aber den Parameter hidden = 5 hinzufügen:

> concrete_model2 <- neuralnet(strength ~ cement + slag +
                                               ash + water + superplastic +
                                               coarseagg + fineagg + age,
                                               data = concrete_train, hidden = 5)

Nachdem Sie das Netzwerkdiagramm erneut erstellt haben (Abb. 7.12), wird die Anzahl der Verbindungen stark zunehmen. Wie hat sich dies auf die Effizienz ausgewirkt?

> plot(concrete_model2)

Bitte beachten Sie, dass der resultierende Fehler (erneut gemessen als SSE) von 5,08 im Vorgängermodell auf 1,63 gesunken ist. Darüber hinaus stieg die Anzahl der Trainingsstufen von 4882 auf 86.849 - was angesichts der Kompliziertheit des Modells nicht verwunderlich ist. Je komplexer das Netzwerk ist, desto mehr Iterationen sind erforderlich, um die optimalen Gewichte zu finden.

Wenn wir dieselben Schritte anwenden, um die vorhergesagten Werte mit den wahren zu vergleichen, erhalten wir eine Korrelation von etwa 0,92, was im Vergleich zum vorherigen Ergebnis von 0,80 für ein Netzwerk mit einem versteckten Knoten viel besser ist:

> model_results2 <- compute(concrete_model2, concrete_test[1:8])
> predicted_strength2 <- model_results2$net.result
> cor(predicted_strength2, concrete_test$strength)
                  [,1]
[1,] 0.9244533426

Bild

Trotz erheblicher Verbesserungen können Sie die Effektivität des Modells noch weiter steigern. Insbesondere ist es möglich, zusätzliche verborgene Schichten einzuführen und die Netzwerkaktivierungsfunktion zu ändern. Mit diesen Änderungen legen wir den Grundstein für den Aufbau eines einfachen tiefen neuronalen Netzwerks.

Die Wahl der Aktivierungsfunktion ist für tiefes Lernen sehr wichtig. Die beste Funktion für eine bestimmte Lernaufgabe wird normalerweise experimentell gefunden und dann von der Gemeinschaft der Forscher für maschinelles Lernen häufig verwendet.

In letzter Zeit ist die Aktivierungsfunktion, die als Destillationsfunktion oder Gleichrichter bezeichnet wird, aufgrund ihrer erfolgreichen Anwendung bei komplexen Aufgaben wie der Bilderkennung sehr beliebt geworden. Ein neuronaler Netzwerkknoten, in dem ein Gleichrichter als Aktivierungsfunktion verwendet wird, wird als Rectified Linear Unit (ReLU) bezeichnet. Wie in Abb. In 7.13 wird die Aktivierungsfunktion vom Gleichrichtertyp so beschrieben, dass x zurückgegeben wird, wenn x größer oder gleich 0 ist, und ansonsten 0. Die Bedeutung dieser Funktion besteht darin, dass sie einerseits nicht linear ist und andererseits einfache mathematische Eigenschaften aufweist, die sie rechnerisch kostengünstig und für den Gradientenabstieg hocheffizient machen. Leider ist für x = 0 die Gleichrichterableitung nicht definiert,Daher kann der Gleichrichter nicht in Verbindung mit der Funktion neuralnet () verwendet werden.

Stattdessen können Sie eine geglättete Approximation von ReLU verwenden, die als softplus oder SmoothReLU bezeichnet wird, eine Aktivierungsfunktion, die als log (1 + ex) definiert ist. Wie in Abb. 7.13 ist die Softplus-Funktion für x-Werte kleiner als 0 nahe Null und für x größer als 0 ungefähr gleich x.

Bild

Um die Funktion softplus () in R zu definieren, verwenden wir den folgenden Code:

> softplus <- function(x) { log(1 + exp(x)) }

Eine solche Aktivierungsfunktion kann dem eingegebenen neuralnet () mit dem Parameter act.fct bereitgestellt werden. Zusätzlich fügen wir eine zweite verborgene Schicht hinzu, die aus fünf Knoten besteht, und weisen dem verborgenen Parameter den Wert des ganzzahligen Vektors c (5, 5) zu. Als Ergebnis erhalten wir ein zweischichtiges Netzwerk, von dem jede fünf Knoten hat und alle die Softplus-Aktivierungsfunktion verwenden:

> set.seed(12345)
> concrete_model3 <- neuralnet(strength ~ cement + slag +
                                               ash + water + superplastic +
                                               coarseagg + fineagg + age,
                                               data = concrete_train,
                                               hidden = c(5, 5),
                                               act.fct = softplus)

Nach wie vor kann das Netzwerk visualisiert werden (Abb. 7.14):

> plot(concrete_model3)

Bild

Die Korrelation zwischen der vorhergesagten und der tatsächlichen Festigkeit von Beton kann wie folgt berechnet werden:

> model_results3 <- compute(concrete_model3, concrete_test[1:8])
> predicted_strength3 <- model_results3$net.result
> cor(predicted_strength3, concrete_test$strength)
                  [,1]
[1,] 0.9348395359

Die Korrelation zwischen der vorhergesagten und der tatsächlichen Stärke betrug 0,935, was der bisher beste erhaltene Indikator ist. Interessanterweise berichtete Ye in der Originalveröffentlichung über eine Korrelation von 0,885. Dies bedeutet, dass wir mit relativ geringem Aufwand ein vergleichbares Ergebnis erzielen und sogar die Ergebnisse eines Experten auf diesem Gebiet übertreffen konnten. Die Ergebnisse von Ye wurden zwar 1998 veröffentlicht, was uns einen Vorsprung auf mehr als 20 Jahre zusätzlicher Forschung auf dem Gebiet der neuronalen Netze verschaffte!

Ein weiteres wichtiges Detail sollte berücksichtigt werden: Da wir die Daten vor dem Training des Modells normalisiert haben, liegen die Vorhersagen auch im normalisierten Intervall von 0 bis 1. Der folgende Code zeigt beispielsweise einen Datenrahmen, der die konkreten Festigkeitswerte aus dem Anfangsdatensatz zeilenweise mit den entsprechenden Vorhersagen vergleicht:

> strengths <- data.frame(
      actual = concrete$strength[774:1030],
      pred = predicted_strength3
   )
> head(strengths, n = 3)
      actual        pred
774 30.14 0.2860639091
775 44.40 0.4777304648
776 24.50 0.2840964250


Wenn wir die Korrelation untersuchen, sehen wir, dass die Auswahl normalisierter oder abnormalisierter Daten keinen Einfluss auf die berechnete Leistungsstatistik hat - genau wie zuvor beträgt die Korrelation 0,935: Wenn wir jedoch einen anderen Leistungsindikator berechnet haben, beispielsweise die absolute Differenz zwischen den vorhergesagten und den tatsächlichen Werten, dann Die Wahl des Maßstabs wäre sehr wichtig. In diesem Sinne können Sie die Funktion unnormalize () erstellen, die die Umkehrung der Minimax-Normalisierung ausführt und es Ihnen ermöglicht, normalisierte Vorhersagen in den ursprünglichen Maßstab umzuwandeln:

> cor(strengths$pred, strengths$actual)
[1] 0.9348395359






> unnormalize <- function(x) {
     return((x * (max(concrete$strength)) -
           min(concrete$strength)) + min(concrete$strength))
   }

Nach Anwendung der Funktion unnormalize (), die wir für Prognosen geschrieben haben, wird deutlich, dass der Maßstab der neuen Prognosen den Anfangswerten der Betonfestigkeit ähnlich ist. Auf diese Weise können Sie den aussagekräftigen Wert des absoluten Fehlers berechnen. Darüber hinaus bleibt die Korrelation zwischen abnormalen und anfänglichen Festigkeitswerten unverändert:

> strengths$pred_new <- unnormalize(strengths$pred)
> strengths$error <- strengths$pred_new — strengths$actual
> head(strengths, n = 3)
           actual                pred             pred_new                    error
774          30.14         0.2860639091               23.62887889      -6.511121108
775          44.40         0.4777304648               39.46053639      -4.939463608
776          24.50         0.2840964250               23.46636470      -1.033635298

> cor(strengths$pred_new, strengths$actual)
[1] 0.9348395359

Wenn Sie neuronale Netze auf Ihre Projekte anwenden, müssen Sie eine ähnliche Abfolge von Schritten ausführen, um die Daten auf ihren ursprünglichen Maßstab zurückzusetzen.

Möglicherweise stellen Sie auch fest, dass neuronale Netze schnell komplexer werden, da sie für immer schwierigere Lernaufgaben verwendet werden. Beispielsweise können Sie auf das sogenannte "verschwindende" kleine Gradientenproblem und das eng verwandte "explodierende" Gradientenproblem stoßen, wenn der Rückausbreitungsalgorithmus keine nützliche Lösung findet, da er nicht in einer angemessenen Zeit konvergiert. Um diese Probleme zu lösen, können Sie versuchen, die Anzahl der ausgeblendeten Knoten zu ändern, verschiedene Aktivierungsfunktionen wie ReLU anzuwenden, die Lerngeschwindigkeit anzupassen usw. Auf der Hilfeseite für die Neuralnet-Funktion finden Sie zusätzliche Informationen zu den verschiedenen Parametern, die konfiguriert werden können. Dies führt jedoch zu einem anderen Problem:wenn der Engpass beim Aufbau eines hocheffizienten Modells darin besteht, eine große Anzahl von Parametern zu überprüfen. Dies ist der Preis für die Verwendung neuronaler Netze und vor allem für Deep-Learning-Netze: Ihr großes Potenzial erfordert viel Zeit und Rechenleistung.

, ML . , Amazon Web Services (AWS) Microsoft Azure, . 12.


Die SVM-Methode (Support Vector Machine) kann als Oberfläche dargestellt werden, die die Grenze zwischen Datenpunkten bildet, die in einem mehrdimensionalen Raum dargestellt sind und Beispiele und Werte ihrer Attribute beschreiben. Das Ziel von SVM ist es, eine flache Grenze zu bauen - eine Hyperebene, die den Raum so teilt, dass sich auf beiden Seiten homogene Gruppen bilden. Daher kombiniert das SVM-Training Aspekte des Trainings für den nächsten Nachbarn basierend auf den in Kapitel 3 beschriebenen Instanzen und der in Kapitel 6 beschriebenen linearen Regressionsmodellierung. Dies ist eine äußerst leistungsstarke Kombination, mit der SVMs sehr komplexe Beziehungen modellieren können.

Trotz der Tatsache, dass die grundlegende Mathematik, die SVM zugrunde liegt, seit Jahrzehnten besteht, hat das Interesse an diesen Methoden erheblich zugenommen, nachdem sie auf ML angewendet wurden. Die Popularität dieser Methoden stieg nach hochkarätigen Erfolgsgeschichten bei der Lösung komplexer Lernprobleme sowie nach der Entwicklung von SVM-Algorithmen, die in gut unterstützten Bibliotheken in vielen Programmiersprachen, einschließlich R, vergeben und implementiert wurden. Danach wurden SVM-Methoden von einem breiten Publikum akzeptiert. Andernfalls wäre es wahrscheinlich unmöglich, die komplexe Mathematik anzuwenden, die zur Implementierung von SVM erforderlich ist. Die gute Nachricht ist, dass die Mathematik zwar möglicherweise komplex ist, die Grundkonzepte jedoch gut verstanden werden.

SVM-Methoden können für nahezu jede Art von Trainingsaufgabe angepasst werden, einschließlich Klassifizierung und numerischer Vorhersage. Viele der wichtigsten Erfolge dieses Algorithmus beziehen sich auf die Mustererkennung. Die bekanntesten Anwendungen für diese Methoden umfassen Folgendes:

  • Klassifizierung von Daten zur Expression von Microarray-Genen in der Bioinformatik zum Nachweis von Krebs und anderen genetischen Erkrankungen;
  • Textkategorisierung, z. B. Bestimmen der in einem Dokument verwendeten Sprache oder Klassifizieren von Dokumenten nach Themen;
  • Erkennung seltener, aber wichtiger Ereignisse wie Ausfall eines Verbrennungsmotors, Sicherheitsverletzung oder Erdbeben.


SVM-Methoden sind am einfachsten anhand der binären Klassifizierung als Beispiel zu verstehen - so werden sie normalerweise verwendet. Daher konzentrieren wir uns in den verbleibenden Abschnitten nur auf SVM-Klassifizierer. Ähnliche Prinzipien wie die hier vorgestellten werden auch bei der Anpassung von SVM-Methoden für die numerische Vorhersage verwendet.

Über den Autor


Brett Lantz (@DataSpelunking) verwendet seit mehr als einem Jahrzehnt innovative Datenverarbeitungstechniken, um menschliches Verhalten zu untersuchen. Als ausgebildeter Soziologe interessierte sich Brett zunächst für maschinelles Lernen, während er eine große Datenbank mit Jugendprofilen in sozialen Netzwerken durchsuchte. Brett ist Lehrer bei DataCamp und hält häufig Präsentationen auf Konferenzen und Seminaren zum maschinellen Lernen auf der ganzen Welt. Er ist ein bekannter Enthusiast auf dem Gebiet der praktischen Anwendung der Datenwissenschaft im Bereich Sport, unbemannte Fahrzeuge, Fremdsprachen- und Modestudien sowie in vielen anderen Branchen. Brett hofft, eines Tages auf dataspelunking.com darüber schreiben zu können, einen Wissensaustausch über das Finden von Mustern in Daten.

Über Science Editor


Raghav Bali (Raghav Bali) - leitender Forscher einer der weltweit größten Gesundheitsorganisationen. Er ist in der Forschung und Entwicklung von Unternehmenslösungen tätig, die auf maschinellem Lernen, tiefem Lernen und Verarbeitung natürlicher Sprachen für den Einsatz im Gesundheitswesen und in der Versicherung basieren. In seiner vorherigen Position bei Intel nahm er an proaktiven Initiativen auf dem Gebiet der Informationstechnologie teil, die auf Big Data basieren und natürliche Sprachverarbeitung, tiefes Lernen und traditionelle statistische Methoden verwenden. Bei American Express arbeitete er im Bereich digitales Engagement und Kundenbindung.

Raghav ist Autor mehrerer Bücher, die von führenden Verlagen veröffentlicht wurden. Sein neuestes Buch handelt von der neuesten Transferstudie.

Raghav absolvierte das Internationale Institut für Informationstechnologie in Bangalore und hat einen Master-Abschluss (Honours Degree). In diesen seltenen Momenten, in denen er nicht gerade damit beschäftigt ist, wissenschaftliche Probleme zu lösen, liest und fotografiert Raghav gerne alles hintereinander.

»Weitere Informationen zum Buch finden Sie auf der Website des Herausgebers.
» Inhalt
» Auszug

für Khabrozhiteley 25% Rabatt auf den Gutschein - Maschinelles Lernen

Nach Zahlung der Papierversion des Buches wird ein elektronisches Buch per E-Mail verschickt.

All Articles