Quando si allena una regressione SVM, in genere è consigliabile ridimensionare le caratteristiche dell'input prima dell'allenamento.Il ridimensionamento del target causa Scikit: impara la regressione SVM al guasto
Ma che dire del ridimensionamento degli obiettivi? Di solito questo non è considerato necessario, e non vedo una buona ragione per cui dovrebbe essere necessario.
Tuttavia nell'esempio scikit-learn per SVM regressione da: http://scikit-learn.org/stable/auto_examples/svm/plot_svm_regression.html
Semplicemente introducendo la linea y = y/1000 prima dell'allenamento, la predizione si rompe a un valore costante. Scalare la variabile target prima dell'allenamento risolverebbe il problema, ma non capisco perché sia necessario.
Quali sono le cause di questo problema?
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
# Generate sample data
X = np.sort(5 * np.random.rand(40, 1), axis=0)
y = np.sin(X).ravel()
# Add noise to targets
y[::5] += 3 * (0.5 - np.random.rand(8))
# Added line: this will make the prediction break down
y=y/1000
# Fit regression model
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)
# look at the results
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()
Ecco, grazie per la risposta. Quindi, per un modello generico, le opzioni sono di ridimensionare l'obiettivo o di includere epsilon nella mia ricerca di griglia. Hai un consiglio che cosa ha più senso? – user1774143
@ user1774143 Grid-search per il corretto 'epsilon'. La scala 'y' è equivalente, ma soggetta a errori. –