En guise de tutoriel d'apprentissage du machine learning, j'enregistrerai pour rappel la méthode que j'ai utilisée pour prédire le nom de l'iris, qui est un chemin incontournable pour tout le monde.
La version utilisée est ici.
Il existe trois variétés d'iris appelés «setosa», «versicolor» et «virginica». Les données représentant la couronne florale (toute la Hanabira) de cet iris comprennent la largeur et la longueur des sépales (Sepal) et des pétales (Petal). Le problème cette fois est de dériver les noms de trois types de fleurs à partir de ces quatre caractéristiques.
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
Cette fois, nous chargeons numpy, pandas, matplotlib, seaborn et sklearn. L'ensemble de données iris a été lu à partir de sklearn.datasets.
iris_data = DataFrame(x, columns=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal, Width'])
iris_data
Il y avait 150 données. En outre, la largeur et la longueur des sépales et des pétales sont indiquées, probablement en cm.
Ensuite, regardons les types de fleurs.
iris_target = DataFrame(y, columns =['Species'])
iris_target
Vous pouvez voir que le type a déjà été attribué en tant que valeur numérique et non en tant que nom de la fleur. Il est correct de traiter tel quel, mais cela sera gênant, comme devoir se souvenir de la correspondance entre la valeur numérique et le nom par vous-même, alors correspondons au nom.
#Définir une fonction à nommer
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
Maintenant que le nom est spécifié, c'est plus facile à comprendre.
iris = pd.concat
([iris_data, iris_target], axis=1)
sns.pairplot(iris, hue='Species',hue_order=['Virginica', 'Veriscolour', 'Setosa'], size=2,palette="husl")
Tracez la corrélation pour chaque variable. Il peut être décrit en une seule ligne en utilisant la méthode du diagramme par paires de Seaborn. En regardant les choses de cette façon, vous pouvez voir que Setosa a une différence distinctive par rapport aux deux autres. D'autre part, Virginia et Veriscolour sont situées là où la longueur du sépale est similaire, et il semble difficile de les séparer par cela seul.
Si vous regardez les fleurs réelles, vous pouvez voir que les fleurs qui sont globalement petites sont Setosa.
#Importer la régression logistique
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
logreg = LogisticRegression()
#Nous avons décidé d'utiliser 30% des données de test.
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)
#Taux de réponse correct(accuracy_fonction pour obtenir le score)
from sklearn import metrics
y_pred =logreg.predict(x_test)
metrics.accuracy_score(y_test, y_pred)
Taux de réponse correcte: 0,9777777777777777
Cette fois, nous avons analysé à l'aide de la régression logistique. La régression logistique est une régression dans laquelle la variable objectif est une valeur binaire de 0 ou 1. En d'autres termes, c'est un moyen de déterminer s'il est "authentique" ou "faux", "bénéfique" ou "malin".
Dans ce cas, nous avons appliqué la méthode de division en trois. Il est possible d'appliquer la régression logistique à plusieurs classes de 3 ou plus. Quant à l'image de son application, même si elle est multi-variable comme le montre l'image ci-dessous, elle est calculée séparément en deux variables.
Dans ce cas, le taux de réponse correcte était de 97,8%. Vous pouvez voir que cette méthode semble bonne.
URL de référence
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)
#Importer la régression logistique
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