diff --git a/binary_logistic_regression/ML_2.ipynb b/binary_logistic_regression/ML_2.ipynb new file mode 100644 index 0000000..ac8f1c3 --- /dev/null +++ b/binary_logistic_regression/ML_2.ipynb @@ -0,0 +1,350 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import math\n", + "import random\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv('data.txt', sep=' ', header=None)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 1 2\n", + "0 1.30 -0.540 1\n", + "1 -2.30 -2.500 1\n", + "2 -0.37 -0.047 1\n", + "3 0.49 0.790 1\n", + "4 1.00 0.950 1\n" + ] + } + ], + "source": [ + "print(df.head())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "#converting pandas dataframe to array\n", + "X = df.values" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "#taking 3rd column as labels\n", + "labels = X.T[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "#trimming X with last column and keeping 1st and 2nd\n", + "X = X[:,[0,1]]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def gen_thetas():\n", + " #generating 3 thetas\n", + " poly = np.random.uniform(-0.01,0.01, 3)\n", + " return poly" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "#learning rate\n", + "alpha = 0.01\n", + "\n", + "#dividing dataframe to separate 0's and 1's \n", + "df_new1 = df.head(50)\n", + "df_new2 = df.tail(50)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#plotting data points\n", + "fig = plt.figure(figsize=(8,6))\n", + "ax = fig.add_subplot(1,1,1)\n", + "ax.scatter(df_new1[0],df_new1[1], label = '1')\n", + "\n", + "plt.scatter(df_new2[0],df_new2[1], label = '0')\n", + "\n", + "plt.legend()\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "# get initial thetas\n", + "thetas = gen_thetas()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.00780814, 0.00441117, -0.00360915])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "thetas" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "def model(thetas, x1, x2):\n", + " return thetas[0] + thetas[1]*x1 + thetas[2]*x2\n", + "\n", + "def prediction(thetas, x1): #x1 is list here\n", + " y_predicted = []\n", + " for i in range(len(x1)):\n", + " y_predicted.append((thetas[0] + thetas[1]*x1[i]) * (-1/thetas[2]))\n", + " return y_predicted" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def sigmoid(x):\n", + " return 1. /(1. + math.exp(-x))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "#initial prediction\n", + "y_init = prediction(thetas,X.T[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#plotting initial line\n", + "fig = plt.figure(figsize=(8,6))\n", + "ax = fig.add_subplot(1,1,1)\n", + "ax.scatter(df_new1[0],df_new1[1], label = '1')\n", + "\n", + "plt.scatter(df_new2[0],df_new2[1], label = '0')\n", + "\n", + "plt.plot(X.T[0],y_init,'g', label = 'model line')\n", + "\n", + "plt.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def sgd(x1, x2, alpha, thetas, epochs=5000):\n", + " \n", + " for k in range(epochs): \n", + " for i in range(len(x1)):\n", + " z = model(thetas, x1[i], x2[i])\n", + " \n", + " gradient = labels[i] - sigmoid(z)\n", + " thetas[0] = thetas[0] + alpha * gradient\n", + " thetas[1] = thetas[1] + alpha * gradient * x1[i]\n", + " thetas[2] = thetas[2] + alpha * gradient * x2[i]\n", + " \n", + " return thetas\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "#getting final thetas\n", + "t = sgd(X.T[0],X.T[1],alpha, thetas)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([23.18941305, -3.99543127, 9.11136289])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "#calculating final values of x2 after getting final thetas\n", + "y_new = prediction(t,X.T[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlUAAAHVCAYAAADYXg73AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl4VdW9//HPSgwQBIWClCEiWBFlCKARqnKdUKEoQx2oiCP28tOrFFtKFelFoFS8Yq2laHuptWDBgSIgFRxQQS5UtIkgoDhSpjgwo5RopvX7IxAJOSc5J2efPb5fz+Mj2ftkn+8ZkvPJd629trHWCgAAAKnJ8LoAAACAMCBUAQAAOIBQBQAA4ABCFQAAgAMIVQAAAA4gVAEAADiAUAUAAOAAQhUAAIADCFUAAAAOOMaLO23evLlt166dF3cNAACQlIKCgl3W2hNqu50noapdu3bKz8/34q4BAACSYozZksjtGP4DAABwgCOhyhjTxBgzzxjzvjFmozHmbCeOCwAAEBRODf/9TtKL1tqrjDH1JDV06LgAAACBkHKoMsYcJ+k8STdJkrW2WFJxsscpKSnR9u3b9fXXX6daEnykQYMGysnJUVZWltelAACQVk50qk6WtFPSX4wx3SQVSBplrf33kTcyxoyQNEKS2rZtW+0g27dvV+PGjdWuXTsZYxwoC16z1mr37t3avn272rdv73U5AACklRNzqo6RdIakP1hre0j6t6S7j76RtXaGtTbPWpt3wgnVz0r8+uuv1axZMwJViBhj1KxZM7qPAIBIcCJUbZe03Vr75qGv56kiZCWNQBU+vKYAgKhIOVRZaz+XtM0Y0/HQpj6S3kv1uAAAAEHi1DpVIyXNMcask9Rd0n0OHddV55xzTq23+fGPf6z33qvIjPfdV/VhJvL9jRo1qltxSWjXrp127dpVp9scuT2RxwMAACo4EqqstWsPzZfKtdYOttbudeK4bvvHP/5R620ee+wxderUSVL1UJXI9wdJ2B4PAADp5Mllampz54t3au3nax09ZveW3fVwv4drvE2jRo104MABLV++XBMmTFDz5s21YcMGnXnmmZo9e7aMMbrgggv04IMPat68eSoqKlL37t3VuXNnzZkzp/L7Dxw4oEGDBmnv3r0qKSnR5MmTNWjQoLj3u3nzZvXr10+9e/fW6tWr1a1bN91888269957tWPHDs2ZM0c9e/bUnj17NHz4cG3atEkNGzbUjBkzlJubq927d2vo0KHauXOnevbsKWtt5bFnz56tadOmqbi4WL169dKjjz6qzMzMhJ6zRJ6PgoIC/exnP9OBAwfUvHlzzZw5U61atUrsRQEAIES4TE0ca9as0cMPP6z33ntPmzZt0qpVq6rsv//++5Wdna21a9dqzpw5VfY1aNBACxYs0Ntvv61ly5Zp9OjRVYJOLB9//LFGjRqldevW6f3339eTTz6plStX6sEHH6zsiN17773q0aOH1q1bp/vuu0833HCDJGnixInq3bu31qxZo4EDB2rr1q2SpI0bN+qZZ57RqlWrtHbtWmVmZlarNZXno6SkRCNHjtS8efNUUFCg4cOHa9y4cXU6PgAAQefLTlVtHSU39OzZUzk5OZKk7t27a/Pmzerdu3dC32ut1T333KMVK1YoIyNDhYWF+uKLL9SyZcu439O+fXt17dpVktS5c2f16dNHxhh17dpVmzdvliStXLlSzz77rCTpoosu0u7du7V//36tWLFC8+fPlyRddtllatq0qSTp1VdfVUFBgc466yxJUlFRkVq0aJH8k6HYz0eTJk20YcMGXXLJJZKksrIyulQAgMjyZajyg/r161f+OzMzU6WlpQl/75w5c7Rz504VFBQoKytL7dq1q3WtpiPvLyMjo/LrjIyMyvuO1e06vGRBrKULrLW68cYbNWXKlIRrT6S+w8+HtVadO3fWG2+8kfLxAQAIOob/UpCVlaWSkpJq2/fv368WLVooKytLy5Yt05YtWxy5v/POO69y+G758uVq3ry5jjvuuCrbX3jhBe3dW3GeQJ8+fTRv3jzt2LFDkrRnzx7HapGkjh07aufOnZWhqqSkRO+++65jxwcAIEgIVSkYMWKEcnNzNWzYsCrbhw0bpvz8fOXl5WnOnDk67bTTHLm/CRMmKD8/X7m5ubr77rs1a9YsSRVzrVasWKEzzjhDL7/8cuVlgDp16qTJkyfr0ksvVW5uri655BJ99tlnjtQiSfXq1dO8efN01113qVu3burevTtnDAIAIsvUNoE6HfLy8mx+fn6VbRs3btTpp5/uei1IP15bAIDTrLWuXbXDGFNgrc2r7XZ0qgAAQGC8uf1NZUzMUMakDA352xCvy6mCieoAAMDXSstL9fOXf67f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6xKrYPgPQOQwxAb4R2lpqd544w0tWbJEixcv1vr16xP+3lGjRqWxsuQRqgAAQFqVl5eroKBAS5Ys0ZIlS/TWW28l/L29e/fWZZddpssuu0xdunSRMSaNlaaGUAUAAFJmrdV7772nxYsXa/HixVqxYkXC35uXl6f+/furf//+ysvLU2ZmZu3f5EOEKgBIkV9XaAfS4ZNPPqnsOL344osJf1+XLl0qg9M555yjrKysNFbpDUIVAKTg8ArthxcUPbxCuySCFQKrsLCwMjgtWbJExcXFCX3fySefXDlUd9555yk72x9LlbiFUAUAKahphXZCFfxs165deuGFFyqD05dffpnQ97Vu3bqy43TxxRercePGaa40OAhVAHCEZIfy/LxCO/Dll19q6dKllfOcduzYkdD3fec736kMTpdeeqmaNWuW5krDgVAFAIfUZSjP7yu0I/wOHjyoZcuWVXacNm/enND3NWjQoHKorl+/fmrVqlV6C40AQhUAHFKXobwxfTtWCWISK7TDecXFxVq5cqUWL16sJUuW6P3330/4ew93nPr376/27dunsUoQqjzAmUKAP9VlKI+LIMMpxcXFmj59ukaPHp3091500UWVwem0007z9VpOYUaochlnCgH+VdehPFZoR6LKy8s1c+ZM3XHHHSoqSm7eXbdu3XT11Verf//+6tatmzIyuNKc3/CKuKym4QUA3uJiy3CCtVYLFixQ69atq1yrzhijzMxM3XLLLbUGqgcffFDffPONrLWV/61du1bjxo1Tjx49CFQ+RafKZZwpBPgXQ3lIxooVK3T77bdrw4YNdfr+sWPHauzYsSxJECKEKpdxphDgbwzl4UgvvfSS+vXrV+fvv+222zRp0iQ1b97cwargV/QPXcbwAgD4yyuvvFJtmO7wf4kEqmuuuUZbtmypMlR3+L9HH32UQBUhdKpcxvACALjvnXfeUffu3VM6xmuvvaYLL7zQoYoQRoQqDzC8AADOW79+vXJzc1M6xjPPPKMhQ4Y4VBGihlAFAAiMzz//POWVv0eOHKlp06Y5VBHwLUIVAMBXDh48qGOPPTbl45SWliozM7P2GwIOSWmiujFmqjHmfWPMOmPMAmNME6cKAwCEV1lZWdzJ4ckEqq+++irmBHFrLYEKrkv17L+lkrpYa3MlfShpbOolAQDCIl5wOuaYxAdKtm/fHjc4NWrU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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#final regression/ classification line\n", + "fig = plt.figure(figsize=(10,8))\n", + "ax = fig.add_subplot(1,1,1)\n", + "ax.scatter(df_new1[0],df_new1[1], label = '1')\n", + "\n", + "plt.scatter(df_new2[0],df_new2[1], label = '0')\n", + "\n", + "plt.plot(X.T[0],y_init,'g', label = 'initial model line')\n", + "plt.plot(X.T[0],y_new,'black', label = 'final model line')\n", + "\n", + "plt.legend()\n", + "plt.show()\n" + ] + } + ], + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/binary_logistic_regression/ML_2_lr_001.png b/binary_logistic_regression/ML_2_lr_001.png new file mode 100644 index 0000000..4425de3 Binary files /dev/null and b/binary_logistic_regression/ML_2_lr_001.png differ diff --git a/binary_logistic_regression/ML_2_lr_01.png b/binary_logistic_regression/ML_2_lr_01.png new file mode 100644 index 0000000..c402d9f Binary files /dev/null and b/binary_logistic_regression/ML_2_lr_01.png differ diff --git a/binary_logistic_regression/data.txt b/binary_logistic_regression/data.txt new file mode 100644 index 0000000..1ce3a83 --- /dev/null +++ b/binary_logistic_regression/data.txt @@ -0,0 +1,100 @@ +1.3 -0.54 1 +-2.3 -2.5 1 +-0.37 -0.047 1 +0.49 0.79 1 +1 0.95 1 +-1.9 -1.7 1 +0.61 -0.3 1 +1.4 1.4 1 +-0.53 0.43 1 +-1.1 0.14 1 +0.64 -0.52 1 +-0.76 0.11 1 +1.3 2.4 1 +0.93 0.52 1 +0.095 -0.11 1 +0.44 -0.74 1 +-0.26 -2.3 1 +2.8 1.1 1 +1.3 0.49 1 +0.1 1.7 1 +0.57 -1.5 1 +-1.5 0.05 1 +-0.32 -0.049 1 +0.19 -0.58 1 +-1 -0.26 1 +-0.35 2 1 +-0.4 0.31 1 +-1.7 -0.17 1 +1 0.35 1 +-0.56 -0.82 1 +-0.054 -1 1 +0.35 -0.31 1 +1 0.96 1 +0.44 -1.6 1 +0.26 2.2 1 +-0.36 -0.23 1 +-0.86 0.05 1 +-0.27 1.5 1 +-0.27 0.22 1 +0.75 -0.14 1 +1.6 0.76 1 +0.76 -1.1 1 +0.33 -0.95 1 +-1.4 -0.96 1 +-0.11 -0.56 1 +0.37 -1.2 1 +0.076 0.69 1 +-1.4 0.85 1 +-0.1 0.27 1 +-0.32 0.38 1 +-0.68 -4.6 0 +-0.6 -4.8 0 +-0.49 -3.9 0 +-0.21 -5.4 0 +0.057 -5.4 0 +-1.1 -5.1 0 +-1.8 -4.4 0 +-0.67 -5.7 0 +0.29 -4.7 0 +-0.41 -4.2 0 +1.8 -4.5 0 +0.93 -4.5 0 +0.74 -5.4 0 +-1.2 -4.8 0 +0.84 -5.8 0 +0.21 -3.8 0 +0.5 -5.3 0 +-0.21 -5.9 0 +-0.11 -4.4 0 +0.16 -2.9 0 +-0.52 -3.8 0 +0.42 -6.2 0 +1.1 -4 0 +-0.5 -5.1 0 +0.45 -4.6 0 +-0.24 -4.6 0 +-1 -4.3 0 +0.95 -5.5 0 +-2.2 -5.6 0 +-1.3 -4.4 0 +-1.6 -4.8 0 +2.1 -5.6 0 +0.86 -5.5 0 +0.16 -5 0 +-1.2 -4.9 0 +-0.082 -5.9 0 +0.078 -6.2 0 +1.1 -4.9 0 +-1.2 -3.6 0 +-0.2 -4.8 0 +-2.2 -4.5 0 +-0.75 -4.2 0 +-1.6 -5.3 0 +1.6 -4.8 0 +0.34 -4.6 0 +1.2 -4.3 0 +1.3 -6.4 0 +-0.96 -3.9 0 +1.7 -2.8 0 +-0.77 -4.5 0