2016-10-01 27 views
0

我創建了高斯過程模型並用嘈雜的目標進行訓練。我實現了噪聲作爲一個參數的α[N_SAMPLES次]根據在過去的文檔scikit學習18.嘈雜目標的高斯過程的交叉驗證錯誤

model = GaussianProcessRegressor(kernel=kernel,n_restarts_optimizer=0, alpha=dy_train ** 2) 

它工作直到我想執行交叉驗證。它提出了一個錯誤,阿爾法參數和實際目標的長度不等於:

scores = cross_val_score(model, X_test, y_test) 
ValueError: alpha must be a scalar or an array with same number of entries as y.(35 != 10) 

我理解的錯誤,但我不知道如何正確定義的α向量交叉驗證。請提出任何建議?

感謝

回答

0

阿爾法應該是一些(和它的工作只是與您的代碼罰款)。您也可以擁有每個樣本的alpha值,但這對於.cross_val_score不起作用,因爲它不支持內部分片。此外,你正在使用的看起來像一個非常奇怪的啓發式來分配alpha。我很確定它不在scikitlearn文檔中的任何地方。爲了使用交叉驗證,您需要使用「完整」方法,該方法通過迭代cross validation iterators並自行平均。這幾乎是三行代碼,因此不應該是一個很大的負擔

from sklearn.model_selection import KFold 
import numpy as np 

kf = KFold(n_splits=10) 
scores = [] 
for train, test in kf.split(X): 
    model.fit(X_train) 
    scores.append(model.score(X_test, y_test)) 
print np.mean(scores) 
+0

謝謝你的解釋和代碼。這似乎很容易。你是什​​麼意思「非常奇怪的啓發式」?我將「alpha」參數理解爲表示目標數據不確定性的噪聲係數。由於每個採樣的噪聲方差發生變化,因此alpha參數是標準誤差的向量。因爲我是高斯過程迴歸和機器學習的初學者,所以對於如何正確模擬輸出數據的高斯噪聲的建議,我將不勝感激。 –

+0

通過非常奇怪的啓發式我的意思是將alpha設置爲目標值的平方(您現在通過傳遞dy_train ** 2) - 爲什麼要這樣做?除非您對數據有深入的瞭解,並且知道這正是依賴性值的行爲方式,否則我不會看到任何意見。它是**正則化**添加到訓練中的半定矩陣估計器。是的,這與噪音有關,但這種方式更加複雜,您提供的價值觀沒有意義。阿爾法應該很小... 1e-3 - 1e-5可能已經是一個很大的價值,你正在添加y ** 2. – lejlot

+0

我明白了,但是在GP模型中實現噪聲響應的正確方法是什麼? –