Verwendung von CreateML und grundlegende Konzepte des maschinellen Lernens

1. Einleitung

Bevor wir CreateML lernen, wollen wir zunächst verstehen, was maschinelles Lernen ist . Es gibt keine allgemein akzeptierte Definition dessen, was maschinelles Lernen genau ist. Die erste Definition von maschinellem Lernen stammt von Arthur Samuel. Er definierte maschinelles Lernen als einen Bereich, der Computern die Fähigkeit verleiht, zu lernen, wenn sie speziell programmiert werden. Samuels Definition geht auf die 1950er Jahre zurück, als er ein Schachprogramm schrieb. Das Erstaunliche an diesem Programm ist, dass der Programmierer sehr gut Schach spielen kann, aber durch die Programmierung lässt er das Schachprogramm Zehntausende von Schachpartien mit sich spielen. Mit der Zeit versteht das Schachprogramm, was ein gutes Layout ist und was ist ein schlechtes Layout. . Nachdem er das Programm erlernt hatte, übertraf sein Schachniveau das von Samuel bei weitem. Die obige Definition ist etwas informell und relativ alt.

Eine weitere neuere Definition wurde von Tom Mitchell von der Carnegie Mellon University vorgeschlagen. Toms Definition von maschinellem Lernen lautet, dass ein Programm aus Erfahrung E lernen, Aufgaben T lösen und einen Leistungsmesswert P erreichen kann, wenn und nur dann, wenn es Erfahrung E hat und beurteilt Durch P hat sich die Leistung des Programms bei der Verarbeitung von T verbessert. Im obigen Beispiel ist Erfahrung E die Erfahrung des Programms, das zehntausende Male geübt wurde, und Aufgabe T ist das Schachspielen. Der Leistungsmaßwert P ist die Wahrscheinlichkeit, das Spiel zu gewinnen, wenn es gegen einige neue Gegner antritt.

Maschinelles Lernen kann in überwachtes Lernen (überwachtes Lernen) und unüberwachtes Lernen (unüberwachtes Lernen) unterteilt werden. Die Grundidee des überwachten Lernens besteht darin, dass jede Stichprobe in unserem Datensatz eine entsprechende Ausgabe hat und dann auf der Grundlage dieser Stichproben Vorhersagen getroffen werden . Beim unbeaufsichtigten Lernen wird eine Reihe unbeschrifteter Trainingsdaten in einen Algorithmus eingegeben, und dann weisen wir den Algorithmus an, die intrinsische Struktur der Daten für uns zu finden.

2. Was ist CreateML?

Create ML ist ein Tool zum Generieren von Modellen für maschinelles Lernen, das Apple auf der WWDC 2018 vorgestellt hat. Es verwendet Algorithmen für maschinelles Lernen, um Modelle zu trainieren, um praktische Probleme zu lösen. Das in CreateML enthaltene Training ist überwachtes Lernen, das sich hauptsächlich mit Klassifizierungsproblemen, Regressionsproblemen und Empfehlungen befasst, entsprechend MLClassifier, MLRegressor und MLRecommender. Im Folgenden wird hauptsächlich das entsprechende Hintergrundwissen zum maschinellen Lernen vorgestellt, damit jeder es besser versteht.

Lassen Sie uns kurz vorstellen, wie CreateML das Modell trainiert. Es kann die integrierte Infrastruktur für maschinelles Lernen des Systems (iOS 12 oder macOS Mojave) für Transferlernen (Transfer Learning) verwenden. Diese Art des Trainings erfordert eine kleine Datenmenge. Das trainierte Modell ist Die letzten Schichten des integrierten Modells von Apple werden anhand unserer Daten trainiert. Auf diese Weise wird die Trainingszeit erheblich verkürzt und das Training kann sogar in wenigen Sekunden abgeschlossen werden. Die Modellgröße kann auch auf KB-Ebene reduziert werden, was die Integration in unsere App erleichtert. Obwohl eine kleine Datenmenge erforderlich ist, kann diese nicht aus dem Nichts erstellt werden. Studierende, die Daten finden möchten, können hier nachsehen .
Transferlernen

