[PYTHON] <Subject> Machine learning Chapitre 3: Modèle de régression logistique

Apprentissage automatique

table des matières Chapitre 1: Modèle de régression linéaire [Chapitre 2: Modèle de régression non linéaire] (https://qiita.com/matsukura04583/items/baa3f2269537036abc57) [Chapitre 3: Modèle de régression logistique] (https://qiita.com/matsukura04583/items/0fb73183e4a7a6f06aa5) [Chapitre 4: Analyse des composants principaux] (https://qiita.com/matsukura04583/items/b3b5d2d22189afc9c81c) [Chapitre 5: Algorithme 1 (méthode de voisinage k (kNN))] (https://qiita.com/matsukura04583/items/543719b44159322221ed) [Chapitre 6: Algorithme 2 (k-means)] (https://qiita.com/matsukura04583/items/050c98c7bb1c9e91be71) [Chapitre 7: Support Vector Machine] (https://qiita.com/matsukura04583/items/6b718642bcbf97ae2ca8)

Chapitre 3: Modèle de régression logistique

Description du modèle de régression logistique

   x=(x_1,x_2,・ ・ ・,x_m)^T \in R^m     
     y \in \left\{0,1\right\}    

LOG3.jpg

(Pratique 3) Prédire le taux de survie d'un homme de 30 ans à l'aide de l'ensemble de données Titanic

Google Drive Mount

from google.colab import drive
drive.mount('/content/drive')

0. Affichage des données

#depuis le nom du module importer le nom de la classe (ou le nom de la fonction ou le nom de la variable)
import pandas as pd
from pandas import DataFrame
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

#Magie pour l'affichage de matplotlib en ligne(plt.show()Tu n'as pas à)
%matplotlib inline

Dans ce qui suit, le dossier study_ai_ml est utilisé directement sous Mon Drive dans Google Drive.

#Lire le fichier csv de données titanesques
titanic_df = pd.read_csv('/content/drive/My Drive/study_ai_ml/data/titanic_train.csv')
#Afficher le début du fichier et vérifier l'ensemble de données
titanic_df.head(5)
スクリーンショット 2019-12-12 14.20.19.png

J'ai examiné la signification des variables.

ID du passager: ID du passager Survived: Survival result (1: Survival, 0: Death) Pclass: La classe de passagers 1 est la classe la plus élevée Nom: nom du passager Sexe: Genre Âge: âge SibSp Nombre de frères et conjoints Parch Nombre de parents et d'enfants Numéro de billet Frais d'embarquement Numéro de chambre cabine Ports embarqués à bord de Cherbourg, Queenstown, Southampton

1. Régression logistique

Supprimer les données inutiles / compléter les valeurs manquantes

#Déposez-le parce que vous pensez qu'il n'est pas nécessaire pour la prédiction
titanic_df.drop(['PassengerId','Pclass', 'Name', 'SibSp','Parch','Ticket','Fare','Cabin','Embarked'], axis=1, inplace=True)

#Afficher les données avec certaines colonnes supprimées
titanic_df.head()

LOG1.jpg

#Afficher les lignes contenant null
titanic_df[titanic_df.isnull().any(1)].head(10)

LOG2.jpg

#Compléter la valeur NULL dans la colonne Âge avec la médiane

titanic_df['AgeFill'] = titanic_df['Age'].fillna(titanic_df['Age'].mean())

#Afficher à nouveau les lignes contenant null(L'âge nul est complété)
titanic_df[titanic_df.isnull().any(1)]

#titanic_df.dtypes
#titanic_df.head()

LOG3.jpg

1. Régression logistique

Mise en œuvre (déterminer la vie ou la mort en fonction du sexe et de l'âge)

#Parce que j'ai renseigné la valeur manquante de Age Fill
#titanic_df = titanic_df.drop(['Age'], axis=1)
#Définir femme 0 homme 1 dans le sexe
titanic_df['Gender'] = titanic_df['Sex'].map({'female': 0, 'male': 1}).astype(int)
titanic_df.head()

LOG4.jpg

Dessinons la répartition de la vie et de la mort par sexe et par âge

np.random.seed = 0

xmin, xmax = -5, 85
ymin, ymax = -0.5, 1.3

index_survived = titanic_df[titanic_df["Survived"]==0].index
index_notsurvived = titanic_df[titanic_df["Survived"]==1].index

from matplotlib.colors import ListedColormap
fig, ax = plt.subplots()
cm = plt.cm.RdBu
cm_bright = ListedColormap(['#FF0000', '#0000FF'])
sc = ax.scatter(titanic_df.loc[index_survived, 'AgeFill'],
                titanic_df.loc[index_survived, 'Gender']+(np.random.rand(len(index_survived))-0.5)*0.1,
                color='r', label='Not Survived', alpha=0.3)
sc = ax.scatter(titanic_df.loc[index_notsurvived, 'AgeFill'],
                titanic_df.loc[index_notsurvived, 'Gender']+(np.random.rand(len(index_notsurvived))-0.5)*0.1,
                color='b', label='Survived', alpha=0.3)
ax.set_xlabel('AgeFill')
ax.set_ylabel('Gender')
ax.set_xlim(xmin, xmax)
ax.set_ylim(ymin, ymax)
ax.legend(bbox_to_anchor=(1.4, 1.03))

LOG5.jpg

Puisque 1 est un homme, 0 une femme, le rouge est mort et le bleu est vivant, il est distribué comme si un nombre relativement important de femelles étaient vivantes.

#Créez une liste d'âge et de sexe uniquement
data2 = titanic_df.loc[:, ["AgeFill", "Gender"]].values
data2

résultat


array([[22.        ,  1.        ],
       [38.        ,  0.        ],
       [26.        ,  0.        ],
       ...,
       [29.69911765,  0.        ],
       [26.        ,  1.        ],
       [32.        ,  1.        ]])

Faisons un graphique de survie par âge

split_data = []
for survived in [0,1]:
    split_data.append(titanic_df[titanic_df.Survived==survived])

temp = [i["AgeFill"].dropna() for i in split_data ]
plt.hist(temp, histtype="barstacked", bins=16)

LOG6.jpg

Étant donné que les valeurs d'âge manquantes sont renseignées en moyenne, il y en a beaucoup au milieu. Essayez à nouveau de créer un graphique avec les données en excluant les valeurs manquantes.

temp = [i["Age"].dropna() for i in split_data]
plt.hist(temp, histtype="barstacked", bins=16)

LOG7.jpg

Vérifiez le taux de survie des hommes et des femmes avec une carte de pile

temp = [i["Gender"].dropna() for i in split_data]
plt.hist(temp, histtype="barstacked", bins=16)

LOG8.jpg C'est devenu comme ça.

1. Régression logistique

Mise en œuvre (déterminer la vie ou la mort à partir de 2 variables)

##Créez une liste d'indicateurs de vie et de mort uniquement
label2 =  titanic_df.loc[:,["Survived"]].values
from sklearn.linear_model import LogisticRegression
model2 = LogisticRegression()
model2.fit(data2, label2)

résultat


/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.
  FutureWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py:724: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
  y = column_or_1d(y, warn=True)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='warn', n_jobs=None, penalty='l2',
                   random_state=None, solver='warn', tol=0.0001, verbose=0,
                   warm_start=False)

Prédire un homme de 30 ans

model2.predict([[30,1]])

résultat


array([0])```


```python
model2.predict([[30,1]])

résultat


array([1])
model2.predict_proba([[30,1]])

La prédiction zéro (mort) est renvoyée

résultat


array([0])

Je regarde l'établissement de ce jugement

model2.predict_proba([[30,1]])

résultat


array([[0.80664059, 0.19335941]])

Le taux de 80% de probabilité de décès et 20% de probabilité de survie peut être vu.

Sites connexes

Chapitre 1: Modèle de régression linéaire [Chapitre 2: Modèle de régression non linéaire] (https://qiita.com/matsukura04583/items/baa3f2269537036abc57) [Chapitre 3: Modèle de régression logistique] (https://qiita.com/matsukura04583/items/0fb73183e4a7a6f06aa5) [Chapitre 4: Analyse des composants principaux] (https://qiita.com/matsukura04583/items/b3b5d2d22189afc9c81c) [Chapitre 5: Algorithme 1 (méthode de voisinage k (kNN))] (https://qiita.com/matsukura04583/items/543719b44159322221ed) [Chapitre 6: Algorithme 2 (k-means)] (https://qiita.com/matsukura04583/items/050c98c7bb1c9e91be71) [Chapitre 7: Support Vector Machine] (https://qiita.com/matsukura04583/items/6b718642bcbf97ae2ca8)

Recommended Posts

<Subject> Machine learning Chapitre 3: Modèle de régression logistique
<Cours> Machine learning Chapitre 1: Modèle de régression linéaire
<Cours> Machine learning Chapitre 2: Modèle de régression non linéaire
Régression logistique d'apprentissage automatique
Algorithme d'apprentissage automatique (régression logistique)
<Course> Machine learning Chapitre 6: Algorithme 2 (k-means)
<Course> Machine Learning Chapitre 7: Support Vector Machine
<Cours> Machine learning Chapitre 4: Analyse des principaux composants
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Modèle d'apprentissage automatique prenant en compte la maintenabilité
Machine Learning: Supervision - Régression linéaire
Défis d'apprentissage automatique de Coursera en Python: ex2 (retour logistique)
Comprendre l'apprentissage automatique ~ régression de crête ~.
Machine learning supervisé (classification / régression)
Modèle d'empilage d'apprentissage automatique (retour)
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 7 Analyse de régression
[Apprentissage automatique] Comprendre la régression logistique à partir de scikit-learn et des mathématiques
[Traitement du langage 100 coups 2020] Chapitre 6: Machine learning
Les débutants en apprentissage automatique essaient la régression linéaire
Algorithme d'apprentissage automatique (analyse de régression multiple)
Algorithme d'apprentissage automatique (analyse de régression unique)
100 Language Processing Knock 2020 Chapitre 6: Apprentissage automatique
Classification et régression dans l'apprentissage automatique
Analyse inverse du modèle d'apprentissage automatique
Retour logistique
Retour logistique
Apprentissage automatique
Les débutants en apprentissage automatique suivent le cours d'apprentissage en profondeur de Coursera
Algorithme d'apprentissage automatique (généralisation de la régression linéaire)
Apprentissage automatique avec python (2) Analyse de régression simple
TensorFlow Machine Learning Cookbook Chapitre 2 Personnellement bouché
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
Algorithme d'apprentissage automatique (résumé de régression linéaire et régularisation)
TensorFlow Machine Learning Cookbook Chapitre 3 Personnellement bouché
[Apprentissage automatique] Analyse de régression à l'aide de scicit learn
Algorithme EM modèle mixte gaussien [apprentissage automatique statistique]
J'ai essayé d'organiser les index d'évaluation utilisés en machine learning (modèle de régression)
TensorFlow Machine Learning Cookbook Chapitre 6 (ou plutôt, la troisième ligne) où je suis personnellement resté coincé
Défis d'apprentissage automatique de Coursera en Python: ex3 (reconnaissance de nombres manuscrits avec récursivité logistique)
EV3 x Python Machine Learning Partie 2 Régression linéaire
Classer les informations liées à l'apprentissage automatique par modèle de sujet
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Implémenter un modèle de régression logistique en temps discret avec stan
Exemple d'apprentissage automatique
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer du chapitre 2
Python Scikit-learn Analyse de régression linéaire Analyse de régression simple non linéaire Apprentissage automatique
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Coursera Machine Learning Challenge en Python: ex1 (régression linéaire)
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
xgboost: modèle d'apprentissage automatique efficace pour les données de table
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost