Da wir die Daten beim letzten Mal überprüft haben, besteht der nächste Schritt darin, das mathematische Modell zu berechnen. (Ich studiere gerade, daher würde ich mich freuen, wenn Sie auf Fehler hinweisen könnten.)
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']
#Erstellen Sie ein Vorhersagemodell
reg.fit(X, Y)
#Regressionskoeffizienten
print(reg.coef_)
#Sektion
print(reg.intercept_)
#R2 (Entscheidungskoeffizient)
print(reg.score(X, Y))
*** Ich erhalte eine Fehlermeldung über das Ausführungsergebnis von jupyter !! ***
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-54-69fa63dab1be> in <module>
6 Y = df['EXP']
7 #Erstellen Sie ein Vorhersagemodell
----> 8 reg.fit(X, Y)
9 #Regressionskoeffizienten
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.
Anscheinend will X ein 2D-Array. In der sklearn-Referenz heißt es natürlich auch wie folgt.
Obwohl es etwas rau ist, werde ich ein zweidimensionales Array vorbereiten.
X = []
for i in range(1,56):
X.append([i])
Es ist Zeit
reg = linear_model.LinearRegression()
Y = df['EXP']
#Erstellen Sie ein Vorhersagemodell
reg.fit(X, Y)
#Regressionskoeffizienten
print(reg.coef_)
#Sektion
print(reg.intercept_)
#R2 (Entscheidungskoeffizient)
print(reg.score(X, Y))
*** Yoshika hat die Regressionsanalyse erfolgreich abgeschlossen! *** *** (Die Formel wird im Jupyter Markdown separat geschrieben.)
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)
Das ist nicht gut ... Sicherlich ist R2 0,377, also macht es keinen Sinn. (Es ist gut, das ist nur Lernen.)
reg2 = linear_model.LinearRegression()
Y2 = df['CUMSUM_EXP']
#Erstellen Sie ein Vorhersagemodell
reg2.fit(X, Y2)
#Regressionskoeffizienten
print(reg2.coef_)
#Sektion(Error)
print(reg2.intercept_)
#R2 (Entscheidungskoeffizient)
print(reg2.score(X, Y2))
Das ist auch völlig nutzlos ... Es ist wahr, dass R2 0,575 ist, also macht es keinen Sinn, wenn auch besser als zuvor. (Es ist gut, das ist nur Lernen.)
Es ist klar, dass die lineare Gleichung nicht gut ist, also machen wir sie mehrdimensional.
Erstellen Sie zunächst eine erklärende Variable
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']
#Erstellen Sie ein Vorhersagemodell
reg3.fit(X3, Y3)
#Regressionskoeffizienten
print(reg3.coef_)
#Sektion(Error)
print(reg3.intercept_)
#R2 (Entscheidungskoeffizient)
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 ist 0,644, was besser als zuvor ist, aber es ist schwer zu sagen, dass es immer noch passt.
reg4 = linear_model.LinearRegression()
X4 =df_x
Y4 = df['CUMSUM_EXP']
#Erstellen Sie ein Vorhersagemodell
reg4.fit(X4, Y4)
#Regressionskoeffizienten
print(reg4.coef_)
#Sektion(Error)
print(reg4.intercept_)
#R2 (Entscheidungskoeffizient)
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 ist 0,860, also sieht es ziemlich gut aus, nicht wahr?
Das Programm ist das gleiche, daher wird nur das Diagramm angezeigt.
Die kumulative hat ziemlich gut gepasst. R2 ist auch bis zu 0,9733.
Ist es nicht fair zu sagen, dass beide fast fit sind? R2 erfordert 0,961 Erfahrung und kumulative Erfahrung 0,987, um das nächste Level zu erreichen.
Berechnen wir den erforderlichen kumulativen Erfahrungswert, wenn die aktuelle maximale Stufe 55 wie im Original auf 99 steigt.
Die berechnete Modellformel finden Sie hier
Wenn Sie sich das vorstellen
** Sie benötigen fast 140 Millionen Erfahrungen (1.392.549.526), um Level 99 zu erreichen. (Es ist eine Vorhersage, eine Vorhersage.) ** Übrigens beträgt der Erfahrungswert, der erforderlich ist, um Stufe 55 zu erreichen, 3.441.626 (ungefähr 3,5 Millionen), daher ist es notwendig, Stufe 55 404 Mal zu erreichen.
66.311 für Metall-Hoimin, 132.623 für Streumetall, 904.252 für Metallschleim. Hmmm, wir müssen die Zahlen überschreiten, die der WWF wahrscheinlich bewegen wird.
Game Over
Recommended Posts