3. Was ist ein Klassifizierungsproblem?

Schauen wir uns einen Datensatz an: In diesem Diabetes-Vorhersagedatensatz sind die ersten 8 Spalten Merkmale, die letzte Spalte ist eine Beschriftung und 1 und 0 geben an, ob es sich um Diabetes handelt.
Trainingsdaten
Das Problem beim maschinellen Lernen besteht dann darin, ob man abschätzen kann, ob andere Menschen Diabetes haben oder nicht. Technisch gesehen handelt es sich hierbei um ein Klassifizierungsproblem.

Klassifizierung bedeutet, dass wir versuchen, diskrete Ausgabewerte zu erraten: Ob 0 oder 1 krank ist, und tatsächlich kann bei Klassifizierungsproblemen die Ausgabe mehr als zwei Werte umfassen. Beispielsweise kann es zwei Arten von Diabetes geben, daher möchten Sie die diskrete Ausgabe 0, 1, 2 vorhersagen. 0 steht für keinen Diabetes, 1 für Typ-1-Diabetes und 2 für Typ-2-Diabetes, aber auch das ist ein Klassifizierungsproblem .

Daher müssen Sie bei Verwendung von CreateML die Trainingsdaten sowie die Beschriftungsspalte (labelColumn) und die Feature-Spalte (featureColumn) übergeben. Je nach tatsächlicher Situation können mehrere oder mehr Spalten unterstützt werden.

Natürlich stellt das Erkennen von Objekten durch Betrachten von Bildern auch ein Klassifizierungsproblem dar. Seine Eingabe besteht aus allen Pixeln eines Frames eines Bildes oder Videos. Um die Berechnungseffizienz und -genauigkeit zu verbessern, werden die ursprünglichen Merkmale durch Pooling- und Faltungsschichten verarbeitet , usw.

Verschiedene Klassifikatoren (Classifier) ​​in Create ML legen die entsprechende DataSource fest, um Features und Beschriftungen zu beschreiben. Hierbei handelt es sich um audiobezogene Anmerkungsinformationen.

/// - featureColumn: The name of the column that contains the audio
// features.
///
/// - labelColumn: The name of the column that contains the audio
/// labels.

4. Was ist ein Regressionsproblem?

Um beispielsweise den Immobilienpreis auf dem Mars abzuschätzen, können wir einen Lernalgorithmus anwenden, um eine gerade Linie in diesem Datensatz zu zeichnen oder eine gerade Linie anzupassen. Basierend auf dieser Linie können wir den Preis ableiten, wenn die Anzahl der Solarpaneele zunimmt ist 3. Natürlich ist dies nicht der einzige Algorithmus. Möglicherweise gibt es bessere. Beispielsweise müssen wir diese Daten nicht mit einer geraden Linie anpassen. Wir können auch eine quadratische Gleichung oder eine Gleichung höherer Ordnung verwenden, um sie entsprechend der tatsächlichen Situation anzupassen.

Angenommen, die Immobilienpreise sind nur auf ganze Zahlen genau, sodass die Immobilienpreise tatsächlich eine Reihe diskreter Werte sind. Wir betrachten die Immobilienpreise jedoch normalerweise als reelle Zahlen, also als kontinuierliche Werte.

Das Wort Regression bedeutet, dass wir versuchen, auf diese Reihe kontinuierlich bewerteter Attribute zu schließen. Dies ist das Regressionsproblem, das heißt, durch Regression eine kontinuierliche Ausgabe einzuführen. Fügen Sie hier eine Bildbeschreibung ein
Bei Regressionsproblemen sind beim Training des Modells in CreateML im Grunde die gleichen Daten zu übergeben, das heißt, die Trainingsdaten müssen übergeben werden, ebenso wie die Beschriftungsspalte (hier als targetColumn bezeichnet, das Wesentliche). ist immer noch derselbe) und die Feature-Spalte (featureColumn)

