├── README.md
├── linear_regression
├── linear_regression_data1.txt
└── linear_regression_example.ipynb
└── logistic_regression
├── data1.txt
├── data2.txt
└── logistic_regression_example.ipynb
/README.md:
--------------------------------------------------------------------------------
1 | ### 关于机器学习的一些小例子
2 | 为了便于阅读和交互式学习,这里的例子都是用的ipython notebook格式。欢迎大家下载自己运行。
3 | 有问题可以联系[@寒小阳](http://blog.csdn.net/han_xiaoyang)
4 | 邮箱:hanxiaoyang.ml@gmail.com
5 |
--------------------------------------------------------------------------------
/linear_regression/linear_regression_data1.txt:
--------------------------------------------------------------------------------
1 | 6.1101,17.592
2 | 5.5277,9.1302
3 | 8.5186,13.662
4 | 7.0032,11.854
5 | 5.8598,6.8233
6 | 8.3829,11.886
7 | 7.4764,4.3483
8 | 8.5781,12
9 | 6.4862,6.5987
10 | 5.0546,3.8166
11 | 5.7107,3.2522
12 | 14.164,15.505
13 | 5.734,3.1551
14 | 8.4084,7.2258
15 | 5.6407,0.71618
16 | 5.3794,3.5129
17 | 6.3654,5.3048
18 | 5.1301,0.56077
19 | 6.4296,3.6518
20 | 7.0708,5.3893
21 | 6.1891,3.1386
22 | 20.27,21.767
23 | 5.4901,4.263
24 | 6.3261,5.1875
25 | 5.5649,3.0825
26 | 18.945,22.638
27 | 12.828,13.501
28 | 10.957,7.0467
29 | 13.176,14.692
30 | 22.203,24.147
31 | 5.2524,-1.22
32 | 6.5894,5.9966
33 | 9.2482,12.134
34 | 5.8918,1.8495
35 | 8.2111,6.5426
36 | 7.9334,4.5623
37 | 8.0959,4.1164
38 | 5.6063,3.3928
39 | 12.836,10.117
40 | 6.3534,5.4974
41 | 5.4069,0.55657
42 | 6.8825,3.9115
43 | 11.708,5.3854
44 | 5.7737,2.4406
45 | 7.8247,6.7318
46 | 7.0931,1.0463
47 | 5.0702,5.1337
48 | 5.8014,1.844
49 | 11.7,8.0043
50 | 5.5416,1.0179
51 | 7.5402,6.7504
52 | 5.3077,1.8396
53 | 7.4239,4.2885
54 | 7.6031,4.9981
55 | 6.3328,1.4233
56 | 6.3589,-1.4211
57 | 6.2742,2.4756
58 | 5.6397,4.6042
59 | 9.3102,3.9624
60 | 9.4536,5.4141
61 | 8.8254,5.1694
62 | 5.1793,-0.74279
63 | 21.279,17.929
64 | 14.908,12.054
65 | 18.959,17.054
66 | 7.2182,4.8852
67 | 8.2951,5.7442
68 | 10.236,7.7754
69 | 5.4994,1.0173
70 | 20.341,20.992
71 | 10.136,6.6799
72 | 7.3345,4.0259
73 | 6.0062,1.2784
74 | 7.2259,3.3411
75 | 5.0269,-2.6807
76 | 6.5479,0.29678
77 | 7.5386,3.8845
78 | 5.0365,5.7014
79 | 10.274,6.7526
80 | 5.1077,2.0576
81 | 5.7292,0.47953
82 | 5.1884,0.20421
83 | 6.3557,0.67861
84 | 9.7687,7.5435
85 | 6.5159,5.3436
86 | 8.5172,4.2415
87 | 9.1802,6.7981
88 | 6.002,0.92695
89 | 5.5204,0.152
90 | 5.0594,2.8214
91 | 5.7077,1.8451
92 | 7.6366,4.2959
93 | 5.8707,7.2029
94 | 5.3054,1.9869
95 | 8.2934,0.14454
96 | 13.394,9.0551
97 | 5.4369,0.61705
98 |
--------------------------------------------------------------------------------
/linear_regression/linear_regression_example.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## 线性回归示例\n",
8 | "\n",
9 | "- [熟悉numpy](#熟悉numpy)\n",
10 | "- [单变量线性回归](#单变量线性回归)\n",
11 | "- [梯度下降](#梯度下降)"
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 1,
17 | "metadata": {
18 | "collapsed": false
19 | },
20 | "outputs": [
21 | {
22 | "name": "stderr",
23 | "output_type": "stream",
24 | "text": [
25 | "/Library/Python/2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n",
26 | " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n",
27 | "/Library/Python/2.7/site-packages/IPython/html.py:14: ShimWarning: The `IPython.html` package has been deprecated. You should import from `notebook` instead. `IPython.html.widgets` has moved to `ipywidgets`.\n",
28 | " \"`IPython.html.widgets` has moved to `ipywidgets`.\", ShimWarning)\n"
29 | ]
30 | }
31 | ],
32 | "source": [
33 | "# %load ../../standard_import.txt\n",
34 | "import pandas as pd\n",
35 | "import numpy as np\n",
36 | "import matplotlib.pyplot as plt\n",
37 | "\n",
38 | "from sklearn.linear_model import LinearRegression\n",
39 | "from mpl_toolkits.mplot3d import axes3d\n",
40 | "\n",
41 | "pd.set_option('display.notebook_repr_html', False)\n",
42 | "pd.set_option('display.max_columns', None)\n",
43 | "pd.set_option('display.max_rows', 150)\n",
44 | "pd.set_option('display.max_seq_items', None)\n",
45 | " \n",
46 | "#%config InlineBackend.figure_formats = {'pdf',}\n",
47 | "%matplotlib inline \n",
48 | "\n",
49 | "import seaborn as sns\n",
50 | "sns.set_context('notebook')\n",
51 | "sns.set_style('white')"
52 | ]
53 | },
54 | {
55 | "cell_type": "markdown",
56 | "metadata": {},
57 | "source": [
58 | "#### 熟悉numpy"
59 | ]
60 | },
61 | {
62 | "cell_type": "code",
63 | "execution_count": 2,
64 | "metadata": {
65 | "collapsed": false
66 | },
67 | "outputs": [],
68 | "source": [
69 | "def warmUpExercise():\n",
70 | " return(np.identity(5))"
71 | ]
72 | },
73 | {
74 | "cell_type": "code",
75 | "execution_count": 3,
76 | "metadata": {
77 | "collapsed": false
78 | },
79 | "outputs": [
80 | {
81 | "data": {
82 | "text/plain": [
83 | "array([[ 1., 0., 0., 0., 0.],\n",
84 | " [ 0., 1., 0., 0., 0.],\n",
85 | " [ 0., 0., 1., 0., 0.],\n",
86 | " [ 0., 0., 0., 1., 0.],\n",
87 | " [ 0., 0., 0., 0., 1.]])"
88 | ]
89 | },
90 | "execution_count": 3,
91 | "metadata": {},
92 | "output_type": "execute_result"
93 | }
94 | ],
95 | "source": [
96 | "warmUpExercise()"
97 | ]
98 | },
99 | {
100 | "cell_type": "markdown",
101 | "metadata": {},
102 | "source": [
103 | "### 单变量线性回归"
104 | ]
105 | },
106 | {
107 | "cell_type": "code",
108 | "execution_count": 4,
109 | "metadata": {
110 | "collapsed": false
111 | },
112 | "outputs": [],
113 | "source": [
114 | "data = np.loadtxt('linear_regression_data1.txt', delimiter=',')\n",
115 | "\n",
116 | "X = np.c_[np.ones(data.shape[0]),data[:,0]]\n",
117 | "y = np.c_[data[:,1]]"
118 | ]
119 | },
120 | {
121 | "cell_type": "code",
122 | "execution_count": 5,
123 | "metadata": {
124 | "collapsed": false
125 | },
126 | "outputs": [
127 | {
128 | "data": {
129 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe4AAAFkCAYAAADmPNjoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VFWe//FPJWGNIqiAG4QWxA1B22jjtIEoodkCJCzS\nDKEJixN8ArI1a4AKICBKCxij4miPIjba8MMAKtqNkuVpcaB1ZFXHR+gEEALYY4cExSz398e1kspW\nqSy13Kr363l8krq13FOJ5FPn3HO+x2YYhiEAAGAJIb5uAAAAcB/BDQCAhRDcAABYCMENAICFENwA\nAFgIwQ0AgIWEefLFy8rKtHjxYp04cUIhISFatmyZmjdvrgULFigkJES33HKL7Ha7J5sAAEBA8Whw\nf/TRR7LZbNqyZYv279+vZ555RoZhaPbs2YqMjJTdbteePXsUExPjyWYAABAwPDpUHhMToxUrVkiS\nvv32W1111VU6duyYIiMjJUl9+vTRvn37PNkEAAACikd73JIUEhKihQsX6q9//as2bNigv/3tb+X3\nhYeH6+LFiy6f/+OPP+rIkSNq3769QkNDPd1cAAB8rrS0VOfPn1ePHj3UsmXLSvd5PLglafXq1fr9\n73+vUaNG6fLly+XHi4qK1KZNG5fPPXLkiMaNG+fpJgIA4HfeeOON8lFqB48Gd0ZGhvLz85WUlKQW\nLVooJCREPXr00P79+3X//fcrOztbvXv3dvka7du3l2Q2/rrrrvNkcwEA8Atnz57VuHHjyjPQmUeD\ne+DAgVqwYIESEhJUUlKixYsX6+abb9bixYtVXFysrl27auDAgS5fwzE8ft111+mmm27yZHMBAPAr\nNV0i9mhwt2zZUuvXr692/PXXX/fkaQEACFgUYAEAwEIIbgAALITgBgDAQghuAAAshOAGAMBCCG4A\nACyE4AYAwEIIbgAALITgBgDAQghuAAAshOAGAMBCCG4AACyE4AYAwEIIbgAALITgBgDAQghuAAAs\nhOAGAMBCCG4AACyE4AYAwEIIbgAALITgBgDAQghuAAAshOAGAMBCCG4AACyE4AYAwEIIbgAALITg\nBgDAQghuAAAshOAGAMBCCG4AACyE4AYAwEIIbgAALITgBgDAQghuAAAshOAGAMBCCG4AACwkzJMv\nXlJSokWLFun06dMqLi7W1KlTdf311yspKUldunSRJI0dO1aDBg3yZDMAAAgYHg3unTt3ql27dnrq\nqaf0r3/9S3FxcUpOTtakSZOUmJjoyVMDABCQPBrcgwYN0sCBAyVJZWVlCgsL09GjR3X8+HHt2bNH\nERERSklJUevWrT3ZDAAAAoZHr3G3atVKrVu3VmFhoWbMmKGZM2eqZ8+emj9/vjZv3qxOnTopLS3N\nk00AACCgeHxy2pkzZzRhwgTFx8dryJAhiomJ0R133CFJ6t+/v7788ktPNwEAgIDh0eC+cOGCJk+e\nrLlz5yo+Pl6SNGXKFB0+fFiStG/fPt15552ebAIAAAHFo9e4N27cqIKCAj3//PNKT0+XzWbTokWL\ntGrVKjVr1kzt27fX8uXLPdkEAAACikeDOyUlRSkpKdWOb9myxZOnBQAgYFGABQAQPPLypJycysdy\ncszjFkFwAwCCR26uNGKElJlp3s7MNG/n5vqyVfVCcAMAgkdUlLR1qzR6tJSaan7dutU8bhEENwAg\nuERHS8nJ0rJl5tfoaF+3qF4IbgBAcMnMlNLTJbvd/OoYNrcIj84qBwDAr+TkVAyPR0eb/40eLW3f\nbpnhcoIbABA8IiIqh3R0tHk7IsKnzaoPghsAEDw6dzb/c2aRnrYD17gBALAQghsAAAshuAEAsBCC\nGwAACyG4AQCwEIIbAAJFAGyggboR3AAQKAJgAw3UjeAGgEARABtooG4ENwAEEotvoIG6EdwAEEgs\nvoEG6kbJUwAIFAGwgQbqRnADQKAIgA00UDeCGwACRQBsoIG6cY0bANBwrB33OoIbANBwrB33OoIb\nANBwrB33OoIbANA4rB33KoIbANA4rB33KmaVAwAajrXjXkdwAwAajrXjXsdQOQCg4Tp3NkPbeVlY\nVJR5nGVhHkFwAwAaj2VhXkNwAwAaj2VhXkNwAwCaBsvCvILgBgA0DZaFeQWzygEAjceyMK8huAEA\njceyMK8huAEAjceWol7j0eAuKSnRokWLdPr0aRUXF2vq1Knq1q2bFixYoJCQEN1yyy2y2+2ebAIA\nAAHFo8G9c+dOtWvXTk899ZQKCgo0fPhw3XbbbZo9e7YiIyNlt9u1Z88excTEeLIZAAAEDI/OKh80\naJBmzJghSSotLVVoaKiOHTumyMhISVKfPn20b98+TzYBAICA4tHgbtWqlVq3bq3CwkLNmDFDs2bN\nkmEY5feHh4fr4sWLnmwCAAABxePruM+cOaMJEyYoPj5eQ4YMUUhIxSmLiorUpk0bTzcBAICA4dHg\nvnDhgiZPnqy5c+cqPj5eknT77bfrwIEDkqTs7Gzde++9nmwCAAABxaOT0zZu3KiCggI9//zzSk9P\nl81mU0pKip544gkVFxera9euGjhwoCebAABAQPFocKekpCglJaXa8ddff92TpwUAIGBRqxwAAAsh\nuAEAsBCCGwAACyG4AQCwEIIbAAALIbgBALAQghsAAAshuAEAsBCCGwAACyG4AQCwEIIbAAALIbgB\nAP4pL0/Kyal8LCfHPB7ECG4AgH/KzZVGjJAyM83bmZnm7dxcX7bK5whuAIB/ioqStm6VRo+WUlPN\nr1u3mseDGMHtCQzvAEDTiI6WkpOlZcvMr9HRvm6RzxHcnsDwDgA0jcxMKT1dstvNr46/q0EszNcN\nCEjOwzvJyeb/bAzvAED95ORUDI9HR5v/jR4tbd8e1H9P6XF7CsM7ANA4ERFmSDv+fkZHm7cjInzZ\nKp8juD2F4R0A3hZo82s6d67es46KMo8HMYLbE5yHd1JTK4bNq/6DAoCmxPyaoFDv4C4sLNTXX3/t\nibYEDoZ3APgCy6eCgluT07Zu3arPPvtMc+fOVVxcnMLDw/Wb3/xGs2bN8nT7rKlz5+pDOfzDAeAN\nzvNr7Hbm1wQgt3rcW7Zs0fz58/XOO++oX79+2rVrl3IY9gUA/8P8moDn9lB527ZtlZWVpejoaIWF\nheny5cuebBcAoL6YXxMU3Boq79atm5KSknTq1Ck98MADmjFjhnr27OnptgEA6sMxv8ZxaY75NQHJ\nreBetWqV/ud//kfdu3dX8+bNFR8frwcffNDTbQMA1Afza4JCncGdk5Oj999/X2fPnlVISIg6dOig\nPn36KCyMomsAAHiby/TdsGGDDh06pGHDhqlDhw6SpHPnzmnbtm36/PPPNX/+fK80EgAAmFwG93vv\nvafdu3crJKTyHLbY2FjFxsYS3AAAeJnLWeUtWrTQ2bNnqx3/9ttv1bx5c481CgAA1Mxlj3vBggUa\nN26cunTpovbt20uSzp8/r3/84x9avXq1VxoIAAAquAzuf/u3f9P777+vQ4cO6dy5czIMQx07dlSv\nXr3ocQMA4AN1Tg0/deqUDhw4UGlWeatWrdSjRw9vtA+Ar+XlmZtUOC8ryskx1wYH+S5NgC+4vMb9\nxhtvaPbs2ZKku+66S3feeackafHixfrjH//o+dYB8D12nAL8isse96ZNm5SRkaFWrVpVOj5x4kTF\nx8dr0qRJHm0cAD/gvONUcrJZ/5odpwCfcdnjDgsLU0lJSbXjP/74o5o1a+axRgHwM847TiUns+MU\n4EMue9xTp05VXFycHnjggUqzyj/55JN6bel58OBBrV27Vq+//rq++OILJSUlqUuXLpKksWPHatCg\nQQ1/BwA8r+qOU9HRhDfgIy6De+jQobr//vu1b9++8lnlkZGRmj59ujp27OjWCV5++WXt2LFD4eHh\nkqQjR45o0qRJSkxMbHTjAXiB845TjsAePbryZhYAvKbObT1btWolm81mPjgkRDabrfy2OyIiIpSe\nnl5+++jRo8rMzFRCQoJSUlJ06dKlBjQbgNc4dpxy9LDZcQrwKZfB/de//lUjR47UgQMHdOnSJRUV\nFWn//v0aO3asdu3a5dYJ+vfvr9DQ0PLbvXr10rx587R582Z16tRJaWlpjXsHAEx5edX3Xc7JMY83\nRufO1XvWUVEsBQN8xOVQ+R/+8Ae99dZbuvrqqysd/+c//6lx48Zp6NCh9T5hTEyMrrzySklmqD/x\nxBP1fg0ANXAs23IMaWdmVgxpE7JAwHDZ47bZbOUh6yw8PLxSL7o+pkyZosOHD0uS9u3bV742HEAj\nOS/bSk2tuC7NdWggoLjscY8ePVpjxoxR//79y2eVX7hwQX/5y180atSoBp1w2bJlWrZsmZo1a6b2\n7dtr+fLlDXodADVwXrZltzPzGwhANsMwDFcPOHz4sLKysnTu3DlJUocOHdSnTx/17NnTKw08deqU\n+vXrpw8//FA33XSTV84JWJZjeNy5UArhDViOq+yrs1b5XXfdpbvuustjjQPQRFi2BQSFOoO7NnFx\ncbr77rv14IMPKiYmpinbBKAhHMu2HCHNsi0gIDU4uF999VW1bdtWP/30U1O2B0BDde5cffY4PW0g\n4NQZ3GVlZfrss8+Un58vm82mDh06qGfPnmrbtq0ksS83AABe5DK4P/vsMy1YsEA33nijrr32Wklm\nrfLc3FytWrVKDzzwgFcaCT/BvswA4HMug3vp0qV66aWXyjcEccjNzdW0adPcrp6GAEGBDwDwOZcF\nWEpLS6uFtiR16tRJdawiQyCiwIdveaqkKQBLcdnjjo6O1tSpUzV48OBKBVh27dqlPn36eKWB8DMU\n+PAdRjwAqI7gnj9/vj744ANlZmZWKsAyYsQIDRw40CsNhJ9hX2bfcR7xcC6wwogHEFTqnFU+YMAA\nDRgwwBttgb+jwIfvMeIBBL069+MGyrEvs+9VHfHIzPR1iwB4mcsed2JiosrKymq9f9OmTU3eIPgx\nCnz4FiMeAFRHcD/66KOaPXu2Vq5cqTZt2nirTQBqQklTAKojuH/9618rKSlJWVlZWrFihbfaBKAm\njHgAkBuT0yZOnKhvvvnGG20BAAB1qHNyms1mU7du3cpvf//99x5tEAAAqF2twV1aWqonn3xSL730\nkiQpPz9fsbGxGjx4sKKiorRv3z6vNRIAAJhqDe53331XJ06c0KhRoyRJzz77rAYPHqyPP/5YL7/8\nslatWuW1RgIAAFOtwf3HP/5Rly5d0tNPP62FCxfqvffe0/Hjx7Vw4UK9+uqrOnv2rBYuXOjNtsLq\nqLUdvPjdA02m1uB+7LHH1Lx5c02ePFndunVTjx49tHbtWq1cuVLR0dG6/vrrtXr1am+2Ff6gMX+A\nHbW2HUVDMjPN27m5Td1K+Bt+90CTqTW4BwwYoMjISM2ZM0effvqp1q5dK0n6z//8T23cuFFr1qzx\nWiODni97K1XPnZsrDR0qvfWWebs+f4DZXSx48bsHmo7h506ePGl0797dOHnypK+b4jvZ2YZx7bWG\nsXeveXvvXvN2drZvzt2mjWFcdZVh2O2V73OX3W4YkvkVwYXfPeAWV9lHrXIr8GVvpaZz79ghzZxp\nbnSRnFy/jS6otR28+N0DTYLgtgrnXaHqG5ZNfW6pYX+AnWttp6ZWfCCoehkAgYffPdBkCG6r8GVv\nxfnc69dLcXEN+wPM7mLBi9890GTqLHkqSTk5OVq3bp0KCgpkGIYMw5DNZtOHH37o6fZB8u2uUFXP\nffvtUlKSFBpq3l+fP8DU2g5e/O6BJuNWcD/xxBNasGCBbrnlFtlsNk+3CVX5cleoquceM0a64YbK\n5+YPMAB4jVvB3a5dOz300EOebgtq48veCj0lAPArbgX3vffeq9WrVysqKkotWrQoP37fffd5rGEA\nAKA6t4L70KFDkqRjx46VH7PZbNq0aZNnWgUAAGrkVnC//vrrnm4HAABwg8vgXrJkiVasWKHx48fX\nOCmNHjcAAN7lMrjHjBkjSZo+fbpXGgMAAFxzGdw9evSQJN1///1eaQwAAHCNymkAAFgIwQ1YiS+3\neAXgF9wK7hUrVlQ7Nn/+fLdPcvDgQY0fP16SlJeXp3//939XQkKCli1b5vZrAJC57/mIERW16uuz\nHzqAgODyGndKSopOnjypI0eO6Ouvvy4/XlJSoosXL7p1gpdfflk7duxQeHi4JGn16tWaPXu2IiMj\nZbfbtWfPHsXExDTiLQBBxHmb1eRkc/MXb23xCsAvuAzuxx57TKdPn9bKlSs1bdq08uOhoaHq2rWr\nWyeIiIhQenq65s2bJ0k6evSoIiMjJUl9+vTRxx9/THAD9eG8zard7t0tXgH4nMvgbtGihX71q1/p\nxRdfrHbfpUuX1LZt2zpP0L9/f50+fbr8tmEY5d+Hh4e73XMH8LOqW7w6dowDEBRcBvfixYu1ceNG\nJSQkyGazVQrdhm7rGRJScVm9qKhIbdq0qfdrAEHLl1u8AvALLoO7W7dukiS73a6+ffs2yQnvuOMO\nHThwQPfdd5+ys7PVu3fvJnldICj4cotXAH7BZXDv3r1bv/71r7Vq1SqFh4dX6nFLDdsdbP78+Vqy\nZImKi4vVtWtXDRw4sN6vAQQttlkFgp7L4J46dao2btyoc+fOacOGDZXuq8/uYDfeeKPefPNNSVKX\nLl3YtAQAgAZyGdyPPPKIHnnkEaWnpys5OdlbbfIveXnmGlnnXk1Ojjk0WbXnAwCAh7lVgGXixIl6\n+umnNWLECA0fPlyrV6/WpUuXPN02/0DBC1gZldaAgON25bQffvhBq1at0po1a1RcXCy73e7ptvkH\n54IXqakVM3q5rggr4IMnEHBcDpU7HD16VDt37iy/vXTpUg0ePNhjjfI7FLyAVVFpDQg4bvW4DcNQ\nQUFB+e2CggKFhoZ6rFF+p2rBC0fvBbAC5w+eycl88AQszq0ed2JiokaPHq2HHnpIkvTRRx/pP/7j\nPzzaML9BwQtYHZXWgIDiVnA/9NBDuuuuu3TgwAGVlZUpLS1Nt956q6fb5h8oeAEr44MnEHDcCu5x\n48Zp9+7d6t69u6fb438oeAEr44MnEHDcCu7bbrtNGRkZ6tmzp1q2bFl+/IYbbvBYwwA0AT54AgHH\nreA+ePCgDh48WOlYQzcZAQAADedWcH/00UeebgdgbVTYA+AlLpeD5efna9q0aRo6dKjsdnulJWEA\nnFDoBICXuAzuRYsW6eabb9bcuXP1008/afXq1d5qF+A+fyjrSYU9AF5SZ4979uzZ6tOnj5YvX65D\nhw55q12A+/ylt0uhEwBe4DK4mzVrVul759uAx7nbk/aX3i4V9gB4gVslTx1sNpun2gFUV5+etK97\nu86FTlJTKz5IVP3gAQCN5HJW+ddff61+/fqV387Pz1e/fv1kGAbLweB59dkgw9dlPSl0AsBLXAb3\nBx984K12WFcwLAPy5Xt0Z2c2fyjrSaETAF7icqj8xhtvdPkf5D8TozzJl+/RnevGjt6uI9Qb0tv1\nh5npAOCGel3jRg38ZWKUJ/nqPbp73bhz5+ptiYqq32hAMHwAAxAQCO7GysuTQkMrT4wKDQ28nlpj\nJ381pEfbFD1pdwXDBzAAAYHgbqzcXCk2Vlq/3hzOXb/evO3LnpqrkGzokHBjlzo1pEdbV0/a+b04\nvnd+L/Ud6vb1zHQAcAPB3RRsNskwzO8Nw7xdF09eU3UVkg0J0KZY6uSJHq3ze8nNlYYOrfjQ1JCh\nbtZhA7ACw8+dPHnS6N69u3Hy5ElfN6VmubmGkZ1tGHa7YUjm1+xs87gr2dmGce21hrF3r3l7717z\ndnZ207TL8Xp2e+Xz1HWf4/0427rV/K9q++t6jzVx/jk1Bef30qaNYVx1Vc3vqy6e/n0AQD24yj6C\nuym4CkJPPM9drkKytvs8GWCeer/O76WhHwxq+sDS0A8nANBIBLcnNTbomroH6tDQHrc79zeEpz4Q\nNFWPGwD8CMHtSY3pqXmqB+oqJN0N0Kb+QOGJHq3ze8nONkO7TRvze4a6AViYq+yzGYZjVpV/OnXq\nlPr166cPP/xQN910k6+b03RycszJU889J91wg1RaWlHtS2pcVTJXlc6kuqugZWZWLzPqjzOsnd+n\n43up4r0EWgU7AEHDVfa5LHkKD3KsUZbMAN+61bz97bfStGnm9w0NnLrKb7q6zx/Kh7rL+X1SchRA\nkCC4fcU5aNzdSMMb2CwDAPxacK7j9re61P5U+MNR9MT5Z+QoekLtbgDwueAMbn+rS+2PhT/87WcE\nAJAUrMHtq7rUNfX0n3uu4hp3Q6uSeYK3fkb+NvoBAH4uOINb8s3w9P79ZlnOzEwzmJ59Vlq0SJo1\nyzx/To508821X1P2dsh542cUKD17PoAA8JLgDW5vD0/n5Ulnz5q1zOPizPPOmCEVF5uB6BxYtW1J\n6e2Q88bPKFB25QqUDyAA/J/XV5X/LD4+3hg/frwxfvx4Y+HChbU+ziMFWLKzDePqqw1jwwbztqNY\nR1qa50pcOoqFrFtnGK1amcVNJMMID69fARZPl0mt2l53K501tsCKpyrIeZO3fjcAAp7fVU67fPmy\nER8f79ZjPRLcublmSDv/cd2wwTDatfNspa29e83KXs2amSHVooVhTJhQ/8ByN+QaE6b1fW5jSpoG\nUuAFwgcQAD7nd8F98OBBY8CAAcakSZOMCRMmGJ9//nmtj/VoyVNvB0Z2thnWkmH07WsYrVsbhs1m\nGImJ9e9xz5xplvh0fk7VYPX2jlcN+XkG0q5cgfQBBIBP+V1wf/XVV8af//xnwzAM48SJE0ZMTIxR\nWlpa42M9Xqvcmz0kx7kmTDBDNzzc/G/rVvcCqyG1ub0dJvX9eQbKrlyB9AEEgM/5XXBfvnzZ+PHH\nH8tvjxo1yjh79myNjw2YHnfV6+pvvmkGr/N19boCq2rI7d1rvsbMma7b760PJ8Hc4wyUDyAA/ILf\nBfeWLVuM1NRUwzAM4+zZs8agQYO83+NuSA/Jm9eM3VVXKNcWpk3dHnqcANBkXGWfT5aDjRo1SkVF\nRRo3bpzmzJmjVatWKSTEy01x1OR2rE12pyZ3Y5b8OEqJOqtt2Ze76lqu5bxhSNXiLk29fKkhP08A\nQL35ZJORsLAwPfXUU744dYWG7CblvObY1xuC1LSL18iR0syZ5vdRUVJYmDRunHThgrmOPDraDPmw\nMOmBB5r2vbA7FwB4RfAWYHFX1YpY0dFSbKzvNwSpqYe7bJn09NNm+zIzpQMHzOpsiYlmTzoz03xM\nSUnFc+pTGY3qYADgcwR3XaoOKa9fL732mhmGvtwQpKah92nTpJ07JZtNGjxYWrhQatXK7GF/+GH1\nqmTOQ+3PPmv+56xqKFMdDAB8zwfX3OvF48vB3OGYaJWYaK67Xreu8nFfT8CqOtHMMWHNMWmtpgls\nVSeTbdhgvreq1eQ8sbyMGdgA4JLfzSqvD48Fd33DwxF+iYnuP6ex3G2jcwjv3VtRUrVFC7PIy1VX\nme2++mrXs8o3bDAfU1coN3Z5GTPQAcAlgrsm9QkPX61Prm8br7qqojJbeLhhTJtm9qJbtjTv27Ch\n7oBs6PKy+grmNd8AUAeCuzbuhIcneof16e3XJ+BmzqwYFdi716y9PmiQYVx5pVnwxdV53DlXU/8s\nqOsNADUiuF2pKTycg9XxvXPgNXZ4vL4B6E7A1RS69QlGd9rUlNem6XEDQK0I7trUFh41hVi7dmZ5\nUmeNCXB3g6uhowJt2pjD4+4GozcnjHGNGwBcIrhrUld4VA1Mx/XhN9+svqlHQwOurh6xqza6GhVw\nbEDiGB73t2BkVjkAuERw18Sd8KgarI4JYC1bmpO/HLO4r7228mYh7pzDnZ60q+e7G+q1vTcAgN8i\nuBvCOVjbtatY3+y8RnrkSPMx69bV3KOtLVzT0ppmqJjrxAAQkFxln09qlfu9qnXAr77arAH+9dfS\nm29KEyaY1dP+3/+T+vaVVq6suc53bbXNb75Z6tWr4vEN3ZDDuWSp3e678qsAAK8J3uDOyzNLdTqH\nbU6OGZ6OOuCO+x5/XPrmGyktTfrd76SMDKl1a6m4WMrKMoO8ttCsLVybYkOOqruDOTYbAQAErOCt\nVe6q7nZNdcDnzKnoaf/0k9nLbt3a3JFr06bqdb4d6tp6s6FcbdkJAAhYwRvczsPYqanVN+Co6vhx\n6Z13zCHz0FAziDMypG3bzI1Hli2reecsT4Ur+18DQFAK3qFyyf1rxFWveffuLSUlmQEumUPp99xT\nPTQd4RoRYb6Gc7g6huWrDpm7i/2vASAoBW+PW3J/GLtq73bMGOnll6X8/IrHREWZw+zO22A6htyd\nh+WjoszeO9thAgAaIHiDuz7D2DVd8+7YUXrsMff2pq7vsDwAALUI3uBu7DXi+oax87B8cjKzvwEA\nDRK8wd25c8W1ZoeICGnnzsrD3Tk5lW87q08Ye2p2OQAgqARvcEvVl4RlZJgTzTIyzNuuhr8d97sT\nxizdAgA0keCeVV61sllamvl1xQrpn/80w3jJksrD547CLZIZ6qmp0g03mM8bPdoM8WHDzMc4Zo1X\nLejC0i0AQAMFd3BLlYe7ExPNkqZDhpi3J0wwQ/yeeyqWXjl66c89Jy1fLqWkSKWlUliYNH68Gdxl\nZebztm+vWLbF0i0AQBMI7qFyqfJw9zvvmEu9Nm0ya5Bv2mQGs3PIOnrp06ZJFy5INpu5njsuznyd\noUPN0GbWOADAA4K7x13bZiK/+Y30wQdmj3vlSuneeyuHcNXCLZL5fd++ZknUmoq5uKqN3tAiLACA\noBPcPe6qS8Li4qTp06X9+83wfffd6te4pcq99PXrpXXrzJDPzja/1jRRzVVtdAAA3BTcPe6q155z\nc6U//akizKOjzR658zVu5156aKgZ2qWl5kz0JUukDRvMa9+jR5uvI5nBX9sWnwynAwDqIbh73FW5\nU5TF+TEREeZ18VdfNUugxsSYj+nY0XzMt99W7lVThAUA0EjB3eOuqqbZ3xER5tC54/p0587m99u2\nSfffX73HnJFRe6+6sftnc50cAIIePe665OZKU6ZIsbFm8GZmmjPHp0ypfn06L88cPnfuVYeGmseb\noggL18n9h6zwAAARjUlEQVQBIOjR465LVJTZi46LkwYPNpd/hYVJO3ZU723n5pqhbhhmr3rdOnPy\n2q5dTVOEhevkABD06HHXxtFLlsyQnTlT+uEH6dIladasiiHuqrXMDcMMd8n8ahjm9zXVRq9pK9C6\ncJ0cAIIawe0c0A45OeZSsKFDK4bH166tuH/t2orjzkPVjslqM2eawTpzpnnb0atuiqFuNisBgKBG\ncNcWpqWlZm85NlYaOFAqKpJatzYrphUVmUVa4uIqhqod4V9aWjlYS0srJo41dl9uNisBgKBHcNcW\nptOmmdexS0uly5elFi3MXnhamjRokFRcbC7/io6uCPudO+sOVueh7oQEc/KaM1fbiDZ2D3EAgOUR\n3JJ0881mz9r5unFOjpSfL4X8/CNyBGxmpnTggFkhbft2c2MSR1gPG1Z3sDoPdf/Xf1XMVnfc52ro\nvHPn6r1zxxI1AEBQ8MmscsMwlJqaqq+++krNmzfXypUr1alTJ180xZSRYdYYd5QrbdvW7DGXlJjB\nnZhoBnBsrDmjfPlyc5hcMp+XmFgR1q52AataGz062nyduDjzerg/zRJnzTgA+CWf9Lj37Nmjn376\nSW+++abmzJmj1atX+6IZppwcczevZ54xh8KHDJFmzzZ7vmFh5iYj77xj9sZDQszjK1aYYf/uu2Zo\n79zp3iSxmoa6d+2SJk70v1nirBkHAL/kkx73p59+qqife3K9evXSkSNHfNEMk/P66u+/r9iX+9FH\nzUCNipJ69jR7yiNHmte97faKrTsd17gdtcld9ZZrqsxWWipt3tzwamqewppxAPBLPulxFxYW6sor\nryy/HRYWprKyMl80peK6cdV9uS9frlwsJTnZrEk+fbo5tN0Uk8T8fZY4a8YBwO/4JLivuOIKFRUV\nld8uKytTSIgP58nVFaBV104fP940k8T8fZY4a8YBwO/4JC1/+ctfKisrS5L0+eefq3v37r5oRgVX\nAerJXrE/zxL399EAAAhSPrnG3b9/f/3tb3/Tb3/7W0ny7eQ0qeZrz86B2tga41bUFLXVAQBNzifB\nbbPZtGzZMl+cumZ1LX1yFeqBKljfNwD4OQqwSCx9AgBYBsEtNb6GOAAAXkJwO7D0CQBgAQS3A0uf\nAAAWQHBL5kS0kSOlJUsqL3167rnad+oCAMAHCG7JnD2+bJlZxjQz0xwmX7JEWrq0aSeo5eVVXwft\nahtPAACqILglc9nTtGmVJ6itWFF37fH6YvY6AKCRCG5nnp6gxux1AEAjEdzOvDFBjdnrAIBGILgd\nvFWbm9nrAIBG8EnJU7/kjdrczh8OHPtuu7OPNwAAPyO4HbxRm5uNOwAAjURwexMbdwAAGolr3AAA\nWAjBDQCAhRDcAABYSHAGN6VHAQAWFZzBTelRAIBFBWdwU3oUAGBRwRncEqVHAQCWFLzBTelRAIAF\nBWcBFkqPAgAsKjiDm9KjAACLCs7gpvQoAMCigvcaNwAAFkRwAwBgIQQ3AAAWQnADAGAhBDcAABZC\ncAMAYCEENwAAFkJwAwBgIQQ3AAAWQnADAGAhBDcAABZCcAMAYCE+2WSkT58+6tKliyTpnnvu0axZ\ns3zRDAAALMfrwZ2Xl6c777xTL7zwgrdPDQCA5Xl9qPzIkSPKz8/X7373OyUlJenEiRPebgIAAJbl\n0R73tm3b9Nprr1U6ZrfblZSUpAEDBujTTz/V3LlztW3btlpfo7S0VJJ09uxZTzYVAAC/4cg8RwY6\n82hwjxo1SqNGjap07Mcff1RoaKgk6d5779X58+ddvobj/nHjxnmmkQAA+Knz588rIiKi0jGvX+NO\nT0/XVVddpSlTpujLL7/U9ddf7/LxPXr00BtvvKH27duXBz4AAIGstLRU58+fV48ePardZzMMw/Bm\nYy5evKi5c+eqqKhIYWFhWrp0qX7xi194swkAAFiW14MbAAA0HAVYAACwEIIbAAALIbgBALAQghsA\nAAvxSa1yfzBixAhdccUVkqSbbrpJq1at8nGL4I6DBw9q7dq1ev3115WXl6cFCxYoJCREt9xyi+x2\nu6+bBxecf3dffPGFkpKSyvcsGDt2rAYNGuTbBqJGJSUlWrRokU6fPq3i4mJNnTpV3bp149+eDwVl\ncP/000+SpE2bNvm4JaiPl19+WTt27FB4eLgkafXq1Zo9e7YiIyNlt9u1Z88excTE+LiVqEnV392R\nI0c0adIkJSYm+rZhqNPOnTvVrl07PfXUUyooKNDw4cN122238W/Ph4JyqPzLL7/UpUuXNHnyZCUm\nJurgwYO+bhLcEBERofT09PLbR48eVWRkpCRzx7l9+/b5qmmoQ02/u8zMTCUkJCglJUWXLl3yYevg\nyqBBgzRjxgxJZlGQ0NBQHTt2jH97PhSUwd2yZUtNnjxZr7zyilJTU/X73/9eZWVlvm4W6tC/f/9K\n1fOcSxCEh4fr4sWLvmgW3FD1d9erVy/NmzdPmzdvVqdOnZSWlubD1sGVVq1aqXXr1iosLNSMGTM0\na9Ys/u35WFAGd5cuXTRs2LDy79u2bVtnzXT4n5CQiv99i4qK1KZNGx+2BvURExOjO+64Q5IZ6l9+\n+aWPWwRXzpw5owkTJig+Pl5Dhgzh356PBWVwb9++XU8++aQkKT8/X0VFRWrfvr2PW4X6uuOOO3Tg\nwAFJUnZ2tu69914ftwjumjJlig4fPixJ2rdvn+68804ftwi1uXDhgiZPnqy5c+cqPj5eknT77bfz\nb8+HgnJy2qhRo7Ro0SKNGzdONptNq1atqvQJEtYwf/58LVmyRMXFxeratasGDhzo6ybBTcuWLdOy\nZcvUrFkztW/fXsuXL/d1k1CLjRs3qqCgQM8//7zS09Nls9mUkpKiJ554gn97PkKtcgAALIRuJgAA\nFkJwAwBgIQQ3AAAWQnADAGAhBDcAABZCcAMAYCEENyDp9OnT6tGjh+Lj4xUfH6/Y2FhNnjxZ+fn5\nTXqe5557Ts8995zLx6SlpenTTz+VJC1evFhHjx5t0jY4y8rK0sMPP6y5c+dWuy8zM1Njx45VXFyc\nhg4dqg0bNpTf52hXYWGhkpOT3T7fs88+q71799a7nQsWLFBGRkb57TNnzighIUGDBw9WcnKyfvjh\nh2rPuXjxopKSkjR48GCNHz9e3333nSSpuLhY8+bN0+DBgzVixAgdP368/Dlr1qzRoEGDFBsbq88+\n+6ze7QS8wgBgnDp1ynj44YcrHfvDH/5gJCcnN+l50tLSjLS0NJePSUhIMPbv39+k563NwoULjT//\n+c/VjmdlZRn9+vUzcnNzDcMwjMuXLxtTp041NmzYUOlxJ0+erPZza0r5+flGUlKScffddxtvv/12\n+fGkpCTjvffeMwzDMNLT042nn3662nOXL19uvPTSS4ZhGEZGRoYxc+ZMwzAM45VXXjHsdrthGIZx\n4MABY/To0YZhGMbu3buNpKQkwzAM48SJE0b//v2N0tJSj703oKHocQO1iIyMVG5uriTp888/1yOP\nPKK4uDhNnDhRJ0+elCSNHz9eK1as0IgRIxQbG6uPP/5YkrRw4cJKPcTbbrut2utv3rxZjzzyiIYO\nHarhw4fr+PHjysjI0JEjR7R48WL97//+r8aPH19eWvLFF1/UkCFDNGzYMK1Zs0aGYej06dOKj4/X\nvHnzNHToUE2cOFEFBQXVzrV3717FxcVp+PDhmjZtmr777jtt3bpVH374oV544QVt27at0uM3btyo\nadOmqXPnzpKk5s2bKzU1Vffdd1/5+96/f79Wrlypc+fOafr06dqwYYPWrVtX/hoLFy7U7t27K72u\n4+fibrt37dqlmJiYSpW5SkpKdODAAQ0YMECSNGLECL3//vvVnpuZmVm+J0FsbKxycnJUWlqqzMxM\nDR06VJL5O/7+++919uxZZWVlafDgwZLMPQxuvPFGffbZZ/rqq680ZswYjRo1SuPGjVNeXl61cwHe\nRHADNSguLtbu3bv1y1/+UsXFxZo9e7bsdrsyMjI0ZswYzZo1q/yxJSUl2r59u55++mnNmzdPJSUl\n1V7PZrNVul1YWKiPPvpImzdv1q5du9SvXz/96U9/UlxcnHr06KGVK1eqe/fu5Y/PyspSZmam3n77\nbWVkZCg3N1dbtmyRZG5TO2nSJO3atUtXXnmldu3aVelc//znP2W32/XCCy9ox44duueee7R8+XKN\nHj1aDz/8sB5//HGNGjWq0nOOHTumnj17VjrWsWNHPfDAA5Xe0+LFi9WhQwelpaVpxIgReueddyRJ\nP/zwg/77v//b5R7NdbVbkiZPnlytbf/3f/+nK6+8srxMcfv27Wu8pHHu3LnyPQhCQ0N1xRVX6Lvv\nvtO5c+fUoUOH8se1b99eZ86cqfR4Sbr22mt19uxZvfrqq5o0aZK2bdumhIQEff7557W+J8AbCG7g\nZ/n5+YqPj1dcXJzi4uIkSXPmzNE//vEPtW3btnwjjIEDB+rkyZMqLCyUJI0dO1aSufFChw4d9NVX\nX9V5riuuuEJr167VO++8o2eeeUZ79+6ttCe1UaUS8SeffKIhQ4aoefPmCgkJ0ciRI/XJJ59Ikq65\n5pryHv0tt9yi77//vtJzDx06pF69eun666+XJI0ZM6b8ubUJCQmp1oa6dOrUSTfddJP+/ve/6y9/\n+Yv69u2rZs2a1fr4utpdm5ra5e5eA6GhodWebxhGpS1Hq77uQw89pOXLlyslJUXNmjUr760DvhKU\nm4wANenYsaPefvvtasfPnDlT4x97xx7uzn/0y8rKym87nlNcXFztNc+ePavx48crISFBffr00bXX\nXqsvvvii1rbVdH5Hz75Fixblx202W7XHlpWVVTpWVlam0tLSWs8lSXfddZeOHDmirl27lh87ceKE\nXnzxRa1Zs6bW540cOVI7d+7UmTNnNH36dJfnqKvdtbn66qtVWFgowzBks9l0/vz5Sj1oh44dO+r8\n+fPq2LGjSktLVVhYqLZt25Yf79SpkySVP79Dhw66cOFC+fMdxyMjI3X33XcrMzNTr732mrKysrRi\nxQq32gp4Aj1u4Ge1BccvfvEL/etf/9KRI0ckSe+9955uuOGG8j2IHUO8hw8fVkFBgW699Va1a9dO\nX3/9tSRpz5491V7z8OHDioiI0IQJE9SzZ09lZ2eXfxAICwurNtzeu3dvvfvuu7p8+XL50Hzv3r1d\nttuhV69eOnjwoL799ltJ0ltvvaVf/epXLp8zefJkpaenl1/jLyoq0pNPPqkbb7yx0uPCwsIqfQgY\nMGCAPvnkE3333XfVhtqrqm+P3vmckZGReu+99yRJGRkZ6tOnT7XH9e3bVzt27JAkvfvuu4qMjFRo\naKj69u1bPv/g73//u1q2bKnrrrtOffv21a5du1RWVqbc3Fzl5uaqZ8+emjNnjg4dOqRHHnlEM2bM\n0LFjxxrUbqCp0OMGflb1OrRD8+bNtW7dOi1fvlw//PCD2rZtq/Xr15ffn5ubqxEjRkiS1q9fL5vN\nprFjx2rWrFkaPny4evfuXa1H+OCDD2rLli2KjY1Vu3btFBUVpaysLElSVFSUUlNTtWbNmvI2RUdH\n64svvtDIkSNVWlqqqKgoJSQk6MyZM7W22+Gaa67RihUrlJycrJKSEt1www1auXKly+dERUVp5syZ\nmjVrlsrKylRSUqKBAwdq2rRplX5W11xzja677jpNmDBBr732mlq0aKG7775bt956q8vXd36Nhli6\ndKnmz5+vF154Qddff72eeeYZSdL27dt16tQpPf7443r88ce1YMECxcbGqk2bNlq7dq0kc2Ld0qVL\nFRsbq+bNm+upp56SZF4COXTokIYNG1a+3W/z5s316KOPavHixXr++ecVFhamhQsXNrjdQFNgW0+g\nEcaPH6+5c+fW2bsMFoWFhRo7dqxeffVVXXPNNV4/f0FBgV555ZVKkweBQMNQOdAIjek1BppDhw6p\nX79+GjNmjE9CW5K++eYb/fa3v/XJuQFvoccNAICF0OMGAMBCCG4AACyE4AYAwEIIbgAALITgBgDA\nQv4/qZEOuw5wRmEAAAAASUVORK5CYII=\n",
130 | "text/plain": [
131 | ""
132 | ]
133 | },
134 | "metadata": {},
135 | "output_type": "display_data"
136 | }
137 | ],
138 | "source": [
139 | "plt.scatter(X[:,1], y, s=30, c='r', marker='x', linewidths=1)\n",
140 | "plt.xlim(4,24)\n",
141 | "plt.xlabel('Population of City in 10,000s')\n",
142 | "plt.ylabel('Profit in $10,000s');"
143 | ]
144 | },
145 | {
146 | "cell_type": "markdown",
147 | "metadata": {},
148 | "source": [
149 | "#### 梯度下降"
150 | ]
151 | },
152 | {
153 | "cell_type": "code",
154 | "execution_count": 31,
155 | "metadata": {
156 | "collapsed": false
157 | },
158 | "outputs": [],
159 | "source": [
160 | "# 计算损失函数\n",
161 | "def computeCost(X, y, theta=[[0],[0]]):\n",
162 | " m = y.size\n",
163 | " J = 0\n",
164 | " \n",
165 | " h = X.dot(theta)\n",
166 | " \n",
167 | " J = 1.0/(2*m)*(np.sum(np.square(h-y)))\n",
168 | " \n",
169 | " return J"
170 | ]
171 | },
172 | {
173 | "cell_type": "code",
174 | "execution_count": 32,
175 | "metadata": {
176 | "collapsed": false
177 | },
178 | "outputs": [
179 | {
180 | "data": {
181 | "text/plain": [
182 | "32.072733877455676"
183 | ]
184 | },
185 | "execution_count": 32,
186 | "metadata": {},
187 | "output_type": "execute_result"
188 | }
189 | ],
190 | "source": [
191 | "computeCost(X,y)"
192 | ]
193 | },
194 | {
195 | "cell_type": "code",
196 | "execution_count": 35,
197 | "metadata": {
198 | "collapsed": false
199 | },
200 | "outputs": [],
201 | "source": [
202 | "# 梯度下降\n",
203 | "def gradientDescent(X, y, theta=[[0],[0]], alpha=0.01, num_iters=1500):\n",
204 | " m = y.size\n",
205 | " J_history = np.zeros(num_iters)\n",
206 | " \n",
207 | " for iter in np.arange(num_iters):\n",
208 | " h = X.dot(theta)\n",
209 | " theta = theta - alpha*(1.0/m)*(X.T.dot(h-y))\n",
210 | " J_history[iter] = computeCost(X, y, theta)\n",
211 | " return(theta, J_history)"
212 | ]
213 | },
214 | {
215 | "cell_type": "code",
216 | "execution_count": 37,
217 | "metadata": {
218 | "collapsed": false
219 | },
220 | "outputs": [
221 | {
222 | "name": "stdout",
223 | "output_type": "stream",
224 | "text": [
225 | "('theta: ', array([-3.63029144, 1.16636235]))\n"
226 | ]
227 | },
228 | {
229 | "data": {
230 | "image/png": "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\n2TJ16dLlivfNJwL/p3PvW61WuVwuL1b0y9SoUUMhISGy2+16+OGH9cgjj8g4axqE0NBQ2e125eXl\nndPfkJCQSz5rwNvOfnZCeZ/O/m/ky30rl52drW3btunll1/W5MmTNW7cuGrTx4SEBBUVFemWW27R\n008/raFDh1aL383f/OY358zMebl9Kl9vs9nO2beq+Wn/atWqJak0PN577z3dc8895/399NX+uVwu\nTZw4UU8++aRq1KhRsY+v9u+n/+2OHDmiiIgIvf3224qNjdXs2bOveN98IvBtNpvy8vIq3rtcLpnN\nPlH6eY4dO6bhw4frzjvvVFJS0jn9KH+mwC951oC3LVq0SGvWrNHQoUO1c+dOjR8//pzPlXy5b+Ui\nIiLUrVs3Wa1WxcfHKygo6IJ98cU+/vOf/1THjh31v//9Tx988IHGjx+vkpKSiu2+3LezufP/29l/\nd346KKjKli9frmeeeUazZ89WZGRktelfenq6Dh48qMmTJ+uxxx7T7t279dxzz1Wb/kVERKhnz56S\npF69emnbtm0KCwu7on3zidTs2LGjVq5cKUnavHmzmjVr5uWKfpmTJ09q5MiRevzxx3XnnXdKklq0\naFHxaOCvvvpKCQkJatOmjTZu3Kji4mLl5uZq7969atq0qTdLv6R3331Xc+fO1dy5c9W8eXNNnz5d\n3bp1qxZ9K5eQkKBVq1ZJkk6cOKGCggJ16dJFGzZskOTbfczPz684YggLC5PD4VDLli2rRd/O1rJl\ny8v+nezQoUPF352VK1f6xNTe//3vfzVv3jzNnTtX9evXlyS1bdvW5/tnGIbatGmjpUuXas6cOXrp\npZfUpEkTTZgwoVr0Tyr9+1Jeb1pampo2bXrFfzcrZS79X+s3v/mN1qxZU3FV5nPPPeflin6ZWbNm\nKScnR6+99ppeffVVmUwmPfXUU3r22WdVUlKixo0b65ZbbpHJZNLQoUM1ePBgGYahRx99VIGBgd4u\n323jx4/Xn/70p2rTt8TERH3zzTdKTk6WYRiaPHmy6tevr4kTJ/p8H0eOHKkJEyZo8ODBcjqdGjdu\nnFq1alUt+nY2d34nBw0apPHjx2vw4MEKDAzUjBkzvF3+z3K5XJo6darq1aunsWPHymQy6brrrtMD\nDzzg8/0rfx7LhdSqVcvn+yeV/m5OnDhR//rXvxQWFqYZM2YoLCzsivaNufQBAPADPnFKHwAA/DoE\nPgAAfoDABwDADxD4AAD4AQIfAAA/QOADAOAHCHygmmnevLmk0ilHx44de8XaHTZsWMVy+cRRAHwH\ngQ9UM+WTlJw+fVoZGRlXrN3yWfckafHixVesXQCVwydm2gPgvr/85S/64Ycf9OCDD2rmzJlasmSJ\n5syZI8Mw1KpVKz399NMKDAxUly5d1Lp1a506dUoLFizQM888o127dunUqVOKj4/XzJkz9cILL0iS\n7r77br3//vtq3ry5MjIyVFhYqIkTJ2rnzp0ym82699571a9fPy1evFirVq3SmTNndOjQId1www2a\nNGmSTpw4oXHjxqmgoEBms1kTJ05U27ZtvfwvBfgHjvCBamrixImKiYnRzJkztXv3bi1YsEDz58/X\n4sWLFRUVpbfeektS6ZmAUaNGafHixdq8ebMCAwM1f/58ffLJJyooKNBXX32liRMnSpLef/99ST+e\nRXj55ZcVGRmppUuX6p133tErr7yi77//XlLpcy9eeeUVffDBB/riiy+0a9cuLViwQD179tTChQv1\n+OOPa+PGjV74lwH8E0f4gB9Yv369Dhw4oLvvvluGYcjhcKhVq1YV28uPsjt16qSIiAjNmzdP+/bt\n08GDB895UuWF2p06daokKTIyUjfddJM2bNig0NBQdejQoeIxpg0bNtSZM2d0/fXX68EHH1R6eroS\nExOVmprqwV4DOBuBD/gBp9OpW2+9VU899ZSk0qfjOZ1OSaVH6+UPwPn88881c+ZM3XPPPRowYMA5\njzi+kJ8+isPlcsnhcEjSeQ/VMQxDHTt21PLly/XFF1/oo48+0uLFiyvONADwLE7pA9VMeQhbrdaK\nUL/uuuv02WefKSsrq+JJf//3f/93zv6StHbtWt12223q16+foqKilJaWVtGG1WqVy+U653s6d+6s\nhQsXSpKysrL0+eefq3PnzhetbcaMGVqyZIn69eunP/3pT9q+ffsV7j2AiyHwgWqm/PP16OhoxcbG\navjw4WrevLnGjBmj4cOHq2/fvjIMQ/fff/85+0vSXXfdpaVLlyo5OVmTJk1S7969dfjwYUlSr169\ndMcdd6i4uLjie8aOHavTp0+rb9++GjZsmEaPHq0WLVpctKYhQ4bok08+Ub9+/fTAAw/omWee8ei/\nBYAf8XhcAAD8AEf4AAD4AQIfAAA/QOADAOAHCHwAAPwAgQ8AgB8g8AEA8AMEPgAAfuD/AefBODpB\nehgrAAAAAElFTkSuQmCC\n",
231 | "text/plain": [
232 | ""
233 | ]
234 | },
235 | "metadata": {},
236 | "output_type": "display_data"
237 | }
238 | ],
239 | "source": [
240 | "# 画出每一次迭代和损失函数变化\n",
241 | "theta , Cost_J = gradientDescent(X, y)\n",
242 | "print('theta: ',theta.ravel())\n",
243 | "\n",
244 | "plt.plot(Cost_J)\n",
245 | "plt.ylabel('Cost J')\n",
246 | "plt.xlabel('Iterations');"
247 | ]
248 | },
249 | {
250 | "cell_type": "code",
251 | "execution_count": 38,
252 | "metadata": {
253 | "collapsed": false
254 | },
255 | "outputs": [
256 | {
257 | "data": {
258 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAe4AAAFkCAYAAADmPNjoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd01FX+//HnpIdAqKGTAAlNmgUQlBIEpHcRXSwoCvgT\nV8WvDdCIKKzKqojoWnZd28qqizSVKgEEBBQF6UgJIUAKAQIJaTP398fHNEoIJJPJTF6PczhhJpOZ\n+5mck9fc+7mf99tmjDGIiIiIW/By9QBERESk6BTcIiIibkTBLSIi4kYU3CIiIm5EwS0iIuJGFNwi\nIiJuxMeZT+5wOJgyZQoHDx7Ey8uLqVOn4ufnxzPPPIOXlxdNmjQhKirKmUMQERHxKE4N7h9++AGb\nzcYXX3zBpk2beP311zHGMHHiRNq1a0dUVBQrVqygZ8+ezhyGiIiIx3DqUnnPnj2ZNm0aAEePHqVy\n5crs3LmTdu3aAdC1a1c2bNjgzCGIiIh4FKfOuAG8vLx49tlnWb58ObNmzWLdunW53wsKCuLMmTOF\n/nx6ejrbt28nJCQEb29vZw9XRETE5ex2O4mJibRq1YqAgIAC33N6cAPMmDGD//u//+O2224jIyMj\n9/7U1FSCg4ML/dnt27czatQoZw9RRESkzPn8889zV6lzODW458+fT3x8POPGjcPf3x8vLy9atWrF\npk2b6NChA2vWrKFjx46FPkdISAhgDb527drOHK6IiEiZcPz4cUaNGpWbgfk5Nbj79OnDM888w113\n3UV2djZTpkyhcePGTJkyhaysLMLDw+nTp0+hz5GzPF67dm3q16/vzOGKiIiUKRc7RezU4A4ICODN\nN9+84P5PP/3UmS8rIiLisVSARURExI0ouEVERNyIgltERMSNKLhFRETciIJbRETEjSi4RURE3IiC\nW0RExI0ouEVERNyIgltERMSNKLhFRETciIJbRETEjSi4RURE3IiCW0RExI0ouEVERNyIgltERMSN\nKLhFRETciIJbRETEjSi4RURE3IiCW0RExI0ouEVERNyIgltERMSNKLhFRETciIJbRETEjSi4RURE\n3IiCW0RExI0ouEVERNyIgltERMSNKLhFRETciIJbRETEjSi4RURE3IiCW0RExI0ouEVERNyIgltE\nRMSNKLhFRETciIJbRETEjSi4RURE3IiPM588OzubSZMmERcXR1ZWFuPHj6dOnTqMGzeOhg0bAnDn\n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\n+apklyvZWVLvhaqMiYhcUpkreXolXF7y1AklOU/u+sN8+t4Sc8eL/zVD33rJ3Pafh8yIuePNA18/\nYRbtXm7SMs9d2RhzPPaYFbqjR1uPq1rVmL59jalUyZi5c/OO51L1xi/3WiX9Xqiut4jIRRWWfeW3\nrScUXPZ9+OG8Zd/Dh60lachbUvb2zruk6iqXx48mneWdr7cy5ot1fGPfgL3JKnxqHqG2TxDjP/uZ\nd0IGMKBZz7y2moWN8XzR0fDZZ9by9eLF1n1//au1m3ziRKvgC1y6ZWj+c94vvJB3Ljvnfcj/XuSM\noTinCkq7raqIiKdwwQeJK+KSGffFZpZVq1odxfIrYtvK3YdOmJc++skMnvphgbaaT7060myY+bSx\nhxQyk77aVYHgYGt5vKhL0cVty3klPKmxiIiIE5S5JiNlwuVKdJ6/e/qFF6xZb0iIVarUbs97fEzM\nBRvGHA7Dz7vj+d+qvew+uQvfugfwa5YCQKuazRl6TW9avfsFtqkvXnqTV2FjDAvL21yXMxMGa1XA\n29u6FOy996yZdlHKj5ZmARVVWRMRuWrlN7gvFx7n757+61+hTRvrGumMDCsc/+zKxYgR1mMGDSKr\nbj2ifznCvNV7OObYi0+dg/jXSANs3Fj/Ooak1yQ8/HrYdQDmvFN4Q47Cxnj+zuwDBwqG+qJFZTcY\nVWVNROSqld/gvlx4XKo4Sf5rpN9+G1avhsmTOTv9VZYENmXh0a2cCdiPT51D+Pll4J3toFtgBIO6\n30PdX3bBHX+G/NSpl2/IUdgYQ0MLv6ZawSgi4pHKb3AX5lLFSfbtg7lzrd7ZH38M//sfiT37s3DJ\nPpbeN5Os01vxbRyLr08W/t7+3BrRk/4nAql2x73wcGpeuDZuDG3bFn9GXNr9xEVExOXKb3AXVoDl\nYsVJ9u+3Cpjccw/Mn8/B+s34pk0/1rS6Hq96sfiErMbXy0Elv4r0b9aXWyO6Wm014eLhWhIz4tLs\nJy4iImVC+Q3uwqp3XeySqSeewKSksG3lL8zr9Ti/NgvHp84B/KqvAxuEZPsysN0Iuje6Cf+ctprg\nvHAt7/2vRUTKqfIb3FdQd9tud7B+7W7+Z67j4H1d8al7kIAq6wAIrVyXIYeh0+RZeM8bAU3yhbYz\nw1U7s0VEyqXyG9xw2XPE6RnZLN90mG+WbeeEXzy+nY/hX2kXAM33JTDkxhF5bTVbRF4YmjnhGhZm\n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\n",
259 | "text/plain": [
260 | ""
261 | ]
262 | },
263 | "metadata": {},
264 | "output_type": "display_data"
265 | }
266 | ],
267 | "source": [
268 | "xx = np.arange(5,23)\n",
269 | "yy = theta[0]+theta[1]*xx\n",
270 | "\n",
271 | "# 画出我们自己写的线性回归梯度下降收敛的情况\n",
272 | "plt.scatter(X[:,1], y, s=30, c='r', marker='x', linewidths=1)\n",
273 | "plt.plot(xx,yy, label='Linear regression (Gradient descent)')\n",
274 | "\n",
275 | "# 和Scikit-learn中的线性回归对比一下 \n",
276 | "regr = LinearRegression()\n",
277 | "regr.fit(X[:,1].reshape(-1,1), y.ravel())\n",
278 | "plt.plot(xx, regr.intercept_+regr.coef_*xx, label='Linear regression (Scikit-learn GLM)')\n",
279 | "\n",
280 | "plt.xlim(4,24)\n",
281 | "plt.xlabel('Population of City in 10,000s')\n",
282 | "plt.ylabel('Profit in $10,000s')\n",
283 | "plt.legend(loc=4);"
284 | ]
285 | },
286 | {
287 | "cell_type": "code",
288 | "execution_count": 39,
289 | "metadata": {
290 | "collapsed": false
291 | },
292 | "outputs": [
293 | {
294 | "name": "stdout",
295 | "output_type": "stream",
296 | "text": [
297 | "[ 4519.7678677]\n",
298 | "[ 45342.45012945]\n"
299 | ]
300 | }
301 | ],
302 | "source": [
303 | "# 预测一下人口为35000和70000的城市的结果\n",
304 | "print(theta.T.dot([1, 3.5])*10000)\n",
305 | "print(theta.T.dot([1, 7])*10000)"
306 | ]
307 | }
308 | ],
309 | "metadata": {
310 | "kernelspec": {
311 | "display_name": "Python 2",
312 | "language": "python",
313 | "name": "python2"
314 | },
315 | "language_info": {
316 | "codemirror_mode": {
317 | "name": "ipython",
318 | "version": 2
319 | },
320 | "file_extension": ".py",
321 | "mimetype": "text/x-python",
322 | "name": "python",
323 | "nbconvert_exporter": "python",
324 | "pygments_lexer": "ipython2",
325 | "version": "2.7.10"
326 | }
327 | },
328 | "nbformat": 4,
329 | "nbformat_minor": 0
330 | }
331 |
--------------------------------------------------------------------------------
/logistic_regression/data1.txt:
--------------------------------------------------------------------------------
1 | 34.62365962451697,78.0246928153624,0
2 | 30.28671076822607,43.89499752400101,0
3 | 35.84740876993872,72.90219802708364,0
4 | 60.18259938620976,86.30855209546826,1
5 | 79.0327360507101,75.3443764369103,1
6 | 45.08327747668339,56.3163717815305,0
7 | 61.10666453684766,96.51142588489624,1
8 | 75.02474556738889,46.55401354116538,1
9 | 76.09878670226257,87.42056971926803,1
10 | 84.43281996120035,43.53339331072109,1
11 | 95.86155507093572,38.22527805795094,0
12 | 75.01365838958247,30.60326323428011,0
13 | 82.30705337399482,76.48196330235604,1
14 | 69.36458875970939,97.71869196188608,1
15 | 39.53833914367223,76.03681085115882,0
16 | 53.9710521485623,89.20735013750205,1
17 | 69.07014406283025,52.74046973016765,1
18 | 67.94685547711617,46.67857410673128,0
19 | 70.66150955499435,92.92713789364831,1
20 | 76.97878372747498,47.57596364975532,1
21 | 67.37202754570876,42.83843832029179,0
22 | 89.67677575072079,65.79936592745237,1
23 | 50.534788289883,48.85581152764205,0
24 | 34.21206097786789,44.20952859866288,0
25 | 77.9240914545704,68.9723599933059,1
26 | 62.27101367004632,69.95445795447587,1
27 | 80.1901807509566,44.82162893218353,1
28 | 93.114388797442,38.80067033713209,0
29 | 61.83020602312595,50.25610789244621,0
30 | 38.78580379679423,64.99568095539578,0
31 | 61.379289447425,72.80788731317097,1
32 | 85.40451939411645,57.05198397627122,1
33 | 52.10797973193984,63.12762376881715,0
34 | 52.04540476831827,69.43286012045222,1
35 | 40.23689373545111,71.16774802184875,0
36 | 54.63510555424817,52.21388588061123,0
37 | 33.91550010906887,98.86943574220611,0
38 | 64.17698887494485,80.90806058670817,1
39 | 74.78925295941542,41.57341522824434,0
40 | 34.1836400264419,75.2377203360134,0
41 | 83.90239366249155,56.30804621605327,1
42 | 51.54772026906181,46.85629026349976,0
43 | 94.44336776917852,65.56892160559052,1
44 | 82.36875375713919,40.61825515970618,0
45 | 51.04775177128865,45.82270145776001,0
46 | 62.22267576120188,52.06099194836679,0
47 | 77.19303492601364,70.45820000180959,1
48 | 97.77159928000232,86.7278223300282,1
49 | 62.07306379667647,96.76882412413983,1
50 | 91.56497449807442,88.69629254546599,1
51 | 79.94481794066932,74.16311935043758,1
52 | 99.2725269292572,60.99903099844988,1
53 | 90.54671411399852,43.39060180650027,1
54 | 34.52451385320009,60.39634245837173,0
55 | 50.2864961189907,49.80453881323059,0
56 | 49.58667721632031,59.80895099453265,0
57 | 97.64563396007767,68.86157272420604,1
58 | 32.57720016809309,95.59854761387875,0
59 | 74.24869136721598,69.82457122657193,1
60 | 71.79646205863379,78.45356224515052,1
61 | 75.3956114656803,85.75993667331619,1
62 | 35.28611281526193,47.02051394723416,0
63 | 56.25381749711624,39.26147251058019,0
64 | 30.05882244669796,49.59297386723685,0
65 | 44.66826172480893,66.45008614558913,0
66 | 66.56089447242954,41.09209807936973,0
67 | 40.45755098375164,97.53518548909936,1
68 | 49.07256321908844,51.88321182073966,0
69 | 80.27957401466998,92.11606081344084,1
70 | 66.74671856944039,60.99139402740988,1
71 | 32.72283304060323,43.30717306430063,0
72 | 64.0393204150601,78.03168802018232,1
73 | 72.34649422579923,96.22759296761404,1
74 | 60.45788573918959,73.09499809758037,1
75 | 58.84095621726802,75.85844831279042,1
76 | 99.82785779692128,72.36925193383885,1
77 | 47.26426910848174,88.47586499559782,1
78 | 50.45815980285988,75.80985952982456,1
79 | 60.45555629271532,42.50840943572217,0
80 | 82.22666157785568,42.71987853716458,0
81 | 88.9138964166533,69.80378889835472,1
82 | 94.83450672430196,45.69430680250754,1
83 | 67.31925746917527,66.58935317747915,1
84 | 57.23870631569862,59.51428198012956,1
85 | 80.36675600171273,90.96014789746954,1
86 | 68.46852178591112,85.59430710452014,1
87 | 42.0754545384731,78.84478600148043,0
88 | 75.47770200533905,90.42453899753964,1
89 | 78.63542434898018,96.64742716885644,1
90 | 52.34800398794107,60.76950525602592,0
91 | 94.09433112516793,77.15910509073893,1
92 | 90.44855097096364,87.50879176484702,1
93 | 55.48216114069585,35.57070347228866,0
94 | 74.49269241843041,84.84513684930135,1
95 | 89.84580670720979,45.35828361091658,1
96 | 83.48916274498238,48.38028579728175,1
97 | 42.2617008099817,87.10385094025457,1
98 | 99.31500880510394,68.77540947206617,1
99 | 55.34001756003703,64.9319380069486,1
100 | 74.77589300092767,89.52981289513276,1
101 |
--------------------------------------------------------------------------------
/logistic_regression/data2.txt:
--------------------------------------------------------------------------------
1 | 0.051267,0.69956,1
2 | -0.092742,0.68494,1
3 | -0.21371,0.69225,1
4 | -0.375,0.50219,1
5 | -0.51325,0.46564,1
6 | -0.52477,0.2098,1
7 | -0.39804,0.034357,1
8 | -0.30588,-0.19225,1
9 | 0.016705,-0.40424,1
10 | 0.13191,-0.51389,1
11 | 0.38537,-0.56506,1
12 | 0.52938,-0.5212,1
13 | 0.63882,-0.24342,1
14 | 0.73675,-0.18494,1
15 | 0.54666,0.48757,1
16 | 0.322,0.5826,1
17 | 0.16647,0.53874,1
18 | -0.046659,0.81652,1
19 | -0.17339,0.69956,1
20 | -0.47869,0.63377,1
21 | -0.60541,0.59722,1
22 | -0.62846,0.33406,1
23 | -0.59389,0.005117,1
24 | -0.42108,-0.27266,1
25 | -0.11578,-0.39693,1
26 | 0.20104,-0.60161,1
27 | 0.46601,-0.53582,1
28 | 0.67339,-0.53582,1
29 | -0.13882,0.54605,1
30 | -0.29435,0.77997,1
31 | -0.26555,0.96272,1
32 | -0.16187,0.8019,1
33 | -0.17339,0.64839,1
34 | -0.28283,0.47295,1
35 | -0.36348,0.31213,1
36 | -0.30012,0.027047,1
37 | -0.23675,-0.21418,1
38 | -0.06394,-0.18494,1
39 | 0.062788,-0.16301,1
40 | 0.22984,-0.41155,1
41 | 0.2932,-0.2288,1
42 | 0.48329,-0.18494,1
43 | 0.64459,-0.14108,1
44 | 0.46025,0.012427,1
45 | 0.6273,0.15863,1
46 | 0.57546,0.26827,1
47 | 0.72523,0.44371,1
48 | 0.22408,0.52412,1
49 | 0.44297,0.67032,1
50 | 0.322,0.69225,1
51 | 0.13767,0.57529,1
52 | -0.0063364,0.39985,1
53 | -0.092742,0.55336,1
54 | -0.20795,0.35599,1
55 | -0.20795,0.17325,1
56 | -0.43836,0.21711,1
57 | -0.21947,-0.016813,1
58 | -0.13882,-0.27266,1
59 | 0.18376,0.93348,0
60 | 0.22408,0.77997,0
61 | 0.29896,0.61915,0
62 | 0.50634,0.75804,0
63 | 0.61578,0.7288,0
64 | 0.60426,0.59722,0
65 | 0.76555,0.50219,0
66 | 0.92684,0.3633,0
67 | 0.82316,0.27558,0
68 | 0.96141,0.085526,0
69 | 0.93836,0.012427,0
70 | 0.86348,-0.082602,0
71 | 0.89804,-0.20687,0
72 | 0.85196,-0.36769,0
73 | 0.82892,-0.5212,0
74 | 0.79435,-0.55775,0
75 | 0.59274,-0.7405,0
76 | 0.51786,-0.5943,0
77 | 0.46601,-0.41886,0
78 | 0.35081,-0.57968,0
79 | 0.28744,-0.76974,0
80 | 0.085829,-0.75512,0
81 | 0.14919,-0.57968,0
82 | -0.13306,-0.4481,0
83 | -0.40956,-0.41155,0
84 | -0.39228,-0.25804,0
85 | -0.74366,-0.25804,0
86 | -0.69758,0.041667,0
87 | -0.75518,0.2902,0
88 | -0.69758,0.68494,0
89 | -0.4038,0.70687,0
90 | -0.38076,0.91886,0
91 | -0.50749,0.90424,0
92 | -0.54781,0.70687,0
93 | 0.10311,0.77997,0
94 | 0.057028,0.91886,0
95 | -0.10426,0.99196,0
96 | -0.081221,1.1089,0
97 | 0.28744,1.087,0
98 | 0.39689,0.82383,0
99 | 0.63882,0.88962,0
100 | 0.82316,0.66301,0
101 | 0.67339,0.64108,0
102 | 1.0709,0.10015,0
103 | -0.046659,-0.57968,0
104 | -0.23675,-0.63816,0
105 | -0.15035,-0.36769,0
106 | -0.49021,-0.3019,0
107 | -0.46717,-0.13377,0
108 | -0.28859,-0.060673,0
109 | -0.61118,-0.067982,0
110 | -0.66302,-0.21418,0
111 | -0.59965,-0.41886,0
112 | -0.72638,-0.082602,0
113 | -0.83007,0.31213,0
114 | -0.72062,0.53874,0
115 | -0.59389,0.49488,0
116 | -0.48445,0.99927,0
117 | -0.0063364,0.99927,0
118 | 0.63265,-0.030612,0
119 |
--------------------------------------------------------------------------------
/logistic_regression/logistic_regression_example.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## 逻辑斯特回归示例\n",
8 | "\n",
9 | "- [逻辑斯特回归](#逻辑斯特回归)\n",
10 | "- [正则化后的逻辑斯特回归](#加正则化项的逻辑斯特回归)"
11 | ]
12 | },
13 | {
14 | "cell_type": "code",
15 | "execution_count": 1,
16 | "metadata": {
17 | "collapsed": false
18 | },
19 | "outputs": [
20 | {
21 | "name": "stderr",
22 | "output_type": "stream",
23 | "text": [
24 | "/Library/Python/2.7/site-packages/matplotlib/font_manager.py:273: UserWarning: Matplotlib is building the font cache using fc-list. This may take a moment.\n",
25 | " warnings.warn('Matplotlib is building the font cache using fc-list. This may take a moment.')\n",
26 | "/Library/Python/2.7/site-packages/IPython/html.py:14: ShimWarning: The `IPython.html` package has been deprecated. You should import from `notebook` instead. `IPython.html.widgets` has moved to `ipywidgets`.\n",
27 | " \"`IPython.html.widgets` has moved to `ipywidgets`.\", ShimWarning)\n"
28 | ]
29 | }
30 | ],
31 | "source": [
32 | "# %load ../../standard_import.txt\n",
33 | "import pandas as pd\n",
34 | "import numpy as np\n",
35 | "import matplotlib as mpl\n",
36 | "import matplotlib.pyplot as plt\n",
37 | "\n",
38 | "from scipy.optimize import minimize\n",
39 | "\n",
40 | "from sklearn.preprocessing import PolynomialFeatures\n",
41 | "\n",
42 | "pd.set_option('display.notebook_repr_html', False)\n",
43 | "pd.set_option('display.max_columns', None)\n",
44 | "pd.set_option('display.max_rows', 150)\n",
45 | "pd.set_option('display.max_seq_items', None)\n",
46 | " \n",
47 | "#%config InlineBackend.figure_formats = {'pdf',}\n",
48 | "%matplotlib inline\n",
49 | "\n",
50 | "import seaborn as sns\n",
51 | "sns.set_context('notebook')\n",
52 | "sns.set_style('white')"
53 | ]
54 | },
55 | {
56 | "cell_type": "code",
57 | "execution_count": 11,
58 | "metadata": {
59 | "collapsed": true
60 | },
61 | "outputs": [],
62 | "source": [
63 | "def loaddata(file, delimeter):\n",
64 | " data = np.loadtxt(file, delimiter=delimeter)\n",
65 | " print('Dimensions: ',data.shape)\n",
66 | " print(data[1:6,:])\n",
67 | " return(data)"
68 | ]
69 | },
70 | {
71 | "cell_type": "code",
72 | "execution_count": 12,
73 | "metadata": {
74 | "collapsed": false
75 | },
76 | "outputs": [],
77 | "source": [
78 | "def plotData(data, label_x, label_y, label_pos, label_neg, axes=None):\n",
79 | " # 获得正负样本的下标(即哪些是正样本,哪些是负样本)\n",
80 | " neg = data[:,2] == 0\n",
81 | " pos = data[:,2] == 1\n",
82 | " \n",
83 | " if axes == None:\n",
84 | " axes = plt.gca()\n",
85 | " axes.scatter(data[pos][:,0], data[pos][:,1], marker='+', c='k', s=60, linewidth=2, label=label_pos)\n",
86 | " axes.scatter(data[neg][:,0], data[neg][:,1], c='y', s=60, label=label_neg)\n",
87 | " axes.set_xlabel(label_x)\n",
88 | " axes.set_ylabel(label_y)\n",
89 | " axes.legend(frameon= True, fancybox = True);"
90 | ]
91 | },
92 | {
93 | "cell_type": "markdown",
94 | "metadata": {},
95 | "source": [
96 | "### 逻辑斯特回归"
97 | ]
98 | },
99 | {
100 | "cell_type": "code",
101 | "execution_count": 13,
102 | "metadata": {
103 | "collapsed": false
104 | },
105 | "outputs": [
106 | {
107 | "name": "stdout",
108 | "output_type": "stream",
109 | "text": [
110 | "('Dimensions: ', (100, 3))\n",
111 | "[[ 30.28671077 43.89499752 0. ]\n",
112 | " [ 35.84740877 72.90219803 0. ]\n",
113 | " [ 60.18259939 86.3085521 1. ]\n",
114 | " [ 79.03273605 75.34437644 1. ]\n",
115 | " [ 45.08327748 56.31637178 0. ]]\n"
116 | ]
117 | }
118 | ],
119 | "source": [
120 | "data = loaddata('data1.txt', ',')"
121 | ]
122 | },
123 | {
124 | "cell_type": "code",
125 | "execution_count": 14,
126 | "metadata": {
127 | "collapsed": false
128 | },
129 | "outputs": [],
130 | "source": [
131 | "X = np.c_[np.ones((data.shape[0],1)), data[:,0:2]]\n",
132 | "y = np.c_[data[:,2]]"
133 | ]
134 | },
135 | {
136 | "cell_type": "code",
137 | "execution_count": 15,
138 | "metadata": {
139 | "collapsed": false
140 | },
141 | "outputs": [
142 | {
143 | "data": {
144 | "image/png": "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\n",
145 | "text/plain": [
146 | ""
147 | ]
148 | },
149 | "metadata": {},
150 | "output_type": "display_data"
151 | }
152 | ],
153 | "source": [
154 | "plotData(data, 'Exam 1 score', 'Exam 2 score', 'Pass', 'Fail')"
155 | ]
156 | },
157 | {
158 | "cell_type": "markdown",
159 | "metadata": {},
160 | "source": [
161 | "#### 逻辑斯特回归假设\n",
162 | "#### $$ h_{\\theta}(x) = g(\\theta^{T}x)$$\n",
163 | "#### $$ g(z)=\\frac{1}{1+e^{−z}} $$"
164 | ]
165 | },
166 | {
167 | "cell_type": "code",
168 | "execution_count": 16,
169 | "metadata": {
170 | "collapsed": true
171 | },
172 | "outputs": [],
173 | "source": [
174 | "#定义sigmoid函数\n",
175 | "def sigmoid(z):\n",
176 | " return(1 / (1 + np.exp(-z)))"
177 | ]
178 | },
179 | {
180 | "cell_type": "markdown",
181 | "metadata": {
182 | "collapsed": true
183 | },
184 | "source": [
185 | "其实scipy包里有一个函数可以完成一样的功能:
\n",
186 | "http://docs.scipy.org/doc/scipy/reference/generated/scipy.special.expit.html#scipy.special.expit"
187 | ]
188 | },
189 | {
190 | "cell_type": "markdown",
191 | "metadata": {},
192 | "source": [
193 | "#### 损失函数\n",
194 | "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\big[-y^{(i)}\\, log\\,( h_\\theta\\,(x^{(i)}))-(1-y^{(i)})\\,log\\,(1-h_\\theta(x^{(i)}))\\big]$$\n",
195 | "#### 向量化的损失函数(矩阵形式)\n",
196 | "#### $$ J(\\theta) = \\frac{1}{m}\\big((\\,log\\,(g(X\\theta))^Ty+(\\,log\\,(1-g(X\\theta))^T(1-y)\\big)$$"
197 | ]
198 | },
199 | {
200 | "cell_type": "code",
201 | "execution_count": 20,
202 | "metadata": {
203 | "collapsed": false
204 | },
205 | "outputs": [],
206 | "source": [
207 | "#定义损失函数\n",
208 | "def costFunction(theta, X, y):\n",
209 | " m = y.size\n",
210 | " h = sigmoid(X.dot(theta))\n",
211 | " \n",
212 | " J = -1.0*(1.0/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y))\n",
213 | " \n",
214 | " if np.isnan(J[0]):\n",
215 | " return(np.inf)\n",
216 | " return J[0]"
217 | ]
218 | },
219 | {
220 | "cell_type": "markdown",
221 | "metadata": {},
222 | "source": [
223 | "#### 求偏导(梯度)\n",
224 | "\n",
225 | "#### $$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m}\\sum_{i=1}^{m} ( h_\\theta (x^{(i)})-y^{(i)})x^{(i)}_{j} $$ \n",
226 | "#### 向量化的偏导(梯度)\n",
227 | "#### $$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m} X^T(g(X\\theta)-y)$$\n"
228 | ]
229 | },
230 | {
231 | "cell_type": "code",
232 | "execution_count": 18,
233 | "metadata": {
234 | "collapsed": false
235 | },
236 | "outputs": [],
237 | "source": [
238 | "#求解梯度\n",
239 | "def gradient(theta, X, y):\n",
240 | " m = y.size\n",
241 | " h = sigmoid(X.dot(theta.reshape(-1,1)))\n",
242 | " \n",
243 | " grad =(1.0/m)*X.T.dot(h-y)\n",
244 | "\n",
245 | " return(grad.flatten())"
246 | ]
247 | },
248 | {
249 | "cell_type": "code",
250 | "execution_count": 19,
251 | "metadata": {
252 | "collapsed": false
253 | },
254 | "outputs": [
255 | {
256 | "name": "stdout",
257 | "output_type": "stream",
258 | "text": [
259 | "('Cost: \\n', 0.69314718055994518)\n",
260 | "('Grad: \\n', array([ -0.1 , -12.00921659, -11.26284221]))\n"
261 | ]
262 | }
263 | ],
264 | "source": [
265 | "initial_theta = np.zeros(X.shape[1])\n",
266 | "cost = costFunction(initial_theta, X, y)\n",
267 | "grad = gradient(initial_theta, X, y)\n",
268 | "print('Cost: \\n', cost)\n",
269 | "print('Grad: \\n', grad)"
270 | ]
271 | },
272 | {
273 | "cell_type": "markdown",
274 | "metadata": {},
275 | "source": [
276 | "#### 最小化损失函数"
277 | ]
278 | },
279 | {
280 | "cell_type": "code",
281 | "execution_count": 22,
282 | "metadata": {
283 | "collapsed": false
284 | },
285 | "outputs": [
286 | {
287 | "data": {
288 | "text/plain": [
289 | " status: 0\n",
290 | " success: True\n",
291 | " njev: 28\n",
292 | " nfev: 28\n",
293 | " hess_inv: array([[ 3.24739469e+03, -2.59380769e+01, -2.63469561e+01],\n",
294 | " [ -2.59380769e+01, 2.21449124e-01, 1.97772068e-01],\n",
295 | " [ -2.63469561e+01, 1.97772068e-01, 2.29018831e-01]])\n",
296 | " fun: 0.20349770158944075\n",
297 | " x: array([-25.16133401, 0.20623172, 0.2014716 ])\n",
298 | " message: 'Optimization terminated successfully.'\n",
299 | " jac: array([ -2.73305312e-10, 1.43144026e-07, -1.58965802e-07])"
300 | ]
301 | },
302 | "execution_count": 22,
303 | "metadata": {},
304 | "output_type": "execute_result"
305 | }
306 | ],
307 | "source": [
308 | "res = minimize(costFunction, initial_theta, args=(X,y), jac=gradient, options={'maxiter':400})\n",
309 | "res"
310 | ]
311 | },
312 | {
313 | "cell_type": "markdown",
314 | "metadata": {},
315 | "source": [
316 | "#### 做一下预测吧"
317 | ]
318 | },
319 | {
320 | "cell_type": "code",
321 | "execution_count": 23,
322 | "metadata": {
323 | "collapsed": true
324 | },
325 | "outputs": [],
326 | "source": [
327 | "def predict(theta, X, threshold=0.5):\n",
328 | " p = sigmoid(X.dot(theta.T)) >= threshold\n",
329 | " return(p.astype('int'))"
330 | ]
331 | },
332 | {
333 | "cell_type": "markdown",
334 | "metadata": {},
335 | "source": [
336 | "#### 咱们来看看考试1得分45,考试2得分85的同学通过概率有多高"
337 | ]
338 | },
339 | {
340 | "cell_type": "code",
341 | "execution_count": 24,
342 | "metadata": {
343 | "collapsed": false
344 | },
345 | "outputs": [
346 | {
347 | "data": {
348 | "text/plain": [
349 | "0.77629066133254787"
350 | ]
351 | },
352 | "execution_count": 24,
353 | "metadata": {},
354 | "output_type": "execute_result"
355 | }
356 | ],
357 | "source": [
358 | "sigmoid(np.array([1, 45, 85]).dot(res.x.T))"
359 | ]
360 | },
361 | {
362 | "cell_type": "markdown",
363 | "metadata": {},
364 | "source": [
365 | "#### 画决策边界"
366 | ]
367 | },
368 | {
369 | "cell_type": "code",
370 | "execution_count": 25,
371 | "metadata": {
372 | "collapsed": false
373 | },
374 | "outputs": [
375 | {
376 | "data": {
377 | "image/png": "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\n",
378 | "text/plain": [
379 | ""
380 | ]
381 | },
382 | "metadata": {},
383 | "output_type": "display_data"
384 | }
385 | ],
386 | "source": [
387 | "plt.scatter(45, 85, s=60, c='r', marker='v', label='(45, 85)')\n",
388 | "plotData(data, 'Exam 1 score', 'Exam 2 score', 'Admitted', 'Not admitted')\n",
389 | "x1_min, x1_max = X[:,1].min(), X[:,1].max(),\n",
390 | "x2_min, x2_max = X[:,2].min(), X[:,2].max(),\n",
391 | "xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))\n",
392 | "h = sigmoid(np.c_[np.ones((xx1.ravel().shape[0],1)), xx1.ravel(), xx2.ravel()].dot(res.x))\n",
393 | "h = h.reshape(xx1.shape)\n",
394 | "plt.contour(xx1, xx2, h, [0.5], linewidths=1, colors='b');"
395 | ]
396 | },
397 | {
398 | "cell_type": "markdown",
399 | "metadata": {},
400 | "source": [
401 | "### 加正则化项的逻辑斯特回归"
402 | ]
403 | },
404 | {
405 | "cell_type": "code",
406 | "execution_count": 41,
407 | "metadata": {
408 | "collapsed": false
409 | },
410 | "outputs": [
411 | {
412 | "name": "stdout",
413 | "output_type": "stream",
414 | "text": [
415 | "('Dimensions: ', (118, 3))\n",
416 | "[[-0.092742 0.68494 1. ]\n",
417 | " [-0.21371 0.69225 1. ]\n",
418 | " [-0.375 0.50219 1. ]\n",
419 | " [-0.51325 0.46564 1. ]\n",
420 | " [-0.52477 0.2098 1. ]]\n"
421 | ]
422 | }
423 | ],
424 | "source": [
425 | "data2 = loaddata('data2.txt', ',')"
426 | ]
427 | },
428 | {
429 | "cell_type": "code",
430 | "execution_count": 42,
431 | "metadata": {
432 | "collapsed": true
433 | },
434 | "outputs": [],
435 | "source": [
436 | "# 拿到X和y\n",
437 | "y = np.c_[data2[:,2]]\n",
438 | "X = data2[:,0:2]"
439 | ]
440 | },
441 | {
442 | "cell_type": "code",
443 | "execution_count": 43,
444 | "metadata": {
445 | "collapsed": false
446 | },
447 | "outputs": [
448 | {
449 | "data": {
450 | "image/png": "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\n3FwqnMw2R1QAAAAASUVORK5CYII=\n",
451 | "text/plain": [
452 | ""
453 | ]
454 | },
455 | "metadata": {},
456 | "output_type": "display_data"
457 | }
458 | ],
459 | "source": [
460 | "# 画个图\n",
461 | "plotData(data2, 'Microchip Test 1', 'Microchip Test 2', 'y = 1', 'y = 0')"
462 | ]
463 | },
464 | {
465 | "cell_type": "markdown",
466 | "metadata": {},
467 | "source": [
468 | "#### 咱们整一点多项式特征出来(最高6阶)"
469 | ]
470 | },
471 | {
472 | "cell_type": "code",
473 | "execution_count": 44,
474 | "metadata": {
475 | "collapsed": false
476 | },
477 | "outputs": [
478 | {
479 | "data": {
480 | "text/plain": [
481 | "(118, 28)"
482 | ]
483 | },
484 | "execution_count": 44,
485 | "metadata": {},
486 | "output_type": "execute_result"
487 | }
488 | ],
489 | "source": [
490 | "poly = PolynomialFeatures(6)\n",
491 | "XX = poly.fit_transform(data2[:,0:2])\n",
492 | "# 看看形状(特征映射后x有多少维了)\n",
493 | "XX.shape"
494 | ]
495 | },
496 | {
497 | "cell_type": "markdown",
498 | "metadata": {},
499 | "source": [
500 | "#### 正则化后损失函数\n",
501 | "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\big[-y^{(i)}\\, log\\,( h_\\theta\\,(x^{(i)}))-(1-y^{(i)})\\,log\\,(1-h_\\theta(x^{(i)}))\\big] + \\frac{\\lambda}{2m}\\sum_{j=1}^{n}\\theta_{j}^{2}$$\n",
502 | "#### 向量化的损失函数(矩阵形式)\n",
503 | "#### $$ J(\\theta) = \\frac{1}{m}\\big((\\,log\\,(g(X\\theta))^Ty+(\\,log\\,(1-g(X\\theta))^T(1-y)\\big) + \\frac{\\lambda}{2m}\\sum_{j=1}^{n}\\theta_{j}^{2}$$"
504 | ]
505 | },
506 | {
507 | "cell_type": "code",
508 | "execution_count": 45,
509 | "metadata": {
510 | "collapsed": true
511 | },
512 | "outputs": [],
513 | "source": [
514 | "# 定义损失函数\n",
515 | "def costFunctionReg(theta, reg, *args):\n",
516 | " m = y.size\n",
517 | " h = sigmoid(XX.dot(theta))\n",
518 | " \n",
519 | " J = -1.0*(1.0/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y)) + (reg/(2.0*m))*np.sum(np.square(theta[1:]))\n",
520 | " \n",
521 | " if np.isnan(J[0]):\n",
522 | " return(np.inf)\n",
523 | " return(J[0])"
524 | ]
525 | },
526 | {
527 | "cell_type": "markdown",
528 | "metadata": {},
529 | "source": [
530 | "#### 偏导(梯度)\n",
531 | "\n",
532 | "#### $$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m}\\sum_{i=1}^{m} ( h_\\theta (x^{(i)})-y^{(i)})x^{(i)}_{j} + \\frac{\\lambda}{m}\\theta_{j}$$ \n",
533 | "#### 向量化的偏导(梯度)\n",
534 | "#### $$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m} X^T(g(X\\theta)-y) + \\frac{\\lambda}{m}\\theta_{j}$$\n",
535 | "##### $$\\text{注意,我们另外自己加的参数 } \\theta_{0} \\text{ 不需要被正则化}$$"
536 | ]
537 | },
538 | {
539 | "cell_type": "code",
540 | "execution_count": 39,
541 | "metadata": {
542 | "collapsed": true
543 | },
544 | "outputs": [],
545 | "source": [
546 | "def gradientReg(theta, reg, *args):\n",
547 | " m = y.size\n",
548 | " h = sigmoid(XX.dot(theta.reshape(-1,1)))\n",
549 | " \n",
550 | " grad = (1.0/m)*XX.T.dot(h-y) + (reg/m)*np.r_[[[0]],theta[1:].reshape(-1,1)]\n",
551 | " \n",
552 | " return(grad.flatten())"
553 | ]
554 | },
555 | {
556 | "cell_type": "code",
557 | "execution_count": 46,
558 | "metadata": {
559 | "collapsed": false
560 | },
561 | "outputs": [
562 | {
563 | "data": {
564 | "text/plain": [
565 | "0.69314718055994529"
566 | ]
567 | },
568 | "execution_count": 46,
569 | "metadata": {},
570 | "output_type": "execute_result"
571 | }
572 | ],
573 | "source": [
574 | "initial_theta = np.zeros(XX.shape[1])\n",
575 | "costFunctionReg(initial_theta, 1, XX, y)"
576 | ]
577 | },
578 | {
579 | "cell_type": "code",
580 | "execution_count": 48,
581 | "metadata": {
582 | "collapsed": false
583 | },
584 | "outputs": [
585 | {
586 | "data": {
587 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+wAAAFRCAYAAADuEicKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdcleX/x/HXAWQIIu6FM7egOXHgwIWKuMqBMzNTM0vT\nsqVZaZn1VSsz9GvDlbnLVebKPcmBOL9u3IqiHEHW9fuDHyeQeQ5n83k+HjyUe53rPhze3Nd1X/d1\naZRSCiGEEEIIIYQQQlgVB0sXQAghhBBCCCGEEBlJhV0IIYQQQgghhLBCUmEXQgghhBBCCCGskFTY\nhRBCCCGEEEIIKyQVdiGEEEIIIYQQwgpJhV0IIYQQQgghhLBCUmE3wNSpU+nRowc9evTAx8eHzp07\n06NHD3r27El8fHyuj7N9+3amTZtmwpJav1mzZhEYGEi3bt345JNPMrx/Z86cwd/fP8v9Y2JiqFu3\nLj179tR9HTp0CIBNmzbRrVs3unfvzksvvcSVK1cAePjwIQMHDqRbt258//33umMdOXKEiRMn5ul8\nPvzwQ/bv3w/ApEmTOHXqFACDBg3ir7/+ynH/9957j59++ilPZcjKnDlzmDJlSq62rV+/Pjdu3DBJ\nOaKiohg+fDhBQUEEBwdz9OjRPG0nbIPkpvEsXbqUoKAgunfvzujRo3n48CEAN2/eZNiwYXTv3p3g\n4GB+++23TPePi4tj/PjxdOnShc6dO7N161bduiVLluDv76/L04EDBwKSm7lhytxMtWfPHnr06JHl\neslN2yUZaTyHDx+mb9++dO/enUGDBnHt2rV063O6tswuI3fv3s0LL7xAz5496dWrF3v27AEkI3PD\nUhn5999/061bNzp37szYsWPRarUAJCcnM23aNDp37kxgYCC//vprpsfM7XYmpUSetG3bVkVERFi6\nGDZp1apVqmfPnkqr1SqllJo2bZqaPn26UkqpxMRE9dNPP6nmzZur+vXrZ3mM3bt3q5dffjnD8nv3\n7qkmTZqoW7duKaWUWrJkiRo2bJhSSqlFixap+fPnK6WUCgoKUjExMSopKUn1799f3bt3z2jnFxAQ\noE6ePKmUUmrgwIFq8+bNOe7z7rvvqh9//NFoZUjr22+/VR999FGutq1fv766fv26Scrx5ptvqnnz\n5imllDp9+rRq2bKliouLM3g7YXskNw13+fJl1aRJExUdHa2UUmrq1Knqk08+UUopNXLkSLVo0SKl\nVEoGNmjQQJeBac2YMUNNmjRJKaXUjRs3lL+/v267t956S23YsCHDPpKbOTNlbsbFxalZs2apRo0a\nqa5du2a5neSmfZCMNNytW7dUkyZN1OnTp5VSKdmVep2Y22vLrDLy8ePHqkmTJup///ufUkqpM2fO\nqEaNGimtVisZmQuWyMj79++rZs2aqatXryqllPryyy/VlClTlFIpdYNXX31VJScnq+joaNWpUyd1\n4sSJDMdeunRprrYzJbnDnkdKKZRS6Zb5+voyduxYOnfuTEREBKtWraJPnz706tWLtm3b6lpm1q5d\ny8iRI4GUVrKZM2cycOBA2rZtyzvvvJPp6x07doyBAwfSt29f2rZty4cffqhbt2PHDnr06EH37t3p\n168fZ86cyXL59evXqV+/vm7ftN+vXbuWAQMG0KtXL4YMGUJsbCwTJ06kX79+dOrUiRdeeIHLly8D\ncO/ePUaPHk3nzp3p2rUrixcv5ubNmzRo0ICYmBjd8QMDAzl79my6czl16hTt2rWjYMGCAHTo0EHX\nUhgREcG5c+f45ptvsn3/jx49ysOHD+nfvz89e/Zk2bJlABQrVox9+/ZRqlQpEhMTuX79Ol5eXgA4\nOzsTFxdHQkICSUlJODo6smzZMtq1a0exYsUyfZ3k5GSaNWuma6WdP38+bdu21a1/+eWX2blzp661\nc9asWdy5c4cJEyZw4sQJALZu3Urv3r1p27YtH3zwQbbnlZnQ0FB69+5N9+7d6dixo67Fd86cObzz\nzjv069ePdu3aMW7cOFatWsXAgQMJCAhg06ZNumNcvHiRQYMGERwczMSJE3ny5AmQ0gLco0cPevXq\nxaRJk3SfaaUUU6dOpW/fvnTt2pWgoKBM79js379fdycg7dfevXvTbZeUlMTff/9N7969AahZsyaV\nKlVi9+7dBm0nbJPkpuG56eLigkaj4fHjxyQnJxMXF4ezszMA33//ve6O+PXr13FycsLV1TXD+7F1\n61b69OkDQJkyZfD39+ePP/4AUjJ1/fr19OzZk1deeYVz584BkpuWzE1IuasXFxfH559/nuW5Sm7a\nD8lIwzPyzz//pHXr1tSsWROAvn376rIjt9eWWWVkYmIiU6ZM4bnnngOgatWqADx48EAy0kozcu/e\nvdStW5fy5csDEBISwoYNGwDYtm0bvXr1QqPR4OnpSVBQEOvWrctw7K1bt+ZqO5Mya/OAHUrb0pWq\nRo0aat26dUoppbRarerbt696+PChUkqpY8eO6Vr11qxZo0aMGKGUSmklGzt2rFJKqZiYGNWyZUt1\n8ODBDK/31ltvqUOHDumO3bRpUxUREaHu3bunGjVqpM6cOaOUUuqvv/5Sw4cPz3J5ZGRkutbFtN+v\nWbNGNWnSRHfn+88//1RTp07VbTt58mT16aefKqWUGj16tPryyy+VUko9fvxYde3aVV29elWNHj1a\n/fLLL0oppfbt26f69u2b4VzWrl2revXqpR48eKCSkpLU5MmTla+vb7ptni3ns+bOnavmzJmjkpOT\n1a1bt1THjh3V1q1bdevDw8NVixYtVKNGjdSxY8eUUko9efJEjRkzRvXs2VOtWLFCRUVFqX79+qnE\nxMQsX0cppd5//321ZMkSpVTKz8vf319dvnxZPX78WDVr1kwlJCSka+0MCAjQtZAPHDhQjR49Wiml\nVGxsrPL391dHjhzJ8BpZtYJev35dDRkyRD19+lQppdTGjRtVcHCwUiqldbNdu3YqJiZGxcXFqSZN\nmuh6KmzdulUFBgbqtgsICFAPHjxQSik1YcIE9dVXX6n4+HjVokULdeDAAaWUUn/88YeqWbOmun79\nujp69Kh68803deWYN2+eGjlyZLbvU3bu3r2r6tatm27ZhAkT1OLFiw3aTtgmyU3Dc1MppebMmaN8\nfHxUixYtVGBgoO59SjVo0CBVp04d3Ws8y9fXN90dn1mzZqnp06erJ0+eqGHDhumyctOmTapVq1bq\nyZMnkpsWzM20Dh48mOUddslN+yEZaXhGTpkyRU2aNEmNGzdO9ejRQ7322mu6u6uZlSszWWXks/7z\nn/+oF198USkl15bWmpHz5s1L1wMgMTFR1axZU8XExKhOnTqp48eP69atWLFCjRkzJsMxc7udKTmZ\nt3kg/2jYsCEABQsWJDQ0lB07dnDlyhVOnz5NbGxspvsEBAQA4O7uTsWKFYmOjs6wzfTp09m5cyfz\n5s3j4sWLxMXF8eTJE/755x+qV69OjRo1gJS71R06dGDLli2ZLr9+/Xq25a9Ro4buzndgYCDly5dn\nyZIlXLlyhUOHDulaTPfv3697NsfDw4P169cD0L9/f7766itCQkJYsWIFISEhGV6jR48e3Lx5k8GD\nB1OoUCGCg4N1rV65NWrUKN3/S5UqRb9+/di6dSvt2rUDwMfHhz179rB7925effVVtm3bhoeHR7rW\n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\n",
588 | "text/plain": [
589 | ""
590 | ]
591 | },
592 | "metadata": {},
593 | "output_type": "display_data"
594 | }
595 | ],
596 | "source": [
597 | "fig, axes = plt.subplots(1,3, sharey = True, figsize=(17,5))\n",
598 | "\n",
599 | "# 决策边界,咱们分别来看看正则化系数lambda太大太小分别会出现什么情况\n",
600 | "# Lambda = 0 : 就是没有正则化,这样的话,就过拟合咯\n",
601 | "# Lambda = 1 : 这才是正确的打开方式\n",
602 | "# Lambda = 100 : 卧槽,正则化项太激进,导致基本就没拟合出决策边界\n",
603 | "\n",
604 | "for i, C in enumerate([0.0, 1.0, 100.0]):\n",
605 | " # 最优化 costFunctionReg\n",
606 | " res2 = minimize(costFunctionReg, initial_theta, args=(C, XX, y), jac=gradientReg, options={'maxiter':3000})\n",
607 | " \n",
608 | " # 准确率\n",
609 | " accuracy = 100.0*sum(predict(res2.x, XX) == y.ravel())/y.size \n",
610 | "\n",
611 | " # 对X,y的散列绘图\n",
612 | " plotData(data2, 'Microchip Test 1', 'Microchip Test 2', 'y = 1', 'y = 0', axes.flatten()[i])\n",
613 | " \n",
614 | " # 画出决策边界\n",
615 | " x1_min, x1_max = X[:,0].min(), X[:,0].max(),\n",
616 | " x2_min, x2_max = X[:,1].min(), X[:,1].max(),\n",
617 | " xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))\n",
618 | " h = sigmoid(poly.fit_transform(np.c_[xx1.ravel(), xx2.ravel()]).dot(res2.x))\n",
619 | " h = h.reshape(xx1.shape)\n",
620 | " axes.flatten()[i].contour(xx1, xx2, h, [0.5], linewidths=1, colors='g'); \n",
621 | " axes.flatten()[i].set_title('Train accuracy {}% with Lambda = {}'.format(np.round(accuracy, decimals=2), C))"
622 | ]
623 | },
624 | {
625 | "cell_type": "code",
626 | "execution_count": null,
627 | "metadata": {
628 | "collapsed": true
629 | },
630 | "outputs": [],
631 | "source": []
632 | }
633 | ],
634 | "metadata": {
635 | "kernelspec": {
636 | "display_name": "Python 2",
637 | "language": "python",
638 | "name": "python2"
639 | },
640 | "language_info": {
641 | "codemirror_mode": {
642 | "name": "ipython",
643 | "version": 2
644 | },
645 | "file_extension": ".py",
646 | "mimetype": "text/x-python",
647 | "name": "python",
648 | "nbconvert_exporter": "python",
649 | "pygments_lexer": "ipython2",
650 | "version": "2.7.10"
651 | }
652 | },
653 | "nbformat": 4,
654 | "nbformat_minor": 0
655 | }
656 |
--------------------------------------------------------------------------------