[PYTHON] Lösen des Irisproblems mit scikit-learn ver1.0 (logistische Regression)

1. 1. Einführung

Als Tutorial zum Erlernen des maschinellen Lernens werde ich als Erinnerung die Methode aufzeichnen, mit der ich den Namen der Iris vorhergesagt habe, was für jeden ein Muss ist.

Die verwendete Version ist hier.

2. Was ist Irisklassifikation?

2-1 Überblick über das Irisproblem

Es gibt drei Arten von Iris, die "setosa", "versicolor" und "virginica" genannt werden. Die Daten, die die Blütenkrone dieser Iris (die gesamte Hanabira) darstellen, umfassen die Breite und Länge der Kelchblätter (Sepal) und Blütenblätter (Petal). Das Problem besteht diesmal darin, die Namen von drei Arten von Blumen aus diesen vier Merkmalen abzuleiten.

2-2 Informationen zum Programm

Import von Bibliotheken etc.


import numpy as np
import pandas as pd
from pandas import Series,DataFrame

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')

%matplotlib inline

from sklearn.datasets import load_iris

Dieses Mal laden wir Numpy, Pandas, Matplotlib, Seaborn und Sklearn. Der Iris-Datensatz wurde aus sklearn.datasets gelesen.

Schauen Sie sich die Daten an