///   - targetColumn: A String specifying the target column name in the trainingData
///   - featureColumns: An optional list of Strings specifying feature columns to be
///                     used to predict the target, if not provided, default to use all the
///                     other columns in the trainingData, except the one specified by targetColumn

5. Empfehlungssystem

Das Empfehlungssystem ist möglicherweise relativ unbekannt. Lassen Sie mich ein Beispiel geben, um das Problem des Empfehlungssystems zu definieren.

Nehmen wir an, wir sind ein Filmanbieter, wir haben 5 Filme und 4 Benutzer und wir bitten die Benutzer, Filme zu bewerten.
Fügen Sie hier eine Bildbeschreibung ein
Die ersten drei Filme sind Liebesfilme und die letzten beiden sind Actionfilme. Wir können sehen, dass Alice und Bob eher zu Liebesfilmen zu neigen scheinen, während Carol und Dave eher zu Actionfilmen zu neigen scheinen. Und kein einzelner Benutzer hat alle Filme bewertet. Wir hoffen, einen Algorithmus zu entwickeln, der vorhersagt, wie viel jeder von ihnen für einen Film geben könnte, den er noch nicht gesehen hat, und diesen als Grundlage für Empfehlungen zu verwenden.

In diesem Beispiel handelt es sich um eine Art Empfehlungsproblem. Wir gehen davon aus, dass jeder Film über zwei Merkmale verfügt, z. B. x 1 stellt den Romantikindex des Films dar und x 2 stellt den Actionindex des Films dar. [x 1 , x 2 ] sind die Merkmale des Films. Wir können anhand der charakteristischen Daten eine lineare Regression für jede Person durchführen, um die Bewertungen anderer Filme zu ergänzen. Dies ist ein inhaltsbasiertes Empfehlungssystem (Content Based Recommendations). Wenn Sie Wenn Sie mehr darüber erfahren möchten, können Sie es hier ansehen .

Im obigen Beispiel haben wir Benutzerparameter und Filmeigenschaften. Tatsächlich gibt es eine andere Form des Empfehlungsproblems, nämlich, dass wir keines dieser beiden haben. So lösen Sie dieses Problem. Derzeit gibt es einen kollaborativen Filteralgorithmus (Collaborative Filtering), der beide gleichzeitig lernen kann, was einer Selbstlernfunktion entspricht. Nicht alle gelernten Daten können gelesen werden, aber diese Daten können als Grundlage für Empfehlungen verwendet werden Filme für Benutzer. Wenn Sie mehr Details wissen möchten, können Sie hier lesen .

Aus der obigen Einführung können wir ersehen, dass die Trainingsdaten drei Teile umfassen: empfohlene Elemente, Benutzer und Bewertungen. In CreateML müssen unsere Trainingsdaten auch diese drei Datenspalten enthalten.

///  - itemColumn: Name of the Int or String typed column in the training data containing item identifiers.
///
///  - userColumn: Name of the Int or String typed column in the training data containing user identifiers.
///
///  - ratingColumn: Name of an Int or Double typed column optionally in the training data containing scores or ratings.
///                        The default is nil, which corresponds to no rating column.

6 So trainieren Sie ein Empfehlungsmodell

6.1 Verwendung der CreateML-App

Die CreateML-App wird für das Training verwendet. Es handelt sich um eine einfache und benutzerfreundliche visuelle Operation. Ziehen Sie einfach die Daten. Hier ist ein Artikel, in dem jeder Modelltyp vorgestellt wird und Beispiele für seine Verwendung. Sie können ihn hier lesen. Das werde ich auch tun Fügen Sie einen Link zum Trainieren der Bildklassifizierung hinzu .
CreateML-App

6.1 Training mit Swift-Code

