[PYTHON] J'ai étudié avec Kaggle Start Book basé sur kaggle [Partie 1]

1. Objet

Dans un article précédent, j'ai utilisé les projets Kickstarter de kaggle comme thème pour vérifier l'exactitude de chaque modèle. [J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème] (https://qiita.com/Hawaii/items/4f0dd4d9cfabc4f6bb38)

Cette fois, tout en faisant référence à cela également, ** le but est de diffuser le processus d'amélioration de la précision à l'aide du Kaggle Start Book publié en mars **. J'ai appris beaucoup de nouvelles choses cette fois, alors j'ai décidé de les diviser en première et seconde partie. Le billet d'aujourd'hui est la première partie.

◆ Sujets à traiter

Je voudrais surtout me concentrer sur les parties que je ne connaissais pas. Plus précisément, il existe trois types: ** "Pandas-Profiling, LightGBM, Ensemble Learning" **.

→ Cette fois, nous travaillerons sur Pandas-Profiling et LightGBM.

◆ Autre

Il décrit également les problèmes liés à chaque sujet, les problèmes qui se sont produits et le processus de résolution de ces problèmes, donc si vous avez des problèmes, veuillez le lire.

2. Analyse des données - Profilage des pandas -

Pandas Profiling a été introduit dans le livre de démarrage de Kaggle, et je ne le savais pas du tout, alors je l'ai essayé.

(1) Installation

Je me suis référé au site suivant. https://qiita.com/h_kobayashi1125/items/02039e57a656abe8c48f

Il semble que Pandas-Profiling doit être installé avec pip etc., donc je l'ai également importé.

pip install pandas-profiling

<Supplément-Une histoire que j'ai eu du mal à installer-> -Si vous pouvez installer sans aucun problème ci-dessus, veuillez le sauter

Fondamentalement, cela semble être correct, mais en fait, j'ai eu une erreur ici, alors j'ai cherché divers sites et l'ai essayé. Cependant, je n'ai pas pu sortir de cette erreur et cela m'a pris un jour, alors je vais écrire sur mon expérience. Donc, pour ceux qui ont suivi exactement le même chemin que moi, je tiens à mentionner que j'ai pu le résoudre.

Voici la référence. https://gammasoft.jp/support/pip-install-error/

J'ai touché la cause 2 de ça

pip install pandas-profiling --user

J'ai écrit cela et essayé de l'installer. Ensuite, bien que ce ne soit pas une erreur, un avertissement est apparu en rouge, et une fois que j'ai fermé le notebook jupyter et l'ai redémarré, il ne pouvait pas démarrer ...

L'erreur que j'obtenais était "Erreur d'attribut: l'objet 'module' n'a pas d'attribut '", j'ai donc vérifié cela aussi, et quand j'ai fait ce qui suit, j'ai pu le relancer en toute sécurité!

pip uninstall attr
pip install attrs
pip intall pandas-profiling

Je n'ai aucune connaissance à ce sujet, donc je suis désolé pour l'écriture moelleuse ... J'espère que cela vous aidera un peu.

(2) Importez ce dont vous avez besoin

Il y en a dont je n'ai pas besoin directement cette fois, mais je les importe tous en même temps.

#numpy,Importer des pandas
import numpy as np
import pandas as pd

#Importer pour effectuer certains traitements sur les données de date
import datetime

#Importation des données d'entraînement et fractionnement des données de test
from sklearn.model_selection import train_test_split

#Importer pour la normalisation
from sklearn.preprocessing import StandardScaler

#Importer pour la vérification de l'exactitude
from sklearn.model_selection import cross_val_score

#pandas_profiling
import pandas_profiling as pdp

(3) Lecture des données

df = pd.read_csv(r"~\ks-projects-201801.csv")

Comme il est écrit dans le livre de démarrage, le profilage des pandas prend du temps s'il s'agit d'une énorme quantité de données, nous allons donc échantillonner les données.

#Échantillon 30% de l'ensemble
df_sample=df.sample(frac=0.3,random_state=1234)

(4) Exécution du profilage des pandas

À l'origine, df_sample.profile_report () semble être OK, mais pour une raison quelconque, je n'ai pas eu d'erreur, mais le résultat ne s'affiche pas, et je le crache au format HTML de cette façon J'ai essayé (je pense que le fichier sera créé au format HTML au même endroit où je travaille).

report = pdp.ProfileReport(df_sample)
report.to_file('profile_report.html')

J'ai pu le mettre en œuvre en toute sécurité! !! Certes, cela semble vous donner une idée approximative de l'apparence des données. Je souhaite continuer à l'utiliser le cas échéant.

キャプチャ1.PNG

3. Construction du modèle-LightGBM-

Ensuite, construisons un modèle de LightGBM. J'ai entendu le nom, mais il a été implémenté parce qu'il n'y avait pas beaucoup de description dans les livres, etc. Je ne l'avais pas, alors je vais l'essayer.

◆ Site de référence En plus du Kaggle Start Book, j'ai également fait référence aux sites suivants.

https://blog.amedama.jp/entry/2018/05/01/081842#scikit-learn-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9

(1) Importez ce dont vous avez besoin

#numpy,Importer des pandas
import numpy as np
import pandas as pd

#Importer pour effectuer certains traitements sur les données de date
import datetime

#Importation des données d'entraînement et fractionnement des données de test
from sklearn.model_selection import train_test_split

#Importer pour la normalisation
from sklearn.preprocessing import StandardScaler

#Importer pour la vérification de l'exactitude
from sklearn.model_selection import cross_val_score

#pandas_profiling
import pandas_profiling as pdp

#Importation LightGBM
import lightgbm as lgb

(2) Lecture des données

df = pd.read_csv(r"C:\\ks-projects-201801.csv")

(3) Prétraitement

Je n'entrerai pas dans les détails, mais les commentaires du code décrivent ce que je fais.

#L'état de la variable objectif est réduit aux données uniquement en cas de réussite ou d'échec (les données sont supprimées car il existe une catégorie telle que l'abandon au milieu)
df = df[(df["state"] == "successful") | (df["state"] == "failed")]

#En plus de cela, le succès est défini sur 1 et l'échec est défini sur 0.
df["state"] = df["state"].replace("failed",0)
df["state"] = df["state"].replace("successful",1)

#Traitement des données de date. date de début(launched)Et date de fin(deadline)Parce qu'il y a, prenez la différence et la période de recrutement(days)je dois
df['deadline'] = pd.to_datetime(df["deadline"])
df["launched"] = pd.to_datetime(df["launched"])
df["days"] = (df["deadline"] - df["launched"]).dt.days


#Bien que cette fois omises, à la suite de l'analyse des données, les variables explicatives qui semblent inutiles sont supprimées.
df = df.drop(["ID","name","deadline","launched","backers","pledged","usd pledged","usd_pledged_real","usd_goal_real"], axis=1)

#Traitement des variables de catégorie
df = pd.get_dummies(df,drop_first = True)

(4) Division des données

y = df["state"].values
X = df.drop("state", axis=1).values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1234)

