{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":84253,"databundleVersionId":9421888,"sourceType":"competition"}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.model_selection import KFold\nfrom sklearn.linear_model import Ridge, ElasticNet\nfrom sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn import feature_selection\nimport numpy as np\n\n# Load the datasets\ntrain = pd.read_csv('/kaggle/input/first-steps-in-data-science-new/train (7).csv')\ntest = pd.read_csv('/kaggle/input/first-steps-in-data-science-new/test (4).csv')\n\n# Prepare the data\ntrain_data = train.iloc[:, :-1]\ntrain_target = train.iloc[:, -1]\n\n# Perform Recursive Feature Elimination (RFE)\nestimator = Ridge(alpha=1.0)  # Change base estimator if desired\nselector = feature_selection.RFECV(estimator)\nselector.fit(train_data, train_target)\nrfe_train_data = train_data.iloc[:, selector.support_]\ntest_data = test.iloc[:, selector.support_]\n\n# Initialize variables for cross-validation\nn_folds = 100\nweights = []\nkf = KFold(n_splits=n_folds, shuffle=True, random_state=42)\ntest_preds = np.zeros((test_data.shape[0],))\n\n# Change the meta model here (e.g., RandomForestRegressor or GradientBoostingRegressor)\nmeta_model = GradientBoostingRegressor(n_estimators=100, random_state=42)\n\n# Perform cross-validation with the chosen meta model\nfor fold, (train_idx, val_idx) in enumerate(kf.split(rfe_train_data)):\n    X_train, y_train = rfe_train_data.iloc[train_idx], train_target.iloc[train_idx]\n    X_val, y_val = rfe_train_data.iloc[val_idx], train_target.iloc[val_idx]\n\n    meta_model.fit(X_train, y_train)\n\n    val_preds = meta_model.predict(X_val)\n    fold_rmse = mean_squared_error(y_val, val_preds, squared=False)\n    weights.append(1 / fold_rmse)\n    print(f'Fold {fold+1} RMSE: {fold_rmse}')\n    test_preds += meta_model.predict(test_data) * weights[fold]\n\n# Average the predictions using the calculated weights\ntest_preds /= sum(weights)\n\n# Output the final predictions\nprint(test_preds)\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]}]}