[PYTHON] Apprentissage automatique dans Delemas (s'entraîner)

Ceci est une continuation de Dernière fois. [Idol Master Cinderella Girls](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%E3%83%9E% E3% 82% B9% E3% 82% BF% E3% 83% BC_% E3% 82% B7% E3% 83% B3% E3% 83% 87% E3% 83% AC% E3% 83% A9% E3% Prédiction de 3 types (Cu, Co, Pa) à partir des données de profil de 183 personnes (en avril 2017) de 82% AC% E3% 83% BC% E3% 83% AB% E3% 82% BA) Je vais.

Les 16 objets suivants ont été acquis. C'est une matrice de 183 x 16. [Type, nom, âge, naissance, constellation, groupe sanguin, taille, poids, B, W, H, main dominante, ville natale, loisirs, CV, date de mise en œuvre]

Parmi ceux-ci, cette fois, nous utiliserons les 6 données suivantes pour prédire le type. [Âge, taille, poids, B, W, H]

Mise en forme des données

Les types de données acquises étant tous des objets, convertissez-les en types numériques.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import csv
import pandas as pd
from pandas import DataFrame
import matplotlib
import matplotlib.pyplot as plt

def translate(df):

    #Convertir le type de données en float
    df['âge']=df['âge'].str.extract('([0-9]+)').astype(float)
    df['la taille']=df['la taille'].astype(float)
    df['poids']=df['poids'].str.extract('([0-9]+)').astype(float)
    df['B']=df['B'].str.extract('([0-9]+)').astype(float)
    df['W']=df['W'].str.extract('([0-9]+)').astype(float)
    df['H']=df['H'].str.extract('([0-9]+)').astype(float)

    #Conversion numérique des valeurs d'attribut
    df.loc[df['attribut'] == "Cu", 'attribut'] = 0
    df.loc[df['attribut'] == "Co", 'attribut'] = 1
    df.loc[df['attribut'] == "Pa", 'attribut'] = 2
    df['attribut']=df['attribut'].astype(int)

    return df

if __name__ == '__main__':
    #Lecture des données
    df = pd.read_csv('aimasudata.csv')
    df=translate(df)

«Puisque le japonais est parfois mélangé dans des données telles que l'âge, str.extract ('([0-9] +)') est utilisé pour extraire uniquement les nombres. \ ([Eternal ○ ans] → [○]. Vous l'avez fait!)

Confirmation des données

Représentons graphiquement les données pour voir si elles sont vraiment perceptibles par l'apprentissage automatique.

def checkdata(df,index):

    #Obtenez des données pour chaque type
    x1 = [df[index][df['attribut']==0]]
    x2 = [df[index][df['attribut']==1]]
    x3 = [df[index][df['attribut']==2]]
    
    #Générer un histogramme
    plt.hist([x1,x2,x3], bins=16)

    #Enregistrer l'image
    plt.savefig("%s_graph.png " %index)

    #Affichage de l'image
    plt.show()

if __name__ == '__main__':
    #Lecture des données
    df = pd.read_csv('row_data.csv')
    df=translate(df)
    checkdata(df,"âge")

résultat

âge

年齢_graph.png Bleu: Cu, Orange: Co, Vert: Pa. Co compte une forte proportion de personnes âgées.

la taille

身長_graph.png Le Cu est-il bas et Co élevé? Ces données font la plus grande différence.

poids

体重_graph.png La différence n'est pas grande, mais Co est légèrement plus élevée. Globalement trop léger.

B B_graph.png

W W_graph.png

H H_graph.png Dans le système de données corporelles, la valeur de Co est élevée dans son ensemble. La séparation du Cu et du Pa est-elle subtile?

Recherche de grille

Cette fois, nous utiliserons SVM pour déterminer trois classes (Co, Cu, Pa). Puisqu'il est nécessaire de définir des paramètres lors de la mise en œuvre de SVM, Tout d'abord, utilisez la recherche de grille pour déterminer les paramètres à appliquer à SVM.