(5) Implémentation de LightGBM

(I) Création de l'ensemble de données

lgb_train = lgb.Dataset(X_train,y_train)
lgb_eval = lgb.Dataset(X_test,y_test)

params = {"objective":"binary"}

(Ii) Construction du modèle

model = lgb.train(params,lgb_train,valid_sets=[lgb_train,lgb_eval],verbose_eval=10,num_boost_round=1000,early_stopping_rounds=10)

(Iii) Vérification de l'exactitude

#Prédire avec les données de test, y_Stocker les résultats dans pred
y_pred = model.predict(X_test,num_iteration=model.best_iteration)
#y_pred est 0.S'il est supérieur à 5, faites-en un entier 1.
y_pred  = (y_pred>0.5).astype(int)

y_pred_max = np.argmax(y_pred) 

#précision(Accuracy)Calculer
accuracy = sum(y_test == y_pred_max) / len(y_test)
print(accuracy)

Ensuite, la précision était de ** 0,597469 ** et LightGBM a été implémenté avec succès!

(Iv) Précautions

Ce sur quoi je suis tombé par hasard cette fois, c'est que je n'ai pas écrit y_pred = (y_pred> 0.5) .astype (int), donc la précision était initialement de 0.

→ Il est bien écrit dans le livre, mais je l'ai sauté parce que j'écrivais le code tout en faisant référence à d'autres sites également.

