{"cells":[{"metadata":{"_uuid":"1af22bfc351387a4da1023a5bbf9f26ff547cb73"},"cell_type":"markdown","source":"## LDA not using any framework\n\n\nReference to this book. : Ethem Alpaydın Introduction to Machine Learning, third edition\n\n\n"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"scrolled":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nimport seaborn as sns\nimport os\nprint(os.listdir(\"../input\"))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"978eb1e83238c8f5c9c0d5320f152e9a45a70ae9"},"cell_type":"code","source":"class class_def:    \n    def __init__(self,class_def,number): # constructor\n        self.class_def = class_def\n        self.mean = class_def.mean(axis = 0)\n        self.N = class_def.shape[0]\n        self.total_digitnumber = number\n\n    def std(self):\n        return self.class_def.std(axis = 0)\n\n    def scatter(self) :\n        return np.cov(self.class_def.T)\n    \n    def cov(self) :\n        return np.cov(self.class_def.T)\n    \n    def scatter_b(self,mean_vektör):\n        return self.N*(((self.mean-mean_vektör).values.reshape(62,1)).dot((self.mean-mean_vektör).values.reshape(1,62)))\n              ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"648eceb3d74c9b1c5fef9ace1289b8f92e154081"},"cell_type":"code","source":"train_all = pd.read_csv(\"../input/opt_digits_train.csv\")\ntrain_all = train_all.reset_index(drop=True)\nlabels = train_all.iloc[:,64]\ntrain_all = train_all.drop(labels = [\"64\"],axis = 1) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2009c75d9d0c5c0dad983145dde1faee8a147783"},"cell_type":"code","source":"g = sns.countplot(labels)\nlabels.value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e099daef3c1632058051cc4265df86c50c98e81a"},"cell_type":"code","source":"train_all.columns = range(train_all.shape[1])\nvar = train_all.std(axis = 0 )\nvar_zero_index =[] \nm = 0\n#variance zero is deleted\nfor i in range(var.shape[0]):\n    if var[i] == 0:   \n        train_all = train_all.drop(i,axis = 1) \ntrain_all.shape\nvar = train_all.std(axis = 0 )","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b4231abf92a4840f52d760260ef12c0ffe144ae8"},"cell_type":"code","source":"train_all.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5cac0176ebde355880d5d4e0f921b86d180910eb"},"cell_type":"code","source":"digit0 = class_def(train_all[labels==0],train_all.shape[0])\ndigit1 = class_def(train_all[labels==1],train_all.shape[0])\ndigit2 = class_def(train_all[labels==2],train_all.shape[0])\ndigit3 = class_def(train_all[labels==3],train_all.shape[0])\ndigit4 = class_def(train_all[labels==4],train_all.shape[0])\ndigit5 = class_def(train_all[labels==5],train_all.shape[0])\ndigit6 = class_def(train_all[labels==6],train_all.shape[0])\ndigit7 = class_def(train_all[labels==7],train_all.shape[0])\ndigit8 = class_def(train_all[labels==8],train_all.shape[0])\ndigit9 = class_def(train_all[labels==9],train_all.shape[0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2ccf9aa8dcb7772275f37d0726a8bc6bc41feac3"},"cell_type":"code","source":"train_mean = train_all.mean(axis = 0)\n\ntrain_all, test_all, labels, test_labels = train_test_split(train_all, labels, test_size = 0.1,random_state=0)\n\ntrain_all = train_all.reset_index(drop=True)\nlabels = labels.reset_index(drop=True)\ntest_all = test_all.reset_index(drop=True)\ntest_labels = test_labels.reset_index(drop=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e96cf39500a21ae2d8ca29fb39b7196c2266e66d"},"cell_type":"code","source":"mean_vectör = train_all.mean(axis=0)\nsw = digit0.cov()+digit1.cov()+digit2.cov()+digit3.cov()+digit4.cov()+digit5.cov()+digit6.cov()+digit7.cov()+digit8.cov()+digit9.cov()\nsb = digit0.scatter_b(mean_vectör)+digit1.scatter_b(mean_vectör)+digit2.scatter_b(mean_vectör)+digit3.scatter_b(mean_vectör)+digit4.scatter_b(mean_vectör)+digit5.scatter_b(mean_vectör)+digit6.scatter_b(mean_vectör)+digit7.scatter_b(mean_vectör)+digit8.scatter_b(mean_vectör)+digit9.scatter_b(mean_vectör)\n\nssb = np.linalg.inv(sw).dot(sb) \neigval, vectors = np.linalg.eig(ssb)\n\nz1 = np.dot(train_all, vectors[:,0])\nz2 = np.dot(train_all, vectors[:,1])\n\nfor i in range(10):\n    z1_digits = z1[labels == i]\n    z2_digits = z2[labels == i]\n    plt.scatter(z1_digits,z2_digits,label =\"\"+str(i))\n\nplt.title('Traning Data after LDA')\nplt.legend()\nplt.show()\n\nz1_test = np.dot(test_all, vectors[:,0])\nz2_test = np.dot(test_all, vectors[:,1])\n\nplt.figure()\nwith plt.style.context('seaborn-whitegrid'):\n    plt.figure(figsize=(6, 4))\n    for i in range(10):\n        z1_digits_test = z1_test[test_labels==i]\n        z2_digits_test = z2_test[test_labels==i]\n        plt.scatter(z1_digits_test,z2_digits_test,label =\"\"+str(i))\n    plt.title('Test Data after LDA')\n    plt.legend()\n\nsuccess_cnt = 0\nfor k in range(test_labels.shape[0]):\n    distance =[]\n    distance_1 = z1_test[k]-z1\n    distance_2 = z2_test[k]-z2\n    distance = distance_1*distance_1+distance_2*distance_2\n    if(labels[np.argmin(distance)] == test_labels[k]):\n        success_cnt = success_cnt+1 \n        \ntest_error_LDA = 1-(success_cnt/test_all.shape[0])\n\nprint('Q2-LDA Test Error')\nprint(test_error_LDA)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}