[Optimisation des paramètres par recherche de grille de Scikit learn] (http://qiita.com/SE96UoC5AfUt7uY/items/c81f7cea72a44a7bfd3a)

def gridsearch(df):
    tuned_parameters = [{'C': [1, 10, 100, 1000, 10000], 'kernel': ['rbf'], 'gamma': [0.01,0.001, 0.0001]}]
    score = 'f1'
    clf = GridSearchCV(
        SVC(), #Identifiant
        tuned_parameters, #Jeu de paramètres que vous souhaitez optimiser
        cv=5, #Nombre de tests croisés
        scoring='%s_weighted' % score ) #Spécification de la fonction d'évaluation du modèle

    df = df.dropna(subset=['âge','la taille','poids','B','W','H'])
    X = df[['âge','la taille','poids','B','W','H']]
    y = df["attribut"]

    clf.fit(X, y)

    print"mean score for cross-validation:\n"
    for params, mean_score, all_scores in clf.grid_scores_:
        print "{:.3f} (+/- {:.3f}) for {}".format(mean_score, all_scores.std() / 2, params)
    print clf.best_params_

résultat

スクリーンショット 2017-04-07 22.15.29.png

Le résultat semble être meilleur lorsque C = 100 et gamma = 0,0001.

Implémentation SVM

Implémentez SVM en utilisant les paramètres obtenus par la recherche de grille.

def dosvm(df):
    #Supprimer les lignes avec des valeurs manquantes
    df=df.dropna(subset=['âge','la taille','poids','B','W','H'])

    X = df[['âge','la taille','poids','B','W','H']]
    y = df["attribut"]
   
    data_train,data_test,label_train,label_test=train_test_split(X,y,test_size=0.2)

    clf = svm.SVC(kernel="rbf",C=100,gamma=0.0001)
    clf.fit(data_train, label_train)
    result=clf.predict(data_test)
    cmat=confusion_matrix(label_test,result)
    acc=accuracy_score(label_test,result)
    
    print cmat
    print acc

résultat

スクリーンショット 2017-04-07 22.22.49.png

Après environ 100 essais, j'ai pu déterminer avec une précision d'environ 0,45. En regardant la matrice de confusion, il semble que Pa ne soit pas bien prédit.

Note

«Quand j'ai commencé, je me demandais si je pouvais l'identifier, mais j'ai pu l'identifier de manière inattendue.

Recommended Posts

Apprentissage automatique dans Delemas (s'entraîner)
Apprentissage automatique dans Delemas (acquisition de données)
Utilisé en EDA pour l'apprentissage automatique
Apprentissage automatique
Automatisez les tâches de routine dans l'apprentissage automatique
Classification et régression dans l'apprentissage automatique
Python: prétraitement dans l'apprentissage automatique: présentation
Prétraitement dans l'apprentissage automatique 2 Acquisition de données
Recherche de semences aléatoires dans l'apprentissage automatique
Prétraitement dans l'apprentissage automatique 4 Conversion de données
[python] Techniques souvent utilisées dans l'apprentissage automatique
Python: prétraitement en machine learning: acquisition de données
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
[Python] Enregistrement des résultats d'apprentissage (modèles) dans l'apprentissage automatique
Python: prétraitement dans l'apprentissage automatique: conversion de données
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
Exemple d'apprentissage automatique
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Divulgation complète des méthodes utilisées dans l'apprentissage automatique
[Python] Analyse de données, pratique du machine learning (Kaggle) -Prétraitement des données-
Résumé des fonctions d'évaluation utilisées dans l'apprentissage automatique
Touchons une partie de l'apprentissage automatique avec Python
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost
Régression logistique d'apprentissage automatique
Deep learning 1 Pratique du deep learning
Machine de vecteur de support d'apprentissage automatique
Étudier l'apprentissage automatique ~ matplotlib ~
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Apprenez en quelque sorte le machine learning
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Apprentissage automatique: k-voisins les plus proches
Qu'est-ce que l'apprentissage automatique?
Créez un environnement interactif pour l'apprentissage automatique avec Python
Outil MALSS (application) qui prend en charge l'apprentissage automatique en Python
Défis d'apprentissage automatique de Coursera en Python: ex2 (retour logistique)
Outil MALSS (basique) qui prend en charge l'apprentissage automatique en Python
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
Coursera Machine Learning Challenge en Python: ex1 (régression linéaire)
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
Entropie croisée à revoir dans les devoirs de la semaine 2 de Coursera Machine Learning
MALSS (introduction), un outil qui prend en charge l'apprentissage automatique en Python
Modèle d'apprentissage automatique prenant en compte la maintenabilité
Intégration du langage machine en langage C
L'apprentissage automatique appris avec Pokemon
Ensemble de données pour l'apprentissage automatique
[Apprentissage automatique] Résumons la forêt aléatoire de manière simple à comprendre
Prétraitement japonais pour l'apprentissage automatique
Comment adapter plusieurs bibliothèques d'apprentissage automatique en une seule fois
Apprentissage automatique à l'aide de Jupyter Notebook dans l'environnement OCI Always Free (2019/12/17)
Une introduction à l'apprentissage automatique
Techniques liées à l'apprentissage automatique / à la classification