[PYTHON] Résolution du problème de l'iris avec scikit-learn ver1.0 (régression logistique)

1. 1. introduction

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.

2. Qu'est-ce que la classification de l'iris?

2-1 Aperçu du problème de l'iris

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.

2-2 À propos du programme

Importation de bibliothèques 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

Cette fois, nous chargeons numpy, pandas, matplotlib, seaborn et sklearn. L'ensemble de données iris a été lu à partir de sklearn.datasets.

Jetez un œil aux données


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

002.png

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

003.png

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

004.png

Maintenant que le nom est spécifié, c'est plus facile à comprendre.

Vérifiez la corrélation pour chaque 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

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.

007.png

2-3 Prédiction utilisant la régression logistique


#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.   010.png

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

3. 3. Programme complet


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

Résolution du problème de l'iris avec scikit-learn ver1.0 (régression logistique)
Résolvez le problème de minimisation parabolique avec OpenMDAO
Résolution du problème N Queen avec l'optimisation continue / combinée
Résolution du problème N Queen avec l'optimisation des combinaisons
Résolvez le problème du sac à dos Python avec l'algorithme glouton
[Python] Régression linéaire avec scicit-learn
Implémentation de la régression logistique avec NumPy
Régression linéaire robuste avec scikit-learn
Résolution du problème d'horaire des infirmières (optimisation des équipes) avec un algorithme génétique
Analyse de régression logistique Self-made avec python
L'analyse de clustering la plus basique avec scikit-learn
Affinons les hyper paramètres du modèle avec scikit-learn!
[Scikit-learn] J'ai joué avec la courbe ROC
Retour logistique
Retour logistique
Résolution du problème du voyageur de commerce avec l'algorithme génétique (GA) et sa bibliothèque (vcopt)
Apprenez en implémentant avec Scipy Les bases de la régression logistique et du perceptron multicouche
Essayez de résoudre le problème du fizzbuzz avec Keras
Essayez Theano avec les données MNIST de Kaggle ~ Retour logistique ~
Prédisez le deuxième tour de l'été 2016 avec scikit-learn
Résolution du modèle Lorenz 96 avec Julia et Python
Implémenter un modèle de régression logistique en temps discret avec stan
Modèle de régression multivariée avec scikit-learn - J'ai essayé de comparer et de vérifier SVR
Implémentation de la régression logistique avec la méthode d'optimisation des groupes de particules
[Python] Déterminez le type d'iris avec SVM