diff --git a/assignment_2/ass2_notes.ipynb b/assignment_2/ass2_notes.ipynb index 7b9e343..3ebc1c2 100644 --- a/assignment_2/ass2_notes.ipynb +++ b/assignment_2/ass2_notes.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"code","execution_count":45,"metadata":{},"outputs":[],"source":["%matplotlib inline\n","import math\n","import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import matplotlib.colors as colors\n","from sklearn.utils import resample\n","from sklearn.model_selection import train_test_split\n","from sklearn.metrics import accuracy_score\n","from sklearn.preprocessing import scale\n","from sklearn import svm\n","from sklearn.metrics import confusion_matrix\n","from sklearn.decomposition import PCA\n","from sklearn.neighbors import KDTree\n"]},{"cell_type":"code","execution_count":46,"metadata":{},"outputs":[],"source":["def read_xyz(filenm):\n"," pt_clouds = np.genfromtxt(filenm, delimiter=' ')\n"," return pt_clouds\n"]},{"cell_type":"code","execution_count":47,"metadata":{},"outputs":[],"source":["class urban_object:\n"," def __init__(self, filenm):\n"," self.cloud_name = filenm.split('/')[-1][-7:-4] #original code:self.cloud_name = filenm.split('/\\\\')[-1][-7:-4]\n"," self.cloud_ID = int(self.cloud_name)\n"," self.label = math.floor(1.0*self.cloud_ID/100)\n"," self.points = read_xyz(filenm)\n"," self.feature = []\n","\n"," def compute_features(self):\n"," # feature01, height\n"," height = np.amax(self.points[:,2])\n"," self.feature.append(height)\n","\n"," # feature02, root point planar density\n"," root = self.points[[np.argmin(self.points[:,2])]]\n"," top = self.points[[np.argmax(self.points[:,2])]]\n"," kd_tree_2d = KDTree(self.points[:,:2], leaf_size=5)\n"," kd_tree_3d = KDTree(self.points, leaf_size=5)\n","\n"," radius_root = 0.2\n"," count = kd_tree_2d.query_radius(root[:,:2], r=radius_root,count_only=True)\n"," root_density = 1.0*count[0] / len(self.points)\n"," self.feature.append(root_density)\n","\n"," def as_dict(self):\n"," return {'ID':self.cloud_ID,'name':self.cloud_name,'points':self.points,'features':self.feature,'lable':self.label}\n"," "]},{"cell_type":"code","execution_count":48,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":[" ID name points \\\n","0 0 000 [[20.06999969482422, 499.9599914550781, 17.450... \n","1 1 001 [[373.3099975585938, 404.2200012207031, 7.1300... \n","2 2 002 [[65.91000366210938, 326.8599853515625, 12.710... \n","3 3 003 [[109.5, 391.5599975585938, 12.69999980926514]... \n","4 4 004 [[126.4300003051758, 234.9400024414062, 6.8800... \n",".. ... ... ... \n","495 495 495 [[129.3399963378906, 12.97000026702881, 8.2200... \n","496 496 496 [[440.1499938964844, 35.84999847412109, 6.1199... \n","497 497 497 [[158.1799926757812, 130.6999969482422, 4.9899... \n","498 498 498 [[498.3299865722656, 93.45999908447266, 9.4200... \n","499 499 499 [[86.16000366210938, 132.1300048828125, 7.0399... \n","\n"," features lable \n","0 [19.72999954223633, 0.002763957987838585] 0 \n","1 [8.470000267028809, 0.004335260115606936] 0 \n","2 [15.56999969482422, 0.00145218945487042] 0 \n","3 [16.46999931335449, 0.0009728572818367545] 0 \n","4 [9.75, 0.0004123711340206186] 0 \n",".. ... ... \n","495 [11.53999996185303, 0.004746257758305951] 4 \n","496 [15.17000007629395, 0.002241817366611867] 4 \n","497 [11.10999965667725, 0.011976047904191617] 4 \n","498 [18.90999984741211, 0.011563599798893917] 4 \n","499 [11.89999961853027, 0.005298013245033113] 4 \n","\n","[500 rows x 5 columns]\n"]}],"source":["path = \"C:/Users/zhuor/OneDrive - Delft University of Technology/Academic Research/electives/GEO 5017 machine learning/assignments/assignment_2/GEO5017-A2-Classification/GEO5017-A2-Classification/data/pointclouds/\"\n","filenms = [path+\"{:03d}.xyz\".format(n) for n in range(500)]\n","# print(filenms)\n","def get_pt_cloud_dtset(filenms):\n"," pt_cloud_dataset = []\n"," for pt_filenm in filenms:\n"," pt_cloud = urban_object(pt_filenm)\n"," pt_cloud.compute_features()\n"," pt_cloud_dataset.append(pt_cloud)\n","\n"," \n"," df = pd.DataFrame([x.as_dict() for x in pt_cloud_dataset])\n"," return df\n","\n","pt_cloud_df = get_pt_cloud_dtset(filenms)\n","\n","print(pt_cloud_df)\n"]},{"cell_type":"code","execution_count":52,"metadata":{},"outputs":[{"data":{"text/plain":["0 0\n","1 0\n","2 0\n","3 0\n","4 0\n"," ..\n","495 4\n","496 4\n","497 4\n","498 4\n","499 4\n","Name: lable, Length: 500, dtype: int64"]},"execution_count":52,"metadata":{},"output_type":"execute_result"}],"source":["X = pt_cloud_df['features']\n","y = pt_cloud_df['lable'].copy()\n","y"]},{"cell_type":"code","execution_count":50,"metadata":{},"outputs":[{"ename":"ValueError","evalue":"setting an array element with a sequence.","output_type":"error","traceback":["\u001b[1;31m---------------------------------------------------------------------------\u001b[0m","\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)","\u001b[1;31mTypeError\u001b[0m: float() argument must be a string or a real number, not 'list'","\nThe above exception was the direct cause of the following exception:\n","\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)","Cell \u001b[1;32mIn[50], line 12\u001b[0m\n\u001b[0;32m 9\u001b[0m conf_matrix \u001b[39m=\u001b[39m confusion_matrix(y_test, y_preds)\n\u001b[0;32m 10\u001b[0m \u001b[39mprint\u001b[39m(conf_matrix)\n\u001b[1;32m---> 12\u001b[0m SVM_classification(X,y)\n","Cell \u001b[1;32mIn[50], line 4\u001b[0m, in \u001b[0;36mSVM_classification\u001b[1;34m(X, y)\u001b[0m\n\u001b[0;32m 2\u001b[0m X_train, X_test, y_train, y_test \u001b[39m=\u001b[39m train_test_split(X,y,test_size\u001b[39m=\u001b[39m\u001b[39m0.4\u001b[39m)\n\u001b[0;32m 3\u001b[0m clf \u001b[39m=\u001b[39m svm\u001b[39m.\u001b[39mSVC()\n\u001b[1;32m----> 4\u001b[0m clf\u001b[39m.\u001b[39;49mfit(X_train,y_train)\n\u001b[0;32m 5\u001b[0m y_preds \u001b[39m=\u001b[39m clf\u001b[39m.\u001b[39mpredict(X_test)\n\u001b[0;32m 6\u001b[0m acc \u001b[39m=\u001b[39m accuracy_score(y_test,y_preds)\n","File \u001b[1;32mc:\\Users\\zhuor\\anaconda3\\envs\\GEO5017ML\\Lib\\site-packages\\sklearn\\svm\\_base.py:192\u001b[0m, in \u001b[0;36mBaseLibSVM.fit\u001b[1;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[0;32m 190\u001b[0m check_consistent_length(X, y)\n\u001b[0;32m 191\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m--> 192\u001b[0m X, y \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_validate_data(\n\u001b[0;32m 193\u001b[0m X,\n\u001b[0;32m 194\u001b[0m y,\n\u001b[0;32m 195\u001b[0m dtype\u001b[39m=\u001b[39;49mnp\u001b[39m.\u001b[39;49mfloat64,\n\u001b[0;32m 196\u001b[0m order\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mC\u001b[39;49m\u001b[39m\"\u001b[39;49m,\n\u001b[0;32m 197\u001b[0m accept_sparse\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mcsr\u001b[39;49m\u001b[39m\"\u001b[39;49m,\n\u001b[0;32m 198\u001b[0m accept_large_sparse\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m,\n\u001b[0;32m 199\u001b[0m )\n\u001b[0;32m 201\u001b[0m y \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_validate_targets(y)\n\u001b[0;32m 203\u001b[0m sample_weight \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39masarray(\n\u001b[0;32m 204\u001b[0m [] \u001b[39mif\u001b[39;00m sample_weight \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39melse\u001b[39;00m sample_weight, dtype\u001b[39m=\u001b[39mnp\u001b[39m.\u001b[39mfloat64\n\u001b[0;32m 205\u001b[0m )\n","File \u001b[1;32mc:\\Users\\zhuor\\anaconda3\\envs\\GEO5017ML\\Lib\\site-packages\\sklearn\\base.py:565\u001b[0m, in \u001b[0;36mBaseEstimator._validate_data\u001b[1;34m(self, X, y, reset, validate_separately, **check_params)\u001b[0m\n\u001b[0;32m 563\u001b[0m y \u001b[39m=\u001b[39m check_array(y, input_name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39my\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mcheck_y_params)\n\u001b[0;32m 564\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m--> 565\u001b[0m X, y \u001b[39m=\u001b[39m check_X_y(X, y, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mcheck_params)\n\u001b[0;32m 566\u001b[0m out \u001b[39m=\u001b[39m X, y\n\u001b[0;32m 568\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m no_val_X \u001b[39mand\u001b[39;00m check_params\u001b[39m.\u001b[39mget(\u001b[39m\"\u001b[39m\u001b[39mensure_2d\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mTrue\u001b[39;00m):\n","File \u001b[1;32mc:\\Users\\zhuor\\anaconda3\\envs\\GEO5017ML\\Lib\\site-packages\\sklearn\\utils\\validation.py:1106\u001b[0m, in \u001b[0;36mcheck_X_y\u001b[1;34m(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator)\u001b[0m\n\u001b[0;32m 1101\u001b[0m estimator_name \u001b[39m=\u001b[39m _check_estimator_name(estimator)\n\u001b[0;32m 1102\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[0;32m 1103\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m{\u001b[39;00mestimator_name\u001b[39m}\u001b[39;00m\u001b[39m requires y to be passed, but the target y is None\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 1104\u001b[0m )\n\u001b[1;32m-> 1106\u001b[0m X \u001b[39m=\u001b[39m check_array(\n\u001b[0;32m 1107\u001b[0m X,\n\u001b[0;32m 1108\u001b[0m accept_sparse\u001b[39m=\u001b[39;49maccept_sparse,\n\u001b[0;32m 1109\u001b[0m accept_large_sparse\u001b[39m=\u001b[39;49maccept_large_sparse,\n\u001b[0;32m 1110\u001b[0m dtype\u001b[39m=\u001b[39;49mdtype,\n\u001b[0;32m 1111\u001b[0m order\u001b[39m=\u001b[39;49morder,\n\u001b[0;32m 1112\u001b[0m copy\u001b[39m=\u001b[39;49mcopy,\n\u001b[0;32m 1113\u001b[0m force_all_finite\u001b[39m=\u001b[39;49mforce_all_finite,\n\u001b[0;32m 1114\u001b[0m ensure_2d\u001b[39m=\u001b[39;49mensure_2d,\n\u001b[0;32m 1115\u001b[0m allow_nd\u001b[39m=\u001b[39;49mallow_nd,\n\u001b[0;32m 1116\u001b[0m ensure_min_samples\u001b[39m=\u001b[39;49mensure_min_samples,\n\u001b[0;32m 1117\u001b[0m ensure_min_features\u001b[39m=\u001b[39;49mensure_min_features,\n\u001b[0;32m 1118\u001b[0m estimator\u001b[39m=\u001b[39;49mestimator,\n\u001b[0;32m 1119\u001b[0m input_name\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mX\u001b[39;49m\u001b[39m\"\u001b[39;49m,\n\u001b[0;32m 1120\u001b[0m )\n\u001b[0;32m 1122\u001b[0m y \u001b[39m=\u001b[39m _check_y(y, multi_output\u001b[39m=\u001b[39mmulti_output, y_numeric\u001b[39m=\u001b[39my_numeric, estimator\u001b[39m=\u001b[39mestimator)\n\u001b[0;32m 1124\u001b[0m check_consistent_length(X, y)\n","File \u001b[1;32mc:\\Users\\zhuor\\anaconda3\\envs\\GEO5017ML\\Lib\\site-packages\\sklearn\\utils\\validation.py:879\u001b[0m, in \u001b[0;36mcheck_array\u001b[1;34m(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\u001b[0m\n\u001b[0;32m 877\u001b[0m array \u001b[39m=\u001b[39m xp\u001b[39m.\u001b[39mastype(array, dtype, copy\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m)\n\u001b[0;32m 878\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m--> 879\u001b[0m array \u001b[39m=\u001b[39m _asarray_with_order(array, order\u001b[39m=\u001b[39;49morder, dtype\u001b[39m=\u001b[39;49mdtype, xp\u001b[39m=\u001b[39;49mxp)\n\u001b[0;32m 880\u001b[0m \u001b[39mexcept\u001b[39;00m ComplexWarning \u001b[39mas\u001b[39;00m complex_warning:\n\u001b[0;32m 881\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[0;32m 882\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mComplex data not supported\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m{}\u001b[39;00m\u001b[39m\\n\u001b[39;00m\u001b[39m\"\u001b[39m\u001b[39m.\u001b[39mformat(array)\n\u001b[0;32m 883\u001b[0m ) \u001b[39mfrom\u001b[39;00m \u001b[39mcomplex_warning\u001b[39;00m\n","File \u001b[1;32mc:\\Users\\zhuor\\anaconda3\\envs\\GEO5017ML\\Lib\\site-packages\\sklearn\\utils\\_array_api.py:185\u001b[0m, in \u001b[0;36m_asarray_with_order\u001b[1;34m(array, dtype, order, copy, xp)\u001b[0m\n\u001b[0;32m 182\u001b[0m xp, _ \u001b[39m=\u001b[39m get_namespace(array)\n\u001b[0;32m 183\u001b[0m \u001b[39mif\u001b[39;00m xp\u001b[39m.\u001b[39m\u001b[39m__name__\u001b[39m \u001b[39min\u001b[39;00m {\u001b[39m\"\u001b[39m\u001b[39mnumpy\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39mnumpy.array_api\u001b[39m\u001b[39m\"\u001b[39m}:\n\u001b[0;32m 184\u001b[0m \u001b[39m# Use NumPy API to support order\u001b[39;00m\n\u001b[1;32m--> 185\u001b[0m array \u001b[39m=\u001b[39m numpy\u001b[39m.\u001b[39masarray(array, order\u001b[39m=\u001b[39morder, dtype\u001b[39m=\u001b[39mdtype)\n\u001b[0;32m 186\u001b[0m \u001b[39mreturn\u001b[39;00m xp\u001b[39m.\u001b[39masarray(array, copy\u001b[39m=\u001b[39mcopy)\n\u001b[0;32m 187\u001b[0m \u001b[39melse\u001b[39;00m:\n","File \u001b[1;32mc:\\Users\\zhuor\\anaconda3\\envs\\GEO5017ML\\Lib\\site-packages\\pandas\\core\\generic.py:2070\u001b[0m, in \u001b[0;36mNDFrame.__array__\u001b[1;34m(self, dtype)\u001b[0m\n\u001b[0;32m 2069\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__array__\u001b[39m(\u001b[39mself\u001b[39m, dtype: npt\u001b[39m.\u001b[39mDTypeLike \u001b[39m|\u001b[39m \u001b[39mNone\u001b[39;00m \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m np\u001b[39m.\u001b[39mndarray:\n\u001b[1;32m-> 2070\u001b[0m \u001b[39mreturn\u001b[39;00m np\u001b[39m.\u001b[39;49masarray(\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_values, dtype\u001b[39m=\u001b[39;49mdtype)\n","\u001b[1;31mValueError\u001b[0m: setting an array element with a sequence."]}],"source":["def SVM_classification(X,y):\n"," X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.4)\n"," clf = svm.SVC()\n"," clf.fit(X_train,y_train)\n"," y_preds = clf.predict(X_test)\n"," acc = accuracy_score(y_test,y_preds)\n"," print(\"SVM accuracy: {:.2f}\".format(acc))\n"," print(\"confusion matrix\")\n"," conf_matrix = confusion_matrix(y_test, y_preds)\n"," print(conf_matrix)\n","\n","SVM_classification(X,y)"]}],"metadata":{"kernelspec":{"display_name":"GEO5017ML","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.0"},"orig_nbformat":4},"nbformat":4,"nbformat_minor":2} +{"cells":[{"cell_type":"code","execution_count":89,"metadata":{},"outputs":[],"source":["%matplotlib inline\n","import math\n","import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","import scipy\n","from sklearn.model_selection import train_test_split\n","from sklearn.metrics import accuracy_score\n","from sklearn import svm\n","from sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifier\n","from sklearn.metrics import confusion_matrix\n","from sklearn.neighbors import KDTree\n","from sklearn.model_selection import GridSearchCV\n","from sklearn.model_selection import RandomizedSearchCV\n","from sklearn.model_selection import LearningCurveDisplay, ShuffleSplit\n","from pprint import pprint"]},{"cell_type":"markdown","metadata":{},"source":["# a function for reading .xyz file\n","def read_xyz(filenm):\n"," pt_clouds = np.genfromtxt(filenm, delimiter=' ')\n"," return pt_clouds\n"]},{"cell_type":"markdown","metadata":{},"source":["# feature engineering\n","class urban_object:\n"," def __init__(self, filenm):\n"," self.cloud_name = filenm.split('/')[-1][-7:-4] #original code:self.cloud_name = filenm.split('/\\\\')[-1][-7:-4]\n"," self.cloud_ID = int(self.cloud_name)\n"," self.label = math.floor(1.0*self.cloud_ID/100)\n"," self.points = read_xyz(filenm)\n"," self.feature = []\n","\n"," def compute_features(self):\n"," # feature 01, height\n"," height = np.amax(self.points[:,2])\n"," self.feature.append(height)\n","\n"," # feature 02, root point planar density\n"," root = self.points[[np.argmin(self.points[:,2])]]\n"," top = self.points[[np.argmax(self.points[:,2])]]\n"," kd_tree_2d = KDTree(self.points[:,:2], leaf_size=5)\n"," kd_tree_3d = KDTree(self.points, leaf_size=5)\n","\n"," radius_root = 0.2\n"," count = kd_tree_2d.query_radius(root[:,:2], r=radius_root,count_only=True)\n"," root_density = 1.0*count[0] / len(self.points)\n"," self.feature.append(root_density)\n","\n"," # feature 03, linearity\n"," cov_mx = np.cov(self.points, rowvar=False)\n"," eigvals, eig_vector = np.linalg.eig(cov_mx)\n"," eigvals = np.sort(eigvals)[::-1]\n"," linearity = (eigvals[0]-eigvals[1]) / eigvals[0]\n"," self.feature.append(linearity)\n","\n"," # feature 04, planarity\n"," planarity = (eigvals[1]-eigvals[2]) / eigvals[0]\n"," self.feature.append(planarity)\n","\n"," # feature 05, sphericity\n"," sphericity = eigvals[2]/eigvals[0]\n"," self.feature.append(sphericity)\n","\n"," # feature 06, omnivariance\n"," omnivariance = np.cbrt((eigvals[0]*eigvals[1]*eigvals[2]))\n"," self.feature.append(omnivariance)\n","\n"," # feature 07, anisotropy\n"," anisotropy = (eigvals[0]-eigvals[2])/eigvals[0]\n"," self.feature.append(anisotropy)\n","\n"," # feature 08, eigenentropy\n"," eigenentropy = -((eigvals[0]*np.log(eigvals[0]))+(eigvals[1]*np.log(eigvals[1]))+(eigvals[2]*np.log(eigvals[2])))\n"," self.feature.append(eigenentropy)\n","\n"," # feature 09, sum of lamdas\n"," sum_of_lamda = eigvals[0]+eigvals[1]+eigvals[2]\n"," self.feature.append(sum_of_lamda)\n","\n"," # feature 10, change of curvature\n"," change_curv = eigvals[2] / sum_of_lamda\n"," self.feature.append(change_curv)\n","\n"," # featue 11, volume\n"," # def convex_hull_volume(data):\n"," convex_hull = scipy.spatial.ConvexHull(self.points)\n"," self.feature.append(convex_hull.volume)\n"," \n"," # feature 12, projection area\n"," projected_data = self.points[:, :2]\n"," convex_hull = scipy.spatial.ConvexHull(projected_data)\n"," self.feature.append(convex_hull.area)\n","\n"," # feature 13, Density of point cloud\n"," density = self.points.shape[0]/convex_hull.volume\n"," self.feature.append(density)\n","\n"," # feature 14, Standard Division of Height Value\n"," height = self.points[:, 2]\n"," std = np.std(height, ddof=0)\n"," self.feature.append(std)\n","\n","\n"," def as_dict(self):\n"," return {'ID':self.cloud_ID,\n"," 'points':self.points,\n"," 'feature01':self.feature[0],\n"," 'feature02':self.feature[1],\n"," 'feature03':self.feature[2],\n"," 'feature04':self.feature[3],\n"," 'feature05':self.feature[4],\n"," 'feature06':self.feature[5],\n"," 'feature07':self.feature[6],\n"," 'feature08':self.feature[7],\n"," 'feature09':self.feature[8],\n"," 'feature10':self.feature[9],\n"," 'feature11':self.feature[10],\n"," 'feature12':self.feature[11],\n"," 'feature13':self.feature[12],\n"," 'feature14':self.feature[13],\n"," 'lable':self.label}"]},{"cell_type":"markdown","metadata":{},"source":["# read data\n","path = \"C:/Users/zhuor/OneDrive - Delft University of Technology/Academic Research/electives/GEO 5017 machine learning/assignments/assignment_2/GEO5017-A2-Classification/GEO5017-A2-Classification/data/pointclouds/\"\n","filenms = [path+\"{:03d}.xyz\".format(n) for n in range(500)]\n","# print(filenms)\n","def get_pt_cloud_dtset(filenms):\n"," pt_cloud_dataset = []\n"," for pt_filenm in filenms:\n"," pt_cloud = urban_object(pt_filenm)\n"," pt_cloud.compute_features()\n"," pt_cloud_dataset.append(pt_cloud)\n","\n"," \n"," df = pd.DataFrame([x.as_dict() for x in pt_cloud_dataset])\n"," return df\n","\n","pt_cloud_df = get_pt_cloud_dtset(filenms)\n","\n","print(pt_cloud_df)\n"]},{"cell_type":"code","execution_count":90,"metadata":{},"outputs":[],"source":["file_path = \"C:/Users/zhuor/OneDrive - Delft University of Technology/Academic Research/electives/GEO 5017 machine learning/assignments/assignment_2/\"\n","file_nm = \"Features.csv\"\n","pt_cloud_df = pd.read_csv(file_path+file_nm)"]},{"cell_type":"code","execution_count":91,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["[0.05745911 0.11320622 0.02928341 0.03415731 0.06043398 0.07786075\n"," 0.07225395 0.03765918 0.06991678 0.05088644 0.09496873 0.04526962\n"," 0.09291701 0.02991604 0.03578564 0.09802584]\n"]},{"data":{"image/png":"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ExwczF9//UXfvn3p2LGjkQxkVvv27QkODub27dt89NFHZmXBwcH069cPR0dHGjZsSEJCAvv37+fatWsMGDCAiIgIRo4cyVdffUWNGjWYMWMG7733HrVq1TKbspYd/v7+/PXXX0yaNIm33nqLDRs28P333+Po6Piv2hUREZEXg0YmnqBu3bpx7do16tWrR7FixYzjlSpVYsWKFXz55Zd4e3szcuRIxowZ88DF1wsXLiQxMRE/Pz/ee+89xo4d+0hiDAkJYeTIkYwfPx5PT08CAgJYt26d2bvk9wsNDaVy5cq88cYbVKtWjZSUFL777rs0038eZurUqWzatAlXV1cqVqz4WGOuWrUq+/fvp2TJkvTo0QNPT0/++9//cvToUeObxm1tbdm4cSNXr16lSpUqvPXWW9StW5fZs2dn6boAWrZsyZUrV7h582aaL5Pr3r07n332GWFhYZQvX55atWoRFhZGiRIluHXrFu3btycwMJAmTZoAd19H9erVo2PHjv96TY2npydz5szh448/pkKFCuzdu5egoKB/1aaIiIi8OEwpD5qcLyLyL8XFxeHk5ERsbKxGPERERJ4Rmf37rZEJERERERHJFiUTIiIiIiKSLUomREREREQkW5RMiIiIiIhItiiZEBERERGRbFEyISIiIiIi2aJkQkREREREskXJhIiIiIiIZIuSCRERERERyRYlEyIiIiIiki1KJkREREREJFty5XQAIo+byWTi66+/plmzZjkdygvNe9RGLKxtczoMeULOTGic0yGIiMgToJEJeaYFBgZiMpnSbA0aNDDqxMTE0LBhwxyM8q7g4OB0Yy1btmym2zhz5gwmk4mIiIjHF6iIiIhIJmlkQp55DRo0IDQ01OyYtbW18bOzs/OTDilD5cqVY/PmzWbHcuV69P8Z3r59Gysrq0feroiIiMi9NDIhzzxra2ucnZ3Ntnz58hnlJpOJNWvWGPvh4eH4+vqSJ08e/Pz8WLNmTZp3+yMjI2nUqBH29vYUKlSIjh07cvnyZaPc39+ffv36MWjQIF566SWcnZ0JDg5+aKy5cuVKE+vLL79slLu5uTFu3Di6du2Kg4MDxYoV49NPPzXKS5QoAUDFihUxmUz4+/sDd0domjVrxvjx4ylcuDClS5cG4PDhw9SpUwcbGxvy589Pz549uXHjhtFe6nmjR4+mYMGCODo60qtX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tW7dmuPHjz/2fsLCwoz7YjKZsLe3p3Llyqxevfqx9y0iIiIvhkwnE926dWPr1q3pPqAtXLgQX19fKlWq9EiDe9rcuHGDS5cuERAQQOHChXFwcMjpkPj555/5z3/+w+3bt/n22285fvw448aNY9GiRdSvX5/bt29neG5iYiJWVlY4OztjMpmeYNSPXo8ePYiJieGPP/7gm2++4fz583To0CGnw0qXjY0NBQsWfCJ9OTo6EhMTQ0xMDL/++isBAQG0atWKY8eOPZH+RURE5PmW6WTijTfeoGDBgoSFhZkdv3nzJsuXL6dbt24ArFq1inLlymFtbY2bmxtTp07NsM303sG+fv06JpOJ7du3A3eniJhMJjZu3EjFihWxsbGhTp06XLp0ie+//x5PT08cHR1p27at2TvxKSkpTJo0CXd3d2xsbKhQoQJfffXVA6/x2rVrdOrUiXz58mFra0vDhg05ceKEEUdq8lCnTh2zGO/l5uYGwJtvvonJZDL2Uy1ZsgQ3NzecnJxo06YNf//9d7ZjTklJoVu3bnh6erJ69WqqVq1K8eLFadmyJevWrWP37t189NFHRn2TycQnn3xC06ZNsbOzY+zYscb9vXfKTXh4ODVr1sTGxgZXV1f69etHfHy82TWOGzeOrl274uDgQLFixfj000+N8hIlSgBQsWJFTCYT/v7+RlloaCienp7kyZOHsmXLMmfOHLNr2rt3LxUrViRPnjz4+fnx66+/Znj997K1tcXZ2RkXFxdeeeUV3n333TQjZTt27KBq1apYW1vj4uLCkCFDuHPnjtl13T9tzdfXl+DgYLN7+Nlnn/Hmm29ia2tLqVKlWLt2rdk53333HaVLl8bGxobatWtz5swZs/KwsDCzKWXBwcH4+vo+8LXx999/0759e+zs7HBxceGjjz7C39//odMFTSYTzs7OODs7U6pUKcaOHYuFhQWHDh0y6jzodf/XX3/h7OzMuHHjjPp79uzBysqKH3744YF9i4iIyPMv08lErly56NSpE2FhYaSkpBjHV65cye3bt2nfvj0HDhygVatWtGnThsOHDxMcHMyIESPSJCDZERwczOzZswkPD+f8+fO0atWK6dOns2zZMr799ls2bdrErFmzjPrDhw8nNDSUuXPncvToUd5//306dOjAjh07MuwjMDCQ/fv3s3btWnbv3k1KSgqNGjUiMTGR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l+a8YsWKER8fz+uvv87rr7/O559/ToECBTh37hwBAQHcvn3brL6dnV224uvevTu+vr78/vvvLFy4kLp161K8ePEM61tbW2NtbZ2tvkREROTZomRC5ClWqVIljh49ioeHR7rlhw8f5vLly0yYMMGYTrR///5s9WVlZUVSUlKa4+XLl8fPz4/58+ezbNkyZs2ala32RURE5PmjZELkMYiNjSUiIsLs2EsvvZTldgYPHswrr7zCu+++S48ePbCzsyMqKopNmzYxa9YsihUrhpWVFbNmzeLtt9/myJEjhISEZCtmNzc3Nm7cyLFjx8ifPz9OTk7GqEn37t3p06cPtra2vPnmm9lqX0RERJ4/WjMh8hhs376dihUrmm0jR47Mcjs+Pj7s2LGDEydO8Nprr1GxYkVGjBhhrK0oUKAAYWFhrFy5Ei8vLyZMmMCUKVOyFXOPHj0oU6YMfn5+FChQgF27dhllbdu2JVeuXLRr1448efJkq30RERF5/phSUlJScjoIEXm6nT9/Hjc3N/bt20elSpWydG5cXBxOTk7Exsbi6Oj4mCIUERGRRymzf781zUlEMpSYmEhMTAxDhgzhlVdeyXIiISIiIs83TXMSkQzt2rWL4sWLc+DAAT755JOcDkdERESeMhqZEJEM+fv7o5mQIiIikhGNTIiIiIiISLYomRARERERkWxRMiEiIiIiItmiZEJERERERLJFyYSIiIiIiGSLkgkREREREckWJRMiIiIiIpIt+p4JEXkivEdtxMLaNqfDEBF5qDMTGud0CCLPDI1MyCO3fft2TCYT169ff6H6ftacOXMGk8lERERETociIiIizyglE0+BwMBATCYTJpOJXLlyUaxYMd555x2uXbv2yPtp1qxZluLJnTs37u7uBAUFER8fn6l+qlevTkxMDE5OTk9dbDkt9QE+dXNwcKBcuXK8++67nDhx4onG4urqSkxMDN7e3oASMREREck6JRNPiQYNGhATE8OZM2f47LPPWLduHb17987xeE6dOsXYsWOZM2cOQUFBmTrXysoKZ2dnTCbTUxfbk5KUlERycnKG5Zs3byYmJoaDBw8ybtw4oqKiqFChAlu2bHliMVpaWuLs7EyuXJrtKCIiItmjZOIpYW1tjbOzM0WLFuX111+ndevW/PDDD0Z5cnIyY8aMoWjRolhbW+Pr68uGDRvM2jh8+DB1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W1tbHtOlSxcUFRXhxYsX0NPTU/NIGp6mchkWFoYJEybg448/BgB069YNT58+RVBQED799FNoab2bs9hVyacymupxSF3ezW8bEamdnp4eevXqhaSkJIX1SUlJcHd3r3EbNze3avFHjhyBi4sLdHV164yprc13habyCQCRkZH4/PPPcfjwYbi4uKi/842MJnJpb2+PS5cuITMzU/76+9//jgEDBiAzMxMymUxj42lomvpuenh44Nq1a/KiDAByc3MhlUrfyUIC0Fwunz17Vq1g0NbWhnj5YB01jqBxUSWfymiqxyG1efP3fBPR26rykXxbtmwRWVlZYt68eaJZs2aioKBACCFEaGiomDBhgjy+8hGH8+fPF1lZWWLLli3VHnF46tQpoa2tLb766iuRnZ0tvvrqqybzSD5N5DMiIkLo6emJ/fv3i8LCQvnryZMnb3x8b5ImcllVU3qakybyeevWLWFsbCxmzZolcnJyxKFDh0SbNm3EF1988cbH9yZpIpfLli0TJiYmYteuXSI/P18cOXJEdOzYUYwbN+6Nj+9Nq28+hRAiIyNDZGRkiF69egl/f3+RkZEhrly5In+/KR+H1IHFBBHVy7p164SVlZXQ09MTzs7O4vjx4/L3Jk2aJLy8vBTiU1NThZOTk9DT0xPW1tZiw4YN1drct2+fsLOzE7q6usLe3l7ExcVpehiNhrrzaWVlJQBUey1btuwNjKZhaeK7+aqmVEwIoZl8nj59Wri6ugp9fX3RoUMH8eWXX4qysjJND6XBqTuXpaWlYvny5aJjx47CwMBAyGQyMXPmTPHw4cM3MJqGV9981vQ30crKSiGmKR+HXpdEiHf4ehgREREREWkM75kgIiIiIiKVsJggIiIiIiKVsJggIiIiIiKVsJggIiIiIiKVsJggIiIiIiKVsJggIiIiIiKVsJggIiIiIiKVsJggIiIiIiKVsJggIiIiIiKVsJggIiIiIiKVsJggIiIiIiKVsJggIiIiIiKV/D8Een+Z9nGF9wAAAABJRU5ErkJggg==","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# feature selection\n","X = pt_cloud_df.drop(['ID','points','lable'],axis=1).copy()\n","y = pt_cloud_df['lable'].copy()\n","\n","model = ExtraTreesClassifier(random_state=101)\n","model.fit(X,y)\n","print(model.feature_importances_)\n","feat_importances = pd.Series(model.feature_importances_,index=X.columns)\n","feat_importances.nlargest(16).plot(kind='barh')\n","plt.show()\n","\n"]},{"cell_type":"code","execution_count":92,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["linear model accuracy: 0.98\n","rbf model accuracy: 0.32\n","poly model accuracy: 0.28\n"]}],"source":["# Hyperparams tuning for svm\n","X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.4,random_state=101)\n","\n","kernels = ['linear','rbf','poly']\n","for kernel in kernels:\n"," svc = svm.SVC(kernel=kernel)\n"," svc.fit(X_train,y_train)\n"," y_preds = svc.predict(X_test)\n"," acc = accuracy_score(y_test,y_preds)\n"," print(\"{} model accuracy: {:.2f}\".format(kernel,acc))"]},{"cell_type":"code","execution_count":93,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["linear kernel accuracy with c= 0.1,: 0.98\n","linear kernel accuracy with c= 1,: 0.98\n","linear kernel accuracy with c= 10,: 0.99\n","linear kernel accuracy with c= 100,: 0.99\n","linear kernel accuracy with c= 1000,: 0.99\n"]}],"source":["# Hyperparams tuning for svm\n","Cs = [0.1,1,10,100,1000]\n","for c in Cs:\n"," svc = svm.SVC(kernel='linear',C=c)\n"," svc.fit(X_train,y_train)\n"," y_preds = svc.predict(X_test)\n"," acc = accuracy_score(y_test,y_preds)\n"," print(\"linear kernel accuracy with c= {},: {:.2f}\".format(c,acc))"]},{"cell_type":"code","execution_count":94,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["rbf kernel accuracy with gamma= 0.1, c=0.1,: 0.17\n","rbf kernel accuracy with gamma= 0.1, c=1,: 0.35\n","rbf kernel accuracy with gamma= 0.1, c=10,: 0.38\n","rbf kernel accuracy with gamma= 0.1, c=100,: 0.38\n","rbf kernel accuracy with gamma= 0.1, c=1000,: 0.38\n","rbf kernel accuracy with gamma= 1, c=0.1,: 0.17\n","rbf kernel accuracy with gamma= 1, c=1,: 0.18\n","rbf kernel accuracy with gamma= 1, c=10,: 0.20\n","rbf kernel accuracy with gamma= 1, c=100,: 0.20\n","rbf kernel accuracy with gamma= 1, c=1000,: 0.20\n","rbf kernel accuracy with gamma= 10, c=0.1,: 0.17\n","rbf kernel accuracy with gamma= 10, c=1,: 0.17\n","rbf kernel accuracy with gamma= 10, c=10,: 0.17\n","rbf kernel accuracy with gamma= 10, c=100,: 0.17\n","rbf kernel accuracy with gamma= 10, c=1000,: 0.17\n","rbf kernel accuracy with gamma= 100, c=0.1,: 0.17\n","rbf kernel accuracy with gamma= 100, c=1,: 0.17\n","rbf kernel accuracy with gamma= 100, c=10,: 0.17\n","rbf kernel accuracy with gamma= 100, c=100,: 0.17\n","rbf kernel accuracy with gamma= 100, c=1000,: 0.17\n"]}],"source":["# Hyperparams tuning for svm\n","gammas = [0.1,1,10,100]\n","for gamma in gammas:\n"," for c in Cs:\n"," svc = svm.SVC(kernel='rbf', gamma=gamma, C=c)\n"," svc.fit(X_train,y_train)\n"," y_preds = svc.predict(X_test)\n"," acc = accuracy_score(y_test,y_preds)\n"," print(\"rbf kernel accuracy with gamma= {}, c={},: {:.2f}\".format(gamma,c,acc))"]},{"cell_type":"code","execution_count":95,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["poly kernel accuracy with degree=0,: 0.17\n","poly kernel accuracy with degree=1,: 0.32\n","poly kernel accuracy with degree=2,: 0.25\n","poly kernel accuracy with degree=3,: 0.28\n","poly kernel accuracy with degree=4,: 0.28\n","poly kernel accuracy with degree=5,: 0.26\n","poly kernel accuracy with degree=6,: 0.26\n"]}],"source":["# Hyperparams tuning for svm\n","degrees = [0,1,2,3,4,5,6]\n","for degree in degrees:\n"," svc = svm.SVC(kernel='poly', degree=degree)\n"," svc.fit(X_train,y_train)\n"," y_preds = svc.predict(X_test)\n"," acc = accuracy_score(y_test,y_preds)\n"," print(\"poly kernel accuracy with degree={},: {:.2f}\".format(degree,acc))"]},{"cell_type":"code","execution_count":96,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["SVM accuracy: 0.32\n","{'C': 0.1, 'gamma': 0.1, 'kernel': 'linear'}\n"]}],"source":["# double check the optimal svm hyperparams with GridSearchCV\n","X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.4,random_state=101)\n","clf_svm = svm.SVC()\n","clf_svm.fit(X_train,y_train)\n","y_preds = clf_svm.predict(X_test)\n","acc = accuracy_score(y_test,y_preds)\n","print(\"SVM accuracy: {:.2f}\".format(acc))\n","\n","param_grid_01 = [{'C':[0.1,1,10,100,1000],'gamma':[0.1,1,10,100],'kernel':['rbf','linear']}]\n","optimal_params_01 = GridSearchCV(svm.SVC(),param_grid_01,cv=5,scoring='accuracy',verbose=0)\n","optimal_params_01.fit(X_train, y_train)\n","print(optimal_params_01.best_params_)\n","\n"]},{"cell_type":"code","execution_count":97,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["SVM overall accuracy: 0.3150\n","confusion matrix\n","[[21 0 2 14 3]\n"," [ 0 0 0 42 0]\n"," [12 0 5 31 0]\n"," [ 0 0 0 33 1]\n"," [10 0 0 22 4]]\n","[0.525 0. 0.10416667 0.97058824 0.11111111]\n","SVM mean per-class accuracy: 0.3422\n"]}],"source":["# SVM classifier without hyperparameter tuning\n","def SVM_classification_initial(X,y):\n"," X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.4,random_state=101)\n"," clf = svm.SVC()\n"," clf.fit(X_train,y_train)\n"," y_preds = clf.predict(X_test)\n"," acc = accuracy_score(y_test,y_preds)\n"," print(\"SVM overall accuracy: {:.4f}\".format(acc))\n"," print(\"confusion matrix\")\n"," conf_matrix = confusion_matrix(y_test, y_preds)\n"," print(conf_matrix)\n"," avg_acc = np.mean(conf_matrix.diagonal()/conf_matrix.sum(axis=1))\n"," class_acc = conf_matrix.diagonal()/conf_matrix.sum(axis=1)\n"," print(class_acc)\n"," print(\"SVM mean per-class accuracy: {:.4f}\".format(avg_acc))\n"," \n"," \n","\n","SVM_classification_initial(X,y)"]},{"cell_type":"code","execution_count":112,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["overall accuracy: 0.9900\n","mean per-class accuracy: [1. 1. 0.95833333 1. 1. ]\n","confusion matrix: 0.9916666666666668\n","training score: [[40 0 0 0 0]\n"," [ 0 42 0 0 0]\n"," [ 1 1 46 0 0]\n"," [ 0 0 0 34 0]\n"," [ 0 0 0 0 36]]\n"]}],"source":["# SVM classifier with hyperparameter tuning\n","def SVM_classification(X,y,test_size):\n"," X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=test_size,random_state=101)\n"," clf = svm.SVC(kernel='linear',C=10)\n"," clf.fit(X_train,y_train)\n"," y_preds = clf.predict(X_test)\n"," acc = accuracy_score(y_test,y_preds)\n"," #print(\"SVM accuracy: {:.4f}\".format(acc))\n"," #print(\"confusion matrix\")\n"," conf_matrix = confusion_matrix(y_test, y_preds)\n"," #print(conf_matrix)\n"," avg_acc = np.mean(conf_matrix.diagonal()/conf_matrix.sum(axis=1))\n"," #print(\"SVM mean per-class accuracy: {:.4f}\".format(avg_acc))\n"," X_preds = clf.predict(X_train)\n"," training_acc = accuracy_score(y_train,X_preds)\n"," class_acc = conf_matrix.diagonal()/conf_matrix.sum(axis=1)\n","\n"," return acc,class_acc, avg_acc,conf_matrix,training_acc\n","\n"," \n","svm_scores = SVM_classification(X,y,0.4)\n","print(\"overall accuracy: {:.4f}\\nmean per-class accuracy: {}\\nconfusion matrix: {}\\ntraining score: {}\".format(svm_scores[0],svm_scores[1],svm_scores[2],svm_scores[3]))"]},{"cell_type":"code","execution_count":99,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["{'bootstrap': [True, False],\n"," 'criterion': ['gini', 'entropy'],\n"," 'max_depth': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, None],\n"," 'min_samples_leaf': [1, 2, 4],\n"," 'min_samples_split': [2, 5, 10],\n"," 'n_estimators': [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]}\n"]}],"source":["# hyperparameter settings for rf\n","# number of trees in rf\n","n_estimators = [int(x) for x in np.linspace(start=200,stop=2000,num=10)]\n","\n","# maximum number of levels in tree\n","max_depth = [int(x) for x in np.linspace(10,110, num=11)]\n","max_depth.append(None)\n","\n","# criterion\n","criterion = ['gini','entropy']\n","\n","# minimum number of samples required to split a node\n","min_samples_split = [2,5,10]\n","\n","# minimum number of samples required at each leaf node\n","min_samples_leaf = [1,2,4]\n","\n","# method of selecting samples for training each tree\n","bootstrap = [True,False]\n","\n","# create the random grid\n","random_grid = {'n_estimators': n_estimators,\n"," 'criterion':criterion,\n"," 'max_depth': max_depth,\n"," 'min_samples_split': min_samples_split,\n"," 'min_samples_leaf': min_samples_leaf,\n"," 'bootstrap': bootstrap}\n","pprint(random_grid)"]},{"cell_type":"code","execution_count":100,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Fitting 3 folds for each of 100 candidates, totalling 300 fits\n"]},{"data":{"text/plain":["{'n_estimators': 800,\n"," 'min_samples_split': 10,\n"," 'min_samples_leaf': 1,\n"," 'max_depth': 60,\n"," 'criterion': 'entropy',\n"," 'bootstrap': False}"]},"execution_count":100,"metadata":{},"output_type":"execute_result"}],"source":["# hyperparameter tuning using RandomizedSearchCV\n","rf = RandomForestClassifier()\n","rf_random = RandomizedSearchCV(estimator=rf,param_distributions=random_grid,n_iter=100,cv=3,verbose=2,random_state=101,n_jobs=-1)\n","rf_random.fit(X_train,y_train)\n","rf_random.best_params_"]},{"cell_type":"code","execution_count":101,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Fitting 3 folds for each of 144 candidates, totalling 432 fits\n"]},{"data":{"text/plain":["{'bootstrap': True,\n"," 'max_depth': 40,\n"," 'max_features': 'sqrt',\n"," 'min_samples_leaf': 1,\n"," 'min_samples_split': 7,\n"," 'n_estimators': 200}"]},"execution_count":101,"metadata":{},"output_type":"execute_result"}],"source":["# further hyperparameter tuning using GridSearchCV\n","new_param_grid = {\n"," 'bootstrap': [True],\n"," 'max_depth': [40,50,60,70],\n"," 'max_features': ['sqrt'],\n"," 'min_samples_leaf': [1,2,3],\n"," 'min_samples_split': [4,5,6,7],\n"," 'n_estimators': [100, 200, 300]\n","}\n","\n","rf = RandomForestClassifier()\n","grid_search = GridSearchCV(estimator=rf,param_grid=new_param_grid,cv=3,n_jobs=-1,verbose=2)\n","grid_search.fit(X_train,y_train)\n","grid_search.best_params_"]},{"cell_type":"code","execution_count":102,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Initial Random Forest overall accuracy: 0.9750\n","confusion matrix\n","[[38 0 2 0 0]\n"," [ 0 42 0 0 0]\n"," [ 0 2 46 0 0]\n"," [ 0 0 0 34 0]\n"," [ 0 0 0 1 35]]\n","[0.95 1. 0.95833333 1. 0.97222222]\n","RF mean per-class accuracy: 0.9761\n"]}],"source":["# RF classifier without hyperparameter tuning\n","def RF_classification_initial(X,y):\n"," X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.4,random_state=101)\n"," rf = RandomForestClassifier()\n"," rf.fit(X_train,y_train)\n"," y_preds = rf.predict(X_test)\n"," acc = accuracy_score(y_test,y_preds)\n"," print(\"Initial Random Forest overall accuracy: {:.4f}\".format(acc))\n"," print(\"confusion matrix\")\n"," conf_matrix = confusion_matrix(y_test, y_preds)\n"," print(conf_matrix)\n"," avg_acc = np.mean(conf_matrix.diagonal()/conf_matrix.sum(axis=1))\n"," class_acc = conf_matrix.diagonal()/conf_matrix.sum(axis=1)\n"," print(class_acc)\n"," print(\"RF mean per-class accuracy: {:.4f}\".format(avg_acc))\n","\n","RF_classification_initial(X,y)"]},{"cell_type":"code","execution_count":103,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["overall accuracy: 0.985\n","class accuracies: [0.95 1. 0.97916667 1. 1. ]\n","mean per-class accuracy: 0.9858333333333335\n","confusion matrix: [[38 0 2 0 0]\n"," [ 0 42 0 0 0]\n"," [ 0 1 47 0 0]\n"," [ 0 0 0 34 0]\n"," [ 0 0 0 0 36]]\n","training score: 0.9966666666666667\n"]}],"source":["# RF classifier with hyperparameter tuning\n","def RF_classification(X,y,test_size):\n"," X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=test_size,random_state=101)\n"," rf = RandomForestClassifier(n_estimators=100,criterion='entropy',\n"," max_depth=40,min_samples_split=7,\n"," min_samples_leaf=2,max_features='sqrt',\n"," bootstrap=True)\n"," rf.fit(X_train,y_train)\n"," y_preds = rf.predict(X_test)\n"," acc = accuracy_score(y_test,y_preds)\n"," # print(\"Random Forest overall accuracy: {:.4f}\".format(acc))\n"," # print(\"confusion matrix\")\n"," conf_matrix = confusion_matrix(y_test, y_preds)\n"," # print(conf_matrix)\n"," avg_acc = np.mean(conf_matrix.diagonal()/conf_matrix.sum(axis=1))\n"," # print(\"RF mean per-class accuracy: {:.4f}\".format(avg_acc))\n"," X_preds = rf.predict(X_train)\n"," training_acc = accuracy_score(y_train,X_preds)\n"," class_acc = conf_matrix.diagonal()/conf_matrix.sum(axis=1)\n","\n"," return acc,class_acc, avg_acc,conf_matrix,training_acc\n","\n","\n","scores = RF_classification(X,y,0.4)\n","print(\"overall accuracy: {}\\nclass accuracies: {}\\nmean per-class accuracy: {}\\nconfusion matrix: {}\\ntraining score: {}\".format(scores[0],scores[1],scores[2],scores[3],scores[4]))"]},{"cell_type":"code","execution_count":113,"metadata":{},"outputs":[{"data":{"image/png":"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PaD76/TatWt4+umnrVrGmsqYc9+uXTucOXMGx48fx/HjxzFnzhy0bdsWx48fl6LINYax3/sWLVogPj7e8NjOzg6NGjWyXkFrIGPP/caNG9GgQQMAugvrvHnz8M8//1i3sA8oc11rH6ggExQUhN69exs6E+3atQvjxo2DXC7HkiVLcP78eQDAa6+9hr///huA7i+lI0eOYMyYMZKVuyYw9txfunQJK1aswOOPP44rV67gxIkT+Prrr6UserVnzLmXy+UICQkx3PSdJCua+4GMY+z3fsKECdixYweUSiUAXQ3Z+PHjJSt3TWDsuW/VqhViY2MNr5PJZOX+gUWVJ4rXpBYl1qa2xLX2gersCwBRUVGYOnUqDh8+jIyMDENnunXr1iEkJATh4eFo2bIlXnrpJUyePBkqlQqffvopAgICJC559Xevc+/u7m74K+qzzz4zvO7nn3+Wqsg1hjHfe7IMY859x44dMXfuXIwfPx7h4eGQy+V45ZVXJC559WfMuX/55Zdx7do1LFy4EL6+vkhMTMR7770nccmrv9zcXKxevRoA8MMPP+CNN96Ar6+vRa61MlEyKhERERFVIw9U0xIRERHVLAwyREREVG0xyBAREVG1xSBDRERE1RaDDBEREVVbDDJERERUbTHIEBERUbXFIENEkho3bhwWL15s1L6tWrXCgQMHLFwiICEhASEhIcjPz7f4exFR1TxwM/sSUdXMmjULmzZtQosWLZCQkIATJ05g4MCByMzMxJ49e3D27NlKLW0wdOhQoxenfO+999CkSRPTCl4JQUFBmDlzJpydnS3+XkRUNZzZl4gqZcWKFRg+fDjkcjm+//57TJ8+HUlJSQB0U7937NiRazQRkdWwRoaIKmXgwIGQy+XlPjdgwABotVorl4iIHmTsI0NEleLr61vhc05OTti+fTvatWuHVatWISwsDB9++CGSk5MxatQozJ8/H506dcJff/0FADh27BgGDBiAuXPnQqlU4tNPP0WdOnUQExOD1q1bo169erh48SIAYP369Wjbti2io6ORkpKCSZMm4cknn8SPP/6I4OBgdO3aFUVFRQB0C9a98847WL16NRo1agRvb28MGTIEhYWFpcqr0Wgwe/ZsLFmyBM2bN0dUVBSUSiUWLVqEOnXqAACysrLQokULTJkyBVOnTkX79u3h5eWF9PR05OTkYPbs2Zg8eTI6dOiAY8eOWeKUE9FdMMgQkVn16dMH8fHxiIuLw88//4wuXbrgk08+Qf369fH+++9jwIABWLZsGQCgZcuWUCqV0Gg0cHBwQLdu3ZCcnIz4+HjExMSgRYsWWLlyJQCgX79+iI+PBwD4+/sjODgYZ86cQVhYGC5cuIBz585h9+7dAID58+fD398fw4cPx/z585GTk4PvvvuuTE3Szp074eTkhMmTJ2PHjh2wtbWFg4MDOnXqhOTkZACATCbDJ598gkWLFmHChAmIj4/HsmXL4Ovri8mTJ2PUqFFYsmQJnnvuObzwwgvWOs1EVIxNS0RkVu7u7vDw8ED//v0REREBAAgICICLiwuSkpJw6tQp5ObmAgDs7e1Rq1YtALrAoO/0+/zzzwPQBZ2UlBQAgIuLi+F5W1tbeHh4oG7duujUqRMAoEGDBkhLSwMAHD9+HP369QMANGrUCGq12lBbc2dZFy5cCD8/P4wYMQIDBgyATCZDUFCQYR8PDw/07NkTADB27Fh07twZw4cPh1arxZYtW9C4cWMAQHp6OurXr4/c3Fy4urqa52QS0T0xyBCR2clkMshkMsPjwMBAzJs3D+Hh4XjkkUdw9erVUvuWdx8A7OzsSvW5MXbfPn36YM+ePXjjjTdw6dIlPPHEE+WOjOrcuTPmz5+PiRMn4uOPP8aGDRvg5+dX5tgA8NNPP+HgwYM4ffo0AODmzZvIzs7GhAkTyt2fiKyDTUtEZHGRkZFo0KABRo0aBUdHR4u/3+uvvw5fX1989dVXuHTpEjZu3FjufleuXEFkZCQuXLiA4OBgjB07ttz9bty4gQkTJuCLL75AQEAAlEolfHx8oNVqsWPHDsN+J0+eLNMPh4gsi0GGiEymVquhVqvLfU6j0Rjux8bGIj09Hfn5+Thw4AAKCgqQkJAAABBCQD8LhL5GpeSsEHfeL7nvnbNH6B9/9NFHaNSoEbp06YLevXujoKCg3DLu27cPx44dg7+/PxYvXmx4/Z0/IyMj8dhjjxmavHbv3g07Ozs8++yzeOmll/DDDz9g586dWL16dYUjuojIMti0REQmiYmJwS+//IK0tDSsWLECzz33HNzd3bFp0yakpqZi5cqVaNq0KQICAvDmm29i8uTJOHDgAEaOHIlt27YhLi4OhYWF+O+//3DlyhVcvHgRP/30EwBg1apV6NGjB/bv34+UlBTExcUhMTERqamp2LRpE8LCwrB9+3acPXsWhw4dgo2NDc6fP4/ff/8dffv2Re3atTFhwgS8//77UCqVEEJgzJgx+Oabb0p9BiEE+vXrh8jISOTl5WHZsmVQq9VYvXo1AOC7776Dp6cnNm/ejHHjxmHWrFlQq9XYsGED+vbtiy+++AKvvvoq3nzzTbRr187wOiKyHk6IR0Q1zqRJkzBnzhy4uLgAAPLy8jBp0iRERUVJXDIiMjc2LRFRjRIbG4tff/0V165dM2y7evUqHnroIQlLRUSWwqYlIqpRWrRogREjRqBv377Izc1FcHAwBg0ahKlTp0pdNCKyADYtERERUbXFpiUiIiKqthhkiIiIqNpikCEiIqJqi0GGiIiIqi0GGSIiIqq2GGSIiIio2mKQISIiomqLQYaIiIiqLQYZIiIiqrb+DxHNuUBZJZTZAAAAAElFTkSuQmCC","text/plain":["
"]},"metadata":{},"output_type":"display_data"},{"data":{"image/png":"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","text/plain":["
"]},"metadata":{},"output_type":"display_data"}],"source":["# another method of plotting learning curve\n","def get_learning_crv(classification_model,X,y,model_nm):\n"," rf_accs = []\n"," training_accs = []\n"," #train_sizes = np.array([0.1, 0.3, 0.5, 0.7, 0.9])\n"," train_sizes = np.arange(0.025,1,0.025)\n"," test_sizes = train_sizes[::-1]\n"," \n"," for test_size in test_sizes:\n"," new_scores = classification_model(X,y,test_size)\n"," rf_accs.append(new_scores[0])\n"," training_accs.append(new_scores[-1])\n"," \n","\n"," plt.rcParams[\"font.family\"] = \"times new roman\"\n"," plt.plot(train_sizes,rf_accs,label='Test score')\n"," plt.plot(train_sizes,training_accs,label='Training score')\n"," plt.title(model_nm)\n"," plt.xlabel(\"Training size\")\n"," plt.ylabel(\"Accuracy\")\n"," plt.legend()\n"," plt.show()\n","\n"," \n","\n","get_learning_crv(RF_classification,X,y,\"Learning Curve for RF Classifier\")\n","get_learning_crv(SVM_classification,X,y,\"Learning Curve for SVM Classifier\")\n"]}],"metadata":{"kernelspec":{"display_name":"GEO5017ML","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.0"},"orig_nbformat":4},"nbformat":4,"nbformat_minor":2} diff --git a/assignment_2/tutorial.ipynb b/assignment_2/tutorial.ipynb index 732e3b7..3433496 100644 --- a/assignment_2/tutorial.ipynb +++ b/assignment_2/tutorial.ipynb @@ -2,14 +2,16 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "from sklearn import svm, datasets\n", "import sklearn.model_selection as model_selection\n", "from sklearn.metrics import accuracy_score\n", - "from sklearn.metrics import f1_score\n" + "from sklearn.metrics import f1_score\n", + "import pandas as pd\n", + "import numpy as np" ] }, { @@ -187,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -390,6 +392,52 @@ "print('Accuracy(Polynomial Kernel):{:.2f}'.format(poly_accuracy*100))\n", "print('F1(Polynomial Kernel):{:.2f}'.format(poly_f1*100))" ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 200., 400., 600., 800., 1000., 1200., 1400., 1600., 1800.,\n", + " 2000.])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.linspace(start=200,stop=2000,num=10)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 , 0.225,\n", + " 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425, 0.45 ,\n", + " 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 , 0.675,\n", + " 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875, 0.9 ,\n", + " 0.925, 0.95 , 0.975])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_size = np.arange(0.025,1,0.025)\n", + "train_size" + ] } ], "metadata": {