Der Code ist auch relativ praktisch. Hier ist ein Beispiel für MLTextClassifier. Mit Ausnahme der unterschiedlichen Datenformate ist die Verwendung anderer Typen grundsätzlich gleich. Codebeispiele für die Push-Logistik-Regression finden Sie im Referenzartikel [5]. Die Datenaufbereitung ist unterschiedlich, die Verwendung ist jedoch grundsätzlich dieselbe

Der Zweck dieses Modelltrainings besteht darin, einen Satz zu analysieren und zu beurteilen, ob die Einstellung dieses Satzes positiv oder negativ ist.

Der erste Schritt besteht darin, die Daten vorzubereiten. Das Format der Datendatei ist csv. Die Daten sind in zwei Spalten unterteilt, wobei „class“ die Beschriftungsspalte und „text“ die Feature-Spalte ist. Die Namen der Label-Spalte und der Feature-Spalte können sein nach Bedarf definiert, und die Reihenfolge kann beliebig sein.
Fügen Sie hier eine Bildbeschreibung ein
Der zweite Schritt besteht darin, das Modell zu trainieren und zu bewerten. Nach Abschluss des Modelltrainings muss die Genauigkeit des Modells bewertet werden. Daher können unsere Trainingsdaten in zwei Teile unterteilt werden, ein Teil wird für das Training verwendet und ein kleiner Teil wird für die Bewertung und Überprüfung verwendet. In diesem Beispiel beträgt das Verhältnis von Trainings- und Überprüfungsdaten 9:1, was flexibel sein kann entsprechend der Datenmenge angepasst.
Unter diesen stellt metrics.classificationError die Fehlerrate der Validierungssatzdaten dar. Wenn die Fehlerrate relativ hoch ist, kann der Datensatz angepasst oder der Algorithmus aktualisiert werden.

Derzeit wurde die Trainings-API aktualisiert. Das folgende Beispiel verwendet das MLDataTable-Datenformat, das in macOS 13.0 und iOS 16.0 veraltet ist. Die spezifische Schnittstelle kann entsprechend der Systemversion des Geräts ausgewählt werden. Die neue Version von MLTextClassifier. DataSource kann auch mehrere Labels unterstützen, mehrere Gruppen können zur Kreuzvalidierung zufällig zugewiesen werden, wodurch Überanpassung, Unteranpassung und andere Probleme reduziert werden.

guard let url = mlFileURL,
      let allData = try? MLDataTable(contentsOf: url) else {
    
    
    return
}

let data: TrainingData = allData.randomSplit(by: 0.9)
guard let classfier = try? MLTextClassifier(trainingData: data.trainingData, textColumn: "text", labelColumn: "class", parameters: MLTextClassifier.ModelParameters()) else {
    
    
    return
}
let metrics = classfier.evaluation(on: data.testData, textColumn: "text", labelColumn: "class")
print("classificationError: \(String(describing: metrics.classificationError))")

Der dritte Schritt besteht darin, das Modell zu speichern, wenn es nützlich ist.

// 保存模型
func saveModel(toFile: String) {
    
    
    try? classfier?.write(toFile: toFile)
}

Schritt 4 : Verwenden Sie das Modell, um die Daten vorherzusagen

Dies ist so einfach wie das Aufrufen einer Funktion. Geben Sie einfach einen Text ein und überprüfen Sie die Vorhersageergebnisse.

func prediction(_ text: String) {
    
    

    guard let ret = try? classfier?.prediction(from: text) else {
    
    
        print("prediction error")
        return
    }
    print("prediction result: \(String(describing: ret))")
}

6. Referenzartikel:

  1. WWDC 2018: Ein erster Blick auf Create ML
  2. CreateML: Beginnen Sie Ihr Abenteuer im maschinellen Lernen mit Swift
  3. MLDataTable: Der Panda für iOS-Entwickler
  4. Einführung in die Verwendung von CreateML und seine Anwendung in iOS
  5. Erstellen Sie mit CreateML eine Core ML Movie Recommender SwiftUI-App

Ich denke du magst

Origin blog.csdn.net/ID314846818/article/details/130935312
Empfohlen
Rangfolge