from sklearn.linear_model import LinearRegression, HuberRegressor, RidgeCV from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import GridSearchCV, LeaveOneOut alphas_cv = [0.05, 0.1, 0.5, 1.0, 5.0, 10.0, 50.0, 100.0] rf = RandomForestRegressor(random_state=42) loocv = LeaveOneOut() # Define strict parameters for RandomForest to prevent overfitting rf_params = { 'n_estimators': [50, 100], 'max_depth': [2, 3, 4], 'min_samples_leaf': [3, 5, 7], # Crucial for small datasets 'min_samples_split': [4, 6, 8], 'max_features': ['sqrt', 'log2', 0.5], # Increases tree diversity } models = { "lr": LinearRegression(), "huber": HuberRegressor(max_iter=5000, tol=1e-3, alpha=0.001), "ridgecv": RidgeCV(alphas=alphas_cv), "rf": GridSearchCV( estimator=rf, param_grid=rf_params, cv=loocv, scoring='neg_mean_squared_error', verbose=1, n_jobs=-1 ), }