sklearn случайный поиск леса для параметров модели для модели, которая будет предсказывать непрерывные временные переменные - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь предсказать наилучшие параметры для случайного леса RandomizedSearchCV, который должен предсказывать непрерывную переменную.

Я рассматривал следующий подход, в частности, изменение скоринг функция и в конечном итоге расчет для регрессионной логистической функции median_absolute_error .Тем не менее, я думаю, что перекрестная проверка KFold не подходит для моих данных, но я не понимаю, как я могу, например, использовать повторяемое резюме (https://scikit -learn.org / stable / modules / generate / sklearn.model_selection.RandomizedSearchCV.html ), поскольку я не могу запустить (насколько я понимаю) подходит и прогнозируют в моей модели до RandomizedSearchCV

def my_custom_score(y_true, y_pred, dates_, features, labels):
    return median_absolute_error(y_true, y_pred)

...
for i in range(0, 3): #predict 3 10-point intervals
    prediction_colour = ['g','r','c','m','y','k','w'][i%7]

    date_for_test = randint(11, 200) #end of the trend
    dates_for_test = range(date_for_test-10, date_for_test) #one predicted interval should have 10 date points

    for idx, date_for_test_ in enumerate(sorted(dates_for_test, reverse=True)):
        train_features = features[sorted(dates_for_test, reverse=True)[0]-2:]
        train_labels = labels[sorted(dates_for_test, reverse=True)[0]-2:]
        test_features = np.atleast_2d(features[date_for_test_])
        test_labels = labels[date_for_test_] if date_for_test != 0 else 1.0

        rf = RanzomForestRegressor(bootstrap=False, criterion='mse', max_features=5, min_weight_fraction_leaf=0, n_jobs=1, oob_score=False, random_state=None, verbose=0, warm_start=False)
        parameters = {"max_leaf_nodes": [2,5,10,15,20,25,30,35,40,45,50], "min_samples_leaf": [1,50,100,150,200,250,300,350,400,450,500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000], "min_samples_split": [2,50,100,150,200,250,300,350,400,450,500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000], 'n_estimators': [10, 100, 250, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500, 2750, 3000, 3250, 3500, 3750, 4000, 4250, 4500, 4750, 5000, 5250, 5500, 5750, 6000, 6250, 6500, 6750, 7000, 7250, 7500, 7750, 8000, 8250, 8500, 8750, 9000, 9250, 9500, 9750, 10000], 'max_depth':[1,50,100,150,200,250,300,350,400,450,500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000]}
        grid_search = RandomizedSearchCV(cv=5, estimator=rf, param_distributions=parameters, n_iter=10, scoring=make_scorer(median_absolute_error))#, scoring=make_scorer(lambda x,y: my_custom_score(x, y, sorted(dates_for_test, reverse=True), features, labels), greater_is_better=False)))

        grid_search.fit(train_features, train_labels)

        rf = grid_search.best_estimator_
        best_parameters=rf.get_params()
        print ("best parameters")
        for param_name in sorted(parameters.keys()):
            print("\t%s: %r" % (param_name, best_parameters[param_name]))

        predictions = rf.predict(test_features)

Кроме того, при текущем подходе я получаю то же самое непрерывное значение, предсказанное на временных выборках временных данных из выборки нескольких дат в будущем (разные цвета на графике):

enter image description here

Документация достаточно подробная по этому вопросу, но я считаю ее слишком подробной.Я просто заблудился там.Может быть, кто-то может указать в правильном направлении?

...