Le résultat LightGBM est sorti sous la forme d'une valeur continue de 0 à 1, tandis que y_test vaut 0 ou 1 car j'ai initialement défini 0 pour échec et 1 pour succès. La précision était de 0 au début parce que j'ai comparé les deux purement, mais j'ai pu obtenir la précision en toute sécurité en remplaçant la valeur supérieure à 0,5 par 1.

4. Conclusion

Qu'as-tu pensé. Je ne connaissais pas du tout le profilage des pandas, donc je pense qu'il pourrait être utilisé pour l'analyse des données. Cette fois, j'ai pu implémenter LightGBM, qui m'intéressait pour la première fois, donc J'espère que cela sera également utile pour les super débutants.

La prochaine fois, j'essaierai l'apprentissage d'ensemble.

Recommended Posts

J'ai étudié avec Kaggle Start Book basé sur kaggle [Partie 1]
Jusqu'au début du tutoriel django avec pycharm sous Windows
J'ai écrit le fonctionnement de base de Pandas dans Jupyter Lab (partie 1)
J'ai essayé d'exécuter la partie DNN d'OpenPose avec le processeur Chainer
J'ai vérifié l'image de l'Université des sciences sur Twitter avec Word2Vec.
J'ai écrit le fonctionnement de base de Pandas dans Jupyter Lab (partie 2)
Publier le sujet de Gmail sur Twitter
J'ai essayé de jouer avec la calculatrice avec tkinter
J'ai installé Pygame avec Python 3.5.1 dans l'environnement de pyenv sur OS X
J'ai essayé la détection d'objets avec YOLO v3 (TensorFlow 2.1) sur le GPU de windows!
Je veux tracer les informations de localisation de GTFS Realtime sur Jupyter! (Avec ballon)
Peut-être ai-je surestimé l'impact de Shell Shock sur CGI
J'ai mesuré les performances d'un million de documents avec mongoDB
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai écrit la grammaire de base de Python dans Jupyter Lab
Exécutons la commande à temps avec le bot discord
J'ai évalué la stratégie de négociation du système boursier avec Python.
J'ai essayé d'implémenter l'algorithme FloodFill avec TRON BATTLE de CodinGame
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 1)
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 2)
J'ai écrit le fonctionnement de base de matplotlib dans Jupyter Lab
Obtenez le nom d'hôte du PC hôte avec Docker sous Linux
Obtenez des images de sites intéressants / 47 à l'aide de Python (Partie 2/2: liste des cibles publiées par github)
Lire les coordonnées du tracé sur le graphe avec Python-matplotlib (super débutant)
J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
Lorsque je démarre l'environnement virtuel de conda, l'invite de bash s'effondre
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part2
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
[Python] J'ai écrit la route du typhon sur la carte en utilisant le folium
J'ai essayé la validation croisée basée sur le résultat de la recherche de grille avec scikit-learn
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
Je veux sortir le début du mois prochain avec Python
J'ai analysé les tweets sur le nouveau virus corona publiés sur Twitter, partie 2
Compter la partie concaténée maximale d'un graphe aléatoire avec NetworkX
J'ai essayé de démarrer avec Bitcoin Systre le week-end
[Objet obligatoire DI] Implémenter et comprendre le mécanisme de DI avec Go
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part1
J'ai essayé d'agrandir la taille du volume logique avec LVM
Je veux vérifier la position de mon visage avec OpenCV!
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
Comment exécuter le code pratique du livre "Making Profitable AI with Python" sur Google Colaboratory
Démarrez la science des données dans le cloud
J'ai étudié le mécanisme de connexion flask!
"Python startbook" mémo compatible python3
J'ai aimé le tweet avec python. ..
Obtenez la largeur du div côté serveur avec Selenium + PhantomJS + Python
J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Modifiez le fichier du serveur de destination de la connexion SSH sur le serveur avec VS Code
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai vectorisé l'accord de la chanson avec word2vec et je l'ai visualisé avec t-SNE
J'ai essayé de mesurer le temps d'attente de la file d'attente d'exécution d'un processus sous Linux
Lire le commentaire de la vidéo de Nico Nico sur le terminal en conjonction avec la vidéo