[PYTHON] J'ai essayé de prédire l'année prochaine avec l'IA

Introduction 2019 n'est qu'à quelques heures et l'intérêt pour l'année prochaine grandit. J'ai fait une prédiction par AI sur l'année prochaine.

Method

Données d'entraînement

J'ai appris des données de 2019 de cette année à 2019.

image.png

Apprentissage

Je l'ai appris avec Kernel Ridge du noyau rbf.


import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.read_csv('years.csv',names=("years", "result"))
features = df.drop(["result"], axis=1)
target = df["result"]

from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(features, target, test_size=0.2, random_state=0)

from sklearn.model_selection import GridSearchCV
from sklearn.kernel_ridge import KernelRidge
param_grid = {'alpha': [i*10**j for i in [1,3] for j in [-9,-8,-7]],
              'gamma': [i*10**j for i in [1,2,4,7] for j in [-6,-5,-4]]}
gs = GridSearchCV(KernelRidge(kernel='rbf'), param_grid, cv=5, n_jobs=3)
gs.fit(train_x, train_y)
rgr = gs.best_estimator_

Les données d'entraînement ont été divisées au hasard en données d'entraînement et données de test, et entraînées à l'aide des données d'entraînement. Kernel Ridge a des hyper paramètres ʻalpha et gamma`, donc je l'ai optimisé par la recherche de grille.

Result

Vérification croisée

GridSearchCV divise davantage les données données et recherche les paramètres qui maximisent les performances de généralisation. Déterminez les performances du prédicteur aux paramètres optimaux.

print(gs.best_estimator_)
print(gs.best_score_)
KernelRidge(alpha=1e-09, coef0=1, degree=3, gamma=2e-05, kernel='rbf',
      kernel_params=None)
0.9999999999996596

Le score de performance de généralisation était suffisamment élevé.

yyplot

plt.scatter(rgr.predict(train_x), train_y, marker='.', label='train')
plt.scatter(rgr.predict(test_x), test_y, marker='.', label='test')
plt.legend()
plt.show()

Un yyplot a été dessiné pour visualiser si oui ou non une prédiction valide a été faite pour les données de formation / test.

image.png

On peut voir que des prédictions correctes ont été faites pour de nombreuses données existantes.

Courbe d'apprentissage

Une courbe d'apprentissage a été dessinée et vérifiée pour déterminer si elle était surentraînée.

from sklearn.model_selection import (learning_curve,ShuffleSplit)

def plot_learning_curve(estimator, title, X, y, ylim=None, cv=None,
                        n_jobs=None, train_sizes=np.linspace(.1, 1.0, 5), verbose=0):
    plt.figure()
    plt.title(title)
    if ylim is not None:
        plt.ylim(*ylim)
    plt.xlabel("Training examples")
    plt.ylabel("Score")
    train_sizes, train_scores, test_scores = learning_curve(
        estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes, verbose=verbose)
    train_scores_mean = np.mean(train_scores, axis=1)
    train_scores_std = np.std(train_scores, axis=1)
    test_scores_mean = np.mean(test_scores, axis=1)
    test_scores_std = np.std(test_scores, axis=1)
    plt.grid()

    plt.fill_between(train_sizes, train_scores_mean - train_scores_std,
                     train_scores_mean + train_scores_std, alpha=0.1,
                     color="r")
    plt.fill_between(train_sizes, test_scores_mean - test_scores_std,
                     test_scores_mean + test_scores_std, alpha=0.1, color="g")
    plt.plot(train_sizes, train_scores_mean, 'o-', color="r",
             label="Training score")
    plt.plot(train_sizes, test_scores_mean, 'o-', color="g",
             label="Cross-validation score")

    plt.legend(loc="best")
    return plt

cv = ShuffleSplit(n_splits=5, test_size=0.2, random_state=0)
t_size = np.linspace(0.01, 1.00, 20)
plot_learning_curve(RandomForestRegressor(n_estimators=50),
                    "Learning Curve", features, target, cv=cv, ylim=[0.98,1.005], train_sizes=t_size, verbose=10)
plt.show()

image.png

Étant donné que les performances d'apprentissage et les performances de généralisation ont convergé vers des valeurs élevées, on peut estimer que la possibilité de surapprentissage est faible.

Prévisions de l'année prochaine


print(rgr.predict([[2019+1]]))

J'ai entré les paramètres pour l'année prochaine de cette année et j'ai prédit l'année prochaine.

[2019.99488853]

Le résultat était de 2 020 $ \ fois 10 ^ 3 $ ans. En conséquence, l'année prochaine devrait être 2020.

Discussion

La méthode Kernel Ridge du noyau rbf est une méthode pour trouver une fonction qui minimise la fonction de perte à partir de l'espace des fonctions gaussiennes de dimension infinie, et présente des performances de généralisation élevées pour les problèmes dans lesquels une forme fonctionnelle explicite est supposée. Il est fort probable que l'année prochaine soit 2020.

Recommended Posts

J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé de prédire la survie du Titanic avec PyCaret
J'ai essayé de prédire et de soumettre les survivants du Titanic avec Kaggle
J'ai essayé de prédire le prix de l'immobilier à Boston avec PyCaret
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé d'utiliser lightGBM, xg boost avec Boruta
J'ai essayé d'apprendre le fonctionnement logique avec TF Learn
J'ai essayé de déplacer GAN (mnist) avec keras
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de détecter rapidement un mouvement avec OpenCV
J'ai essayé d'intégrer Keras dans TFv1.1
J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé de déboguer.
J'ai essayé de faire de l'IA pour Smash Bra
J'ai essayé de détecter un objet avec M2Det!
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé d'utiliser Linux avec Discord Bot
J'ai essayé d'étudier DP avec séquence de Fibonacci
J'ai essayé de démarrer Jupyter avec toutes les lumières d'Amazon
J'ai essayé de juger Tundele avec Naive Bays
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé de prédire les chevaux qui seront dans le top 3 avec LightGBM
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV
J'ai essayé de déplacer Faster R-CNN rapidement avec pytorch
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de prédire le match de la J League (analyse des données)
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé de générer ObjectId (clé primaire) avec pymongo
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé de créer un pipeline ML avec Cloud Composer
J'ai essayé de découvrir notre obscurité avec l'API Chatwork
[TensorFlow] J'ai essayé d'introduire l'IA dans le repassage des véhicules
[Introduction à Pytorch] J'ai essayé de catégoriser Cifar10 avec VGG16 ♬
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
J'ai essayé de créer une application OCR avec PySimpleGUI
J'ai essayé d'implémenter SSD avec PyTorch maintenant (Dataset)
J'ai essayé d'interpoler le masque R-CNN avec un flux optique