[PYTHON] Multivariables Regressionsmodell mit Scikit-Learn - Ich habe versucht, SVR zu vergleichen und zu verifizieren

Einführung

Ich versuche, ein multivariates Regressionsmodell zu erstellen, und ich möchte einige der vielen Methoden des maschinellen Lernens aufgreifen und die Genauigkeit vergleichen und überprüfen.

scikit-learn ist eine Python-Bibliothek für maschinelles Lernen, die auf verschiedene Arten implementiert ist und praktisch ist. Deshalb habe ich versucht, sie schnell zu verwenden.

Erste Demo

Das Folgende wird in Beispielen vorgestellt


import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
%matplotlib inline

#Eingabe mit Zufallszahlen generieren
X = np.sort(5 * np.random.rand(40, 1), axis=0)
#Die Ausgabe ist eine Sinusfunktion
y = np.sin(X).ravel()

#Fügen Sie dem Ausgang Rauschen hinzu
y[::5] += 3 * (0.5 - np.random.rand(8))

#RBF-Kernel, linear, Polypoly-Anpassung
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_lin = SVR(kernel='linear', C=1e3)
svr_poly = SVR(kernel='poly', C=1e3, degree=2)
y_rbf = svr_rbf.fit(X, y).predict(X)
y_lin = svr_lin.fit(X, y).predict(X)
y_poly = svr_poly.fit(X, y).predict(X)

#Erstellen Sie ein Diagramm
plt.figure(figsize=[10, 5])
plt.scatter(X, y, c='k', label='data')
plt.hold('on')
plt.plot(X, y_rbf, c='g', label='RBF model')
plt.plot(X, y_lin, c='r', label='Linear model')
plt.plot(X, y_poly, c='b', label='Polynomial model')
plt.xlabel('data')
plt.ylabel('target')
plt.title('Support Vector Regression')
plt.legend()
plt.show()

Ergebnis: svm.png

Ich habe es tatsächlich versucht

Bedingungen


import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt

#Eingabe richtig generieren
X1 = np.sort(5 * np.random.rand(40, 1).reshape(40), axis=0)
X2 = np.sort(3 * np.random.rand(40, 1).reshape(40), axis=0)
X3 = np.sort(9 * np.random.rand(40, 1).reshape(40), axis=0)
X4 = np.sort(4 * np.random.rand(40, 1).reshape(40), axis=0)

#Integrieren Sie das Array von Eingängen in einem
X = np.c_[X1, X2, X3, X4]

#Ausgabe berechnen
y = np.sin(X1).ravel() + np.cos(X2).ravel() + np.sin(X3).ravel() - np.cos(X4).ravel()

y_o = y.copy()

#Rauschen hinzufügen
y[::5] += 3 * (0.5 - np.random.rand(8))

#passend zu
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_lin = SVR(kernel='linear', C=1e3)
svr_poly = SVR(kernel='poly', C=1e3, degree=3)
y_rbf = svr_rbf.fit(X, y).predict(X)
y_lin = svr_lin.fit(X, y).predict(X)
y_poly = svr_poly.fit(X, y).predict(X)

#Bereiten Sie die Testdaten vor
test_X1 = np.sort(5 * np.random.rand(40, 1).reshape(40), axis=0)
test_X2 = np.sort(3 * np.random.rand(40, 1).reshape(40), axis=0)
test_X3 = np.sort(9 * np.random.rand(40, 1).reshape(40), axis=0)
test_X4 = np.sort(4 * np.random.rand(40, 1).reshape(40), axis=0)

test_X = np.c_[test_X1, test_X2, test_X3, test_X4]
test_y = np.sin(test_X1).ravel() + np.cos(test_X2).ravel() + np.sin(test_X3).ravel() - np.cos(test_X4).ravel()

#Versuchen Sie zu schätzen, indem Sie die Testdaten eintauchen
test_rbf = svr_rbf.predict(test_X)
test_lin = svr_lin.predict(test_X)
test_poly = svr_poly.predict(test_X)

Unten Verifikation


from sklearn.metrics import mean_squared_error
from math import sqrt

#Berechnung des Korrelationskoeffizienten
rbf_corr = np.corrcoef(test_y, test_rbf)[0, 1]
lin_corr = np.corrcoef(test_y, test_lin)[0, 1]
poly_corr = np.corrcoef(test_y, test_poly)[0, 1]

#RMSE berechnen
rbf_rmse = sqrt(mean_squared_error(test_y, test_rbf))
lin_rmse = sqrt(mean_squared_error(test_y, test_lin))
poly_rmse = sqrt(mean_squared_error(test_y, test_poly))

print "RBF: RMSE %f \t\t Corr %f" % (rbf_rmse, rbf_corr)
print "Linear: RMSE %f \t Corr %f" % (lin_rmse, lin_corr)
print "Poly: RMSE %f \t\t Corr %f" % (poly_rmse, poly_corr)

Ich habe dieses Ergebnis erhalten



RBF: RMSE 0.707305 		 Corr 0.748894
Linear: RMSE 0.826913 	 Corr 0.389720
Poly: RMSE 2.913726 	 Corr -0.614328

Recommended Posts

Multivariables Regressionsmodell mit Scikit-Learn - Ich habe versucht, SVR zu vergleichen und zu verifizieren
[Python] Lineare Regression mit Scicit-Learn
Robuste lineare Regression mit Scikit-Learn
Lassen Sie uns die Hyperparameter des Modells mit scikit-learn abstimmen!
Regressionsmodell mit Scikit-Learn und dessen Visualisierung
Vorhersage des heißen Sommers mit linearem Regressionsmodell
Implementieren Sie mit stan ein zeitdiskretes logistisches Regressionsmodell
Isomap mit Scikit-lernen
DBSCAN mit Scikit-Learn
PCA mit Scikit-Learn
kmeans ++ mit scikit-learn
Lösen des Irisproblems mit scikit-learn ver1.0 (logistische Regression)