Необходимость разбиения набора данных на test и train при прогнозировании значений
Использую статистические модели (множественная линейная регрессия, регрессионное дерево, случайный лес, ближайшего соседа) для прогноза распределения снега по долине на основе характеристик рельефа в точках измерений. Делаю это для нескольких лет наблюдений.
Имеющиеся данные включают координаты точек, высоту снега в ней, характеристики рельефа (высота, крутизна, экспозиция, кривизна поверхности и др) в этих точках. Типы переменных - int и float. Точки распределены хаотично в пределах долины. В разные годы количество точек 300-400.
Прогноз делается для точек, равномерно распределенных по долине. Если объяснять картографически, то на карту местности наложена сетка и для узлов сетки делается прогноз высоты снега. Для этих узлов с цифровых моделей рельефа получены значения тех же характеристик рельефа. Количество узлов - около 1000.
ВОПРОС: при составлении указанных моделей нужно ли делить набор данных на test и train выборки? Ведь по сути мой test - первичные данные из независимых и зависимой переменной (высота снега), на основе которых я получаю либо уравнение МЛР, либо регрессионное дерево, и т.д. Подставляя в полученную модель характеристики рельефа в узлах сетки (которая и есть train-выборка), я получаю прогноз.
Исправьте меня, если моя логика неверна или следует идти иным путем. Буду благодарен советами по наполнению кода.
Часть кода для регрессионного дерева:
`
independent_variables = ["Z", "S", "C", "A", "Sx", "NR"]
X = df[independent_variables]
y = df['Snow_m']
X_train = X
y_train = y
# Обучение
path = DecisionTreeRegressor(random_state=5, criterion='squared_error',
min_samples_leaf=2).cost_complexity_pruning_path(X_train, y_train)
ccp_alphas, impurities = path.ccp_alphas, path.impurities
ccp_alphas = np.insert(ccp_alphas, 0, 0)
param_grid_tree = {
'max_depth': range(5, 20),
'ccp_alpha': ccp_alphas,
'min_samples_split': [2, 5, 10],
}
kf = KFold(n_splits=10, shuffle=True, random_state=5)
grid_search_tree = GridSearchCV(DecisionTreeRegressor(random_state=5,
criterion='squared_error'),
param_grid_tree,
scoring='neg_mean_squared_error',
cv=kf,
n_jobs=-1,
verbose=1)
grid_search_tree.fit(X_train, y_train)
# Поиск наилучшего дерева
best_tree = grid_search_tree.best_estimator_
best_params_tree = grid_search_tree.best_params_`
Распределение точек измерений на местности:
распределение узлов, для которых делается прогноз: