Apprentissage automatique avec python sans perdre aux variables catégorielles (conversion de variable factice)

Je regarde toujours la même chose, alors J'en ai profité pour faire une note.

Ici, nous lisons en fait csv avec python et Un prétraitement tel qu'une conversion de variable fictive a été effectué et une prédiction a été faite avec SVM.

Motivé

Lors de la plongée des données dans l'apprentissage automatique, les données peuvent contenir des variables catégoriques (par exemple, le sexe, le pays d'origine). À ce moment-là, si vous le remplacez par une valeur numérique (exemple: 1 au Japon, 2 aux États-Unis), la signification involontaire sera convertie en données. Parce que cela donne, l'apprentissage peut ne pas bien se passer.

Ici, nous allons y remédier en convertissant les variables catégorielles en valeurs numériques à l'aide d'une méthode appelée variables factices.

Qu'est-ce qu'une variable fictive?

Par exemple, supposons les données suivantes.

Dans la conversion des variables fictives, la colonne «country» est remplacée par trois colonnes «country.Japan, country.America, country.China». Convertit uniquement les valeurs applicables en «1» et les autres en «0».

Exemple de données avant conversion factice

Pays
Japon

Exemple de données après conversion en variable fictive

Pays.Japon Pays.Amérique Pays.Chine
1 0 0

la mise en oeuvre

Obtenez des données

Cette fois, nous avons utilisé les données utilisées dans des expériences telles que le traitement d'anonymisation appelé "Ensemble de données sur le revenu des adultes". Vous pouvez probablement l'obtenir par google, mais cette fois je l'ai eu avec R (ne vous inquiétez pas si vous dites python mais utilisez R tout de suite).

Cet ensemble de données a également un élément appelé «revenu (revenu)», qui a trois valeurs: «grand, petit et NaN». Dans cette implémentation, nous voulons prédire «grand ou petit» pour «NaN (valeur manquante)».

Par conséquent, la ligne sans «NaN» est utilisée comme données d'apprentissage et les données avec «NaN» sont utilisées comme données d'évaluation.

library('arules')
data("AdultUCI")
id <- 1:nrow(AdultUCI)
d <- data.frame(id, AdultUCI)
write.csv(d, "AdultDataSet.csv", quote = FALSE, fileEncoding = 'cp932', row.names = FALSE)

Chargement des bibliothèques et des fichiers csv

import numpy as np
import pandas as pd
from sklearn import svm

df = pd.read_csv("AdultDataSet.csv", encoding='cp932', low_memory=False)

Prétraitement (crée également des variables fictives)

#Label de formation
Y_train = df.copy()
Y_train['income'] = Y_train['income'].map({"large":1, "small":0})
Y_train = Y_train[Y_train['income'].notnull()]
Y_train = Y_train.iloc[:, 15].values #revenu seulement

#Création de variables fictives pour les variables catégorielles
X = df.iloc[:, 0:15] #Autre que le revenu
colnames_categorical = ['workclass', 'marital.status', 'occupation', 'relationship', 'race', 'sex', 'native.country']
X_dummy = pd.get_dummies(X[colnames_categorical], drop_first=True)

#Joindre des variables factices
X = pd.merge(X, X_dummy, left_index=True, right_index=True)

#Supprimer les colonnes en double que vous n'utilisez pas
X = X.drop(colnames_categorical, axis=1)
X = X.drop(['id', 'education'], axis=1)

#Train et test séparés selon que le revenu est NaN ou non
X_train = X[df['income'].notnull()].values
X_test  = X[df['income'].isnull()].values

Apprentissage et prédiction

#Apprentissage
clf = svm.LinearSVC() #Parce que l'apprentissage est rapide. L'autre est svm.SVC(kernel='rbf')Etc.
print('start!')
clf.fit(X_train, Y_train)
print('end!')

#Prévoir
Y_predict = clf.predict(X_test)

Combinaison des résultats prévus

#Ajouter la valeur prévue
df2 = df.copy()
df2.loc[df2['income'].isnull(), 'income'] = Y_predict
df2['income'] = df2['income'].map({1.:"large", 0.:"small", "small":"small", "large":"large"})
df2.head()

