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.
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.
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».
Pays |
---|
Japon |
Pays.Japon | Pays.Amérique | Pays.Chine |
---|---|---|
1 | 0 | 0 |
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)
import numpy as np
import pandas as pd
from sklearn import svm
df = pd.read_csv("AdultDataSet.csv", encoding='cp932', low_memory=False)
#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
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)
#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()
À 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.
df2.to_csv('AfterAdultDataSet.csv', index=False)
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