{"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"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# essential tools\nimport pandas as pd\nimport numpy as np\nimport pickle\nfrom sklearn.ensemble import RandomForestClassifier\nfrom datetime import datetime\nfrom sklearn.decomposition import PCA\nfrom sklearn.model_selection import cross_val_score\n\n# import train data set, identify X and y\ndata = pd.read_csv('/kaggle/input/Kannada-MNIST/train.csv')\nX = data[data.columns[1:]]\ny = data[data.columns[0]]\n\n# import test data set, set aside nominal id values\ntest_data = pd.read_csv('/kaggle/input/Kannada-MNIST/test.csv')\ntest_ids = test_data[test_data.columns[0]]\nX_test = test_data[test_data.columns[1:]]\n\n# merge train and test data sets for PCA\nall_data = pd.concat([data, test_data], axis=0, ignore_index=True)\nall_data.drop(columns=['id'], inplace=True)\nall_data.reset_index(drop=True, inplace=True)\n\n# break out independent features, create PCA transformer instance\nX_full = all_data[all_data.columns[1:]]\ny_full = all_data[all_data.columns[0]]\nprincipal_components = PCA(n_components=0.95,\n                           svd_solver='full')\n\n# fit PCA transformer and report out times/speeds\npca_start=datetime.now()\nprincipal_components.fit(X_full)\npca_end=datetime.now()\nprint(f'\\nPCA Fitting - Start Time: {pca_start}')\nprint(f'PCA Fitting - End Time: {pca_end}')\nprint(f'PCA - Time to Fit: {pca_end-pca_start}')\n\n# transform training indepdent features with PCA transformer\n# report out times/speeds\nX_pca = principal_components.transform(X)\n\n# create new RandomForestClassifier instance, fit w/ transformed train data, report out times/speeds\nrandomforest2 = RandomForestClassifier(n_estimators=10,\n                                      max_features='sqrt',\n                                      bootstrap=True,\n                                      n_jobs=1,\n                                      random_state=0)\nrf2_start=datetime.now()\nrandomforest2.fit(X_pca, y)\nrf2_end=datetime.now()\nprint(f'\\nRandom Forest w/ PCA Fitting - Start Time: {rf2_start}')\nprint(f'Random Forest w/ PCA Fitting - End Time: {rf2_end}')\nprint(f'Random Forest w/ PCA - Time to Fit: {rf2_end-rf2_start}')\n\nrf2_score_start=datetime.now()\ncv_scores = cross_val_score(randomforest2, X_pca, y)\navg_cv_score = np.mean(cv_scores)\nrf2_score_end=datetime.now()\n\nprint(f'\\nRandom Forest Scoring - Start Time: {rf2_score_start}')\nprint(f'Random Forest Scoring - End Time: {rf2_score_end}')\nprint(f'Random Forest Scoring - Time to Fit: {rf2_score_end-rf2_score_start}')\n\n# transform test data set w/ PCA transformer and report out times/speeds\ntest_pca_transform_start=datetime.now()\nX_test_pca = principal_components.transform(X_test)\ntest_pca_transform_end=datetime.now()\nprint(f'\\nPCA Test Set Transform - Start Time: {test_pca_transform_start}')\nprint(f'PCA Test Set Transform - End Time: {test_pca_transform_end}')\nprint(f'PCA Test Set Transform - Time to Transform: {test_pca_transform_end-test_pca_transform_start}')\n\n# generate predictions from trained RandomForestClassifier on transformed test data, report out times/speeds\nrf2_test_predict_start=datetime.now()\ntest_predictions2 = randomforest2.predict(X_test_pca)\nrf2_test_predict_end=datetime.now()\nprint(f'\\nRandom Forest w/ PCA Predict - Start Time: {rf2_test_predict_start}')\nprint(f'Random Forest w/ PCA Predict - End Time: {rf2_test_predict_end}')\nprint(f'Random Forest w/ PCA - Time to Predict: {rf2_test_predict_end-rf2_test_predict_start}')\n\nprint(f'\\nCross-validation scores: {cv_scores}')\nprint(f'Average CV Score: {avg_cv_score}')\n\n# format predictions to dataframe and output submission file\ntest_predictions2 = pd.DataFrame({'id': test_ids,\n                                 'label': test_predictions2})\n\ntest_predictions2.to_csv('submission.csv',\n                         header=['id', 'label'],\n                         index=False)","metadata":{},"execution_count":null,"outputs":[]}]}