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.
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.
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.
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é.
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
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.
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
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)
À 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.
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
#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
df = pd.read_csv(r"C:\\ks-projects-201801.csv")
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)
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)
lgb_train = lgb.Dataset(X_train,y_train)
lgb_eval = lgb.Dataset(X_test,y_test)
params = {"objective":"binary"}
model = lgb.train(params,lgb_train,valid_sets=[lgb_train,lgb_eval],verbose_eval=10,num_boost_round=1000,early_stopping_rounds=10)
#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!
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.
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.