{"cells":[{"metadata":{},"cell_type":"markdown","source":"# MNIST Perceptron examples:"},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport math\nimport matplotlib.pyplot as plt, matplotlib.image as mpimg\n\ntrain_labeled_images = pd.read_csv('/kaggle/input/digit-recognizer/train.csv')\ntest_labeled_images = pd.read_csv('/kaggle/input/digit-recognizer/test.csv')\n\nimages = train_labeled_images.iloc[:,1:]\nlabels = train_labeled_images.iloc[:,:1]\n\nimages_test = test_labeled_images.iloc[:,:]\nlabels_test = test_labeled_images.iloc[:,:1]\n\nm_train = images.values.shape[0]\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"m_train","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_pred.to_csv('mnist_submission.csv', index = False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"print(m_train)\nprint(images)\n#plt.imshow(images)\n#plt.imshow(28)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### One classs perceptron"},{"metadata":{},"cell_type":"markdown","source":"### define database:"},{"metadata":{"trusted":true,"_kg_hide-input":false},"cell_type":"code","source":"def examples(r1,w,d,samples_number):\n\n    R_random=np.random.rand((samples_number))\n    teta_random=np.random.rand((samples_number))\n    Data=[]\n    \n    cycle=(r1-w)*R_random+(r1+w)*(1-R_random)\n    teta=teta_random*math.pi\n    [x_up,y_up]=[cycle*np.cos(teta),cycle*np.sin(teta)]\n    [x_down,y_down]=[r1+cycle*np.cos(teta),-(cycle*np.sin(teta)+d)]\n    \n    X1=np.concatenate((x_up,x_down),axis=0)\n    X2=np.concatenate((y_up,y_down),axis=0)\n    \n    b=np.ones((1,samples_number*2))\n    X1.resize((1,X1.shape[0]))\n    X2.resize((1,X2.shape[0]))\n    \n    X=np.concatenate((b,X1,X2),axis=0)\n    Y=np.ones((1,samples_number*2))\n    Y[0,samples_number:]=-1          \n    \n    Data.append(X)\n    Data.append(Y)\n\n    return Data\n\ndef examples2(r1,w,d,samples_number):\n\n    R_random=np.random.rand((samples_number))\n    teta_random=np.random.rand((samples_number))\n    Data=[]\n    \n    cycle=(r1-w)*R_random+(r1+w)*(1-R_random)\n    teta=teta_random*math.pi/2\n    [x_up_right,y_up_right]=[cycle*np.cos(teta),cycle*np.sin(teta)]\n    [x_up_left,y_up_left]=[cycle*np.cos(math.pi/2+teta)-d,cycle*np.sin(math.pi/2+teta)]\n    [x_down_right,y_down_right]=[cycle*np.cos(teta),-(cycle*np.sin(teta)+d)]\n    [x_down_left,y_down_left]=[cycle*np.cos(math.pi/2+teta)-d,-(cycle*np.sin(math.pi/2+teta)+d)]\n    \n    X1=np.concatenate((x_up_right,x_up_left,x_down_right,x_down_left),axis=0)\n    X2=np.concatenate((y_up_right,y_up_left,y_down_right,y_down_left),axis=0)\n    print(X1.shape)\n    print(X2.shape)\n    b=np.ones((1,samples_number*4))\n    X1.resize((1,X1.shape[0]))\n    X2.resize((1,X2.shape[0]))\n    \n    X=np.concatenate((b,X1,X2),axis=0)\n    Y=np.ones((4,samples_number*4))*-1\n    Y[0,:samples_number]=1\n    Y[1,samples_number:2*samples_number]=1\n    Y[2,2*samples_number:3*samples_number]=1\n    Y[3,3*samples_number:4*samples_number]=1\n    \n    Data.append(X)\n    Data.append(Y)\n\n    return Data\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"#### Finding separation:"},{"metadata":{"trusted":true},"cell_type":"code","source":"samples_number=1000\n\n#initializing paramaters\nnp.random.seed(1)\n#Generating data\nData=examples(r1=7,w=1,d=1,samples_number=1000)\n[X,Y]=Data\n\nplt.figure(0,figsize=(8, 8))\nplt.plot(X[1,:samples_number],X[2,:samples_number],'bo',markersize=1.2)\nplt.plot(X[1,samples_number:],X[2,samples_number:],'go',markersize=1.2)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### perceptron algorithm:"},{"metadata":{},"cell_type":"markdown","source":"#### sample by sample:"},{"metadata":{"trusted":true},"cell_type":"code","source":"def delta_w_ss(y,w,x):\n    L=(y*np.dot(w,x)<0)*1\n    return L*np.dot(y,x.T) ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"#### batch:"},{"metadata":{"trusted":true},"cell_type":"code","source":"def delta_w_batch(y,w,x):\n    L=(y*(np.dot(w,x))<0)*1\n    return np.dot(L*y,x.T) ","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### define our vectors and matrix:"},{"metadata":{"trusted":true},"cell_type":"code","source":"m=2*samples_number\nW=np.ones((Y.shape[0],X.shape[0]))\nprint(\"number of samples is:{} matrix X is:{} matrix Y is:{} matrix W shape{}\".format(m,X.shape,Y.shape,W.shape))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### results:"},{"metadata":{},"cell_type":"markdown","source":"#### sample by sample:"},{"metadata":{"scrolled":false,"trusted":true},"cell_type":"code","source":"W=np.ones((Y.shape[0],X.shape[0]))\nepochs=10\nx1=np.linspace(np.min(X[1,:]),np.max(X[1,:]),1000)\nplt.figure(0,figsize=(15, 15))\nplt.plot(X[1,:samples_number],X[2,:samples_number],'bo',markersize=1.2)\nplt.plot(X[1,samples_number:],X[2,samples_number:],'go',markersize=1.2)\nx2=(-W[0,0]-W[0,1]*x1)/(W[0,2]+1e-5)\nFirst_line,=plt.plot(x1,x2,'r',linewidth=3)\n\nfor epoch in range(epochs):\n    for i in range(m):\n        delta_w=delta_w_ss(np.expand_dims(Y[:,i],1),W[0,:],np.expand_dims(X[:,i],1))\n        W=W+delta_w\n    \n        if i%30==0:\n            x2=(-W[0,0]-W[0,1]*x1)/(W[0,2]+1e-5)\n            plt.plot(x1,x2,'--', linewidth=1)\n\nLast_line,=plt.plot(x1,x2,'k',linewidth=3)\n#input(\"Press Enter to continue...\")\nFirst_line.set_label('First solution')\nLast_line.set_label('Final solution')\nplt.legend(fontsize=18,loc='upper right')\nplt.ylim(np.min(X[2,:])-1,np.max(X[2,:])+1)\n\nplt.xlabel(\"X1\",fontsize=18)\nplt.ylabel(\"X2\",fontsize=18)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"W=np.ones((Y.shape[0],X.shape[0]))\nepochs=20\nx1=np.linspace(np.min(X[1,:]),np.max(X[1,:]),1000)\nplt.figure(0,figsize=(15, 15))\nplt.plot(X[1,:samples_number],X[2,:samples_number],'bo',markersize=1.2)\nplt.plot(X[1,samples_number:],X[2,samples_number:],'go',markersize=1.2)\nx2=(-W[0,0]-W[0,1]*x1)/(W[0,2]+1e-5)\nplt.plot(x1,x2,'r',linewidth=3,label='start')\n\nfor epoch in range(epochs):\n    delta_w=delta_w_batch(Y,W,X[:,:])\n    W=W+delta_w\n    \n    x2=(-W[0,0]-W[0,1]*x1)/(W[0,2]+1e-5)\n    plt.plot(x1,x2,'--', linewidth=1,label='epoch_num'+str(epoch+1))\n\nplt.plot(x1,x2,'k',linewidth=3,label='last')\n#input(\"Press Enter to continue...\")\n#First_line.set_label('First solution')\n#Last_line.set_label('Final solution')\nplt.legend(fontsize=18,loc='upper right')\nplt.ylim(np.min(X[2,:])-1,np.max(X[2,:])+1)\n\nplt.xlabel(\"X1\",fontsize=18)\nplt.ylabel(\"X2\",fontsize=18)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Example 2:Multiclass perceptron\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"samples_number=1000\n\n#initializing paramaters\nnp.random.seed(1)\n#Generating data\nData=examples2(r1=3,w=1,d=2,samples_number=samples_number)\n[X,Y]=Data\n\nplt.figure(0,figsize=(8, 8))\nplt.plot(X[1,:samples_number],X[2,:samples_number],'bo',markersize=1.2)\nplt.plot(X[1,samples_number:2*samples_number],X[2,samples_number:2*samples_number],'go',markersize=1.2)\nplt.plot(X[1,2*samples_number:3*samples_number],X[2,2*samples_number:3*samples_number],'ro',markersize=1.2)\nplt.plot(X[1,3*samples_number:4*samples_number],X[2,3*samples_number:4*samples_number],'ko',markersize=1.2)\n\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"#### our matrix shape:"},{"metadata":{"trusted":true},"cell_type":"code","source":"m=samples_number*4\nW=np.ones((Y.shape[0],X.shape[0]))\n\nprint(\"number of samples is:{} matrix X is:{} matrix Y is:{} matrix W shape{}\".format(m,X.shape,Y.shape,W.shape))\n\nprint(\"Y vector for the blue examples looks like:{}\".format(Y[:,0]))\nprint(\"Y vector for the green examples looks like:{}\".format(Y[:,samples_number]))\nprint(\"Y vector for the red examples looks like:{}\".format(Y[:,2*samples_number]))\nprint(\"Y vector for the black examples looks like:{}\".format(Y[:,3*samples_number]))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Loop m and t:"},{"metadata":{"scrolled":true,"trusted":true},"cell_type":"code","source":"epochs=100\nx1=np.linspace(np.min(X[1,:]),np.max(X[1,:]),1000)\nx2=(-W[0,0]-W[0,1]*x1)/(W[0,2]+1e-5)\n\nplt.figure(0,figsize=(10, 10))\nplt.plot(X[1,:samples_number],X[2,:samples_number],'bo',markersize=1.2)\nplt.plot(X[1,samples_number:2*samples_number],X[2,samples_number:2*samples_number],'go',markersize=1.2)\nplt.plot(X[1,2*samples_number:3*samples_number],X[2,2*samples_number:3*samples_number],'ro',markersize=1.2)\nplt.plot(X[1,3*samples_number:4*samples_number],X[2,3*samples_number:4*samples_number],'ko',markersize=1.2)\n\nfor epoch in range(epochs):\n    for i in range(m):\n        delta_w=delta_w_ss(np.expand_dims(Y[:,i],1),W,np.expand_dims(X[:,i],1))\n        W=W+delta_w\n    \n\nx2_blue=(-W[0,0]-W[0,1]*x1)/(W[0,2]+1e-5)\nx2_green=(-W[1,0]-W[1,1]*x1)/(W[1,2]+1e-5)\nx2_red=(-W[2,0]-W[2,1]*x1)/(W[2,2]+1e-5)\nx2_black=(-W[3,0]-W[3,1]*x1)/(W[3,2]+1e-5)\n\nplt.ylim(np.min(X[2,:]),np.max(X[2,:]))\nplt.plot(x1,x2_blue,'b')\nplt.plot(x1,x2_green,'g')\nplt.plot(x1,x2_red,'r')\nplt.plot(x1,x2_black,'k')\n\n#input(\"Press Enter to continue...\")\nplt.xlabel(\"X1\",fontsize=18)\nplt.ylabel(\"X2\",fontsize=18)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"m=samples_number*4\nW=np.ones((Y.shape[0],X.shape[0]))\n\nprint(\"number of samples is:{} matrix X is:{} matrix Y is:{} matrix W shape{}\".format(m,X.shape,Y.shape,W.shape))\n\nprint(\"Y vector for the blue examples looks like:{}\".format(Y[:,0]))\nprint(\"Y vector for the green examples looks like:{}\".format(Y[:,samples_number]))\nprint(\"Y vector for the red examples looks like:{}\".format(Y[:,2*samples_number]))\nprint(\"Y vector for the black examples looks like:{}\".format(Y[:,3*samples_number]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"m=samples_number*4\nW=np.ones((Y.shape[0],X.shape[0]))\nepochs=1000\nx1=np.linspace(np.min(X[1,:]),np.max(X[1,:]),1000)\nx2=(-W[0,0]-W[0,1]*x1)/(W[0,2]+1e-5)\n\nplt.figure(0,figsize=(10, 10))\nplt.plot(X[1,:samples_number],X[2,:samples_number],'bo',markersize=1.2)\nplt.plot(X[1,samples_number:2*samples_number],X[2,samples_number:2*samples_number],'go',markersize=1.2)\nplt.plot(X[1,2*samples_number:3*samples_number],X[2,2*samples_number:3*samples_number],'ro',markersize=1.2)\nplt.plot(X[1,3*samples_number:4*samples_number],X[2,3*samples_number:4*samples_number],'ko',markersize=1.2)\n\nfor epoch in range(epochs):\n        delta_w=delta_w_batch(Y,W,X)\n        W=W+delta_w\n    \n\nx2_blue=(-W[0,0]-W[0,1]*x1)/(W[0,2]+1e-5)\nx2_green=(-W[1,0]-W[1,1]*x1)/(W[1,2]+1e-5)\nx2_red=(-W[2,0]-W[2,1]*x1)/(W[2,2]+1e-5)\nx2_black=(-W[3,0]-W[3,1]*x1)/(W[3,2]+1e-5)\n\nplt.ylim(np.min(X[2,:]),np.max(X[2,:]))\nplt.plot(x1,x2_blue,'b')\nplt.plot(x1,x2_green,'g')\nplt.plot(x1,x2_red,'r')\nplt.plot(x1,x2_black,'k')\n\n#input(\"Press Enter to continue...\")\nplt.xlabel(\"X1\",fontsize=18)\nplt.ylabel(\"X2\",fontsize=18)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","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.6.7"}},"nbformat":4,"nbformat_minor":1}