[PYTHON] Trouvez un modèle mathématique de la valeur d'expérience requise pour améliorer la marche DQ (2)

Vue d'ensemble (TL; DR)

Puisque nous avons fini de vérifier les données la dernière fois, l'étape suivante consiste à calculer le modèle mathématique. (J'étudie actuellement, donc je serais heureux si vous pouviez signaler des erreurs.)

Calculez un modèle mathématique des valeurs d'expérience requises pour améliorer la marche DQ (1)

analyse de régression

Tout d'abord, importez le groupe de bibliothèques requis

import pandas as pd
import numpy as np
import scipy as sp

import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import linear_model
sns.set()

%matplotlib inline
%precision 3

Importez les données avec read_csv ().

df = pd.read_csv('data.csv',names=['EXP'])
df['CUMSUM_EXP'] = df['EXP'].cumsum()
df.index = df.index + 1
df.head()
Screen Shot 2020-01-31 at 21.49.26.png

Envoyez les données au linear_model de sklearn

Tout d'abord, la valeur d'expérience requise pour le niveau suivant

reg = linear_model.LinearRegression()
 
X = df.index
Y = df['EXP']
#Créer un modèle prédictif
reg.fit(X, Y)
#Coefficient de régression
print(reg.coef_)
#Section
print(reg.intercept_)
#R2 (coefficient de décision)
print(reg.score(X, Y))

*** J'obtiens une erreur sur le résultat de l'exécution de jupyter !! ***

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-54-69fa63dab1be> in <module>
      6 Y = df['EXP']
      7 #Créer un modèle prédictif
----> 8 reg.fit(X, Y)
      9 #Coefficient de régression
     10 print(reg.coef_)

/usr/local/lib/python3.7/site-packages/sklearn/linear_model/base.py in fit(self, X, y, sample_weight)
    461         n_jobs_ = self.n_jobs
    462         X, y = check_X_y(X, y, accept_sparse=['csr', 'csc', 'coo'],
--> 463                          y_numeric=True, multi_output=True)
    464 
    465         if sample_weight is not None and np.atleast_1d(sample_weight).ndim > 1:

/usr/local/lib/python3.7/site-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
    717                     ensure_min_features=ensure_min_features,
    718                     warn_on_dtype=warn_on_dtype,
--> 719                     estimator=estimator)
    720     if multi_output:
    721         y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False,

/usr/local/lib/python3.7/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    519                     "Reshape your data either using array.reshape(-1, 1) if "
    520                     "your data has a single feature or array.reshape(1, -1) "
--> 521                     "if it contains a single sample.".format(array))
    522 
    523         # in the future np.flexible dtypes will be handled like object dtypes

ValueError: Expected 2D array, got 1D array instead:
array=[ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
 49 50 51 52 53 54 55].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

Apparemment, X veut un tableau 2D. Certes, la référence sklearn indique également ce qui suit. Screen Shot 2020-01-31 at 21.57.12.png

Donc, bien que ce soit un peu difficile, préparez un tableau à deux dimensions.

X = []
for i in range(1,56):
    X.append([i])

C'est l'heure

reg = linear_model.LinearRegression()
 
Y = df['EXP']
#Créer un modèle prédictif
reg.fit(X, Y)
#Coefficient de régression
print(reg.coef_)
#Section
print(reg.intercept_)
#R2 (coefficient de décision)
print(reg.score(X, Y))
Screen Shot 2020-01-31 at 22.04.06.png

*** Yoshika a réussi l'analyse de régression! *** *** (La formule est écrite séparément dans le jupyter Markdown.)

Visualisez comme si vous respiriez.

plt.plot(df.index,df['EXP'],label="EXP")
plt.plot(X,reg.predict(X),label="LinearRegression")
plt.xlabel('LEVEL')
plt.ylabel('EXP')
plt.grid(True)

image.png

Ce n'est pas bien ... Certes, R2 est de 0,377, donc cela n'a aucun sens. (C'est bien, c'est juste étudier.)

Vient ensuite l'expérience cumulative requise pour atteindre un certain niveau

reg2 = linear_model.LinearRegression()
 
Y2 = df['CUMSUM_EXP']
#Créer un modèle prédictif
reg2.fit(X, Y2)
#Coefficient de régression
print(reg2.coef_)
#Section(Erreur)
print(reg2.intercept_)
#R2 (coefficient de décision)
print(reg2.score(X, Y2))
Screen Shot 2020-01-31 at 22.03.36.png

