{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom sklearn import metrics\nfrom sklearn import ensemble\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import cross_val_score as cvs\nfrom sklearn.model_selection import cross_val_predict as cvp","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"class Utils:\n    def getNAStats(self, dataFrame):\n        print(dataFrame.isna().sum())\n\nclass ScaleFeature():\n    def perform(self, dataFrame, training=True):\n        if(training):\n            self.transformer = StandardScaler()\n            self.transformer.fit(dataFrame)   \n        npOutput = self.transformer.transform(dataFrame)\n        return npOutput\n\nclass PreProcess():\n    def __init__(self):\n        self.scaleFeature = ScaleFeature()\n\n    def perform(self, dataFrame, training=True):\n        npOutput = self.scaleFeature.perform(dataFrame, training)\n        return npOutput\n    \nclass ValidateModels():\n    def __init__(self, split):\n        self.split = split\n    \n    def perform(self, model, attrSet, labelSet, classDist=\"uniform\"):\n        if(classDist == 'uniform'):\n            scores = cvs(model, attrSet, labelSet, scoring=\"accuracy\", cv=self.split)\n            print(\"Accuracy Estimate: MEAN +/- STD = \" + str(np.round(scores.mean(),3)) + \" +/- \" + str(np.round(scores.std(),3)))\n        elif(classDist == 'skewed'):\n            preds = cvp(model, attrSet, labelSet, cv=self.split)\n            print(\"Confusion Matrix: \")\n            print(metrics.confusion_matrix(labelSet, preds))\n            print(\"Classification report: \")\n            print(metrics.classification_report(labelSet, preds))\n\nclass Test():\n    def perform(self, model, attrSet, labelSet=None):\n        predictions = model.predict(attrSet)\n        return predictions","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"### ==== ACTUAL IMPLEMENTATION ==== ###\n\ntrainSet = pd.read_csv(\"../input/digit-recognizer/train.csv\", sep=\",\")\nlabels = ['label']\ntrainLabels = trainSet[labels].astype(int).astype('category')\ntrainAttrs = trainSet.drop(labels, axis=1)\n\n#PreProcessing the Subsets\npreProcess = PreProcess()\nX_train = preProcess.perform(trainAttrs)\nY_train = trainLabels.values.ravel()\nprint(X_train.shape)\nprint(len(Y_train))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"validateModels = ValidateModels(3)\net_model = ensemble.ExtraTreesClassifier(random_state=50, n_jobs=-1, n_estimators=500)\nvalidateModels.perform(et_model, X_train, Y_train, 'skewed')\net_model.fit(X_train, Y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"testSet = pd.read_csv(\"../input/digit-recognizer/test.csv\", sep=\",\")\ntestSet = testSet.reset_index()\ntestSet = testSet.rename({'index': 'ImageId'}, axis=1)\nids = ['ImageId']\ntestIds = testSet[ids].astype(int)\ntestIds.ImageId = testIds.ImageId + 1\ntestAttrs = testSet.drop(ids, axis=1)\nX_test = preProcess.perform(testAttrs, training=False)\nprint(X_test.shape)\n\ntest = Test()\npreds = test.perform(et_model, X_test)\ntestIds['Label'] = pd.Series(preds, dtype=int)\nprint(testIds.head())\n#testIds.to_csv('../output/myPrediction.csv', index=False)","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}