Возникла проблема с выводом данных CSV с помощью xgboost.Python

Программы на Python
Anonymous
Возникла проблема с выводом данных CSV с помощью xgboost.

Сообщение Anonymous »

У меня возникла проблема при выводе с помощью xgboost. Я новичок в xgboost. Возможно, я допустил некоторые ошибки низкого уровня, надеюсь на помощь, спасибо!
Короче, я хочу выполнить задачу регрессии с помощью xgboost, состоящую из нескольких наборы данных csv. Я объединил их в фрейм данных и разделил train/val/test с помощью train_test_split. Модель работала хорошо (mae: 0,6). Но когда я вручную разделил обучающий набор и тестовый набор (я выбрал часть CSV и поместил ее в папку тестов), результаты стали очень плохими (мэй: 12+).
Мне действительно интересно, что здесь произошло? Я разместил часть кода ниже.
1: Вот код разделения с помощью train_test_split:

Код: Выделить всё

# ready for data
datasets = []
path = '../data/low_fidelity_chips_res'
for filename in os.listdir(path):
if filename.endswith(".csv"):
dataset = ThermalDataset(os.path.join(path, filename))
datasets.append(dataset)

# combine dataset
[merged_dataset = pd.concat([pd.DataFrame(dataset.X) for dataset in datasets])
merged_targets = pd.concat([pd.DataFrame(dataset.y) for dataset in datasets])
X_scaled = scaler.fit_transform(merged_dataset)
y_scaled = scaler.fit_transform(merged_targets)

# divide
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_scaled, test_size=0.2, random_state=11)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.1, random_state=11)

# build xgboost model
model = xgb.XGBRegressor(tree_method='gpu_hist', gpu_id=device.index, n_estimators=500, learning_rate=0.05, max_depth=8)
model.fit(X_train, y_train)

# evaluation
y_val_pred = scaler.inverse_transform(y_val_pred_scaled.reshape(-1, 1)).flatten()
y_test_pred = scaler.inverse_transform(y_test_pred_scaled.reshape(-1, 1)).flatten()
y_val_original = scaler.inverse_transform(y_val.reshape(-1, 1)).flatten()
y_test_original = scaler.inverse_transform(y_test.reshape(-1, 1)).flatten()
val_mse = mean_squared_error(y_val_original, y_val_pred)
test_mse = mean_squared_error(y_test_original, y_test_pred)
val_mae = mean_absolute_error(y_val_original, y_val_pred)
test_mae = mean_absolute_error(y_test_original, y_test_pred)]
2: Вот мое ручное разделение после кода:

Код: Выделить всё

`# Training dataset
datasets = []
path = '../data/low_fidelity_chips_res'
for filename in os.listdir(path):
if filename.endswith(".csv"):
dataset = ThermalDataset(os.path.join(path, filename))
datasets.append(dataset)

# testing data which is a csv from the testing set that I manually partitioned from the original data
tests = []
test_file = '../data/test_xgboost/Thermal014withMidPos.csv'
test = ThermalDataset(test_file)
tests.append(test)

# combine
merged_dataset = pd.concat([pd.DataFrame(dataset.X) for dataset in datasets])
merged_targets = pd.concat([pd.DataFrame(dataset.y) for dataset in datasets])
test_x = pd.concat([pd.DataFrame(test.X) for test in tests])
test_y = pd.concat([pd.DataFrame(test.y) for test in tests])

# normalization
X_scaled = scaler.fit_transform(merged_dataset)
y_scaled = scaler.fit_transform(merged_targets)
x_fill = scaler.fit_transform(test_x)
y_fill = scaler.fit_transform(test_y)

# split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y_scaled, test_size=0.05, random_state=11)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.1, random_state=11)

# train
model = xgb.XGBRegressor(tree_method='gpu_hist', gpu_id=device.index, n_estimators=500, learning_rate=0.05, max_depth=8)
model.fit(X_train, y_train)

# evaluation
y_val_pred_scaled = model.predict(X_val)
y_test_pred_scaled = model.predict(X_test)
y_fill_res = model.predict(x_fill)

# inverse_transform to get original data
y_val_pred = scaler.inverse_transform(y_val_pred_scaled.reshape(-1, 1)).flatten()
y_test_pred = scaler.inverse_transform(y_test_pred_scaled.reshape(-1, 1)).flatten()
y_pre = scaler.inverse_transform(y_fill_res.reshape(-1, 1)).flatten()
y_val_original = scaler.inverse_transform(y_val.reshape(-1, 1)).flatten()
y_test_original = scaler.inverse_transform(y_test.reshape(-1, 1)).flatten()
y_fill = scaler.inverse_transform(y_fill.reshape(-1, 1)).flatten()
val_mse = mean_squared_error(y_val_original, y_val_pred)
test_mse = mean_squared_error(y_test_original, y_test_pred)
val_mae = mean_absolute_error(y_val_original, y_val_pred)
test_mae = mean_absolute_error(y_pre, y_fill)`
Я ожидаю, что смогу правильно рассуждать на основе одного CSV-файла и получу такой же хороший результат, как и во время обучения.

Подробнее здесь: https://stackoverflow.com/questions/785 ... th-xgboost

Вернуться в «Python»