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)
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
df = pd.read_csv('data.csv',names=['EXP'])
df['CUMSUM_EXP'] = df['EXP'].cumsum()
df.index = df.index + 1
df.head()
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.
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))
*** Yoshika a réussi l'analyse de régression! *** *** (La formule est écrite séparément dans le jupyter Markdown.)
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)
Ce n'est pas bien ... Certes, R2 est de 0,377, donc cela n'a aucun sens. (C'est bien, c'est juste étudier.)
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))
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.)
Il est clair que la formule linéaire n'est pas bonne, alors rendons-la multidimensionnelle.
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()
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))
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)
R2 est 0,644, ce qui est mieux qu'avant, mais il est difficile de dire qu'il est toujours adapté.
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))
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)
R2 est 0,860, donc ça a l'air plutôt bien, n'est-ce pas?
Le programme est le même, donc seul le graphique en résulte.
Le cumulatif a été assez adapté. R2 est également jusqu'à 0,9733.
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.
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
Si vous visualisez ceci
** 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