Wenn Sie Menschen über maschinelles Lernen sprechen hören, haben Sie vielleicht nur ein wenig Verständnis dafür, was es bedeutet? Sind Sie es leid, mit Ihren Kollegen ständig zu winkern?
Dieser Leitfaden richtet sich an alle Freunde, die ein Interesse an maschinellem Lernen haben, aber nicht wissen, wie man damit anfängt.
Der Zweck dieses Artikels ist leicht zugänglich zu machen, was bedeutet, dass es viele Verallgemeinerungen gibt.
Das Konzept des maschinellen Lernens besagt, dass man keine speziellen Programmiercodes schreiben muss, um Probleme zu lösen, und dass generische Algorithmen interessante Antworten auf Datensätze liefern können. Bei den genetischen Algorithmen wird nicht codiert, sondern die Daten eingegeben, und sie erstellen ihre eigene Logik auf den Daten.
Zum Beispiel gibt es eine Art von Algorithmen, die als Sortier-Algorithmen bezeichnet werden, die Daten in verschiedene Gruppen einteilen können. Eine Sortier-Algorithmen, die verwendet werden, um handschriftliche Zahlen zu erkennen, können verwendet werden, um E-Mails in Spam und normale E-Mails ohne eine Zeile Code zu ändern. Die Algorithmen ändern sich nicht, aber die eingegebenen Trainingsdaten ändern sich, so dass sie eine andere Sortierungslogik ergeben.
Maschinelle Lernalgorithmen sind eine schwarze Kiste, die für viele verschiedene Klassifizierungsprobleme genutzt werden kann.
Maschinelles Lernen ist ein umfassender Begriff, der viele ähnliche genetische Algorithmen abdeckt.
Man kann sich die Algorithmen für maschinelles Lernen in zwei große Kategorien einteilen: überwachtes Lernen und unüberwachtes Lernen.
Nehmen wir an, Sie sind ein Immobilienmakler, und die größeren Geschäfte, die Sie machen, machen Sie, so dass Sie eine Gruppe von Praktikanten einstellen, um Ihnen zu helfen.
Um deinen Praktikanten zu helfen (vielleicht, um dir die Freiheit zu geben, einen Urlaub zu machen), beschließt du, eine kleine Software zu schreiben, mit der du den Wert eines Hauses in deiner Nähe anhand von Faktoren wie Größe, Standort und Verkaufspreis von ähnlichen Häusern bewerten kannst.
Du schreibst die letzten drei Monate jedes Hausgeschäft in der Stadt auf, und bei jedem Buch hast du eine lange Reihe von Details über die Anzahl der Schlafzimmer, die Größe des Hauses, das Grundstück usw. aufgeschrieben.
Das ist unsere Datenbank über das Training von Müttern.
Wir nutzen diese Trainingsdaten, um ein Programm zu schreiben, um den Wert anderer Häuser in der Gegend zu schätzen:
Das nennt man überwachtes Lernen. Du weißt bereits, wie viel jedes Haus zu verkaufen hat, also weißt du die Antwort auf die Frage und kannst die Logik der Lösung umgekehrt finden.
Um die Software zu schreiben, geben Sie die Trainingsdaten für jedes Grundstücks-Set in Ihre Machine-Learning-Algorithmen ein. Die Algorithmen versuchen herauszufinden, welche Operationen verwendet werden sollten, um die Preiszahlen zu erhalten.
Es ist wie bei einem Arithmetik-Problem, bei dem die Symbole für die Operationen aus dem Rechner gelöscht werden:
Mein Gott! Ein schelmischer Schüler hat die Arithmetik-Zeichen von den Antworten des Lehrers vollständig gelöscht.
Wenn Sie diese Fragen gesehen haben, können Sie verstehen, welche mathematischen Probleme in diesen Tests enthalten sind? Sie wissen, was Sie mit der Zahlenreihe auf der linken Seite der Arithmetik tun sollten, um die Antwort auf der rechten Seite der Arithmetik zu erhalten.
In überwachtem Lernen lassen Sie den Computer die Zahlenbeziehungen für Sie berechnen. Sobald Sie die mathematischen Methoden kennen, die erforderlich sind, um diese spezifische Art von Problem zu lösen, können Sie andere Probleme derselben Art lösen.
Gehen wir zurück zu dem Beispiel des Immobilienmaklers am Anfang. Wenn Sie nicht wissen, wie viel Sie für jedes Haus verkaufen können, können Sie auch tolle Dinge machen, auch wenn Sie nur die Größe und die Lage des Hauses wissen.
Selbst wenn Sie nicht versuchen, unbekannte Daten (z.B. Preise) vorherzusagen, können Sie mit Machine Learning etwas Interessantes tun.
Es ist ein bisschen so, als würde jemand Ihnen ein Blatt Papier geben, auf dem viele Zahlen aufgeführt sind, und dann sagen: "Hey, ich weiß nicht, was diese Zahlen bedeuten, vielleicht können Sie eine Regel daraus finden oder sie klassifizieren, oder was auch immer - viel Glück!"
Wie verarbeiten Sie diese Daten? Zunächst können Sie automatisch verschiedene Marktsegmente aus den Daten mit Hilfe eines Algorithmus sortieren. Vielleicht finden Sie, dass Hauskäufer in der Nähe von Universitäten kleine Häuser mit mehreren Schlafzimmern bevorzugen, während Käufer in den Vororten große Häuser mit drei Schlafzimmern bevorzugen. Diese Informationen können Ihnen direkt beim Marketing helfen.
Sie können auch etwas Cooles tun, indem Sie automatisch die Abweichungsdaten von den Preisen der Häuser finden, d.h. den Wert, der sich von anderen Daten unterscheidet. Die Immobilien in diesen aufrecht stehenden Häusern könnten Hochhäuser sein, und Sie können die besten Verkäufer in diesen Bereichen konzentrieren, da ihre Provisionen höher sind.
Im weiteren Teil dieses Artikels werden wir überwiegend über überwachtes Lernen sprechen, aber das ist nicht, weil unsuperviziertes Lernen nicht nützlich ist oder gar nicht schmeckt. Tatsächlich wird unsuperviziertes Lernen immer wichtiger, da Algorithmen verbessert werden, und es nicht notwendig ist, Daten mit den richtigen Antworten zu verknüpfen.
Es gibt viele andere Arten von Algorithmen für maschinelles Lernen.
Das ist cool, aber kann man wirklich sagen, dass die Bewertung von Immobilienpreisen eine Art Lernmethode ist?
Als Mensch kann dein Gehirn mit den meisten Situationen umgehen und ohne klare Anweisungen lernen, wie man mit ihnen umgeht. Wenn du eine lange Zeit als Immobilienmakler arbeitest, hast du ein instinktives Gefühl für die angemessene Preisgestaltung von Immobilien, wie sie am besten vermarktet werden können und welche Kunden interessiert sind.
Aber die aktuellen Machine-Learning-Algorithmen sind noch nicht so gut, weil sie sich nur auf sehr spezifische, begrenzte Probleme konzentrieren. Vielleicht ist in diesem Fall eine bessere Definition von Maschineller-Lern-Algorithmen, eine Gleichung zu finden, um eine bestimmte Problematik auf der Grundlage von wenigen Beispieldaten zu lösen.
Unglücklicherweise ist der Name zu schlecht, weil die Maschine eine Gleichung für eine bestimmte Problematik herausfindet, basierend auf wenigen Beispieldaten.
Natürlich, wenn Sie diesen Artikel in 50 Jahren lesen, dann haben wir eine starke KI-Algorithmus entwickelt, und dieser Artikel sieht aus wie eine alte Antiquität.
Lasst uns Code schreiben!
Wie willst du das Verfahren für die Bewertung der Immobilienpreise in dem vorherigen Beispiel schreiben? Denke nach, bevor du nach unten schaust.
Wenn Sie nichts über maschinelles Lernen wissen, werden Sie wahrscheinlich versuchen, ein paar grundlegende Regeln zu schreiben, um die Preise zu bewerten:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# In my area, the average house costs $200 per sqft
price_per_sqft = 200
if neighborhood == "hipsterton":
# but some areas cost a bit more
price_per_sqft = 400
elif neighborhood == "skid row":
# and some areas cost less
price_per_sqft = 100
# start with a base price estimate based on how big the place is
price = price_per_sqft * sqft
# now adjust our estimate based on the number of bedrooms
if num_of_bedrooms == 0:
# Studio apartments are cheap
price = price — 20000
else:
# places with more bedrooms are usually
# more valuable
price = price + (num_of_bedrooms * 1000)
return price
Wenn man so ein paar Stunden lang so arbeitet, kann man vielleicht etwas erreichen, aber man wird nie perfekt sein und es ist schwierig, es zu warten, wenn die Preise schwanken.
Wäre es nicht besser, wenn man den Computer dazu bringen würde, eine Möglichkeit zu finden, die Funktion zu realisieren?
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = <computer, plz do some math for me>
return price
Ein Ansatz ist, die Preise von Häusern als eine schmackhafte Schüssel zu betrachten, in der sich die Anzahl der Schlafzimmer, die Fläche und die Fläche befinden. Wenn man berechnen kann, wie sehr sich jede einzelne Komponente auf den Endpreis auswirkt, kann man vielleicht einen bestimmten Prozentsatz der verschiedenen Komponenten in den Endpreis mischen.
Das kann Ihre ursprüngliche Anwendung (alles ist verrückt, wenn andere Aussagen) so vereinfachen, dass sie so aussieht:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# a little pinch of this
price += num_of_bedrooms * .841231951398213
# and a big pinch of that
price += sqft * 1231.1231231
# maybe a handful of this
price += neighborhood * 2.3242341421
# and finally, just a little extra salt for good measure
price += 201.23432095
return price
Achten Sie auf die magischen Zahlen, die in grossen Buchstaben gekennzeichnet sind. 841231951398213, 1231.1231231, 2.3242341421 und 201.23432095. Sie heißen Gewichte.
Eine Methode, um die optimale Gewichtung zu finden, ist die folgende:
Schritt 1:
Zunächst wird jedes Gewicht auf 1.0 gesetzt:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# a little pinch of this
price += num_of_bedrooms * 1.0
# and a big pinch of that
price += sqft * 1.0
# maybe a handful of this
price += neighborhood * 1.0
# and finally, just a little extra salt for good measure
price += 1.0
return price
Schritt zwei:
Bringen Sie jede Immobilie in Ihre Funktionsberechnung und überprüfen Sie, wie weit die Schätzung vom richtigen Preis abweicht:
Sie können Ihre Programme verwenden, um Hauspreise vorherzusagen.
Zum Beispiel: Das erste Grundstück in der Tabelle oben hat einen tatsächlichen Verkaufspreis von 250.000 US-Dollar, und Ihre Funktionsbewertung beträgt 178.000 US-Dollar, was Ihnen 72.000 US-Dollar unterschreitet.
Setzen Sie dann die Quadratisierung der Abweichung der Bewertungswerte für jedes Grundstück in Ihrem Datensatz ein. Nehmen Sie an, dass es 500 Grundstücksgeschäfte in Ihrem Datensatz gibt, und die Schätzung der Abweichung der Bewertungsquadratisierung summiert sich auf 86,123,373 USD. Dies spiegelt die richtige Abweichung Ihrer Funktion jetzt wider.
Jetzt, teilen Sie die Summe durch 500 und erhalten Sie die Abweichung von der Durchschnittsschätzung für jedes Grundstück. Nennen Sie diesen durchschnittlichen Fehlerwert die Kosten Ihrer Funktion.
Wenn Sie die Gewichtung so anpassen können, dass dieser Preis auf Null geschätzt wird, ist Ihre Funktion perfekt. Das bedeutet, dass Ihr Programm jede Immobilientransaktion auf der Grundlage der eingegebenen Daten gleich schätzt.
Schritt 3:
Wiederholen Sie immer wieder Schritt 2 und versuchen Sie alle möglichen Kombinationen von Gewichtswerten. Welche Kombination die Kosten am nächsten an 0 bringt, ist das, was Sie verwenden werden, und sobald Sie eine solche Kombination finden, ist das Problem gelöst!
Gedanken stören die Zeit
Es ist so einfach, nicht wahr? Denken Sie daran, was Sie gerade getan haben. Sie haben einige Daten erhalten, sie in drei einfache, allgemein verwendete Schritte eingegeben, und am Ende haben Sie eine Funktion, mit der Sie Häuser in Ihrer Region bewerten können. Aber die folgenden Fakten können Sie durcheinander bringen:
1. In den letzten 40 Jahren haben Studien in vielen Bereichen (z.B. Linguistik/Übersetzung) gezeigt, dass diese universelle, vibrierende Art des Lernens, die Art von Wörtern, die ich erschaffen habe, die Methode übertrifft hat, die mit klaren Regeln von echten Menschen verbunden ist.
2.你最后写出的函数真是笨,它甚至不知道什么是“面积”和“卧室数”。它知道的只是搅动,改变数字来得到正确的答案。
3.很可能你都不知道为何一组特殊的权重值能起效。所以你只是写出了一个你实际上并不理解却能证明的函数。
4.试想一下,你的程序里没有类似“面积”和“卧室数”这样的参数,而是接受了一组数字。假设每个数字代表了你车顶安装的摄像头捕捉的画面中的一个像素,再将预测的输出不称为“价格”而是叫做“方向盘转动度数”,这样你就得到了一个程序可以自动操纵你的汽车了!
Das ist verrückt, oder?
Was passiert, wenn die Klammer in Schritt 3 jede einzelne Ziffernklammer versucht?
Nun, natürlich ist es nicht möglich, alle möglichen Gewichtswerte zu versuchen, um die beste Kombination zu finden. Um dies zu vermeiden, haben Mathematiker viele clevere Methoden gefunden, um schnell und ohne viel Versuch gute Gewichtswerte zu finden. Hier ist eine davon: Zuerst schreibt man eine einfache Gleichung, die die beiden Schritte darstellt:
Das ist deine Kostenfunktion.
Dann schreiben wir die mathematischen Begriffe für Maschinenlernen (die Sie jetzt ignorieren können) mit der gleichen Gleichung:
θ steht für den aktuellen Gewichtungswert. J ((θ) steht für den entsprechenden Preis für den aktuellen Gewichtungswert von θ.
Diese Gleichung zeigt die Größe der Abweichung unserer Schätzung unter dem aktuellen Gewicht.
Wenn man alle möglichen Gewichtswerte für die Anzahl und Fläche der Zimmer in Grafiken darstellt, erhält man ein Diagramm, das ähnelt:
Die Kostenfunktion ist wie eine Schüssel.
Der blaue Tiefpunkt in der Grafik ist der Ort, an dem die Kosten am niedrigsten sind. Der höchste Punkt bedeutet die größte Abweichung. Wenn wir also die niedrigsten Punkte in der Grafik finden können, die uns dorthin führen, haben wir die Antwort!
Wir müssen also nur die Gewichtung anpassen, damit wir den Abstieg zum Tiefpunkt in der Grafik abschieben können. Wenn wir die Gewichtung anpassen, um immer weiter zum Tiefpunkt zu bewegen, dann können wir schließlich ohne zu viele Versuche dorthin gelangen.
Wenn Sie sich noch ein bisschen an die Arithmetik erinnern, dann erinnern Sie sich vielleicht, dass wenn Sie eine Funktion anfordern, die Ergebnisse Ihnen die Steigung der Funktion an jedem Punkt sagen.
Also, wenn wir die Kostenfunktion für jede Gewichtung ansprechen, dann können wir diesen Wert von jeder Gewichtung subtrahieren. Das bringt uns näher an den Boden.
Diese Methode, um das optimale Gewicht zu finden, wird als Abstieg der Gradienten der Masse bezeichnet, und hier ist eine allgemeine Beschreibung der Höhe.http://hbfs.wordpress.com/2012/04/24/introduction-to-gradient-descent/Das ist nicht wahr.
Wenn Sie mit einer Maschinellen Lernalgorithmen-Library ein echtes Problem lösen, ist all das für Sie bereit.
Was hast du sonst noch aus den Augen gelassen?
Die drei-Stufen-Algorithmen, die ich oben beschrieben habe, nennt man multilineare Regression. Du schätzt die Gleichung, indem du eine Linie suchst, die alle Datenpunkte der Hauspreise passt. Dann schätzt du mit dieser Gleichung die Preise von Häusern, die du noch nie gesehen hast, anhand der möglichen Positionen, an denen die Häuser an deiner Linie erscheinen.
Aber die Methode, die ich Ihnen gezeigt habe, kann in einfachen Situationen funktionieren, sie wird nicht in allen Fällen funktionieren. Einer der Gründe ist, dass die Immobilienpreise nicht immer so einfach einer kontinuierlichen Linie folgen.
Glücklicherweise gibt es jedoch viele Möglichkeiten, dies zu handhaben. Für nonlineare Daten können viele andere Arten von Machine-Learning-Algorithmen behandelt werden (z. B. Neural Networks oder Kern-Vector Maschinen). Es gibt auch viele Möglichkeiten, lineare Regressionen flexibler zu nutzen und mit komplexeren Linien zu kombinieren.
Außerdem habe ich das Konzept der Überpassungen ignoriert. Es ist leicht, auf eine Reihe von Gewichtswerten zu stoßen, die die Preise von Häusern in Ihrem ursprünglichen Datensatz perfekt vorhersagen, aber keine neuen Häuser außerhalb Ihres ursprünglichen Datensatzes vorhersagen können. Es gibt viele Lösungen für diese Situation (z. B. Regulierung und Verwendung von Cross-Verified Datensätzen).
Mit anderen Worten, die Grundkonzepte sind sehr einfach, und es erfordert einige Fähigkeiten und Erfahrungen, um nützliche Ergebnisse aus dem Einsatz von Machine Learning zu erzielen.
Sobald man beginnt zu verstehen, wie einfach Machine-Learning-Technologien für die Lösung von scheinbar schwierigen Problemen (z. B. Handschrifterkennung) verwendet werden können, hat man das Gefühl, dass man mit ausreichend Daten jede Art von Problem lösen kann.
Aber es ist wichtig zu wissen, dass maschinelles Lernen nur auf Probleme anwendbar ist, die mit den Daten, die Sie haben, tatsächlich gelöst werden können.
Wenn Sie zum Beispiel ein Modell erstellen, das den Preis eines Hauses anhand der Anzahl der Pflanzen in jedem Haus prognostiziert, wird es nie erfolgreich sein. Es gibt keine Beziehung zwischen der Anzahl der Pflanzen im Haus und dem Preis des Hauses.
Sie können nur Beziehungen modellieren, die tatsächlich existieren.
Ich denke, das größte Problem mit Machine Learning ist, dass es derzeit hauptsächlich in akademischen und kommerziellen Forschungsorganisationen aktiv ist. Es gibt nicht viel einfaches und leicht verständliches Lernmaterial für Menschen außerhalb der Gruppe, die ein großes Verständnis haben wollen, anstatt Experten zu werden.
Professor Andrew Ng hat einen sehr guten kostenlosen Kurs für Maschinelles Lernen auf Coursera. Ich empfehle ihn dringend. Jeder, der einen Abschluss in Computerwissenschaften hat und sich ein bisschen Mathematik merken kann, sollte ihn verstehen.
Sie können SciKit-Learn auch herunterladen und installieren, um mit ihm Tausende von Machine-Learning-Algorithmen zu testen. Es ist ein Python-Framework, das eine Black Box-Version für alle Standard-Algorithmen bietet.
Übertragen von Python Entwickler
OkluoquanDieses Beispiel wiederholt sich bei jedem neuen Unterricht.
ZügeSollte die Komponente der Kostenfunktion nicht m sein? Warum wird es 2m?