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.
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.
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.
iris_data = DataFrame(x, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal, Width'])
iris_data
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
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
Nachdem der Name angegeben wurde, ist er leichter zu verstehen.
iris = pd.concat
([iris_data, iris_target], axis=1)
sns.pairplot(iris, hue='Species',hue_order=['Virginica', 'Veriscolour', 'Setosa'], size=2,palette="husl")
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.
#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.
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
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