├── .gitignore ├── readme.md ├── dl1_Perceptron.ipynb ├── dl3_LinearUnit.ipynb └── dl2_Perceptron_Classify.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | .ipynb_checkpoints 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | bin/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | eggs/ 15 | lib/ 16 | lib64/ 17 | parts/ 18 | sdist/ 19 | var/ 20 | *.egg-info/ 21 | .installed.cfg 22 | *.egg 23 | 24 | # Installer logs 25 | pip-log.txt 26 | pip-delete-this-directory.txt 27 | 28 | # Unit test / coverage reports 29 | .tox/ 30 | .coverage 31 | .cache 32 | nosetests.xml 33 | coverage.xml 34 | 35 | # Translations 36 | *.mo 37 | 38 | # Mr Developer 39 | .mr.developer.cfg 40 | .project 41 | .pydevproject 42 | 43 | # Rope 44 | .ropeproject 45 | 46 | # Django stuff: 47 | *.log 48 | *.pot 49 | 50 | # Sphinx documentation 51 | docs/_build/ 52 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 2 |

3 | 4 |

5 | 6 | #### AI圈是什么? 7 | 8 | 我们是一群通过数据竞赛认识的朋友,竞赛大佬们拿奖无数(不包括我)。比赛打累了,突然想做点情怀的事情。 9 | 10 | 以前我们一直孤独的在学习,直到我们相互遇见。所以我们想改变孤独,提供一个温暖的大家庭。 11 | 12 | 我们目前致力于提供一个非盈利平台一起集训学习编程、算法、数学、AI。这里没有小白歧视,大家一起互助共赢。 13 | 14 | 如果您有技术、运营、PS经历,可以公众号回复自己意愿和个人简介加入我们的核心团队。感谢阅读,感谢关注。 15 | 16 | #### 文集介绍 17 | 18 | 这是本系列文集暂定要写的内容: 19 | 20 | ![](https://aigroupz-1258285787.cos.ap-shanghai.myqcloud.com/blog/15451047833646.jpg) 21 | 22 | [不用框架入门进阶深度学习](http://mp.weixin.qq.com/mp/homepage?__biz=MzU4OTczNTg2OQ==&hid=3&sn=e6b1edd8a4b35b5741873e4948495294&scene=18#wechat_redirect) 23 | 24 | - [不用框架入门进阶深度学习(0)-引言](https://mp.weixin.qq.com/s?__biz=MzU4OTczNTg2OQ==&mid=2247483697&idx=1&sn=7d3aa0cf5caaa463c76f7651cdf6cee7&scene=19&token=889866011&lang=zh_CN#wechat_redirect) 25 | - [不用框架入门进阶深度学习(1)-手写感知器](https://mp.weixin.qq.com/s?__biz=MzU4OTczNTg2OQ==&mid=2247483697&idx=1&sn=7d3aa0cf5caaa463c76f7651cdf6cee7&scene=19&token=889866011&lang=zh_CN#wechat_redirect) 26 | - [不用框架入门进阶深度学习(2)-手写感知器做分类任务](https://mp.weixin.qq.com/s?__biz=MzU4OTczNTg2OQ==&mid=2247483697&idx=1&sn=7d3aa0cf5caaa463c76f7651cdf6cee7&scene=19&token=889866011&lang=zh_CN#wechat_redirect) 27 | - [更新中](http://mp.weixin.qq.com/mp/homepage?__biz=MzU4OTczNTg2OQ==&hid=3&sn=e6b1edd8a4b35b5741873e4948495294&scene=18#wechat_redirect) 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /dl1_Perceptron.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## $$不用框架入门进阶深度学习(1)-手写感知器$$\n", 8 | "### 一、And 感知机\n", 9 | "\n", 10 | "And真值表:\n", 11 | "\n", 12 | "|$x_1$|$x_2$|$y$|\n", 13 | "|----|----|----|\n", 14 | "|1|1|1|\n", 15 | "|1|0|0|\n", 16 | "|0|1|0|\n", 17 | "|0|0|0|\n", 18 | "\n", 19 | "权重更新规则:\n", 20 | "$$\n", 21 | "\\begin{equation}\n", 22 | "\\begin{aligned}\n", 23 | "\\Delta b_i&=\\delta (y- \\widehat{y}) \\\\\n", 24 | "\\Delta w_i&=\\delta (y- \\widehat{y})x_i \\\\\n", 25 | "w_i&=w_i + \\Delta w_i\\\\\n", 26 | "b_i&=b_i + \\Delta b_i \n", 27 | "\\end{aligned}\n", 28 | "\\end{equation}\n", 29 | "$$\n", 30 | "\n", 31 | "其中$\\delta叫学习率$,y为正确的输出,$\\widehat{y}为感知机预测$的结果。\n", 32 | "\n" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 1, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "import numpy as np\n", 42 | "\n", 43 | "class Perceptron(object):\n", 44 | " def __init__(self, input_feature_num, activation=None):\n", 45 | " self.activation = activation if activation else self.sign\n", 46 | " self.w = [0.0] * input_feature_num\n", 47 | " self.b = 0.0\n", 48 | "\n", 49 | " def sign(self, z):\n", 50 | " # 阶跃激活函数:\n", 51 | " # sign(z) = 1 if z > 0 \n", 52 | " # sign(z) = 0 otherwise\n", 53 | " return int(z>0)\n", 54 | " \n", 55 | " def predict(self, x):\n", 56 | " # 预测输出函数\n", 57 | " # y_hat = f(wx + b)\n", 58 | " return self.activation(\n", 59 | " np.dot(self.w, x) + self.b)\n", 60 | " \n", 61 | " def fit(self, x_train, y_train, iteration=10, learning_rate=0.1):\n", 62 | " # 训练函数\n", 63 | " for _ in range(iteration):\n", 64 | " for x, y in zip(x_train, y_train):\n", 65 | " y_hat = self.predict(x)\n", 66 | " self._update_weights(x, y, y_hat, learning_rate)\n", 67 | " print(self)\n", 68 | " \n", 69 | " def _update_weights(self, x, y, y_hat, learning_rate):\n", 70 | " # 权重更新, 对照公式查看\n", 71 | " delta = y - y_hat\n", 72 | " self.w = np.add(self.w,\n", 73 | " np.multiply(learning_rate * delta, x))\n", 74 | " self.b += learning_rate * delta\n", 75 | " \n", 76 | " def __str__(self):\n", 77 | " return 'weights: {}\\tbias: {}'.format(self.w, self.b)" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 2, 83 | "metadata": {}, 84 | "outputs": [], 85 | "source": [ 86 | "# 数据准备\n", 87 | "def get_and_training_dataset():\n", 88 | " x_train = [[0, 0], [0, 1], [1, 0], [1, 1]]\n", 89 | " y_train = [0, 0, 0, 1]\n", 90 | " return x_train, y_train" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 3, 96 | "metadata": {}, 97 | "outputs": [ 98 | { 99 | "name": "stdout", 100 | "output_type": "stream", 101 | "text": [ 102 | "weights: [ 0.2 0.1]\tbias: -0.2\n" 103 | ] 104 | } 105 | ], 106 | "source": [ 107 | "# 拟合数据\n", 108 | "x_train, y_train = get_and_training_dataset()\n", 109 | "and_p = Perceptron(2)\n", 110 | "and_p.fit(x_train, y_train, iteration=5, learning_rate=0.1)" 111 | ] 112 | }, 113 | { 114 | "cell_type": "code", 115 | "execution_count": 4, 116 | "metadata": {}, 117 | "outputs": [ 118 | { 119 | "name": "stdout", 120 | "output_type": "stream", 121 | "text": [ 122 | "and 感知机权重:\n", 123 | " weights: [ 0.2 0.1]\tbias: -0.2 \n", 124 | "\n", 125 | "1 & 1 = 1\n", 126 | "1 & 0 = 0\n", 127 | "0 & 1 = 0\n", 128 | "0 & 0 = 0\n" 129 | ] 130 | } 131 | ], 132 | "source": [ 133 | "# 预测数据\n", 134 | "print('and 感知机权重:\\n', and_p, '\\n')\n", 135 | "print('1 & 1 = %d' % and_p.predict([1, 1]))\n", 136 | "print('1 & 0 = %d' % and_p.predict([1, 0]))\n", 137 | "print('0 & 1 = %d' % and_p.predict([0, 1]))\n", 138 | "print('0 & 0 = %d' % and_p.predict([0, 0]))" 139 | ] 140 | }, 141 | { 142 | "cell_type": "markdown", 143 | "metadata": {}, 144 | "source": [ 145 | "### 二、作业:Or 感知机\n", 146 | "\n", 147 | "Or真值表:\n", 148 | "\n", 149 | "|$x_1$|$x_2$|$y$|\n", 150 | "|----|----|----|\n", 151 | "|1|1|1|\n", 152 | "|1|0|1|\n", 153 | "|0|1|1|\n", 154 | "|0|0|0|" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 5, 160 | "metadata": {}, 161 | "outputs": [], 162 | "source": [ 163 | "def get_or_training_dataset():\n", 164 | " x_train = [[0, 0], [0, 1], [1, 0], [1, 1]]\n", 165 | " ## write code here:\n", 166 | " y_train = 'write code here'\n", 167 | " return x_train, y_train" 168 | ] 169 | }, 170 | { 171 | "cell_type": "code", 172 | "execution_count": 6, 173 | "metadata": {}, 174 | "outputs": [], 175 | "source": [ 176 | "# x_train, y_train = get_or_training_dataset()\n", 177 | "# or_p = Perceptron(2)\n", 178 | "# or_p.fit(x_train, y_train, iteration=5, learning_rate=0.1)\n", 179 | "# print(x_train, y_train)" 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": 7, 185 | "metadata": {}, 186 | "outputs": [], 187 | "source": [ 188 | "# print('or 感知机权重:\\n', or_p, '\\n')\n", 189 | "# print('1 & 1 = %d' % or_p.predict([1, 1]))\n", 190 | "# print('1 & 0 = %d' % or_p.predict([1, 0]))\n", 191 | "# print('0 & 1 = %d' % or_p.predict([0, 1]))\n", 192 | "# print('0 & 0 = %d' % or_p.predict([0, 0]))" 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": null, 198 | "metadata": {}, 199 | "outputs": [], 200 | "source": [] 201 | } 202 | ], 203 | "metadata": { 204 | "kernelspec": { 205 | "display_name": "Python 3", 206 | "language": "python", 207 | "name": "python3" 208 | }, 209 | "language_info": { 210 | "codemirror_mode": { 211 | "name": "ipython", 212 | "version": 3 213 | }, 214 | "file_extension": ".py", 215 | "mimetype": "text/x-python", 216 | "name": "python", 217 | "nbconvert_exporter": "python", 218 | "pygments_lexer": "ipython3", 219 | "version": "3.6.4" 220 | } 221 | }, 222 | "nbformat": 4, 223 | "nbformat_minor": 2 224 | } 225 | -------------------------------------------------------------------------------- /dl3_LinearUnit.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## $$不用框架入门进阶深度学习(3)-线性单元、梯度下降与回归任务$$\n", 8 | "### 一、实现线性单元" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 5, 14 | "metadata": {}, 15 | "outputs": [], 16 | "source": [ 17 | "import numpy as np\n", 18 | "import matplotlib.pyplot as plt\n", 19 | "%matplotlib inline" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 33, 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "class Perceptron(object):\n", 29 | " def __init__(self, input_feature_num, activation=None):\n", 30 | " self.activation = activation if activation else self.sign\n", 31 | " self.w = [0.0] * input_feature_num\n", 32 | " self.b = 0.0\n", 33 | "\n", 34 | " def predict(self, x):\n", 35 | " '''\n", 36 | " 预测输出函数:\n", 37 | " y_hat = f(wx + b)\n", 38 | " '''\n", 39 | " return self.activation(\n", 40 | " np.dot(self.w, x) + self.b)\n", 41 | " \n", 42 | " def sign(self, z):\n", 43 | " '''\n", 44 | " 阶跃激活函数:\n", 45 | " sign(z) = 1 if z > 0\n", 46 | " sign(z) = 0 if z <= 0\n", 47 | " '''\n", 48 | " return int(z>0)\n", 49 | " \n", 50 | " def fit(self, x_train, y_train, iteration=10, learning_rate=0.1):\n", 51 | " # 训练函数\n", 52 | " for _ in range(iteration):\n", 53 | " for x, y in zip(x_train, y_train):\n", 54 | " y_hat = self.predict(x)\n", 55 | " self._update_weights(x, y, y_hat, learning_rate)\n", 56 | " print(self)\n", 57 | " \n", 58 | " def _update_weights(self, x, y, y_hat, learning_rate):\n", 59 | " # 权重更新, 对照公式查看\n", 60 | " delta = y - y_hat\n", 61 | " self.w = np.add(self.w,\n", 62 | " np.multiply(learning_rate * delta, x))\n", 63 | " self.b += learning_rate * delta\n", 64 | " \n", 65 | " def __str__(self):\n", 66 | " return 'weights: {}\\tbias: {}'.format(self.w, self.b)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 34, 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [ 75 | "class LinearUnit(Perceptron):\n", 76 | " def __init__(self, input_feature_num, activation=None):\n", 77 | " self.activation = activation if activation else self.f\n", 78 | " Perceptron.__init__(self, input_feature_num, self.activation)\n", 79 | "\n", 80 | " def f(self, x):\n", 81 | " return x" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "### 二、数据准备" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 74, 94 | "metadata": {}, 95 | "outputs": [], 96 | "source": [ 97 | "def get_training_dataset():\n", 98 | " '''\n", 99 | " 捏造5个人的工作年限与对应的收入数据\n", 100 | " '''\n", 101 | " # 输入列表,每一项表示工作年限\n", 102 | " x_train = [[5], [3], [8], [1.4], [10.1]]\n", 103 | " # 期望的输出列表,月薪,注意要与输入一一对应\n", 104 | " y_train = [55000, 23000, 76000, 18000, 114000]\n", 105 | " return x_train, y_train\n", 106 | "\n", 107 | "def get_test_dataset():\n", 108 | " '''\n", 109 | " 捏造5个人的工作年限,用模型预测结果\n", 110 | " '''\n", 111 | " # 输入列表,每一项表示工作年限\n", 112 | " x_test = [[1], [2], [4.3], [6.7], [9]]\n", 113 | " return x_test\n", 114 | " " 115 | ] 116 | }, 117 | { 118 | "cell_type": "markdown", 119 | "metadata": {}, 120 | "source": [ 121 | "### 三、模型训练-小试调参" 122 | ] 123 | }, 124 | { 125 | "cell_type": "code", 126 | "execution_count": 75, 127 | "metadata": {}, 128 | "outputs": [ 129 | { 130 | "name": "stdout", 131 | "output_type": "stream", 132 | "text": [ 133 | "weights: [-43264.9316]\tbias: -6499.715999999998\n", 134 | "weights: [-748.21557461]\tbias: -7572.491525913667\n", 135 | "weights: [ 6269.1513987]\tbias: -7749.55269735544\n", 136 | "weights: [ 7427.36501069]\tbias: -7778.776572877447\n", 137 | "weights: [ 7618.52770407]\tbias: -7783.599961842798\n", 138 | "weights: [ 7650.07903015]\tbias: -7784.396060262173\n", 139 | "weights: [ 7655.28656389]\tbias: -7784.527455987858\n", 140 | "weights: [ 7656.14606526]\tbias: -7784.549142799826\n", 141 | "weights: [ 7656.28792561]\tbias: -7784.552722199454\n", 142 | "weights: [ 7656.31133961]\tbias: -7784.553312977943\n" 143 | ] 144 | }, 145 | { 146 | "data": { 147 | "text/plain": [ 148 | "[]" 149 | ] 150 | }, 151 | "execution_count": 75, 152 | "metadata": {}, 153 | "output_type": "execute_result" 154 | }, 155 | { 156 | "data": { 157 | "image/png": "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\n", 158 | "text/plain": [ 159 | "" 160 | ] 161 | }, 162 | "metadata": {}, 163 | "output_type": "display_data" 164 | } 165 | ], 166 | "source": [ 167 | "'''\n", 168 | "学习率为0.1,收敛不到最优\n", 169 | "'''\n", 170 | "x_train, y_train = get_training_dataset()\n", 171 | "lu = LinearUnit(len(x_train[0]))\n", 172 | "lu.fit(x_train, y_train, iteration=10, learning_rate=0.1)\n", 173 | "\n", 174 | "plt.scatter(x_train, y_train)\n", 175 | "x_points = np.linspace(1, 11, 10)\n", 176 | "y_ = (lu.w[0] * x_points + lu.b)\n", 177 | "plt.plot(x_points, y_)" 178 | ] 179 | }, 180 | { 181 | "cell_type": "code", 182 | "execution_count": 76, 183 | "metadata": {}, 184 | "outputs": [ 185 | { 186 | "name": "stdout", 187 | "output_type": "stream", 188 | "text": [ 189 | "weights: [ 11240.88451468]\tbias: 1652.6044668000002\n", 190 | "weights: [ 11172.36246933]\tbias: 1548.4231937327545\n", 191 | "weights: [ 11181.77338601]\tbias: 1457.6193688248154\n", 192 | "weights: [ 11190.52576246]\tbias: 1367.958769494091\n", 193 | "weights: [ 11199.16365052]\tbias: 1279.5091539946984\n", 194 | "weights: [ 11207.68490221]\tbias: 1192.2535999327847\n", 195 | "weights: [ 11216.0911176]\tbias: 1106.1759915016578\n", 196 | "weights: [ 11224.38384951]\tbias: 1021.2604264670302\n", 197 | "weights: [ 11232.56462995]\tbias: 937.4912173015192\n", 198 | "weights: [ 11240.63497026]\tbias: 854.852888258384\n" 199 | ] 200 | }, 201 | { 202 | "data": { 203 | "text/plain": [ 204 | "[]" 205 | ] 206 | }, 207 | "execution_count": 76, 208 | "metadata": {}, 209 | "output_type": "execute_result" 210 | }, 211 | { 212 | "data": { 213 | "image/png": "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\n", 214 | "text/plain": [ 215 | "" 216 | ] 217 | }, 218 | "metadata": {}, 219 | "output_type": "display_data" 220 | } 221 | ], 222 | "source": [ 223 | "'''\n", 224 | "学习率为0.01,收敛效果远远好于学习率为0.1\n", 225 | "'''\n", 226 | "lu = LinearUnit(len(x_train[0]))\n", 227 | "lu.fit(x_train, y_train, iteration=10, learning_rate=0.01)\n", 228 | "\n", 229 | "plt.scatter(x_train, y_train)\n", 230 | "x_points = np.linspace(1, 11, 10)\n", 231 | "y_ = (lu.w[0] * x_points + lu.b)\n", 232 | "plt.plot(x_points, y_)" 233 | ] 234 | }, 235 | { 236 | "cell_type": "markdown", 237 | "metadata": {}, 238 | "source": [ 239 | "### 四、预测工资收入" 240 | ] 241 | }, 242 | { 243 | "cell_type": "code", 244 | "execution_count": 77, 245 | "metadata": {}, 246 | "outputs": [ 247 | { 248 | "name": "stdout", 249 | "output_type": "stream", 250 | "text": [ 251 | "[[1], [2], [4.3], [6.7], [9]]\n" 252 | ] 253 | } 254 | ], 255 | "source": [ 256 | "x_test = get_test_dataset()\n", 257 | "print(x_test)" 258 | ] 259 | }, 260 | { 261 | "cell_type": "code", 262 | "execution_count": 78, 263 | "metadata": {}, 264 | "outputs": [ 265 | { 266 | "name": "stdout", 267 | "output_type": "stream", 268 | "text": [ 269 | "预测工作[1]年的AI工程师\t月薪12095.487858520604\n", 270 | "预测工作[2]年的AI工程师\t月薪23336.122828782827\n", 271 | "预测工作[4.3]年的AI工程师\t月薪49189.58326038593\n", 272 | "预测工作[6.7]年的AI工程师\t月薪76167.10718901527\n", 273 | "预测工作[9]年的AI工程师\t月薪102020.56762061837\n" 274 | ] 275 | } 276 | ], 277 | "source": [ 278 | "prediction = []\n", 279 | "for t in x_test:\n", 280 | " prediction.append(lu.predict(t))\n", 281 | " print('预测工作{}年的AI工程师\\t月薪{}'.format(t, prediction[-1]))" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": null, 287 | "metadata": {}, 288 | "outputs": [], 289 | "source": [] 290 | } 291 | ], 292 | "metadata": { 293 | "kernelspec": { 294 | "display_name": "Python 3", 295 | "language": "python", 296 | "name": "python3" 297 | }, 298 | "language_info": { 299 | "codemirror_mode": { 300 | "name": "ipython", 301 | "version": 3 302 | }, 303 | "file_extension": ".py", 304 | "mimetype": "text/x-python", 305 | "name": "python", 306 | "nbconvert_exporter": "python", 307 | "pygments_lexer": "ipython3", 308 | "version": "3.6.4" 309 | } 310 | }, 311 | "nbformat": 4, 312 | "nbformat_minor": 2 313 | } 314 | -------------------------------------------------------------------------------- /dl2_Perceptron_Classify.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## $$不用框架入门进阶深度学习(2)-手写感知器做二分类$$\n", 8 | "### 一、鸢尾花数据集介绍" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "metadata": {}, 15 | "outputs": [], 16 | "source": [ 17 | "import pandas as pd\n", 18 | "import numpy as np\n", 19 | "from sklearn.datasets import load_iris\n", 20 | "import matplotlib.pyplot as plt\n", 21 | "%matplotlib inline" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 2, 27 | "metadata": {}, 28 | "outputs": [], 29 | "source": [ 30 | "# 加载鸢尾花数据集\n", 31 | "iris = load_iris()\n", 32 | "# iris.data包含一个(150, 4)的数据,设置列名为iris.feature_names\n", 33 | "df = pd.DataFrame(iris.data, columns=iris.feature_names)\n", 34 | "# iris.target为类别标签(150, 1)\n", 35 | "df['label'] = iris.target\n", 36 | "df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 3, 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "name": "stdout", 46 | "output_type": "stream", 47 | "text": [ 48 | "{'DESCR': 'Iris Plants Database\\n'\n", 49 | " '====================\\n'\n", 50 | " '\\n'\n", 51 | " 'Notes\\n'\n", 52 | " '-----\\n'\n", 53 | " 'Data Set Characteristics:\\n'\n", 54 | " ' :Number of Instances: 150 (50 in each of three classes)\\n'\n", 55 | " ' :Number of Attributes: 4 numeric, predictive attributes and the '\n", 56 | " 'class\\n'\n", 57 | " ' :Attribute Information:\\n'\n", 58 | " ' - sepal length in cm\\n'\n", 59 | " ' - sepal width in cm\\n'\n", 60 | " ' - petal length in cm\\n'\n", 61 | " ' - petal width in cm\\n'\n", 62 | " ' - class:\\n'\n", 63 | " ' - Iris-Setosa\\n'\n", 64 | " ' - Iris-Versicolour\\n'\n", 65 | " ' - Iris-Virginica\\n'\n", 66 | " ' :Summary Statistics:\\n'\n", 67 | " '\\n'\n", 68 | " ' ============== ==== ==== ======= ===== ====================\\n'\n", 69 | " ' Min Max Mean SD Class Correlation\\n'\n", 70 | " ' ============== ==== ==== ======= ===== ====================\\n'\n", 71 | " ' sepal length: 4.3 7.9 5.84 0.83 0.7826\\n'\n", 72 | " ' sepal width: 2.0 4.4 3.05 0.43 -0.4194\\n'\n", 73 | " ' petal length: 1.0 6.9 3.76 1.76 0.9490 (high!)\\n'\n", 74 | " ' petal width: 0.1 2.5 1.20 0.76 0.9565 (high!)\\n'\n", 75 | " ' ============== ==== ==== ======= ===== ====================\\n'\n", 76 | " '\\n'\n", 77 | " ' :Missing Attribute Values: None\\n'\n", 78 | " ' :Class Distribution: 33.3% for each of 3 classes.\\n'\n", 79 | " ' :Creator: R.A. Fisher\\n'\n", 80 | " ' :Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)\\n'\n", 81 | " ' :Date: July, 1988\\n'\n", 82 | " '\\n'\n", 83 | " 'This is a copy of UCI ML iris datasets.\\n'\n", 84 | " 'http://archive.ics.uci.edu/ml/datasets/Iris\\n'\n", 85 | " '\\n'\n", 86 | " 'The famous Iris database, first used by Sir R.A Fisher\\n'\n", 87 | " '\\n'\n", 88 | " 'This is perhaps the best known database to be found in the\\n'\n", 89 | " \"pattern recognition literature. Fisher's paper is a classic in the \"\n", 90 | " 'field and\\n'\n", 91 | " 'is referenced frequently to this day. (See Duda & Hart, for '\n", 92 | " 'example.) The\\n'\n", 93 | " 'data set contains 3 classes of 50 instances each, where each class '\n", 94 | " 'refers to a\\n'\n", 95 | " 'type of iris plant. One class is linearly separable from the other '\n", 96 | " '2; the\\n'\n", 97 | " 'latter are NOT linearly separable from each other.\\n'\n", 98 | " '\\n'\n", 99 | " 'References\\n'\n", 100 | " '----------\\n'\n", 101 | " ' - Fisher,R.A. \"The use of multiple measurements in taxonomic '\n", 102 | " 'problems\"\\n'\n", 103 | " ' Annual Eugenics, 7, Part II, 179-188 (1936); also in '\n", 104 | " '\"Contributions to\\n'\n", 105 | " ' Mathematical Statistics\" (John Wiley, NY, 1950).\\n'\n", 106 | " ' - Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene '\n", 107 | " 'Analysis.\\n'\n", 108 | " ' (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page '\n", 109 | " '218.\\n'\n", 110 | " ' - Dasarathy, B.V. (1980) \"Nosing Around the Neighborhood: A New '\n", 111 | " 'System\\n'\n", 112 | " ' Structure and Classification Rule for Recognition in Partially '\n", 113 | " 'Exposed\\n'\n", 114 | " ' Environments\". IEEE Transactions on Pattern Analysis and '\n", 115 | " 'Machine\\n'\n", 116 | " ' Intelligence, Vol. PAMI-2, No. 1, 67-71.\\n'\n", 117 | " ' - Gates, G.W. (1972) \"The Reduced Nearest Neighbor Rule\". IEEE '\n", 118 | " 'Transactions\\n'\n", 119 | " ' on Information Theory, May 1972, 431-433.\\n'\n", 120 | " ' - See also: 1988 MLC Proceedings, 54-64. Cheeseman et al\"s '\n", 121 | " 'AUTOCLASS II\\n'\n", 122 | " ' conceptual clustering system finds 3 classes in the data.\\n'\n", 123 | " ' - Many, many more ...\\n',\n", 124 | " 'data': array([[ 5.1, 3.5, 1.4, 0.2],\n", 125 | " [ 4.9, 3. , 1.4, 0.2],\n", 126 | " [ 4.7, 3.2, 1.3, 0.2],\n", 127 | " [ 4.6, 3.1, 1.5, 0.2],\n", 128 | " [ 5. , 3.6, 1.4, 0.2],\n", 129 | " [ 5.4, 3.9, 1.7, 0.4],\n", 130 | " [ 4.6, 3.4, 1.4, 0.3],\n", 131 | " [ 5. , 3.4, 1.5, 0.2],\n", 132 | " [ 4.4, 2.9, 1.4, 0.2],\n", 133 | " [ 4.9, 3.1, 1.5, 0.1],\n", 134 | " [ 5.4, 3.7, 1.5, 0.2],\n", 135 | " [ 4.8, 3.4, 1.6, 0.2],\n", 136 | " [ 4.8, 3. , 1.4, 0.1],\n", 137 | " [ 4.3, 3. , 1.1, 0.1],\n", 138 | " [ 5.8, 4. , 1.2, 0.2],\n", 139 | " [ 5.7, 4.4, 1.5, 0.4],\n", 140 | " [ 5.4, 3.9, 1.3, 0.4],\n", 141 | " [ 5.1, 3.5, 1.4, 0.3],\n", 142 | " [ 5.7, 3.8, 1.7, 0.3],\n", 143 | " [ 5.1, 3.8, 1.5, 0.3],\n", 144 | " [ 5.4, 3.4, 1.7, 0.2],\n", 145 | " [ 5.1, 3.7, 1.5, 0.4],\n", 146 | " [ 4.6, 3.6, 1. , 0.2],\n", 147 | " [ 5.1, 3.3, 1.7, 0.5],\n", 148 | " [ 4.8, 3.4, 1.9, 0.2],\n", 149 | " [ 5. , 3. , 1.6, 0.2],\n", 150 | " [ 5. , 3.4, 1.6, 0.4],\n", 151 | " [ 5.2, 3.5, 1.5, 0.2],\n", 152 | " [ 5.2, 3.4, 1.4, 0.2],\n", 153 | " [ 4.7, 3.2, 1.6, 0.2],\n", 154 | " [ 4.8, 3.1, 1.6, 0.2],\n", 155 | " [ 5.4, 3.4, 1.5, 0.4],\n", 156 | " [ 5.2, 4.1, 1.5, 0.1],\n", 157 | " [ 5.5, 4.2, 1.4, 0.2],\n", 158 | " [ 4.9, 3.1, 1.5, 0.1],\n", 159 | " [ 5. , 3.2, 1.2, 0.2],\n", 160 | " [ 5.5, 3.5, 1.3, 0.2],\n", 161 | " [ 4.9, 3.1, 1.5, 0.1],\n", 162 | " [ 4.4, 3. , 1.3, 0.2],\n", 163 | " [ 5.1, 3.4, 1.5, 0.2],\n", 164 | " [ 5. , 3.5, 1.3, 0.3],\n", 165 | " [ 4.5, 2.3, 1.3, 0.3],\n", 166 | " [ 4.4, 3.2, 1.3, 0.2],\n", 167 | " [ 5. , 3.5, 1.6, 0.6],\n", 168 | " [ 5.1, 3.8, 1.9, 0.4],\n", 169 | " [ 4.8, 3. , 1.4, 0.3],\n", 170 | " [ 5.1, 3.8, 1.6, 0.2],\n", 171 | " [ 4.6, 3.2, 1.4, 0.2],\n", 172 | " [ 5.3, 3.7, 1.5, 0.2],\n", 173 | " [ 5. , 3.3, 1.4, 0.2],\n", 174 | " [ 7. , 3.2, 4.7, 1.4],\n", 175 | " [ 6.4, 3.2, 4.5, 1.5],\n", 176 | " [ 6.9, 3.1, 4.9, 1.5],\n", 177 | " [ 5.5, 2.3, 4. , 1.3],\n", 178 | " [ 6.5, 2.8, 4.6, 1.5],\n", 179 | " [ 5.7, 2.8, 4.5, 1.3],\n", 180 | " [ 6.3, 3.3, 4.7, 1.6],\n", 181 | " [ 4.9, 2.4, 3.3, 1. ],\n", 182 | " [ 6.6, 2.9, 4.6, 1.3],\n", 183 | " [ 5.2, 2.7, 3.9, 1.4],\n", 184 | " [ 5. , 2. , 3.5, 1. ],\n", 185 | " [ 5.9, 3. , 4.2, 1.5],\n", 186 | " [ 6. , 2.2, 4. , 1. ],\n", 187 | " [ 6.1, 2.9, 4.7, 1.4],\n", 188 | " [ 5.6, 2.9, 3.6, 1.3],\n", 189 | " [ 6.7, 3.1, 4.4, 1.4],\n", 190 | " [ 5.6, 3. , 4.5, 1.5],\n", 191 | " [ 5.8, 2.7, 4.1, 1. ],\n", 192 | " [ 6.2, 2.2, 4.5, 1.5],\n", 193 | " [ 5.6, 2.5, 3.9, 1.1],\n", 194 | " [ 5.9, 3.2, 4.8, 1.8],\n", 195 | " [ 6.1, 2.8, 4. , 1.3],\n", 196 | " [ 6.3, 2.5, 4.9, 1.5],\n", 197 | " [ 6.1, 2.8, 4.7, 1.2],\n", 198 | " [ 6.4, 2.9, 4.3, 1.3],\n", 199 | " [ 6.6, 3. , 4.4, 1.4],\n", 200 | " [ 6.8, 2.8, 4.8, 1.4],\n", 201 | " [ 6.7, 3. , 5. , 1.7],\n", 202 | " [ 6. , 2.9, 4.5, 1.5],\n", 203 | " [ 5.7, 2.6, 3.5, 1. ],\n", 204 | " [ 5.5, 2.4, 3.8, 1.1],\n", 205 | " [ 5.5, 2.4, 3.7, 1. ],\n", 206 | " [ 5.8, 2.7, 3.9, 1.2],\n", 207 | " [ 6. , 2.7, 5.1, 1.6],\n", 208 | " [ 5.4, 3. , 4.5, 1.5],\n", 209 | " [ 6. , 3.4, 4.5, 1.6],\n", 210 | " [ 6.7, 3.1, 4.7, 1.5],\n", 211 | " [ 6.3, 2.3, 4.4, 1.3],\n", 212 | " [ 5.6, 3. , 4.1, 1.3],\n", 213 | " [ 5.5, 2.5, 4. , 1.3],\n", 214 | " [ 5.5, 2.6, 4.4, 1.2],\n", 215 | " [ 6.1, 3. , 4.6, 1.4],\n", 216 | " [ 5.8, 2.6, 4. , 1.2],\n", 217 | " [ 5. , 2.3, 3.3, 1. ],\n", 218 | " [ 5.6, 2.7, 4.2, 1.3],\n", 219 | " [ 5.7, 3. , 4.2, 1.2],\n", 220 | " [ 5.7, 2.9, 4.2, 1.3],\n", 221 | " [ 6.2, 2.9, 4.3, 1.3],\n", 222 | " [ 5.1, 2.5, 3. , 1.1],\n", 223 | " [ 5.7, 2.8, 4.1, 1.3],\n", 224 | " [ 6.3, 3.3, 6. , 2.5],\n", 225 | " [ 5.8, 2.7, 5.1, 1.9],\n", 226 | " [ 7.1, 3. , 5.9, 2.1],\n", 227 | " [ 6.3, 2.9, 5.6, 1.8],\n", 228 | " [ 6.5, 3. , 5.8, 2.2],\n", 229 | " [ 7.6, 3. , 6.6, 2.1],\n", 230 | " [ 4.9, 2.5, 4.5, 1.7],\n", 231 | " [ 7.3, 2.9, 6.3, 1.8],\n", 232 | " [ 6.7, 2.5, 5.8, 1.8],\n", 233 | " [ 7.2, 3.6, 6.1, 2.5],\n", 234 | " [ 6.5, 3.2, 5.1, 2. ],\n", 235 | " [ 6.4, 2.7, 5.3, 1.9],\n", 236 | " [ 6.8, 3. , 5.5, 2.1],\n", 237 | " [ 5.7, 2.5, 5. , 2. ],\n", 238 | " [ 5.8, 2.8, 5.1, 2.4],\n", 239 | " [ 6.4, 3.2, 5.3, 2.3],\n", 240 | " [ 6.5, 3. , 5.5, 1.8],\n", 241 | " [ 7.7, 3.8, 6.7, 2.2],\n", 242 | " [ 7.7, 2.6, 6.9, 2.3],\n", 243 | " [ 6. , 2.2, 5. , 1.5],\n", 244 | " [ 6.9, 3.2, 5.7, 2.3],\n", 245 | " [ 5.6, 2.8, 4.9, 2. ],\n", 246 | " [ 7.7, 2.8, 6.7, 2. ],\n", 247 | " [ 6.3, 2.7, 4.9, 1.8],\n", 248 | " [ 6.7, 3.3, 5.7, 2.1],\n", 249 | " [ 7.2, 3.2, 6. , 1.8],\n", 250 | " [ 6.2, 2.8, 4.8, 1.8],\n", 251 | " [ 6.1, 3. , 4.9, 1.8],\n", 252 | " [ 6.4, 2.8, 5.6, 2.1],\n", 253 | " [ 7.2, 3. , 5.8, 1.6],\n", 254 | " [ 7.4, 2.8, 6.1, 1.9],\n", 255 | " [ 7.9, 3.8, 6.4, 2. ],\n", 256 | " [ 6.4, 2.8, 5.6, 2.2],\n", 257 | " [ 6.3, 2.8, 5.1, 1.5],\n", 258 | " [ 6.1, 2.6, 5.6, 1.4],\n", 259 | " [ 7.7, 3. , 6.1, 2.3],\n", 260 | " [ 6.3, 3.4, 5.6, 2.4],\n", 261 | " [ 6.4, 3.1, 5.5, 1.8],\n", 262 | " [ 6. , 3. , 4.8, 1.8],\n", 263 | " [ 6.9, 3.1, 5.4, 2.1],\n", 264 | " [ 6.7, 3.1, 5.6, 2.4],\n", 265 | " [ 6.9, 3.1, 5.1, 2.3],\n", 266 | " [ 5.8, 2.7, 5.1, 1.9],\n", 267 | " [ 6.8, 3.2, 5.9, 2.3],\n", 268 | " [ 6.7, 3.3, 5.7, 2.5],\n", 269 | " [ 6.7, 3. , 5.2, 2.3],\n", 270 | " [ 6.3, 2.5, 5. , 1.9],\n", 271 | " [ 6.5, 3. , 5.2, 2. ],\n", 272 | " [ 6.2, 3.4, 5.4, 2.3],\n", 273 | " [ 5.9, 3. , 5.1, 1.8]]),\n", 274 | " 'feature_names': ['sepal length (cm)',\n", 275 | " 'sepal width (cm)',\n", 276 | " 'petal length (cm)',\n", 277 | " 'petal width (cm)'],\n", 278 | " 'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 279 | " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", 280 | " 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 281 | " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", 282 | " 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", 283 | " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", 284 | " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]),\n", 285 | " 'target_names': array(['setosa', 'versicolor', 'virginica'],\n", 286 | " dtype='\n", 315 | "\n", 328 | "\n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | "
sepal lengthsepal widthpetal lengthpetal widthlabel
05.13.51.40.20
14.93.01.40.20
24.73.21.30.20
34.63.11.50.20
45.03.61.40.20
\n", 382 | "" 383 | ], 384 | "text/plain": [ 385 | " sepal length sepal width petal length petal width label\n", 386 | "0 5.1 3.5 1.4 0.2 0\n", 387 | "1 4.9 3.0 1.4 0.2 0\n", 388 | "2 4.7 3.2 1.3 0.2 0\n", 389 | "3 4.6 3.1 1.5 0.2 0\n", 390 | "4 5.0 3.6 1.4 0.2 0" 391 | ] 392 | }, 393 | "execution_count": 4, 394 | "metadata": {}, 395 | "output_type": "execute_result" 396 | } 397 | ], 398 | "source": [ 399 | "# 数据集查看\n", 400 | "print(df.label.value_counts())\n", 401 | "df.head()" 402 | ] 403 | }, 404 | { 405 | "cell_type": "markdown", 406 | "metadata": {}, 407 | "source": [ 408 | "### 二、特征选择" 409 | ] 410 | }, 411 | { 412 | "cell_type": "code", 413 | "execution_count": 5, 414 | "metadata": {}, 415 | "outputs": [ 416 | { 417 | "data": { 418 | "text/plain": [ 419 | "" 420 | ] 421 | }, 422 | "execution_count": 5, 423 | "metadata": {}, 424 | "output_type": "execute_result" 425 | }, 426 | { 427 | "data": { 428 | "image/png": "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\n", 429 | "text/plain": [ 430 | "" 431 | ] 432 | }, 433 | "metadata": {}, 434 | "output_type": "display_data" 435 | } 436 | ], 437 | "source": [ 438 | "# 萼片组['sepal length','sepal width']特征分布查看\n", 439 | "plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')\n", 440 | "plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')\n", 441 | "\n", 442 | "plt.xlabel('sepal length')\n", 443 | "plt.ylabel('sepal width')\n", 444 | "plt.legend()" 445 | ] 446 | }, 447 | { 448 | "cell_type": "markdown", 449 | "metadata": {}, 450 | "source": [ 451 | "### 三、Perceptron-用感知器完成二分类" 452 | ] 453 | }, 454 | { 455 | "cell_type": "markdown", 456 | "metadata": {}, 457 | "source": [ 458 | "\n", 459 | "权重更新规则:\n", 460 | "$$\n", 461 | "\\begin{equation}\n", 462 | "\\begin{aligned}\n", 463 | "\\Delta b_i&=\\delta (y- \\widehat{y}) \\\\\n", 464 | "\\Delta w_i&=\\delta (y- \\widehat{y})x_i \\\\\n", 465 | "w_i&=w_i + \\Delta w_i\\\\\n", 466 | "b_i&=b_i + \\Delta b_i \n", 467 | "\\end{aligned}\n", 468 | "\\end{equation}\n", 469 | "$$\n", 470 | "\n", 471 | "其中$\\delta叫学习率$,y为正确的输出,$\\widehat{y}为感知机预测$的结果。\n", 472 | "\n", 473 | "\n" 474 | ] 475 | }, 476 | { 477 | "cell_type": "code", 478 | "execution_count": 6, 479 | "metadata": {}, 480 | "outputs": [], 481 | "source": [ 482 | "class Perceptron(object):\n", 483 | " def __init__(self, input_feature_num, activation=None):\n", 484 | " self.activation = activation if activation else self.sign\n", 485 | " self.w = [0.0] * input_feature_num\n", 486 | " self.b = 0.0\n", 487 | "\n", 488 | " def sign(self, z):\n", 489 | " # 阶跃激活函数:\n", 490 | " # sign(z) = 1 if z > 0 \n", 491 | " # sign(z) = 0 otherwise\n", 492 | " return int(z>0)\n", 493 | " \n", 494 | " def predict(self, x):\n", 495 | " # 预测输出函数\n", 496 | " # y_hat = f(wx + b)\n", 497 | " return self.activation(\n", 498 | " np.dot(self.w, x) + self.b)\n", 499 | " \n", 500 | " def fit(self, x_train, y_train, iteration=10, learning_rate=0.1):\n", 501 | " # 训练函数\n", 502 | " for _ in range(iteration):\n", 503 | " for x, y in zip(x_train, y_train):\n", 504 | " y_hat = self.predict(x)\n", 505 | " self._update_weights(x, y, y_hat, learning_rate)\n", 506 | " print(self)\n", 507 | " \n", 508 | " def _update_weights(self, x, y, y_hat, learning_rate):\n", 509 | " # 权重更新, 对照公式查看\n", 510 | " delta = y - y_hat\n", 511 | " self.w = np.add(self.w,\n", 512 | " np.multiply(learning_rate * delta, x))\n", 513 | " self.b += learning_rate * delta\n", 514 | " \n", 515 | " def __str__(self):\n", 516 | " return 'weights: {}\\tbias: {}'.format(self.w, self.b)" 517 | ] 518 | }, 519 | { 520 | "cell_type": "code", 521 | "execution_count": 7, 522 | "metadata": {}, 523 | "outputs": [], 524 | "source": [ 525 | "# 训练数据准备\n", 526 | "data = np.array(df.iloc[:100, [0, 1, -1]])\n", 527 | "X, y = data[:,:-1], data[:,-1]" 528 | ] 529 | }, 530 | { 531 | "cell_type": "code", 532 | "execution_count": 8, 533 | "metadata": {}, 534 | "outputs": [ 535 | { 536 | "name": "stdout", 537 | "output_type": "stream", 538 | "text": [ 539 | "weights: [ 3.87 -5.8 ]\tbias: -2.600000000000001\n" 540 | ] 541 | } 542 | ], 543 | "source": [ 544 | "# 训练模型\n", 545 | "perceptron = Perceptron(input_feature_num=X.shape[1])\n", 546 | "perceptron.fit(X, y, iteration=100, learning_rate=0.1)" 547 | ] 548 | }, 549 | { 550 | "cell_type": "code", 551 | "execution_count": 9, 552 | "metadata": {}, 553 | "outputs": [ 554 | { 555 | "data": { 556 | "text/plain": [ 557 | "" 558 | ] 559 | }, 560 | "execution_count": 9, 561 | "metadata": {}, 562 | "output_type": "execute_result" 563 | }, 564 | { 565 | "data": { 566 | "image/png": "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\n", 567 | "text/plain": [ 568 | "" 569 | ] 570 | }, 571 | "metadata": {}, 572 | "output_type": "display_data" 573 | } 574 | ], 575 | "source": [ 576 | "x_points = np.linspace(4, 7, 10)\n", 577 | "y_ = -(perceptron.w[0]*x_points + perceptron.b)/perceptron.w[1]\n", 578 | "plt.plot(x_points, y_)\n", 579 | "\n", 580 | "plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')\n", 581 | "plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')\n", 582 | "plt.xlabel('sepal length')\n", 583 | "plt.ylabel('sepal width')\n", 584 | "plt.legend()" 585 | ] 586 | }, 587 | { 588 | "cell_type": "markdown", 589 | "metadata": {}, 590 | "source": [ 591 | "#### 对比sklearn" 592 | ] 593 | }, 594 | { 595 | "cell_type": "code", 596 | "execution_count": 10, 597 | "metadata": {}, 598 | "outputs": [ 599 | { 600 | "name": "stdout", 601 | "output_type": "stream", 602 | "text": [ 603 | "[[ 74.6 -127.2]] [ 0.]\n" 604 | ] 605 | } 606 | ], 607 | "source": [ 608 | "from sklearn.linear_model import Perceptron as SPerceptron\n", 609 | "clf = SPerceptron(fit_intercept=False, max_iter=1000, shuffle=False)\n", 610 | "clf.fit(X, y)\n", 611 | "print(clf.coef_, clf.intercept_) # 打印权重" 612 | ] 613 | }, 614 | { 615 | "cell_type": "code", 616 | "execution_count": 11, 617 | "metadata": {}, 618 | "outputs": [ 619 | { 620 | "data": { 621 | "text/plain": [ 622 | "" 623 | ] 624 | }, 625 | "execution_count": 11, 626 | "metadata": {}, 627 | "output_type": "execute_result" 628 | }, 629 | { 630 | "data": { 631 | "image/png": "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\n", 632 | "text/plain": [ 633 | "" 634 | ] 635 | }, 636 | "metadata": {}, 637 | "output_type": "display_data" 638 | } 639 | ], 640 | "source": [ 641 | "x_points = np.linspace(4, 7,10)\n", 642 | "y_ = -(perceptron.w[0]*x_points + perceptron.b)/perceptron.w[1]\n", 643 | "plt.plot(x_points, y_)\n", 644 | "\n", 645 | "plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')\n", 646 | "plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')\n", 647 | "plt.xlabel('sepal length')\n", 648 | "plt.ylabel('sepal width')\n", 649 | "plt.legend()" 650 | ] 651 | }, 652 | { 653 | "cell_type": "markdown", 654 | "metadata": {}, 655 | "source": [ 656 | "### 四、作业:用petal组特征完成二分类(重点)" 657 | ] 658 | }, 659 | { 660 | "cell_type": "code", 661 | "execution_count": 12, 662 | "metadata": {}, 663 | "outputs": [ 664 | { 665 | "data": { 666 | "text/plain": [ 667 | "" 668 | ] 669 | }, 670 | "execution_count": 12, 671 | "metadata": {}, 672 | "output_type": "execute_result" 673 | }, 674 | { 675 | "data": { 676 | "image/png": "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\n", 677 | "text/plain": [ 678 | "" 679 | ] 680 | }, 681 | "metadata": {}, 682 | "output_type": "display_data" 683 | } 684 | ], 685 | "source": [ 686 | "# 花瓣组['petal length','petal width']特征分布查看\n", 687 | "plt.scatter(df[:50]['petal length'], df[:50]['petal width'], label='0')\n", 688 | "plt.scatter(df[50:100]['petal length'], df[50:100]['petal width'], label='1')\n", 689 | "\n", 690 | "plt.xlabel('petal length')\n", 691 | "plt.ylabel('petal width')\n", 692 | "plt.legend()" 693 | ] 694 | }, 695 | { 696 | "cell_type": "code", 697 | "execution_count": 13, 698 | "metadata": {}, 699 | "outputs": [], 700 | "source": [ 701 | "# 训练数据准备\n", 702 | "data = np.array(df.iloc[:100, [2, 3, -1]])\n", 703 | "X, y = data[:,:-1], data[:,-1]" 704 | ] 705 | }, 706 | { 707 | "cell_type": "code", 708 | "execution_count": 14, 709 | "metadata": {}, 710 | "outputs": [], 711 | "source": [ 712 | "# Write Code here\n" 713 | ] 714 | }, 715 | { 716 | "cell_type": "code", 717 | "execution_count": null, 718 | "metadata": {}, 719 | "outputs": [], 720 | "source": [] 721 | } 722 | ], 723 | "metadata": { 724 | "kernelspec": { 725 | "display_name": "Python 3", 726 | "language": "python", 727 | "name": "python3" 728 | }, 729 | "language_info": { 730 | "codemirror_mode": { 731 | "name": "ipython", 732 | "version": 3 733 | }, 734 | "file_extension": ".py", 735 | "mimetype": "text/x-python", 736 | "name": "python", 737 | "nbconvert_exporter": "python", 738 | "pygments_lexer": "ipython3", 739 | "version": "3.6.4" 740 | } 741 | }, 742 | "nbformat": 4, 743 | "nbformat_minor": 2 744 | } 745 | --------------------------------------------------------------------------------