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.
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:
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