Visualisez pour respirer

image.png

C'est aussi complètement inutile ... Il est vrai que R2 est de 0,575, donc cela n'a aucun sens, bien que mieux qu'avant. (C'est bien, c'est juste étudier.)

Multidimensionnel

Il est clair que la formule linéaire n'est pas bonne, alors rendons-la multidimensionnelle.

Bidimensionnel

Commencez par créer une variable explicative

D1 = []
D2 = []
for i in range(1,56):
    D1.append(i)
    D2.append(i**2)
df_x = pd.DataFrame({"D1":D1,"D2":D2})
df_x.head()
Screen Shot 2020-01-31 at 22.22.33.png

Envoyez les données au linear_model de sklearn

Tout d'abord, la valeur d'expérience requise pour le niveau suivant

reg3 = linear_model.LinearRegression()
X3 =df_x
Y3 = df['EXP']
#Créer un modèle prédictif
reg3.fit(X3, Y3)
#Coefficient de régression
print(reg3.coef_)
#Section(Erreur)
print(reg3.intercept_)
#R2 (coefficient de décision)
print(reg3.score(X3, Y3))
Screen Shot 2020-01-31 at 22.25.28.png

Visualisez pour respirer

plt.plot(df.index,df['EXP'],label="EXP")
plt.plot(X,reg3.predict(X3),label="LinearRegression")
plt.xlabel('LEVEL')
plt.ylabel('EXP')
plt.grid(True)

image.png

R2 est 0,644, ce qui est mieux qu'avant, mais il est difficile de dire qu'il est toujours adapté.

Vient ensuite l'expérience cumulative requise pour atteindre un certain niveau

reg4 = linear_model.LinearRegression()
X4 =df_x
Y4 = df['CUMSUM_EXP']
#Créer un modèle prédictif
reg4.fit(X4, Y4)
#Coefficient de régression
print(reg4.coef_)
#Section(Erreur)
print(reg4.intercept_)
#R2 (coefficient de décision)
print(reg4.score(X4, Y4))
Screen Shot 2020-01-31 at 22.28.27.png

Visualisez pour respirer

plt.plot(df.index,df['CUMSUM_EXP'],label="CUMSUM_EXP")
plt.plot(X,reg4.predict(X4),label="LinearRegression")
plt.xlabel('LEVEL')
plt.ylabel('EXP')
plt.grid(True)

image.png

R2 est 0,860, donc ça a l'air plutôt bien, n'est-ce pas?

Après trois dimensions

Le programme est le même, donc seul le graphique en résulte.

3D

image.png

4 dimensions

image.png

Le cumulatif a été assez adapté. R2 est également jusqu'à 0,9733.

5 dimensions

image.png

N'est-il pas juste de dire que les deux sont presque en forme? R2 nécessite 0,961 d'expérience et 0,987 d'expérience cumulée pour atteindre le niveau suivant.

Et à la légende

Calculons la valeur d'expérience cumulée requise si le niveau maximum actuel 55 passe à 99 comme dans l'original.

La formule du modèle calculé est ici Screen Shot 2020-01-31 at 23.10.47.png

Si vous visualisez ceci

image.png

** Vous aurez besoin de près de 140 millions d'expériences (1 392 549 526) pour atteindre le niveau 99. (C'est une prédiction, une prédiction.) ** Au fait, la valeur d'expérience requise pour atteindre le niveau 55 est de 3,441,626 (environ 3,5 millions), il est donc nécessaire d'atteindre le niveau 55 404 fois.

66.311 pour le métal hoimin, 132.623 pour le métal errant, 904.252 pour le métal slime. Hmmm, nous devons dépasser les chiffres que le WWF est susceptible de déplacer.

Game Over

Recommended Posts

Trouvez un modèle mathématique de la valeur d'expérience requise pour améliorer la marche DQ (2)
Trouvez un modèle mathématique des valeurs d'expérience requises pour améliorer la marche DQ (1)
Somme des variables dans un modèle mathématique
J'ai fait une fonction pour vérifier le modèle de DCGAN
Comment trouver le coefficient de mise à l'échelle d'une ondelette bipolaire
J'ai essayé de prédire le nombre de personnes infectées au niveau national de la nouvelle corona avec un modèle mathématique