Podczas treningu regresji maszyny SVM zwykle zaleca się skalowanie elementów wejściowych przed treningiem.Skalowanie celu powoduje naukową regresję SVM dla Scikita, aby się zepsuć.
Ale co z skalowaniem celów? Zwykle nie jest to uważane za konieczne i nie widzę dobrego powodu, dla którego powinno to być konieczne.
Jednakże w przykładzie scikit-learn w SVM regresji z: http://scikit-learn.org/stable/auto_examples/svm/plot_svm_regression.html
tylko przez wprowadzenie do linii y = y/1000 przed szkolenia przewidywania zepsuje się do stałej wartości. Skalowanie zmiennej docelowej przed treningiem rozwiązałoby problem, ale nie rozumiem, dlaczego jest to konieczne.
Co powoduje ten problem?
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()
To było to, dziękuję za odpowiedź. Tak więc w przypadku modelu generycznego dostępne są opcje skalowania obiektu docelowego lub uwzględnienia epsilon w moim przeszukiwaniu siatki. Czy masz radę, co ma więcej sensu? – user1774143
@ user1774143 Wyszukiwanie siatki dla prawego 'epsilon'. Skalowanie "y" jest równoważne, ale podatne na błędy. –