2014-08-31 15 views
5

Bir SVM regresyonu yaparken, giriş özelliklerini eğitimden önce ölçeklendirmeniz önerilir.Hedef nedenlerin ölçeklendirilmesi Scikit-öğrenmesi SVM gerilemesinin bozulması

Ancak hedeflerin ölçeklendirilmesine ne dersiniz? Genellikle bu gerekli görülmez ve neden gerekli olması gerektiğini iyi bir sebep görmüyorum.

Ancak gelen SVM regresyon için scikit-öğrenme örnekte: sadece eğitimden önce hat y = y/1000 tanıştırarak http://scikit-learn.org/stable/auto_examples/svm/plot_svm_regression.html

, tahmin sabit bir değere aşağı kıracak. Eğitimden önce hedef değişkeni ölçeklendirmek sorunu çözecektir, ancak neden gerekli olduğunu anlamıyorum.

Bu soruna neden olan nedir?

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() 

cevap

7

destek vektör regresyon tahmini değeri ve hedef arasındaki fark bir eşik değerini aşarsa, yalnızca pozitif olan bir kayıp fonksiyonunu kullanır. Eşiğin altında, tahmin "yeterince iyi" kabul edilir ve kayıp sıfırdır. Hedefleri düşürdüğünüzde, SVM öğreneni artık düz bir modele dönmekten kurtulabilir, çünkü artık herhangi bir kayıp yaşamaz.

Eşik parametresi, sklearn.svm.SVR; epsilon; Daha küçük hedefler için daha düşük bir değere ayarlayın. Bunun arkasındaki matematik here açıklanmaktadır.

+0

Evet, cevabınız için teşekkür ederim. Bu nedenle, genel bir model için seçenekler hedefi ölçeklendirmek veya ızgara aramamda epsilonu dahil etmektir. Daha mantıklı olan bir tavsiyen var mı? – user1774143

+1

@ user1774143 Sağa 'epsilon' için ızgara arama. 'Y' ölçeklendirme eşdeğerdir, ancak hataya eğilimlidir. –

İlgili konular