Vérifiez le résultat

À l'origine, je pense que les données avec l'étiquette de réponse correcte devraient être classées à l'avance et la performance devrait être évaluée. Cette fois, ce que j'ai prédit pour les données manquantes et le but est d'appliquer une variable factice. Pour le moment, vérifions qu'il n'y a pas de valeurs manquantes.

#Valeur agrégée du revenu avant l'apprentissage
count_before = df['income'].value_counts(dropna=False)
pd.DataFrame(count_before) #  print(count_before)Peut être
#Valeur agrégée du revenu après l'apprentissage
count_after = df2['income'].value_counts(dropna=False)
pd.DataFrame(count_after)

Si NaN disparaît après l'apprentissage, c'est OK pour le moment.

Sortie de résultat

df2.to_csv('AfterAdultDataSet.csv', index=False)

à la fin

Cela ne devrait pas être si difficile, mais comment utiliser les pandas et comment apprendre scikit J'ai eu du mal à taper ... triste ...

Recommended Posts

Apprentissage automatique avec python sans perdre aux variables catégorielles (conversion de variable factice)
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Apprentissage automatique avec Python! Préparation
Commencer avec l'apprentissage automatique Python
Apprentissage automatique par python (1) Classification générale
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Méthode Newton pour l'apprentissage automatique (de 1 variable à plusieurs variables)
Amplifiez les images pour l'apprentissage automatique avec Python
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
Une introduction à Python pour l'apprentissage automatique
Construction d'environnement AI / Machine Learning avec Python
Mayungo's Python Learning Episode 2: J'ai essayé de mettre des caractères avec des variables
J'ai commencé l'apprentissage automatique avec Python (j'ai également commencé à publier sur Qiita) Préparation des données
Apprentissage automatique à partir de Python Personal Memorandum Part2
Apprentissage automatique à partir de Python Personal Memorandum Part1
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Un débutant en apprentissage automatique a essayé de créer un modèle de prédiction de courses de chevaux avec python
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitres 11 et 12 Introduction à Pandas Matplotlib
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
Apprendre Python avec ChemTHEATER 03
"Orienté objet" appris avec python
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
Apprendre Python avec ChemTHEATER 05-1
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Apprendre Python avec ChemTHEATER 02
Préparation au démarrage de «Python Machine Learning Programming» (pour macOS)
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Apprendre Python avec ChemTHEATER 01
Résumé du site pour apprendre l'apprentissage automatique avec une vidéo en anglais
Résumé du flux de base de l'apprentissage automatique avec Python
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
Convertissez les variables numériques en variables catégorielles avec les pandas en définissant un seuil
Introduction à l'apprentissage automatique
J'ai essayé de créer un environnement d'apprentissage automatique avec Python (Mac OS X)
Introduction à l'apprentissage automatique avec scikit-learn - De l'acquisition de données à l'optimisation des paramètres
Défi problème 5 avec Python: lambda ... j'ai décidé de copier sans
Pour ceux qui souhaitent démarrer l'apprentissage automatique avec TensorFlow2
Comment utiliser l'apprentissage automatique pour le travail? 03_Procédure de codage Python
Mayungo's Python Learning Episode 3: J'ai essayé d'imprimer des nombres
[Apprentissage automatique] Sélection de fonctionnalités de variables catégorielles à l'aide du test du chi carré
Apprentissage automatique pour apprendre avec Nogisaka 46 et Keyakizaka 46 Partie 1 Introduction
Paramètres d'environnement d'apprentissage automatique basés sur Python3 sur Mac (coexistence avec Python2)
L'apprentissage automatique appris avec Pokemon
Connectez-vous à BigQuery avec Python
Une introduction à l'apprentissage automatique
Publiez sur Slack avec Python 3
Apprentissage amélioré à partir de Python
Démineur d'apprentissage automatique avec PyTorch
Programmation Python Machine Learning> Mots-clés
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
Traitement itératif Python appris avec ChemoInfomatics