Untitled
Guest 72 18th Jan, 2025
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
from xgboost import XGBRegressor
import joblib
# 1. Wczytanie danych
file_path = 'nazwa_pliku.csv' # Zmień na właściwą ścieżkę do pliku
data = pd.read_csv(file_path)
# 2. Wstępne przetwarzanie danych
# Sprawdzenie brakujących wartości
print("Missing values per column:")
print(data.isnull().sum())
# Uzupełnienie brakujących wartości, np. średnią (lub zastosuj inną metodę według potrzeb)
data.fillna(data.mean(), inplace=True)
# Tworzenie nowych cech (opcjonalnie)
if 'Date' in data.columns:
data['Date'] = pd.to_datetime(data['Date'])
data['Day'] = data['Date'].dt.day
data['Month'] = data['Date'].dt.month
data['Year'] = data['Date'].dt.year
# Tworzenie opóźnionych wartości
data['Close_Lag_1'] = data['Close'].shift(1)
data['Close_Lag_2'] = data['Close'].shift(2)
# Usunięcie wierszy z brakującymi wartościami po stworzeniu lag features
data.dropna(inplace=True)
# Rozdzielenie cech i zmiennej docelowej
X = data.drop(columns=['Close', 'Date'], errors='ignore')
y = data['Close']
# Podział na zbiór treningowy i testowy
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Normalizacja cech
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 3. Trening modelu XGBoost
model = XGBRegressor(n_estimators=100, learning_rate=0.1, max_depth=6, random_state=42)
model.fit(X_train_scaled, y_train)
# 4. Ewaluacja modelu
y_pred = model.predict(X_test_scaled)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error (MSE) on test set: {mse}")
# 5. Znaczenie cech
importance = model.feature_importances_
print("\nFeature Importances:")
for i, v in enumerate(importance):
print(f"Feature: {X.columns[i]}, Importance: {v}")
# 6. Hyperparameter Tuning
param_grid = {
'n_estimators': [50, 100, 200],
'max_depth': [3, 5, 7],
'learning_rate': [0.01, 0.1, 0.2]
}
grid_search = GridSearchCV(XGBRegressor(random_state=42), param_grid, cv=3, scoring='neg_mean_squared_error')
grid_search.fit(X_train_scaled, y_train)
print("\nBest Parameters from Grid Search:")
print(grid_search.best_params_)
# 7. Ewaluacja z walidacją krzyżową
final_model = grid_search.best_estimator_
scores = cross_val_score(final_model, X_train_scaled, y_train, cv=5, scoring='neg_mean_squared_error')
print(f"\nCross-validated Mean Squared Error: {-scores.mean()}")
# 8. Zapis modelu
joblib.dump(final_model, 'xgboost_close_model.pkl')
print("\nModel saved as 'xgboost_close_model.pkl'")
To share this paste please copy this url and send to your friends
RAW Paste Data