iris_data = DataFrame(x, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal, Width'])
iris_data

002.png

Es gab 150 Daten. Auch die Breite und Länge der Kelchblätter und Blütenblätter sind aufgeführt, wahrscheinlich in cm.

Als nächstes schauen wir uns die Arten von Blumen an.


iris_target = DataFrame(y, columns =['Species'])
iris_target

003.png

Sie können sehen, dass der Typ bereits als numerischer Wert zugewiesen wurde, nicht als Name der Blume. Es ist in Ordnung, so zu verarbeiten, wie es ist, aber es wird mühsam sein, wenn Sie sich die Korrespondenz zwischen dem numerischen Wert und dem Namen selbst merken müssen. Lassen Sie uns also dem Namen entsprechen.


#Definieren Sie eine zu benennende Funktion
def flower(num):
    if num ==0:
        return 'Setosa'
    elif num == 1:
        return 'Veriscolour'
    else:
        return 'Virginica'
iris_target['Species'] = iris_target['Species'].apply(flower)
iris_target

004.png

Nachdem der Name angegeben wurde, ist er leichter zu verstehen.

Überprüfen Sie die Korrelation für jede Variable


iris = pd.concat
([iris_data, iris_target], axis=1)
sns.pairplot(iris, hue='Species',hue_order=['Virginica', 'Veriscolour', 'Setosa'], size=2,palette="husl")

005.png

Zeichnen Sie die Korrelation für jede Variable. Es kann in einer Zeile unter Verwendung der Pair-Plot-Methode von Seaborn beschrieben werden. Wenn Sie es so betrachten, können Sie sehen, dass Setosa einen deutlichen Unterschied zu den beiden anderen aufweist. Auf der anderen Seite befinden sich Virginia und Veriscolour dort, wo die Sepal-Länge ähnlich ist, und es scheint schwierig, sie allein dadurch zu trennen.

Wenn Sie sich die tatsächlichen Blumen ansehen, können Sie sehen, dass die Blumen, die insgesamt klein sind, Setosa sind.

007.png

2-3 Vorhersage mittels logistischer Regression


#Logistische Regression importieren
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
logreg = LogisticRegression()

#Wir haben uns entschieden, 30% der Testdaten zu verwenden.
x_train, x_test, y_train, y_test =train_test_split(x,y,test_size=0.3, random_state=3)
logreg.fit(x_train, y_train)

#Richtige Antwortrate(accuracy_Funktion, um Punktzahl zu erhalten)
from sklearn import metrics
y_pred  =logreg.predict(x_test)
metrics.accuracy_score(y_test, y_pred)

Richtige Antwortrate: 0.97777777777777777

Dieses Mal haben wir mithilfe der logistischen Regression analysiert. Die logistische Regression ist eine Regression, bei der die Zielvariable ein Binärwert von 0 oder 1 ist. Mit anderen Worten, es ist ein Mittel, um festzustellen, ob es "echt" oder "falsch", "nützlich" oder "bösartig" ist.

In diesem Fall haben wir die Methode der Aufteilung in drei angewendet. Es ist möglich, die logistische Regression auf mehrere Klassen von 3 oder mehr anzuwenden. Das Bild seiner Anwendung wird, selbst wenn es wie im Bild unten gezeigt mehrfach variabel ist, separat als zwei Variablen berechnet.   010.png

In diesem Fall betrug die korrekte Antwortrate 97,8%. Sie können sehen, dass diese Methode gut aussieht.

Referenz-URL

https://dev.classmethod.jp/machine-learning/logistic-regression-impl/ http://www.msi.co.jp/nuopt/docs/v20/examples/html/02-18-00.html

3. 3. Volles Programm


import numpy as np
import pandas as pd
from pandas import Series,DataFrame

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')

%matplotlib inline

from sklearn.datasets import load_iris
iris = load_iris()
x =iris.data
y=iris.target

iris_data = DataFrame(x, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal, Width'])
iris_target = DataFrame(y, columns =['Species'])

def flower(num):
    if num ==0:
        return 'Setosa'
    elif num == 1:
        return 'Veriscolour'
    else:
        return 'Virginica'

iris_target['Species'] = iris_target['Species'].apply(flower)

iris = pd.concat([iris_data, iris_target], axis=1)

#Logistische Regression importieren
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

logreg = LogisticRegression()
x_train, x_test, y_train, y_test =train_test_split(x,y,test_size=0.3, random_state=3)

logreg.fit(x_train, y_train)

from sklearn import metrics
y_pred  =logreg.predict(x_test)


metrics.accuracy_score(y_test, y_pred)

Recommended Posts

Lösen des Irisproblems mit scikit-learn ver1.0 (logistische Regression)
Lösen Sie das Problem der parabolischen Minimierung mit OpenMDAO
Lösen des N Queen-Problems mit kontinuierlicher / kombinierter Optimierung
Lösen des N Queen-Problems mit Kombinationsoptimierung
Lösen Sie das Python-Rucksackproblem mit dem Greedy-Algorithmus
[Python] Lineare Regression mit Scicit-Learn
Implementierung der logistischen Regression mit NumPy
Robuste lineare Regression mit Scikit-Learn
Lösung des Planungsproblems der Krankenschwester (Schichtoptimierung) mit einem genetischen Algorithmus
Logistische Regressionsanalyse Selbst erstellt mit Python
Die grundlegendste Clusteranalyse mit Scikit-Learn
Lassen Sie uns die Hyperparameter des Modells mit scikit-learn abstimmen!
[Scikit-learn] Ich habe mit der ROC-Kurve gespielt
Logistische Rückgabe
Logistische Rückgabe
Lösung des Problems des Handlungsreisenden mit dem genetischen Algorithmus (GA) und seiner Bibliothek (vcopt)
Lernen Sie während der Implementierung mit Scipy die Grundlagen der logistischen Regression und des mehrschichtigen Perzeptrons
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Probieren Sie Theano mit Kaggles MNIST-Daten ~ Logistic Return ~ aus
Prognostizieren Sie die zweite Runde des Sommers 2016 mit scikit-learn
Lösen des Lorenz 96-Modells mit Julia und Python
Implementieren Sie mit stan ein zeitdiskretes logistisches Regressionsmodell
Multivariables Regressionsmodell mit Scikit-Learn - Ich habe versucht, SVR zu vergleichen und zu verifizieren
Implementierung der logistischen Regression mit Partikelgruppenoptimierungsmethode
[Python] Bestimmen Sie den Typ der Iris mit SVM