我試圖通過一個玩具示例來獲得SVM迴歸的感覺。我生成了1到100之間的隨機數作爲預測變量,然後記錄它們的日誌並添加高斯噪聲來創建目標變量。這個數據彈出到sklearn的SVR模塊產生一個合理的期待型號:通過添加多項式特徵損壞了SVM迴歸
然而,當我在原來的預測變量的平方扔增加訓練數據,一切都亂了套:
我知道RBF內核的功能類似於採用原始功能的功能,所以投入第二個功能大多是多餘的。但是,SVM在處理特徵冗餘方面是否真的很糟糕?或者我做錯了什麼?
這裏是我用來生成這些圖形代碼:
from sklearn.svm import SVR
import numpy as np
import matplotlib.pyplot as plt
# change to highest_power=2 to get the bad model
def create_design_matrix(x_array, highest_power=1):
return np.array([[x**k for k in range(1, highest_power + 1)] for x in x_array])
N = 1000
x_array = np.random.uniform(1, 100, N)
y_array = np.log(x_array) + np.random.normal(0,0.2,N)
model = SVR(C=1.0, epsilon=0.1)
print model
X = create_design_matrix(x_array)
#print X
#print y_array
model = model.fit(X, y_array)
test_x = np.linspace(1.0, 100.0, num=10000)
test_y = model.predict(create_design_matrix(test_x))
plt.plot(x_array, y_array, 'ro')
plt.plot(test_x, test_y)
plt.show()
我會很感激這種神祕任何幫助!
你有沒有亂用C? – NBartley
是的,我嘗試C的值從0.01到1000(和epsilon一起玩),但無法獲得合理的曲線。 – Site