2016-10-01 2 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

Альфа должен быть ряд (и это будет прекрасно работать с кодом). Вы также можете иметь альфа-образец, но это не будет работать с .cross_val_score, так как у него нет поддержки среза внутри. Кроме того, то, что вы используете, похоже на чрезвычайно необычную эвристику для присвоения альфы. Я уверен, что это нигде в документации 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

Благодарим за объяснение и за код. Кажется, это довольно легко. Что значит «необычайно эвристический»? Я понимаю, что параметр «альфа» является коэффициентом шума, который представляет собой неопределенность целевых данных. Поскольку дисперсия шума изменяется на образец, альфа-параметр является вектором стандартных ошибок. Поскольку я начинаю регрессию и машинное обучение в гауссовском процессе, я был бы благодарен за любое предложение о правильном моделировании гауссовского шума выходных данных. –

+0

Чрезвычайно нечетным эвристическим я имею в виду настройку альфы на квадрат целевых значений (что вы делаете прямо сейчас - путем передачи dy_train ** 2) - зачем вам это делать? Я не вижу смысла, если у вас нет какой-либо серьезной проницательности в данных и знаю, что это именно то, как ведет себя зависимое значение. Это ** регуляризация ** добавляется к полуопределенной матричной оценке при обучении. Да, это связано с шумом, но это намного сложнее, и предоставленные вами значения не имеют никакого смысла. Alpha должна быть небольшой ... 1e-3 - 1e-5 может быть уже большой ценностью, и вы добавляете y ** 2. – lejlot

+0

Я понимаю, но каков правильный способ реализовать шумный ответ в модели GP? –

Смежные вопросы