├── README.md ├── 决策树 ├── .ipynb_checkpoints │ └── DescideTree-checkpoint.ipynb ├── DescideTree.ipynb └── Image │ └── 1.jpg ├── 支持向量机 └── Support_Vector_Machine.ipynb ├── 神经网络 ├── .ipynb_checkpoints │ └── NeuralNetwork-checkpoint.ipynb └── NeuralNetwork.ipynb ├── 线性模型 ├── .ipynb_checkpoints │ ├── LinearRegression-checkpoint.ipynb │ ├── LogisticRegression-checkpoint.ipynb │ ├── untitled-checkpoint.txt │ └── untitled1-checkpoint.txt ├── Images │ ├── 1.jpg │ ├── 2.jpg │ ├── 2_01.jpg │ ├── 2_1.jpg │ └── 3.jpg ├── LinearRegression.ipynb └── LogisticRegression.ipynb └── 逻辑回归模型 ├── Images ├── 1.jpg ├── 2.jpg ├── 2_01.jpg ├── 2_1.jpg └── 3.jpg └── LogisticRegression.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Machine_learning_notes 2 | 机器学习笔记和算法的python代码实现,学习的课程包括Andrew Ng 和林轩田的Machine Learning的课程,以及周志华的《机器学习》和李航的《统计学习方法》等电子书。 3 | HELL 4 | -------------------------------------------------------------------------------- /决策树/.ipynb_checkpoints/DescideTree-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n", 8 | "# 3 决策树(decision tree)\n", 9 | " 决策树是一种基本的分类和回归方法,决策树呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。决策树学习主要包括3个步骤:特征选择、决策树的生成和决策树的修剪。下图是一个决策树的示意图,图中圆和方框分别表示内部节点和叶节点。\n", 10 | "
\n", 11 | "\n", 12 | "
\n", 13 | "## 3.1 决策树学习\n", 14 | " 决策树学习,假设给定训练数据集\n", 15 | "$$D={(x_1,y_1), (x_2, y_2),...,(x_n, y_n)}$$\n", 16 | "其中,$x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T为输入实例,n为特征个数,$y_i\\in {1,2,...,K}$为类标记,学习的目的是根据给定训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。\n", 17 | "## 3.2 特征选择\n" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 32, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "import numpy as np\n", 27 | "import pandas as pd\n", 28 | "import matplotlib.pyplot as plt\n", 29 | "%matplotlib inline\n", 30 | "from math import log" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 4, 36 | "metadata": {}, 37 | "outputs": [], 38 | "source": [ 39 | "def create_data():\n", 40 | " dataset = [['青绿','蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好'],\n", 41 | " ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好'],\n", 42 | " ['乌黑',' 蜷缩',' 浊响',' 清晰',' 凹陷', '硬滑', '好'],\n", 43 | " ['青绿',' 蜷缩',' 沉闷',' 清晰',' 凹陷', '硬滑', '好'],\n", 44 | " ['浅白',' 蜷缩',' 浊响',' 清晰',' 凹陷', '硬滑', '好'],\n", 45 | " ['青绿',' 稍蜷',' 浊响',' 清晰',' 稍凹', '软粘', '好'],\n", 46 | " ['乌黑',' 稍蜷',' 浊响',' 稍糊',' 稍凹', '软粘', '好'], \n", 47 | " ['乌黑',' 稍蜷',' 浊响',' 清晰',' 稍凹', '硬滑', '好'],\n", 48 | " ['乌黑',' 稍蜷',' 沉闷',' 稍糊',' 稍凹', '硬滑', '坏'],\n", 49 | " ['青绿',' 硬挺',' 清脆',' 清晰',' 平坦', '软粘', '坏'],\n", 50 | " ['浅白',' 硬挺',' 清脆',' 模糊',' 平坦', '硬滑', '坏'], \n", 51 | " ['浅白',' 蜷缩',' 浊响',' 模糊',' 平坦', '软粘', '坏'],\n", 52 | " ['青绿',' 稍蜷',' 浊响',' 稍糊',' 凹陷', '硬滑', '坏'],\n", 53 | " ['浅白',' 稍蜷',' 沉闷',' 稍糊',' 凹陷', '硬滑', '坏'],\n", 54 | " ['乌黑',' 稍蜷',' 浊响',' 清晰',' 稍凹', '软粘', '坏'],\n", 55 | " ['浅白',' 蜷缩',' 浊响',' 模糊',' 平坦', '硬滑', '坏'],\n", 56 | " ['青绿',' 蜷缩',' 沉闷',' 稍糊',' 稍凹', '硬滑', '坏']\n", 57 | " ]\n", 58 | " \n", 59 | " labels = ['色泽', '根底', '敲声', '纹理', '脐部', '触感', '好瓜']\n", 60 | " return dataset, labels\n", 61 | " " 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 5, 74 | "metadata": {}, 75 | "outputs": [ 76 | { 77 | "data": { 78 | "text/plain": [ 79 | "[['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好'],\n", 80 | " ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好'],\n", 81 | " ['乌黑', ' 蜷缩', ' 浊响', ' 清晰', ' 凹陷', '硬滑', '好'],\n", 82 | " ['青绿', ' 蜷缩', ' 沉闷', ' 清晰', ' 凹陷', '硬滑', '好'],\n", 83 | " ['浅白', ' 蜷缩', ' 浊响', ' 清晰', ' 凹陷', '硬滑', '好'],\n", 84 | " ['青绿', ' 稍蜷', ' 浊响', ' 清晰', ' 稍凹', '软粘', '好'],\n", 85 | " ['乌黑', ' 稍蜷', ' 浊响', ' 稍糊', ' 稍凹', '软粘', '好'],\n", 86 | " ['乌黑', ' 稍蜷', ' 浊响', ' 清晰', ' 稍凹', '硬滑', '好'],\n", 87 | " ['乌黑', ' 稍蜷', ' 沉闷', ' 稍糊', ' 稍凹', '硬滑', '坏'],\n", 88 | " ['青绿', ' 硬挺', ' 清脆', ' 清晰', ' 平坦', '软粘', '坏'],\n", 89 | " ['浅白', ' 硬挺', ' 清脆', ' 模糊', ' 平坦', '硬滑', '坏'],\n", 90 | " ['浅白', ' 蜷缩', ' 浊响', ' 模糊', ' 平坦', '软粘', '坏'],\n", 91 | " ['青绿', ' 稍蜷', ' 浊响', ' 稍糊', ' 凹陷', '硬滑', '坏'],\n", 92 | " ['浅白', ' 稍蜷', ' 沉闷', ' 稍糊', ' 凹陷', '硬滑', '坏'],\n", 93 | " ['乌黑', ' 稍蜷', ' 浊响', ' 清晰', ' 稍凹', '软粘', '坏'],\n", 94 | " ['浅白', ' 蜷缩', ' 浊响', ' 模糊', ' 平坦', '硬滑', '坏'],\n", 95 | " ['青绿', ' 蜷缩', ' 沉闷', ' 稍糊', ' 稍凹', '硬滑', '坏']]" 96 | ] 97 | }, 98 | "execution_count": 5, 99 | "metadata": {}, 100 | "output_type": "execute_result" 101 | } 102 | ], 103 | "source": [ 104 | "train_data, labels = create_data()\n", 105 | "train_data" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 6, 111 | "metadata": {}, 112 | "outputs": [ 113 | { 114 | "data": { 115 | "text/plain": [ 116 | "17" 117 | ] 118 | }, 119 | "execution_count": 6, 120 | "metadata": {}, 121 | "output_type": "execute_result" 122 | } 123 | ], 124 | "source": [ 125 | "len(train_data)\n" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": null, 131 | "metadata": {}, 132 | "outputs": [], 133 | "source": [] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 7, 138 | "metadata": {}, 139 | "outputs": [], 140 | "source": [ 141 | "# 计算熵\n", 142 | "def ent_calc(dataset):\n", 143 | " length = len(dataset)\n", 144 | " label_count = {}\n", 145 | " for i in range(length):\n", 146 | " label = dataset[i][-1]\n", 147 | " if label not in label_count:\n", 148 | " label_count[label] = 0\n", 149 | " label_count[label] += 1\n", 150 | " ent = -sum([pk/length*np.log2(pk/length) for pk in label_count.values()])\n", 151 | " return ent\n", 152 | "\n", 153 | "# 计算经验熵\n", 154 | "def ent_resid(dataset, axis=0):\n", 155 | " length = len(dataset)\n", 156 | " feature_set = {}\n", 157 | " for i in range(length):\n", 158 | " f = dataset[i][axis]\n", 159 | " if f not in feature_set:\n", 160 | " feature_set[f] = []\n", 161 | " feature_set[f].append(dataset[i])\n", 162 | "# for p in feature_set.values():\n", 163 | "# print(p)\n", 164 | "# print('\\n\\n')\n", 165 | "# print(ent_calc(p))\n", 166 | "\n", 167 | " ent = sum([len(p)/length*ent_calc(p)for p in feature_set.values()])\n", 168 | " return ent\n", 169 | "\n", 170 | "def info_gain(ent_calc, ent_resid):\n", 171 | " return ent_calc-ent_resid\n", 172 | "\n", 173 | "def info_gain_train(dataset):\n", 174 | " columns = len(dataset[0])-1\n", 175 | " ent = ent_calc(dataset)\n", 176 | " best_feature = []\n", 177 | " for i in range(columns):\n", 178 | " cond_ent = ent_resid(dataset, axis=i)\n", 179 | " gain = info_gain(ent, cond_ent)\n", 180 | " best_feature.append((labels[i], gain))\n", 181 | " print(best_feature)\n", 182 | " best_ = max(best_feature, key = lambda x: x[-1])\n", 183 | " return best_" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 8, 189 | "metadata": {}, 190 | "outputs": [ 191 | { 192 | "data": { 193 | "text/plain": [ 194 | "0.99750254636911528" 195 | ] 196 | }, 197 | "execution_count": 8, 198 | "metadata": {}, 199 | "output_type": "execute_result" 200 | } 201 | ], 202 | "source": [ 203 | "ent_calc(train_data)" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": 9, 209 | "metadata": {}, 210 | "outputs": [ 211 | { 212 | "data": { 213 | "text/plain": [ 214 | "0.88937738110374998" 215 | ] 216 | }, 217 | "execution_count": 9, 218 | "metadata": {}, 219 | "output_type": "execute_result" 220 | } 221 | ], 222 | "source": [ 223 | "ent_resid(train_data)" 224 | ] 225 | }, 226 | { 227 | "cell_type": "code", 228 | "execution_count": 10, 229 | "metadata": {}, 230 | "outputs": [ 231 | { 232 | "name": "stdout", 233 | "output_type": "stream", 234 | "text": [ 235 | "[('色泽', 0.10812516526536531), ('根底', 0.23887919623736464), ('敲声', 0.28192625011143702), ('纹理', 0.42976816669833717), ('脐部', 0.3589876656471539), ('触感', 0.0060464891765655837)]\n" 236 | ] 237 | }, 238 | { 239 | "data": { 240 | "text/plain": [ 241 | "('纹理', 0.42976816669833717)" 242 | ] 243 | }, 244 | "execution_count": 10, 245 | "metadata": {}, 246 | "output_type": "execute_result" 247 | } 248 | ], 249 | "source": [ 250 | "info_gain_train(train_data)" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 11, 256 | "metadata": {}, 257 | "outputs": [], 258 | "source": [ 259 | "class Node:\n", 260 | " def __init__(self, root=True, label=None, feature_name=None, feature=None):\n", 261 | " self.root = root\n", 262 | " self.label = label\n", 263 | " self.feature_name = feature_name \n", 264 | " self.feature = feature\n", 265 | " self.tree = {}\n", 266 | " self.result = {'label':self.label, 'feature':self.feature, 'tree':self.tree}\n", 267 | " def add_node(self, val, node):\n", 268 | " self.tree[val] = node\n", 269 | " \n", 270 | " def predict(self, features):\n", 271 | " if self.root is True:\n", 272 | " return self.label\n", 273 | " return self.tree[features[self.feature]].predict(features)" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 24, 279 | "metadata": {}, 280 | "outputs": [], 281 | "source": [ 282 | "class DecisionTree:\n", 283 | " def __init__(self, epsilon=0.1):\n", 284 | " self.epsilon = epsilon\n", 285 | " self._tree = {}\n", 286 | " \n", 287 | "# 计算熵\n", 288 | " def ent_calc(self,dataset):\n", 289 | " length = len(dataset)\n", 290 | " label_count = {}\n", 291 | " for i in range(length):\n", 292 | " label = dataset[i][-1]\n", 293 | " if label not in label_count:\n", 294 | " label_count[label] = 0\n", 295 | " label_count[label] += 1\n", 296 | " ent = -sum([pk/length*np.log2(pk/length) for pk in label_count.values()])\n", 297 | " return ent\n", 298 | "\n", 299 | "# 计算经验熵\n", 300 | " def ent_resid(self,dataset, axis=0):\n", 301 | " length = len(dataset)\n", 302 | " feature_set = {}\n", 303 | " for i in range(length):\n", 304 | " f = dataset[i][axis]\n", 305 | " if f not in feature_set:\n", 306 | " feature_set[f] = []\n", 307 | " feature_set[f].append(dataset[i])\n", 308 | " ent = sum([len(p)/length*ent_calc(p)for p in feature_set.values()])\n", 309 | " return ent\n", 310 | "\n", 311 | "# 信息增益\n", 312 | " def info_gain(self, ent_calc, ent_resid):\n", 313 | " return ent_calc-ent_resid\n", 314 | "\n", 315 | "# \n", 316 | " def info_gain_train(self, dataset):\n", 317 | " columns = len(dataset[0])-1\n", 318 | " ent = ent_calc(dataset)\n", 319 | " best_feature = []\n", 320 | " for i in range(columns):\n", 321 | " cond_ent = ent_resid(dataset, axis=i)\n", 322 | " gain = info_gain(ent, cond_ent)\n", 323 | " best_feature.append((i, gain))\n", 324 | " print(best_feature)\n", 325 | " best_ = max(best_feature, key = lambda x: x[-1])\n", 326 | " return best_\n", 327 | "# \n", 328 | " def train(self, train_data):\n", 329 | " _, y_train, features = train_data.iloc[:, :-1], train_data.iloc[:, -1], train_data.columns[:-1]\n", 330 | " \n", 331 | " if len(y_train.value_counts()) == 1:\n", 332 | " return Node(root=True, label=y_train.iloc[0])\n", 333 | " \n", 334 | " if len(features) == 0:\n", 335 | " return Node(root=True, label=y_train.value_counts().sort_values(ascending=False).index[0])\n", 336 | " # 计算最大信息增益,\n", 337 | " max_feature, max_info_gain = self.info_gain_train(train_data.as_matrix())\n", 338 | " max_feature_name = features[max_feature]\n", 339 | " \n", 340 | " # 4.Ag的信息增益小于阈值\n", 341 | " if max_info_gain < self.epsilon:\n", 342 | " return Node(root=True, label=y_train.value_counts().sort_values(ascending=False).index[0])\n", 343 | " \n", 344 | " # 5. 构建Ag子集\n", 345 | " node_tree = Node(root=False, feature_name=max_feature_name, feature=max_feature)\n", 346 | " \n", 347 | " feature_list = train_data[max_feature_name].value_counts().index\n", 348 | " for f in feature_list:\n", 349 | " sub_train_df = train_data.loc[train_data[max_feature_name] == f].drop([max_feature_name], axis=1)\n", 350 | " \n", 351 | " sub_tree = self.train(sub_train_df)\n", 352 | " node_tree.add_node(f, sub_tree)\n", 353 | " return node_tree\n", 354 | " def fit(self, train_data):\n", 355 | " self._tree = self.train(train_data)\n", 356 | " return self._tree\n", 357 | " \n", 358 | " def predict(self, x_test):\n", 359 | " return self._tree.predict(x_test)\n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " " 364 | ] 365 | }, 366 | { 367 | "cell_type": "code", 368 | "execution_count": 25, 369 | "metadata": {}, 370 | "outputs": [], 371 | "source": [ 372 | "datasets, labels = create_data()\n", 373 | "datasets = pd.DataFrame(datasets, columns=labels)" 374 | ] 375 | }, 376 | { 377 | "cell_type": "code", 378 | "execution_count": 27, 379 | "metadata": {}, 380 | "outputs": [ 381 | { 382 | "name": "stdout", 383 | "output_type": "stream", 384 | "text": [ 385 | "[(0, 0.10812516526536531), (1, 0.23887919623736464), (2, 0.28192625011143702), (3, 0.42976816669833717), (4, 0.3589876656471539), (5, 0.0060464891765655837)]\n", 386 | "[(0, 0.0760098536627829), (1, 0.46956521111470695), (2, 0.34745764364708642), (3, 0.46956521111470695), (4, 0.46956521111470695)]\n", 387 | "[(0, 0.25162916738782293), (1, 0.0), (2, 0.0), (3, 0.25162916738782293)]\n", 388 | "[(0, 0.0), (1, 0.0), (2, 1.0)]\n", 389 | "[(0, 0.32192809488736229), (1, 0.072905595320056027), (2, 0.32192809488736229), (3, 0.17095059445466865), (4, 0.72192809488736231)]\n" 390 | ] 391 | } 392 | ], 393 | "source": [ 394 | "dt = DecisionTree()\n", 395 | "tree = dt.fit(datasets)" 396 | ] 397 | }, 398 | { 399 | "cell_type": "code", 400 | "execution_count": 29, 401 | "metadata": {}, 402 | "outputs": [ 403 | { 404 | "name": "stdout", 405 | "output_type": "stream", 406 | "text": [ 407 | "<__main__.Node object at 0x000001C078DECB00>\n" 408 | ] 409 | } 410 | ], 411 | "source": [ 412 | "print(tree)" 413 | ] 414 | }, 415 | { 416 | "cell_type": "code", 417 | "execution_count": 33, 418 | "metadata": {}, 419 | "outputs": [], 420 | "source": [ 421 | "# 定义节点类 二叉树\n", 422 | "class Node:\n", 423 | " def __init__(self, root=True, label=None, feature_name=None, feature=None):\n", 424 | " self.root = root\n", 425 | " self.label = label\n", 426 | " self.feature_name = feature_name\n", 427 | " self.feature = feature\n", 428 | " self.tree = {}\n", 429 | " self.result = {'label:': self.label, 'feature': self.feature, 'tree': self.tree}\n", 430 | "\n", 431 | " def __repr__(self):\n", 432 | " return '{}'.format(self.result)\n", 433 | "\n", 434 | " def add_node(self, val, node):\n", 435 | " self.tree[val] = node\n", 436 | "\n", 437 | " def predict(self, features):\n", 438 | " if self.root is True:\n", 439 | " return self.label\n", 440 | " return self.tree[features[self.feature]].predict(features)\n", 441 | " \n", 442 | "class DTree:\n", 443 | " def __init__(self, epsilon=0.1):\n", 444 | " self.epsilon = epsilon\n", 445 | " self._tree = {}\n", 446 | "\n", 447 | " # 熵\n", 448 | " @staticmethod\n", 449 | " def calc_ent(datasets):\n", 450 | " data_length = len(datasets)\n", 451 | " label_count = {}\n", 452 | " for i in range(data_length):\n", 453 | " label = datasets[i][-1]\n", 454 | " if label not in label_count:\n", 455 | " label_count[label] = 0\n", 456 | " label_count[label] += 1\n", 457 | " ent = -sum([(p/data_length)*log(p/data_length, 2) for p in label_count.values()])\n", 458 | " return ent\n", 459 | "\n", 460 | " # 经验条件熵\n", 461 | " def cond_ent(self, datasets, axis=0):\n", 462 | " data_length = len(datasets)\n", 463 | " feature_sets = {}\n", 464 | " for i in range(data_length):\n", 465 | " feature = datasets[i][axis]\n", 466 | " if feature not in feature_sets:\n", 467 | " feature_sets[feature] = []\n", 468 | " feature_sets[feature].append(datasets[i])\n", 469 | " cond_ent = sum([(len(p)/data_length)*self.calc_ent(p) for p in feature_sets.values()])\n", 470 | " return cond_ent\n", 471 | "\n", 472 | " # 信息增益\n", 473 | " @staticmethod\n", 474 | " def info_gain(ent, cond_ent):\n", 475 | " return ent - cond_ent\n", 476 | "\n", 477 | " def info_gain_train(self, datasets):\n", 478 | " count = len(datasets[0]) - 1\n", 479 | " ent = self.calc_ent(datasets)\n", 480 | " best_feature = []\n", 481 | " for c in range(count):\n", 482 | " c_info_gain = self.info_gain(ent, self.cond_ent(datasets, axis=c))\n", 483 | " best_feature.append((c, c_info_gain))\n", 484 | " # 比较大小\n", 485 | " best_ = max(best_feature, key=lambda x: x[-1])\n", 486 | " return best_\n", 487 | "\n", 488 | " def train(self, train_data):\n", 489 | " \"\"\"\n", 490 | " input:数据集D(DataFrame格式),特征集A,阈值eta\n", 491 | " output:决策树T\n", 492 | " \"\"\"\n", 493 | " _, y_train, features = train_data.iloc[:, :-1], train_data.iloc[:, -1], train_data.columns[:-1]\n", 494 | " # 1,若D中实例属于同一类Ck,则T为单节点树,并将类Ck作为结点的类标记,返回T\n", 495 | " if len(y_train.value_counts()) == 1:\n", 496 | " return Node(root=True,\n", 497 | " label=y_train.iloc[0])\n", 498 | "\n", 499 | " # 2, 若A为空,则T为单节点树,将D中实例树最大的类Ck作为该节点的类标记,返回T\n", 500 | " if len(features) == 0:\n", 501 | " return Node(root=True, label=y_train.value_counts().sort_values(ascending=False).index[0])\n", 502 | "\n", 503 | " # 3,计算最大信息增益 同5.1,Ag为信息增益最大的特征\n", 504 | " max_feature, max_info_gain = self.info_gain_train(np.array(train_data))\n", 505 | " max_feature_name = features[max_feature]\n", 506 | "\n", 507 | " # 4,Ag的信息增益小于阈值eta,则置T为单节点树,并将D中是实例数最大的类Ck作为该节点的类标记,返回T\n", 508 | " if max_info_gain < self.epsilon:\n", 509 | " return Node(root=True, label=y_train.value_counts().sort_values(ascending=False).index[0])\n", 510 | "\n", 511 | " # 5,构建Ag子集\n", 512 | " node_tree = Node(root=False, feature_name=max_feature_name, feature=max_feature)\n", 513 | "\n", 514 | " feature_list = train_data[max_feature_name].value_counts().index\n", 515 | " for f in feature_list:\n", 516 | " sub_train_df = train_data.loc[train_data[max_feature_name] == f].drop([max_feature_name], axis=1)\n", 517 | "\n", 518 | " # 6, 递归生成树\n", 519 | " sub_tree = self.train(sub_train_df)\n", 520 | " node_tree.add_node(f, sub_tree)\n", 521 | "\n", 522 | " # pprint.pprint(node_tree.tree)\n", 523 | " return node_tree\n", 524 | "\n", 525 | " def fit(self, train_data):\n", 526 | " self._tree = self.train(train_data)\n", 527 | " return self._tree\n", 528 | "\n", 529 | " def predict(self, X_test):\n", 530 | " return self._tree.predict(X_test)" 531 | ] 532 | }, 533 | { 534 | "cell_type": "code", 535 | "execution_count": 34, 536 | "metadata": {}, 537 | "outputs": [], 538 | "source": [ 539 | "def create_():\n", 540 | " dataset = [ ['青绿','蜷缩', '浊响', '清晰', '凹陷', '硬滑', '1'],\n", 541 | " ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '1'],\n", 542 | " ['乌黑',' 蜷缩',' 浊响',' 清晰',' 凹陷', '硬滑', '1'],\n", 543 | " ['青绿',' 蜷缩',' 沉闷',' 清晰',' 凹陷', '硬滑', '1'],\n", 544 | " ['浅白',' 蜷缩',' 浊响',' 清晰',' 凹陷', '硬滑', '1'],\n", 545 | " ['青绿',' 稍蜷',' 浊响',' 清晰',' 稍凹', '软粘', '1'],\n", 546 | " ['乌黑',' 稍蜷',' 浊响',' 稍糊',' 稍凹', '软粘', '1'], \n", 547 | " ['乌黑',' 稍蜷',' 浊响',' 清晰',' 稍凹', '硬滑', '1'],\n", 548 | " ['乌黑',' 稍蜷',' 沉闷',' 稍糊',' 稍凹', '硬滑', '0'],\n", 549 | " ['青绿',' 硬挺',' 清脆',' 清晰',' 平坦', '软粘', '0'],\n", 550 | " ['浅白',' 硬挺',' 清脆',' 模糊',' 平坦', '硬滑', '0'], \n", 551 | " ['浅白',' 蜷缩',' 浊响',' 模糊',' 平坦', '软粘', '0'],\n", 552 | " ['青绿',' 稍蜷',' 浊响',' 稍糊',' 凹陷', '硬滑', '0'],\n", 553 | " ['浅白',' 稍蜷',' 沉闷',' 稍糊',' 凹陷', '硬滑', '0'],\n", 554 | " ['乌黑',' 稍蜷',' 浊响',' 清晰',' 稍凹', '软粘', '0'],\n", 555 | " ['浅白',' 蜷缩',' 浊响',' 模糊',' 平坦', '硬滑', '0'],\n", 556 | " ['青绿',' 蜷缩',' 沉闷',' 稍糊',' 稍凹', '硬滑', '0']\n", 557 | " ]\n", 558 | " \n", 559 | " labels = ['色泽', '根底', '敲声', '纹理', '脐部', '触感', '好瓜']\n", 560 | " return pd.DataFrame(dataset, columns=labels)\n", 561 | " " 562 | ] 563 | }, 564 | { 565 | "cell_type": "code", 566 | "execution_count": 35, 567 | "metadata": {}, 568 | "outputs": [], 569 | "source": [ 570 | "\n", 571 | "datasets, labels = create_data()\n", 572 | "data_df = pd.DataFrame(datasets, columns=labels)\n", 573 | "dt = DTree()\n", 574 | "tree = dt.fit(data_df)" 575 | ] 576 | }, 577 | { 578 | "cell_type": "code", 579 | "execution_count": 36, 580 | "metadata": {}, 581 | "outputs": [ 582 | { 583 | "data": { 584 | "text/plain": [ 585 | "{'label:': None, 'feature': 3, 'tree': {' 清晰': {'label:': None, 'feature': 1, 'tree': {' 蜷缩': {'label:': '好', 'feature': None, 'tree': {}}, ' 稍蜷': {'label:': None, 'feature': 0, 'tree': {'乌黑': {'label:': None, 'feature': 2, 'tree': {'硬滑': {'label:': '好', 'feature': None, 'tree': {}}, '软粘': {'label:': '坏', 'feature': None, 'tree': {}}}}, '青绿': {'label:': '好', 'feature': None, 'tree': {}}}}, ' 硬挺': {'label:': '坏', 'feature': None, 'tree': {}}}}, ' 稍糊': {'label:': None, 'feature': 4, 'tree': {'硬滑': {'label:': '坏', 'feature': None, 'tree': {}}, '软粘': {'label:': '好', 'feature': None, 'tree': {}}}}, ' 模糊': {'label:': '坏', 'feature': None, 'tree': {}}, '清晰': {'label:': '好', 'feature': None, 'tree': {}}}}" 586 | ] 587 | }, 588 | "execution_count": 36, 589 | "metadata": {}, 590 | "output_type": "execute_result" 591 | } 592 | ], 593 | "source": [ 594 | "tree" 595 | ] 596 | }, 597 | { 598 | "cell_type": "code", 599 | "execution_count": null, 600 | "metadata": {}, 601 | "outputs": [], 602 | "source": [] 603 | }, 604 | { 605 | "cell_type": "code", 606 | "execution_count": null, 607 | "metadata": {}, 608 | "outputs": [], 609 | "source": [] 610 | }, 611 | { 612 | "cell_type": "code", 613 | "execution_count": null, 614 | "metadata": {}, 615 | "outputs": [], 616 | "source": [] 617 | }, 618 | { 619 | "cell_type": "code", 620 | "execution_count": null, 621 | "metadata": {}, 622 | "outputs": [], 623 | "source": [] 624 | } 625 | ], 626 | "metadata": { 627 | "kernelspec": { 628 | "display_name": "Python 3", 629 | "language": "python", 630 | "name": "python3" 631 | }, 632 | "language_info": { 633 | "codemirror_mode": { 634 | "name": "ipython", 635 | "version": 3 636 | }, 637 | "file_extension": ".py", 638 | "mimetype": "text/x-python", 639 | "name": "python", 640 | "nbconvert_exporter": "python", 641 | "pygments_lexer": "ipython3", 642 | "version": "3.6.1" 643 | } 644 | }, 645 | "nbformat": 4, 646 | "nbformat_minor": 2 647 | } 648 | -------------------------------------------------------------------------------- /决策树/DescideTree.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n", 8 | "# 3 决策树(decision tree)\n", 9 | " 决策树是一种基本的分类和回归方法,决策树呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。决策树学习主要包括3个步骤:特征选择、决策树的生成和决策树的修剪。下图是一个决策树的示意图,图中圆和方框分别表示内部节点和叶节点。\n", 10 | "
\n", 11 | "\n", 12 | "
\n", 13 | "## 3.1 决策树学习\n", 14 | " 决策树学习,假设给定训练数据集\n", 15 | "$$D={(x_1,y_1), (x_2, y_2),...,(x_n, y_n)}$$\n", 16 | "其中,$x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T为输入实例,n为特征个数,$y_i\\in {1,2,...,K}$为类标记,学习的目的是根据给定训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。\n", 17 | "## 3.2 特征选择\n" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 32, 23 | "metadata": {}, 24 | "outputs": [], 25 | "source": [ 26 | "import numpy as np\n", 27 | "import pandas as pd\n", 28 | "import matplotlib.pyplot as plt\n", 29 | "%matplotlib inline\n", 30 | "from math import log" 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 4, 36 | "metadata": {}, 37 | "outputs": [], 38 | "source": [ 39 | "def create_data():\n", 40 | " dataset = [['青绿','蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好'],\n", 41 | " ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好'],\n", 42 | " ['乌黑',' 蜷缩',' 浊响',' 清晰',' 凹陷', '硬滑', '好'],\n", 43 | " ['青绿',' 蜷缩',' 沉闷',' 清晰',' 凹陷', '硬滑', '好'],\n", 44 | " ['浅白',' 蜷缩',' 浊响',' 清晰',' 凹陷', '硬滑', '好'],\n", 45 | " ['青绿',' 稍蜷',' 浊响',' 清晰',' 稍凹', '软粘', '好'],\n", 46 | " ['乌黑',' 稍蜷',' 浊响',' 稍糊',' 稍凹', '软粘', '好'], \n", 47 | " ['乌黑',' 稍蜷',' 浊响',' 清晰',' 稍凹', '硬滑', '好'],\n", 48 | " ['乌黑',' 稍蜷',' 沉闷',' 稍糊',' 稍凹', '硬滑', '坏'],\n", 49 | " ['青绿',' 硬挺',' 清脆',' 清晰',' 平坦', '软粘', '坏'],\n", 50 | " ['浅白',' 硬挺',' 清脆',' 模糊',' 平坦', '硬滑', '坏'], \n", 51 | " ['浅白',' 蜷缩',' 浊响',' 模糊',' 平坦', '软粘', '坏'],\n", 52 | " ['青绿',' 稍蜷',' 浊响',' 稍糊',' 凹陷', '硬滑', '坏'],\n", 53 | " ['浅白',' 稍蜷',' 沉闷',' 稍糊',' 凹陷', '硬滑', '坏'],\n", 54 | " ['乌黑',' 稍蜷',' 浊响',' 清晰',' 稍凹', '软粘', '坏'],\n", 55 | " ['浅白',' 蜷缩',' 浊响',' 模糊',' 平坦', '硬滑', '坏'],\n", 56 | " ['青绿',' 蜷缩',' 沉闷',' 稍糊',' 稍凹', '硬滑', '坏']\n", 57 | " ]\n", 58 | " \n", 59 | " labels = ['色泽', '根底', '敲声', '纹理', '脐部', '触感', '好瓜']\n", 60 | " return dataset, labels\n", 61 | " " 62 | ] 63 | }, 64 | { 65 | "cell_type": "code", 66 | "execution_count": null, 67 | "metadata": {}, 68 | "outputs": [], 69 | "source": [] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 5, 74 | "metadata": {}, 75 | "outputs": [ 76 | { 77 | "data": { 78 | "text/plain": [ 79 | "[['青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '好'],\n", 80 | " ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '好'],\n", 81 | " ['乌黑', ' 蜷缩', ' 浊响', ' 清晰', ' 凹陷', '硬滑', '好'],\n", 82 | " ['青绿', ' 蜷缩', ' 沉闷', ' 清晰', ' 凹陷', '硬滑', '好'],\n", 83 | " ['浅白', ' 蜷缩', ' 浊响', ' 清晰', ' 凹陷', '硬滑', '好'],\n", 84 | " ['青绿', ' 稍蜷', ' 浊响', ' 清晰', ' 稍凹', '软粘', '好'],\n", 85 | " ['乌黑', ' 稍蜷', ' 浊响', ' 稍糊', ' 稍凹', '软粘', '好'],\n", 86 | " ['乌黑', ' 稍蜷', ' 浊响', ' 清晰', ' 稍凹', '硬滑', '好'],\n", 87 | " ['乌黑', ' 稍蜷', ' 沉闷', ' 稍糊', ' 稍凹', '硬滑', '坏'],\n", 88 | " ['青绿', ' 硬挺', ' 清脆', ' 清晰', ' 平坦', '软粘', '坏'],\n", 89 | " ['浅白', ' 硬挺', ' 清脆', ' 模糊', ' 平坦', '硬滑', '坏'],\n", 90 | " ['浅白', ' 蜷缩', ' 浊响', ' 模糊', ' 平坦', '软粘', '坏'],\n", 91 | " ['青绿', ' 稍蜷', ' 浊响', ' 稍糊', ' 凹陷', '硬滑', '坏'],\n", 92 | " ['浅白', ' 稍蜷', ' 沉闷', ' 稍糊', ' 凹陷', '硬滑', '坏'],\n", 93 | " ['乌黑', ' 稍蜷', ' 浊响', ' 清晰', ' 稍凹', '软粘', '坏'],\n", 94 | " ['浅白', ' 蜷缩', ' 浊响', ' 模糊', ' 平坦', '硬滑', '坏'],\n", 95 | " ['青绿', ' 蜷缩', ' 沉闷', ' 稍糊', ' 稍凹', '硬滑', '坏']]" 96 | ] 97 | }, 98 | "execution_count": 5, 99 | "metadata": {}, 100 | "output_type": "execute_result" 101 | } 102 | ], 103 | "source": [ 104 | "train_data, labels = create_data()\n", 105 | "train_data" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 6, 111 | "metadata": {}, 112 | "outputs": [ 113 | { 114 | "data": { 115 | "text/plain": [ 116 | "17" 117 | ] 118 | }, 119 | "execution_count": 6, 120 | "metadata": {}, 121 | "output_type": "execute_result" 122 | } 123 | ], 124 | "source": [ 125 | "len(train_data)\n" 126 | ] 127 | }, 128 | { 129 | "cell_type": "code", 130 | "execution_count": null, 131 | "metadata": {}, 132 | "outputs": [], 133 | "source": [] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 7, 138 | "metadata": {}, 139 | "outputs": [], 140 | "source": [ 141 | "# 计算熵\n", 142 | "def ent_calc(dataset):\n", 143 | " length = len(dataset)\n", 144 | " label_count = {}\n", 145 | " for i in range(length):\n", 146 | " label = dataset[i][-1]\n", 147 | " if label not in label_count:\n", 148 | " label_count[label] = 0\n", 149 | " label_count[label] += 1\n", 150 | " ent = -sum([pk/length*np.log2(pk/length) for pk in label_count.values()])\n", 151 | " return ent\n", 152 | "\n", 153 | "# 计算经验熵\n", 154 | "def ent_resid(dataset, axis=0):\n", 155 | " length = len(dataset)\n", 156 | " feature_set = {}\n", 157 | " for i in range(length):\n", 158 | " f = dataset[i][axis]\n", 159 | " if f not in feature_set:\n", 160 | " feature_set[f] = []\n", 161 | " feature_set[f].append(dataset[i])\n", 162 | "# for p in feature_set.values():\n", 163 | "# print(p)\n", 164 | "# print('\\n\\n')\n", 165 | "# print(ent_calc(p))\n", 166 | "\n", 167 | " ent = sum([len(p)/length*ent_calc(p)for p in feature_set.values()])\n", 168 | " return ent\n", 169 | "\n", 170 | "def info_gain(ent_calc, ent_resid):\n", 171 | " return ent_calc-ent_resid\n", 172 | "\n", 173 | "def info_gain_train(dataset):\n", 174 | " columns = len(dataset[0])-1\n", 175 | " ent = ent_calc(dataset)\n", 176 | " best_feature = []\n", 177 | " for i in range(columns):\n", 178 | " cond_ent = ent_resid(dataset, axis=i)\n", 179 | " gain = info_gain(ent, cond_ent)\n", 180 | " best_feature.append((labels[i], gain))\n", 181 | " print(best_feature)\n", 182 | " best_ = max(best_feature, key = lambda x: x[-1])\n", 183 | " return best_" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 8, 189 | "metadata": {}, 190 | "outputs": [ 191 | { 192 | "data": { 193 | "text/plain": [ 194 | "0.99750254636911528" 195 | ] 196 | }, 197 | "execution_count": 8, 198 | "metadata": {}, 199 | "output_type": "execute_result" 200 | } 201 | ], 202 | "source": [ 203 | "ent_calc(train_data)" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": 9, 209 | "metadata": {}, 210 | "outputs": [ 211 | { 212 | "data": { 213 | "text/plain": [ 214 | "0.88937738110374998" 215 | ] 216 | }, 217 | "execution_count": 9, 218 | "metadata": {}, 219 | "output_type": "execute_result" 220 | } 221 | ], 222 | "source": [ 223 | "ent_resid(train_data)" 224 | ] 225 | }, 226 | { 227 | "cell_type": "code", 228 | "execution_count": 10, 229 | "metadata": {}, 230 | "outputs": [ 231 | { 232 | "name": "stdout", 233 | "output_type": "stream", 234 | "text": [ 235 | "[('色泽', 0.10812516526536531), ('根底', 0.23887919623736464), ('敲声', 0.28192625011143702), ('纹理', 0.42976816669833717), ('脐部', 0.3589876656471539), ('触感', 0.0060464891765655837)]\n" 236 | ] 237 | }, 238 | { 239 | "data": { 240 | "text/plain": [ 241 | "('纹理', 0.42976816669833717)" 242 | ] 243 | }, 244 | "execution_count": 10, 245 | "metadata": {}, 246 | "output_type": "execute_result" 247 | } 248 | ], 249 | "source": [ 250 | "info_gain_train(train_data)" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 11, 256 | "metadata": {}, 257 | "outputs": [], 258 | "source": [ 259 | "class Node:\n", 260 | " def __init__(self, root=True, label=None, feature_name=None, feature=None):\n", 261 | " self.root = root\n", 262 | " self.label = label\n", 263 | " self.feature_name = feature_name \n", 264 | " self.feature = feature\n", 265 | " self.tree = {}\n", 266 | " self.result = {'label':self.label, 'feature':self.feature, 'tree':self.tree}\n", 267 | " def add_node(self, val, node):\n", 268 | " self.tree[val] = node\n", 269 | " \n", 270 | " def predict(self, features):\n", 271 | " if self.root is True:\n", 272 | " return self.label\n", 273 | " return self.tree[features[self.feature]].predict(features)" 274 | ] 275 | }, 276 | { 277 | "cell_type": "code", 278 | "execution_count": 24, 279 | "metadata": {}, 280 | "outputs": [], 281 | "source": [ 282 | "class DecisionTree:\n", 283 | " def __init__(self, epsilon=0.1):\n", 284 | " self.epsilon = epsilon\n", 285 | " self._tree = {}\n", 286 | " \n", 287 | "# 计算熵\n", 288 | " def ent_calc(self,dataset):\n", 289 | " length = len(dataset)\n", 290 | " label_count = {}\n", 291 | " for i in range(length):\n", 292 | " label = dataset[i][-1]\n", 293 | " if label not in label_count:\n", 294 | " label_count[label] = 0\n", 295 | " label_count[label] += 1\n", 296 | " ent = -sum([pk/length*np.log2(pk/length) for pk in label_count.values()])\n", 297 | " return ent\n", 298 | "\n", 299 | "# 计算经验熵\n", 300 | " def ent_resid(self,dataset, axis=0):\n", 301 | " length = len(dataset)\n", 302 | " feature_set = {}\n", 303 | " for i in range(length):\n", 304 | " f = dataset[i][axis]\n", 305 | " if f not in feature_set:\n", 306 | " feature_set[f] = []\n", 307 | " feature_set[f].append(dataset[i])\n", 308 | " ent = sum([len(p)/length*ent_calc(p)for p in feature_set.values()])\n", 309 | " return ent\n", 310 | "\n", 311 | "# 信息增益\n", 312 | " def info_gain(self, ent_calc, ent_resid):\n", 313 | " return ent_calc-ent_resid\n", 314 | "\n", 315 | "# \n", 316 | " def info_gain_train(self, dataset):\n", 317 | " columns = len(dataset[0])-1\n", 318 | " ent = ent_calc(dataset)\n", 319 | " best_feature = []\n", 320 | " for i in range(columns):\n", 321 | " cond_ent = ent_resid(dataset, axis=i)\n", 322 | " gain = info_gain(ent, cond_ent)\n", 323 | " best_feature.append((i, gain))\n", 324 | " print(best_feature)\n", 325 | " best_ = max(best_feature, key = lambda x: x[-1])\n", 326 | " return best_\n", 327 | "# \n", 328 | " def train(self, train_data):\n", 329 | " _, y_train, features = train_data.iloc[:, :-1], train_data.iloc[:, -1], train_data.columns[:-1]\n", 330 | " \n", 331 | " if len(y_train.value_counts()) == 1:\n", 332 | " return Node(root=True, label=y_train.iloc[0])\n", 333 | " \n", 334 | " if len(features) == 0:\n", 335 | " return Node(root=True, label=y_train.value_counts().sort_values(ascending=False).index[0])\n", 336 | " # 计算最大信息增益,\n", 337 | " max_feature, max_info_gain = self.info_gain_train(train_data.as_matrix())\n", 338 | " max_feature_name = features[max_feature]\n", 339 | " \n", 340 | " # 4.Ag的信息增益小于阈值\n", 341 | " if max_info_gain < self.epsilon:\n", 342 | " return Node(root=True, label=y_train.value_counts().sort_values(ascending=False).index[0])\n", 343 | " \n", 344 | " # 5. 构建Ag子集\n", 345 | " node_tree = Node(root=False, feature_name=max_feature_name, feature=max_feature)\n", 346 | " \n", 347 | " feature_list = train_data[max_feature_name].value_counts().index\n", 348 | " for f in feature_list:\n", 349 | " sub_train_df = train_data.loc[train_data[max_feature_name] == f].drop([max_feature_name], axis=1)\n", 350 | " \n", 351 | " sub_tree = self.train(sub_train_df)\n", 352 | " node_tree.add_node(f, sub_tree)\n", 353 | " return node_tree\n", 354 | " def fit(self, train_data):\n", 355 | " self._tree = self.train(train_data)\n", 356 | " return self._tree\n", 357 | " \n", 358 | " def predict(self, x_test):\n", 359 | " return self._tree.predict(x_test)\n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " " 364 | ] 365 | }, 366 | { 367 | "cell_type": "code", 368 | "execution_count": 25, 369 | "metadata": {}, 370 | "outputs": [], 371 | "source": [ 372 | "datasets, labels = create_data()\n", 373 | "datasets = pd.DataFrame(datasets, columns=labels)" 374 | ] 375 | }, 376 | { 377 | "cell_type": "code", 378 | "execution_count": 27, 379 | "metadata": {}, 380 | "outputs": [ 381 | { 382 | "name": "stdout", 383 | "output_type": "stream", 384 | "text": [ 385 | "[(0, 0.10812516526536531), (1, 0.23887919623736464), (2, 0.28192625011143702), (3, 0.42976816669833717), (4, 0.3589876656471539), (5, 0.0060464891765655837)]\n", 386 | "[(0, 0.0760098536627829), (1, 0.46956521111470695), (2, 0.34745764364708642), (3, 0.46956521111470695), (4, 0.46956521111470695)]\n", 387 | "[(0, 0.25162916738782293), (1, 0.0), (2, 0.0), (3, 0.25162916738782293)]\n", 388 | "[(0, 0.0), (1, 0.0), (2, 1.0)]\n", 389 | "[(0, 0.32192809488736229), (1, 0.072905595320056027), (2, 0.32192809488736229), (3, 0.17095059445466865), (4, 0.72192809488736231)]\n" 390 | ] 391 | } 392 | ], 393 | "source": [ 394 | "dt = DecisionTree()\n", 395 | "tree = dt.fit(datasets)" 396 | ] 397 | }, 398 | { 399 | "cell_type": "code", 400 | "execution_count": 29, 401 | "metadata": {}, 402 | "outputs": [ 403 | { 404 | "name": "stdout", 405 | "output_type": "stream", 406 | "text": [ 407 | "<__main__.Node object at 0x000001C078DECB00>\n" 408 | ] 409 | } 410 | ], 411 | "source": [ 412 | "print(tree)" 413 | ] 414 | }, 415 | { 416 | "cell_type": "code", 417 | "execution_count": 33, 418 | "metadata": {}, 419 | "outputs": [], 420 | "source": [ 421 | "# 定义节点类 二叉树\n", 422 | "class Node:\n", 423 | " def __init__(self, root=True, label=None, feature_name=None, feature=None):\n", 424 | " self.root = root\n", 425 | " self.label = label\n", 426 | " self.feature_name = feature_name\n", 427 | " self.feature = feature\n", 428 | " self.tree = {}\n", 429 | " self.result = {'label:': self.label, 'feature': self.feature, 'tree': self.tree}\n", 430 | "\n", 431 | " def __repr__(self):\n", 432 | " return '{}'.format(self.result)\n", 433 | "\n", 434 | " def add_node(self, val, node):\n", 435 | " self.tree[val] = node\n", 436 | "\n", 437 | " def predict(self, features):\n", 438 | " if self.root is True:\n", 439 | " return self.label\n", 440 | " return self.tree[features[self.feature]].predict(features)\n", 441 | " \n", 442 | "class DTree:\n", 443 | " def __init__(self, epsilon=0.1):\n", 444 | " self.epsilon = epsilon\n", 445 | " self._tree = {}\n", 446 | "\n", 447 | " # 熵\n", 448 | " @staticmethod\n", 449 | " def calc_ent(datasets):\n", 450 | " data_length = len(datasets)\n", 451 | " label_count = {}\n", 452 | " for i in range(data_length):\n", 453 | " label = datasets[i][-1]\n", 454 | " if label not in label_count:\n", 455 | " label_count[label] = 0\n", 456 | " label_count[label] += 1\n", 457 | " ent = -sum([(p/data_length)*log(p/data_length, 2) for p in label_count.values()])\n", 458 | " return ent\n", 459 | "\n", 460 | " # 经验条件熵\n", 461 | " def cond_ent(self, datasets, axis=0):\n", 462 | " data_length = len(datasets)\n", 463 | " feature_sets = {}\n", 464 | " for i in range(data_length):\n", 465 | " feature = datasets[i][axis]\n", 466 | " if feature not in feature_sets:\n", 467 | " feature_sets[feature] = []\n", 468 | " feature_sets[feature].append(datasets[i])\n", 469 | " cond_ent = sum([(len(p)/data_length)*self.calc_ent(p) for p in feature_sets.values()])\n", 470 | " return cond_ent\n", 471 | "\n", 472 | " # 信息增益\n", 473 | " @staticmethod\n", 474 | " def info_gain(ent, cond_ent):\n", 475 | " return ent - cond_ent\n", 476 | "\n", 477 | " def info_gain_train(self, datasets):\n", 478 | " count = len(datasets[0]) - 1\n", 479 | " ent = self.calc_ent(datasets)\n", 480 | " best_feature = []\n", 481 | " for c in range(count):\n", 482 | " c_info_gain = self.info_gain(ent, self.cond_ent(datasets, axis=c))\n", 483 | " best_feature.append((c, c_info_gain))\n", 484 | " # 比较大小\n", 485 | " best_ = max(best_feature, key=lambda x: x[-1])\n", 486 | " return best_\n", 487 | "\n", 488 | " def train(self, train_data):\n", 489 | " \"\"\"\n", 490 | " input:数据集D(DataFrame格式),特征集A,阈值eta\n", 491 | " output:决策树T\n", 492 | " \"\"\"\n", 493 | " _, y_train, features = train_data.iloc[:, :-1], train_data.iloc[:, -1], train_data.columns[:-1]\n", 494 | " # 1,若D中实例属于同一类Ck,则T为单节点树,并将类Ck作为结点的类标记,返回T\n", 495 | " if len(y_train.value_counts()) == 1:\n", 496 | " return Node(root=True,\n", 497 | " label=y_train.iloc[0])\n", 498 | "\n", 499 | " # 2, 若A为空,则T为单节点树,将D中实例树最大的类Ck作为该节点的类标记,返回T\n", 500 | " if len(features) == 0:\n", 501 | " return Node(root=True, label=y_train.value_counts().sort_values(ascending=False).index[0])\n", 502 | "\n", 503 | " # 3,计算最大信息增益 同5.1,Ag为信息增益最大的特征\n", 504 | " max_feature, max_info_gain = self.info_gain_train(np.array(train_data))\n", 505 | " max_feature_name = features[max_feature]\n", 506 | "\n", 507 | " # 4,Ag的信息增益小于阈值eta,则置T为单节点树,并将D中是实例数最大的类Ck作为该节点的类标记,返回T\n", 508 | " if max_info_gain < self.epsilon:\n", 509 | " return Node(root=True, label=y_train.value_counts().sort_values(ascending=False).index[0])\n", 510 | "\n", 511 | " # 5,构建Ag子集\n", 512 | " node_tree = Node(root=False, feature_name=max_feature_name, feature=max_feature)\n", 513 | "\n", 514 | " feature_list = train_data[max_feature_name].value_counts().index\n", 515 | " for f in feature_list:\n", 516 | " sub_train_df = train_data.loc[train_data[max_feature_name] == f].drop([max_feature_name], axis=1)\n", 517 | "\n", 518 | " # 6, 递归生成树\n", 519 | " sub_tree = self.train(sub_train_df)\n", 520 | " node_tree.add_node(f, sub_tree)\n", 521 | "\n", 522 | " # pprint.pprint(node_tree.tree)\n", 523 | " return node_tree\n", 524 | "\n", 525 | " def fit(self, train_data):\n", 526 | " self._tree = self.train(train_data)\n", 527 | " return self._tree\n", 528 | "\n", 529 | " def predict(self, X_test):\n", 530 | " return self._tree.predict(X_test)" 531 | ] 532 | }, 533 | { 534 | "cell_type": "code", 535 | "execution_count": 34, 536 | "metadata": {}, 537 | "outputs": [], 538 | "source": [ 539 | "def create_():\n", 540 | " dataset = [ ['青绿','蜷缩', '浊响', '清晰', '凹陷', '硬滑', '1'],\n", 541 | " ['乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '1'],\n", 542 | " ['乌黑',' 蜷缩',' 浊响',' 清晰',' 凹陷', '硬滑', '1'],\n", 543 | " ['青绿',' 蜷缩',' 沉闷',' 清晰',' 凹陷', '硬滑', '1'],\n", 544 | " ['浅白',' 蜷缩',' 浊响',' 清晰',' 凹陷', '硬滑', '1'],\n", 545 | " ['青绿',' 稍蜷',' 浊响',' 清晰',' 稍凹', '软粘', '1'],\n", 546 | " ['乌黑',' 稍蜷',' 浊响',' 稍糊',' 稍凹', '软粘', '1'], \n", 547 | " ['乌黑',' 稍蜷',' 浊响',' 清晰',' 稍凹', '硬滑', '1'],\n", 548 | " ['乌黑',' 稍蜷',' 沉闷',' 稍糊',' 稍凹', '硬滑', '0'],\n", 549 | " ['青绿',' 硬挺',' 清脆',' 清晰',' 平坦', '软粘', '0'],\n", 550 | " ['浅白',' 硬挺',' 清脆',' 模糊',' 平坦', '硬滑', '0'], \n", 551 | " ['浅白',' 蜷缩',' 浊响',' 模糊',' 平坦', '软粘', '0'],\n", 552 | " ['青绿',' 稍蜷',' 浊响',' 稍糊',' 凹陷', '硬滑', '0'],\n", 553 | " ['浅白',' 稍蜷',' 沉闷',' 稍糊',' 凹陷', '硬滑', '0'],\n", 554 | " ['乌黑',' 稍蜷',' 浊响',' 清晰',' 稍凹', '软粘', '0'],\n", 555 | " ['浅白',' 蜷缩',' 浊响',' 模糊',' 平坦', '硬滑', '0'],\n", 556 | " ['青绿',' 蜷缩',' 沉闷',' 稍糊',' 稍凹', '硬滑', '0']\n", 557 | " ]\n", 558 | " \n", 559 | " labels = ['色泽', '根底', '敲声', '纹理', '脐部', '触感', '好瓜']\n", 560 | " return pd.DataFrame(dataset, columns=labels)\n", 561 | " " 562 | ] 563 | }, 564 | { 565 | "cell_type": "code", 566 | "execution_count": 35, 567 | "metadata": {}, 568 | "outputs": [], 569 | "source": [ 570 | "\n", 571 | "datasets, labels = create_data()\n", 572 | "data_df = pd.DataFrame(datasets, columns=labels)\n", 573 | "dt = DTree()\n", 574 | "tree = dt.fit(data_df)" 575 | ] 576 | }, 577 | { 578 | "cell_type": "code", 579 | "execution_count": 36, 580 | "metadata": {}, 581 | "outputs": [ 582 | { 583 | "data": { 584 | "text/plain": [ 585 | "{'label:': None, 'feature': 3, 'tree': {' 清晰': {'label:': None, 'feature': 1, 'tree': {' 蜷缩': {'label:': '好', 'feature': None, 'tree': {}}, ' 稍蜷': {'label:': None, 'feature': 0, 'tree': {'乌黑': {'label:': None, 'feature': 2, 'tree': {'硬滑': {'label:': '好', 'feature': None, 'tree': {}}, '软粘': {'label:': '坏', 'feature': None, 'tree': {}}}}, '青绿': {'label:': '好', 'feature': None, 'tree': {}}}}, ' 硬挺': {'label:': '坏', 'feature': None, 'tree': {}}}}, ' 稍糊': {'label:': None, 'feature': 4, 'tree': {'硬滑': {'label:': '坏', 'feature': None, 'tree': {}}, '软粘': {'label:': '好', 'feature': None, 'tree': {}}}}, ' 模糊': {'label:': '坏', 'feature': None, 'tree': {}}, '清晰': {'label:': '好', 'feature': None, 'tree': {}}}}" 586 | ] 587 | }, 588 | "execution_count": 36, 589 | "metadata": {}, 590 | "output_type": "execute_result" 591 | } 592 | ], 593 | "source": [ 594 | "tree" 595 | ] 596 | }, 597 | { 598 | "cell_type": "code", 599 | "execution_count": null, 600 | "metadata": {}, 601 | "outputs": [], 602 | "source": [] 603 | }, 604 | { 605 | "cell_type": "code", 606 | "execution_count": null, 607 | "metadata": {}, 608 | "outputs": [], 609 | "source": [] 610 | }, 611 | { 612 | "cell_type": "code", 613 | "execution_count": null, 614 | "metadata": {}, 615 | "outputs": [], 616 | "source": [] 617 | }, 618 | { 619 | "cell_type": "code", 620 | "execution_count": null, 621 | "metadata": {}, 622 | "outputs": [], 623 | "source": [] 624 | } 625 | ], 626 | "metadata": { 627 | "kernelspec": { 628 | "display_name": "Python 3", 629 | "language": "python", 630 | "name": "python3" 631 | }, 632 | "language_info": { 633 | "codemirror_mode": { 634 | "name": "ipython", 635 | "version": 3 636 | }, 637 | "file_extension": ".py", 638 | "mimetype": "text/x-python", 639 | "name": "python", 640 | "nbconvert_exporter": "python", 641 | "pygments_lexer": "ipython3", 642 | "version": "3.6.1" 643 | } 644 | }, 645 | "nbformat": 4, 646 | "nbformat_minor": 2 647 | } 648 | -------------------------------------------------------------------------------- /决策树/Image/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/决策树/Image/1.jpg -------------------------------------------------------------------------------- /神经网络/.ipynb_checkpoints/NeuralNetwork-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 神经网络\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 106, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import numpy as np\n", 17 | "import pandas as pd\n", 18 | "import matplotlib.pyplot as plt\n", 19 | "%matplotlib inline" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 107, 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "# 感知机实现或、与、非运算\n", 29 | "\n", 30 | "def sigmoid(x):\n", 31 | " return 1/(1+np.exp(-x))\n", 32 | "\n", 33 | "def sgn(x):\n", 34 | " if x >= 0:\n", 35 | " return 1\n", 36 | " if x < 0:\n", 37 | " return 0\n", 38 | "\n", 39 | "def perceptron(x, w, theata):\n", 40 | " length = len(x)\n", 41 | " g = sum([wi*xi for xi, wi in zip(x, w)])-theata\n", 42 | " return sigmoid(g)" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": 108, 48 | "metadata": {}, 49 | "outputs": [ 50 | { 51 | "data": { 52 | "text/plain": [ 53 | "0.5" 54 | ] 55 | }, 56 | "execution_count": 108, 57 | "metadata": {}, 58 | "output_type": "execute_result" 59 | } 60 | ], 61 | "source": [ 62 | "# 与运算\n", 63 | "x = [1, 1]\n", 64 | "w = [1, 1]\n", 65 | "theata = 2\n", 66 | "perceptron(x, w, theata)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 109, 72 | "metadata": {}, 73 | "outputs": [ 74 | { 75 | "data": { 76 | "text/plain": [ 77 | "0.62245933120185459" 78 | ] 79 | }, 80 | "execution_count": 109, 81 | "metadata": {}, 82 | "output_type": "execute_result" 83 | } 84 | ], 85 | "source": [ 86 | "# 或运算\n", 87 | "x = [1, 0]\n", 88 | "w = [1, 1]\n", 89 | "theata = 0.5\n", 90 | "perceptron(x, w, theata)" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 110, 96 | "metadata": {}, 97 | "outputs": [ 98 | { 99 | "data": { 100 | "text/plain": [ 101 | "0.62245933120185459" 102 | ] 103 | }, 104 | "execution_count": 110, 105 | "metadata": {}, 106 | "output_type": "execute_result" 107 | } 108 | ], 109 | "source": [ 110 | "# 非运算\n", 111 | "x = [0, 0]\n", 112 | "w = [-0.6, 0]\n", 113 | "theata = -0.5\n", 114 | "perceptron(x, w, theata)" 115 | ] 116 | }, 117 | { 118 | "cell_type": "code", 119 | "execution_count": 111, 120 | "metadata": {}, 121 | "outputs": [], 122 | "source": [ 123 | "def two_perceptron(x, w, theata):\n", 124 | " x0 = perceptron(x, w[0], 0.5) \n", 125 | " x1 = perceptron(x, w[1], 0.5)\n", 126 | " return perceptron([x0, x1], w[2], 0.5)\n", 127 | "\n", 128 | "\n", 129 | " " 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 112, 135 | "metadata": {}, 136 | "outputs": [ 137 | { 138 | "name": "stdout", 139 | "output_type": "stream", 140 | "text": [ 141 | "[1, -1]\n" 142 | ] 143 | }, 144 | { 145 | "data": { 146 | "text/plain": [ 147 | "0.56342679354672753" 148 | ] 149 | }, 150 | "execution_count": 112, 151 | "metadata": {}, 152 | "output_type": "execute_result" 153 | } 154 | ], 155 | "source": [ 156 | "# 异或XOR运算\n", 157 | "x = [1, 1]\n", 158 | "w = [[1, -1], [-1, 1], [1, 1]]\n", 159 | "print(w[0])\n", 160 | "two_perceptron(x, w, 0.5)" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 113, 166 | "metadata": {}, 167 | "outputs": [], 168 | "source": [ 169 | "from sklearn.datasets import make_blobs" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 114, 175 | "metadata": {}, 176 | "outputs": [ 177 | { 178 | "data": { 179 | "text/plain": [ 180 | "" 181 | ] 182 | }, 183 | "execution_count": 114, 184 | "metadata": {}, 185 | "output_type": "execute_result" 186 | }, 187 | { 188 | "data": { 189 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHhFJREFUeJzt3Xl8VfWZx/HPQ4AsLCISh1axwQWnuKA0UuuMVgUttuLS\n2tbiMo5jUWesVZyqqLV26qitU9xqp8W6tfoa7VQs1q1al1pFkai4L6UqiigEAUUSCCS/+eNJhiT3\nZrm5555zc+73/XrlBTm5Offhkjznd3/n+T0/CyEgIiLpMSDpAEREJFpK7CIiKaPELiKSMkrsIiIp\no8QuIpIySuwiIimjxC4ikjJK7CIiKaPELiKSMgOTeNJRo0aFmpqaJJ5aRKTfeuaZZ1aGEKp7elwi\nib2mpoa6uroknlpEpN8ysyW9eZymYkREUkaJXUQkZZTYRURSRoldRCRllNhFRFKmRBL7AmASUAaM\nBC4ENiUakYhIoSRS7hivV4HJwLrWz1cDPwWWAb9KKigRkYIpgRH7pcD6TscagFuB+vjDEREpsBJI\n7IuA5izHy4E3Y45FRKTwSiCx74HPrXe2Adg+5lhERAqvBBL7ufjovL0qYDrQY8sFEZF+pwQS+3jg\nIaAW/+eOAGYCv0wyKBGRgimBqhiAvYGFSQchIhKLEhixi4iUFiV2EZGUUWIXEUkZJXYRkZRRYhcR\nSRkldhGRlFFi73ca8cZma5IORESKVGSJ3czKzOw5M7s7qnNKewFvaFYNfB4YDfwz0JRkUCJShKJc\noPRdfCg5PMJzyv/7DXAx3pmyze14e4RrE4lIRIpTJCN2M9sW+ApqcF5Al9IxqYNPy9yANzQTEXFR\nTcVcCZwNtER0PsmwvIvjAVgbZyAiUuTyTuxmdiiwIoTwTA+Pm2FmdWZWV1+vDS5y9wXAshwfCWwV\ncyy9sRA4DfgX4I/4BUhE4hDFiP0fgMPM7G3gNuBAM7ul84NCCHNCCLUhhNrqarXLzd2lwBA6/pdV\nAVeTPeEn6RJgf+C/8amirwHHouQuEo+8E3sIYVYIYdsQQg1wNPBwCOHYvCMTYCWwovXvuwNPA18H\nxgJTgHuBo5IJrUvvAj/C7we0zcytA+YBf47h+QPwv8ABwF7AbDLvTYikW4m07e1vFuMbgTyPj8b/\nHt+jdRf8TVExu5/s44UG4E58JF9IpwM3snnz8peBW4CngMEFfm6R4hDpAqUQwqMhhEOjPGfpWY/P\nbtXhNeobgBeA/egfN0mryP5jVYZPJRXSW3hh1rp2xxqBN/BRvEhp0MrTovN7fHTbfj464An+9kQi\nys00ss+lDwKOL/BzP072N6Hr8HcSIqVBib3gVgNz8cTSm1WiS/BRe2frgLejC6tghuP/3iHAMGAo\nUAFcgU8pFVI12W8kDwI+XeDnFikemmMvqF8CZ7B5bncAcA+wTzffsxeeCD/pdHwY3kqgGLXgo+UP\n8Wmkg/G6+/vxdxoHA6NiiGMKfkH5hI7vGgYB347h+UWKgxJ7wbwInImPvtuPwL8MfIAn72wOAHYD\nnmv3feXADq3fW2z+iifU1fhouQk4B7gIL3OM00DgUXw6aBk+r18G3AzsGHMsIsnRVEzB3Ej2qZcW\nup/vNeAhfCHvZ4Ax+AXiL3iSKiYBv9i8i9/Y/Ri/GP0XcF9CMe0MvA4sAB7E3zlMSygWkWRoxF4w\na4DmLMd70wKgEvhh60cclgNP4CtY96X31/vngffJvFm6Dm9MdkhUAebI8NJQkdKkEXvBHInfOOxs\nEz51USwuAmrwFsDT8HcJb/Tye9fS9buI1fkGJiJ9pMReMF/BR79ttduG13h/H/hUUkF1cj8+bbIe\nn0ZZC7yHT6/0Zvl/Ldn7vlUC34woRhHJlRJ7wQwA/oDfuPsGPiJ+EDgvyaA6uZaOi3nAE/pyYFEv\nvr8S+Dl+wWobuVcBOwEnRRSjiORKc+wFVYZXhsRdHdJbXU2XDMBH8L1xHN7H5ud4tc9hwDF0XfUj\nIoWmxF5ymoDHgI3AEXhZZecmWS3ApBzOOQGv2ReRYqDEXlKewG+QbsLn/DcCW+NdJNfh7zDK8dF3\nZUIxiki+lNhLxjq8/LBzqeVyvDLmKXyD7FPwEbiI9FdK7CXjD10cb2ZzS10RSQMl9pLxEdkXTG0k\nuZrzFcBvgHfwtsSHox9Jkfzpt6hkTCF7zfkQklly/yTeHGwTXkd/A14m+RcK37ddJN1Ux14ydsA3\nl26fNIfgTccmxxxLwHdR/ITNjc4+AV7F2/uKSD6U2EvKT/C59G/i0x434Bt7xP1jsBivxOlsPb4F\noIjkQ1MxJcWAg1o/kjSIrlsWDIozEJFU0ohdElADbE/mbkdVwMmxR5O/ZnyB1h542+Dv0/uVuyLR\nU2KXhNyBb2U3DG8/UIW/k+ic2B8HpuL3CI7Be60Xm+OBmXgb4zfwxmp7k32LQ5HC01SMJGRnfIOO\nu/HdjvYBJnZ6zFy8F01by4O3gbuA+fguU8XgNfy+RWO7Y+vxEs7/xeMXiZdG7JKgwcBX8Wqdzkk9\nAN+hYx+bFnwF7TmxRNc7T5L912gdvhOWSPyU2KVIrSJ75UzA2x8Ui0+T/deoHL+XIBI/JXYpUkPp\n+sdz6zgD6cEUYASZsQ4E/iX+cERQYpeiVY5vTtK5y2QVcG784XSpDPgzXhHTdhN4G+AefCNykfjp\n5qkUsSvwuerf4vXtzcAs4J+SDCqLscAz+M3gRrw1QudSTpH49KMR+2PAgfic5peABX08TyPeqrY3\ne3pKssrxrQWX4Tcp64ELKN6kOQYYR/HGJ6WinyT2+/Ba5keA94EH8CT/5xzO0QicAGwJfAbYFrWq\n7S+2BHbBpzlEpCd5J3YzG2Nmj5jZK2b2spl9N4rAOjqdjnXC4GVwM3M4x/HA7cCG1o9lwLEUV4WF\nJG8jWlgk/V0UI/ZNwFkhhPH4crt/M7PxEZy3VTPeNCqbF3t5juX4QpjOv7CNwKV9jEvSZTXwDbzj\n5VB8z9cXEo1IpK/yTuwhhPdDCM+2/n0t3nt1m3zPu9kAvJwsm96WvS3FF8N0Fuj6oiGlI+Bli/Pw\nEXszsBDYFx8UiPQvkc6xm1kNsCdZ7mya2QwzqzOzuvr6+lzOCpxF5vxqLmVv4/Bf2M4G4kvZpbQt\nwHu8NHU63gRcF384InmKLLGb2VC8s9MZIYSM1nYhhDkhhNoQQm11dXWOZz8PX15ehb9VHoIvK/+3\nXn7/MODf6XhxsNbPZ+UYi6RPV+/a1gMvxRmISCQiSexmNghP6reGEOZGcc6OBgCX4UvMXwI+BC4k\nt7KyHwLXAn8PbAUcATyNt4+V0rY72bcNrAI+H3MsIvnLe4GSmRlwPfBqCGF2/iF1p5K+998wvNzx\nhIhikfTYHfhHfK1E2w32Mvwm6j8nFZRIn0UxYv8HvDfpgWa2qPXjyxGcVyRG84Az2Nwj/mtAHV3f\nuBcpXnmP2EMIj6OldtLvVeClryp/lf5PvWISFfCKjAX4cvRDyV6WKSLSe0rsiWnCE/l8fI3XYLza\n53F8GzgRkb7pJ71i0mg2nsTX4S0O1gIrgKOTDEpEUkCJPTHXk9n/pgVvk6DVjsWhAbgY3591PL5J\ndedFTCLFR1MxidnUxXEj+ypZiVczcADeL6atBPJC4I94d1HVC0jx0og9MdPxfuOd1eAthSVZ9wOv\n0LFxXCPeF35+IhGJ9JYSe2LOxXvYDG39vAoYDtyaWETdWws8iLc5zrZKM22eAD7JcrwJT+4ixUtT\nMYkZhm+ndheeRGrw/vAjE4ypK3PwxTuD8KQ+Eh/RfjbJoApsDH6xbeh0vIJIm5eKFICFEP8WcbW1\ntaGuri7255W+qAO+SMcEZ/gWhe+Q3jd9a/Cdttr3szO8z9A7ZG6yLVJ4ZvZMCKG2p8el9bdSIvML\nMjcoCXjCezz+cGIzAt+KcUc8iVfglTGPoaQuxU5TMdKDerLPqRuwKuZY4jYR79P+Nt4UbLtEoxHp\nLY3YpQdH4CtiO2vCdxhKOwPGoqQu/YkSu/RgOr5Ap/0mJVXAD/D5ZhEpNpqKkR6U41U7NwG/wyti\nTsUX74hIMVJil16oAE5p/ejKErwEshI4DPUxF0mOpmIkAhfjWw6eie9Duw2e5EUkCRqxS54W4ptT\ndC6JPAr4gM0ra0UkLhqxS6tGvG1wrgvWbiYzqYP/aGnULpIEJfaS14hv8L0lXtI3BvhDDt+/ga57\nx6jFrUgSlNhL3rHA7XiC3gC8h2/28XQvv/8bZK9z3wh8KYoARSRHSuwl7QPgXjKnUhqBy3p5jinA\nV/Hkbvhtm0rgalTnLpIM3Twtae/iderZesG80ctzGD7PfhIwD1+8dCy+qElEkqDEXtJ2xqdfOhsI\n/GMO5zFgv9YPEUmapmJK2nDgLDq2C7DWz89JJCIRyZ8Se8n7EXANPnrfCm/69TTe+EpE+iNNxZQ8\nA05s/RCRNNCIXUQkZZTYRURSJpLEbmZTzex1M1tsZudGcU4REembvBO7mZUB1wKH4JtCfsvMxud7\nXhER6ZsoRuyTgMUhhDdDCE3AbcDhEZxXRET6IIrEvg2+hLHN0tZjIiKSgNhunprZDDOrM7O6+vr6\nuJ5WRKTkRJHY38N7vbbZtvVYByGEOSGE2hBCbXV1dQRPKyIi2USR2BcCO5nZWDMbjPd8vSuC84qI\nSB/kvfI0hLDJzE4D/giUATeEEF7OOzIREemTSFoKhBDuxRt7i4hIwrTyVEQkZZTYRURSRoldRCRl\nlNhFRFJGiV1EJGWU2EVEUkaJXUQkZZTYRURSRoldRCRllNhFRFJGiV1EJGWU2EVEUkaJXUQkZZTY\nRURSRoldRCRllNhFRFJGiV1EJGWU2EVEUkaJXUQkZZTYRURSRoldRCRllNhFRFJGiV1EJGWU2EVE\nUmZg0gGISMSefBLuuAPKy2H6dNhll6QjkpgpsYukyb/+K9x8MzQ2woABcMUVcMklcMYZSUcmMdJU\njEhazJ/vSb2hAUKA5mZP8LNmwXvvJR2dxEiJXSQt7rjDE3lnAwbAvffGH48kRoldJC3Kyz2JdzZg\nAAweHH88kpi8EruZXW5mr5nZC2Z2p5mNiCowEcnR9OnZE3hzM0ybFn88kph8R+wPAruGEHYH3gBm\n5R+SiPTJrrvCxRdDRQVUVcHQoVBZCbfcAiNHJh2dxCivqpgQwgPtPn0KOCq/cEQkLzNnwje/Cffc\n46P3ww5TUi9BUZY7ngjc3tUXzWwGMANgu+22i/BpRaSDbbaBGTOSjkIS1GNiN7M/AaOzfOn8EMK8\n1secD2wCbu3qPCGEOcAcgNra2tCnaEVEpEc9JvYQwpTuvm5mJwCHApNDCErYIiIJy2sqxsymAmcD\nXwwhNEQTkoiI5CPfqpifAcOAB81skZn9IoKYREQkD/lWxewYVSAiIhINrTwVEUkZJXYRkZRRYhcR\nSRkldhGRlFFiFxFJGSV2EZGUUWIXEUkZJXaRJLS0wGuvwTvvJB2JpJASu0jcHn4YxoyB2lrYeWf4\n3OfgrbeSjkpSRIldJE5LlniP9GXLYN06WL8eFi2C/ff3nY5EIqDELhKn666DjRs7HmtpgdWrfSQv\nEgEldpE4vfMONDVlHg8B3n8//ngklZTYReJ04IEwZEjm8eZm2Hvv+OORVFJiF4nT0Uf7jdOKis3H\nhgyBr38dxo1LLi5JFSV2kThVVMCCBfC973ki33NPuOIKuPHGpCOTFIlyM2sR6Y1hw+D44+G442DH\nHcEs6YgkZTRiF4nT88/7SH3CBNhjD0/szz6bdFSSMkrsInH55BOvV1+8GBoa/OPNN/2G6kcfJR2d\nV+tccAGMGgWVlTB1Krz+etJRZXr1VTjoICgvh622gvPPz15pVMKU2EXi8rvfwaZNmcc3bYLf/jb3\n823YAC+95BeHV1+Fjz/OL75jjoHZs+HDD33h1AMPwOc/74upisXSpV499NBDnsxXrfJ7FMcck3Rk\nRUWJXSQu778PjY2Zxxsacq9h/8UvoLra2xHssAPsthtsvTWcdlr2i0dP3noL7r67Y3wheIK/5prc\nz1co11zjMYWw+Vhjo8f+9tuJhVVslNhF4rLPPh3LHNsMGeJf660HHoCzzoK1azdPQTQ3+wj+xhvh\nwgtzj+2VV3xqo7MNG2DhwtzPVyhPP5192qW83N+1CKDELhKf/fbzqY2qqs3HKith4kSYPLn357ns\nMh/lZ9PQ4KPalpbcYttpp+wJc9Ag2H333M5VSHvs4TF11tTk/wYBlNhF4mMG990HP/iBd3XcZRe4\n+GIfgedS8vjee91/vaEhsx9NT8aNg333zXxHUV4Op5+e27kK6bvfzXxnUVEBBxzgFUYCKLGLxGfj\nRpg5Ey66CN591xN0ZWX2KZDuTJ6cfdTaZvvtcz8nwJ13en19RQUMGOBthR95BGpqcj9XodTUwKOP\nwqRJfjGsrIQTT/Qb0/L/LLS/CRGT2traUFdXF/vziiTq9NPh+us7TqNUVcFvfgNf/Wrvz7N0qdfB\nf/RRZqvfykqYO9dLFfuqpcXP293Fo7cWLYIXXvBpkr33jnYxVnOzX4BKaIGXmT0TQqjt8XFK7CIx\nWL8eRo7MXhUzYYInwFy8+y7853/61E5Dgye4iRP9xukXvhBNzLkKwT8GDPB/56GHwlNP+ech+PTT\nQw/BiBHJxJcCvU3saikgEoc1azqW6LW3dGnu5xszxksei8HHH/u7kdtu8+mmfff16aD58/2C1ual\nl+DUU+F//ie5WEuEErtIHKqrYejQjokOfBphr72SiSkKIcDBB8Nzz22uqnnsMf/ofCFraoI77vA6\n+4FKPYUUyc1TMzvLzIKZjYrifCKpU1YGl1/esdSx7ebfJZckF1e+6up8JN6+VLJtSiab5ubcSzEl\nZ3kndjMbAxwMaLt1ke6ccIK3Dpg0Cf7u7+DLX4YnnvDWvf3Va6/1/ualmdfxDx5c2JgkkqmYK4Cz\ngXkRnEsk3b7yFf9Ii113zT4CLy/36ZYQ/OZuRYUfu+66+GMsQXkldjM7HHgvhPC8lVDJkYi02nNP\nv0ewYMHm+wcDBvj9hIULYd48bwOw225w0kl+r0EKrsfEbmZ/AkZn+dL5wHn4NEyPzGwGMANgu+22\nyyFEESlq99wDs2bBzTd7b5mDDoKrroKxY+GMM/p2zuZmePJJP98++/i9COm1Ptexm9luwENA22qL\nbYFlwKQQwgfdfa/q2EW6EQIsX+5z0SNHJh1N/BYu9Br4xkafl29p8eZmRx2VdGSJ620de59vnoYQ\nXgwhbB1CqAkh1ABLgYk9JXUR6cbChfDZz/rS+U99yhuH9aXOvb9qbPTyyRUrvHvlxx/7BiXHHw9/\n+1vS0fUb6hUjUiyWL/fdlF5/3acgmpp8kc9++2W2Dkire+/N/m/dtAluuin2cPqryBJ768h9ZVTn\nEyk5N96YuUlGczOsXAkPP5xMTHFbvTp7Yt+4Eerr44+nn9KIXaRY/PWvmStTwRPdkiXxx5OEAw7I\nXj45dKjPu0uvKLGLJK2x0StAdtzRd1PKpj+3HcjFDjt4P5n2r8OQIb6w6ZBDkourn1FiF0nSr37l\ntd1Tp8KPfuRTDu3b5VZW+rz7hAnJxRi3n/7UV+gecYTfSP35z72LZVlZ4Z/7lVfga1+DbbbxNsN3\n31345ywAte0VScr8+V7z3b4/e1mZt7UtL/fVmiefDGeeGU1vdOneq696u4eGhs3TQVVVcOWV8O1v\nR3P+Vat8UVf7nkE5KHi5o4h0I4Sem11ddVVmf/bmZp9nv+8+L+87++zCJ/W1az2Wgw/21aHPP1/Y\n5ytW3/8+rFvX8f+tocH/D3LdarC9to1Ramu9P1B1Nfzyl/nH2w0ldpEobdwI554LW2zhvVImTIC/\n/CX7Y5cty94FceDA+CpA1qzxGM87Dx580Ctz9tnHp0JKzfz52f8/Nm7seZ/ZroTg9wZeftkvEh9/\n7H/OnOkN4ApEiV0kSiefDFdf7aPgEHxbuKlT/c/Opk3LvlR+wwYf3cVh9my/wLRNB7W0+N9PPrlj\nK95SMGZM9uPNzTCqjx3JX3wR3nors4SzsdHfJRWIErtIVFau9N2BOk+vrF8Pl16a+fhTToHRo30u\nvc2QIfAf/+Ej/jj8/vd+IemsudlHmaXkggsy574rK+GYY7zcsi9Wrsy+qUgI8P77fTtnLyixi0Tl\nrbey9xpvafGRW2fDh8Ozz/o0SG2tv2WfOxe+973Cx9pmyy2zH9+0qeeLy+LF8J3vwJQpvtfqihXR\nxxenadP8HcyIEX6BraiAb30Lrr227+esrc3+zqeysqB1+aqKEYnKqlVeJtd5kVFZGUyfDr/+dTJx\ndWfuXO/Dsm7d5mNlZT7v/swzXX/f44/7FNOGDX4RKC/3UW1dnfe56c/a5tS32gqGDcv/fLNn+43Z\ntumuigrvA7RokV/cc6CqGJG4jRwJJ56Y+Xa+osLb2hajI4/01roVFZ5khg6FceO8j3p3TjrJLwZt\nLRA2bPB2AOecU/iYC23QIL84RZHUwW+UzpvnI/RJk3zK57nnck7qudCIXSRKzc3w4x/7jbHVq33F\n6JVXFv/K0RUrfEOM0aPhc5/rfru7NWtg662zlwCOGOH/bimI3o7YldhFJDfr1/v8e7a54zFj4B1t\nf1womooRkcKoqPApnPLyjserquC005KJSTqIYjNrEYlCCL7RxpIlPh2y/fZJR9S1OXPggw98+mbQ\nIB+9H3UUnHVW0pEJSuwixaG+3ssG33zTN4NuavJmVDffHE/zq1wNHw6PPupNs95+G3bdFbSXcdFQ\nYhcpBscd502i2t+QvPNOr4Pu64bQcRg/3j+kqGiOXSRpa9bAI49kVpk0NOS3OEZKlhK7SNIaG336\nJZtPPok3FkkFJXaRpI0eDZ/+dObxgQPh8MPjj0f6PSV2kaSZwU03eX+Stt7rlZW+COiii5KMTPop\n3TwVKQb77gsvveRz6m+8Afvv7+0J4uryKKmixC5SLGpq4PLLk45CUkBTMSKSnGXL4NRT/aI2cSLc\nckv2XYwkJxqxi0gy6ut9Y+dVq7xL5JIlvvnIiy96IzXpM43YRSQZV18NH320ufUveCvgq6+GDz9M\nLq4UUGIXkWQ88kj2bfnKy+H55+OPJ0WU2EUkGWPHZl+Y1dTkO1FJn+Wd2M3sO2b2mpm9bGY/iSIo\nESkBM2d23MgbvI5/4kTYeedkYkqJvBK7mR0AHA5MCCHsAvxXJFGJSPrtuadXwVRX++Ks8nKYPBnu\nuivpyPq9fKtiTgUuCyFsAAgh9PNtykUkVkceCYcd5q1/t9gCRo1KOqJUyHcqZhywr5ktMLM/m1mR\nb+woIkWnrAx22EFJPUI9jtjN7E/A6CxfOr/1+0cCewN7Ab81s+1Dlo1UzWwGMANgOzXkFxEpmB4T\newhhSldfM7NTgbmtifxpM2sBRgH1Wc4zB5gDvpl1nyMWEZFu5TsV83vgAAAzGwcMBlbmG5SIiPRd\nvjdPbwBuMLOXgCbgn7JNw4iISHzySuwhhCbg2IhiERGRCFgSA2wzqweWFPApRqEpofb0emTSa9KR\nXo9MxfiafCaEUN3TgxJJ7IVmZnUhhNqk4ygWej0y6TXpSK9Hpv78mqhXjIhIyiixi4ikTFoT+5yk\nAygyej0y6TXpSK9Hpn77mqRyjl1EpJSldcQuIlKyUpnYzWwPM3vKzBaZWZ2ZTUo6pmKg3vmZzOws\nMwtmVvIdqMzs8tafjxfM7E4zG5F0TEkws6lm9rqZLTazc5OOpy9SmdiBnwA/DCHsAVzY+nlJU+/8\nTGY2BjgYeCfpWIrEg8CuIYTdgTeAWQnHEzszKwOuBQ4BxgPfMrPxyUaVu7Qm9gAMb/37FsCyBGMp\nFuqdn+kK4Gz856XkhRAeCCG07Sz9FLBtkvEkZBKwOITwZuvK+tvwAVG/ktbEfgZwuZm9i49MS27k\nkYV657djZocD74UQtGtydicC9yUdRAK2Ad5t9/nS1mP9Sr5NwBLTQ5/4ycCZIYQ7zOwbwPVAl+2H\n0yKq3vlp0cPrcR4+DVNSuntNQgjzWh9zPrAJuDXO2CQ6qSx3NLOPgBEhhGBmBnwUQhje0/elmZnd\nD/w4hPBI6+d/A/YOIWT0zk87M9sNeAhoaD20LT5dNymE8EFigRUBMzsBOBmYHEJo6OHhqWNmXwAu\nCiF8qfXzWQAhhEsTDSxHaZ2KWQZ8sfXvBwJ/TTCWYqHe+a1CCC+GELYOIdSEEGrwt9sTldRtKn7P\n4bBSTOqtFgI7mdlYMxsMHA30u921++1UTA++DVxlZgOB9bRuyVfi1DtfevIzoBx40N/o8lQI4ZRk\nQ4pXCGGTmZ0G/BEoA24IIbyccFg5S+VUjIhIKUvrVIyISMlSYhcRSRkldhGRlFFiFxFJGSV2EZGU\nUWIXEUkZJXYRkZRRYhcRSZn/AzdntXmdz74MAAAAAElFTkSuQmCC\n", 190 | "text/plain": [ 191 | "" 192 | ] 193 | }, 194 | "metadata": {}, 195 | "output_type": "display_data" 196 | } 197 | ], 198 | "source": [ 199 | "x, y = make_blobs(n_samples=40, n_features=2, centers=2)\n", 200 | "plt.scatter(x[:, 0], x[:, 1], c=y, cmap='autumn')" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": 120, 206 | "metadata": {}, 207 | "outputs": [], 208 | "source": [ 209 | "def sigmoid(x):\n", 210 | " return 1/(1+np.exp(-x))\n", 211 | "def foward(x, w, b, n_hidden=0, hidden_q=0, out_l=1):\n", 212 | " hidden_input = np.array(x)\n", 213 | " Wout = np.array(w[-1])\n", 214 | " Bout = np.array(b[-1])\n", 215 | " for h in range(n_hidden):\n", 216 | " wh = np.array(w[h])\n", 217 | " bh = b[h]\n", 218 | " hidden = []\n", 219 | " for i in range(hidden_q):\n", 220 | " wi = np.array(wh[i, :])\n", 221 | " ah = np.dot(hidden_input, wi)-np.array(bh)[i]\n", 222 | " hidden.append(sigmoid(ah))\n", 223 | " hidden_input = np.array(hidden)\n", 224 | " output = []\n", 225 | " for j in range(out_l):\n", 226 | " print(j, hidden_input, Wout[j, :], Bout[j])\n", 227 | " wj = Wout[j, :]\n", 228 | " bj = np.dot(hidden_input, wj)-Bout[j]\n", 229 | " output.append(sigmoid(bj))\n", 230 | " output = np.array(output)\n", 231 | " return output" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": 121, 237 | "metadata": {}, 238 | "outputs": [ 239 | { 240 | "name": "stdout", 241 | "output_type": "stream", 242 | "text": [ 243 | "0 [1 0] [1 1] 0.5\n" 244 | ] 245 | } 246 | ], 247 | "source": [ 248 | "x = [1, 0]\n", 249 | "w = np.array([\n", 250 | " [[1, 1]]\n", 251 | "])\n", 252 | "theata = [[0.5]]\n", 253 | "a=foward(x, w, theata, n_hidden=0, hidden_q=0, out_l=1 )" 254 | ] 255 | }, 256 | { 257 | "cell_type": "code", 258 | "execution_count": 125, 259 | "metadata": {}, 260 | "outputs": [ 261 | { 262 | "name": "stdout", 263 | "output_type": "stream", 264 | "text": [ 265 | "0 [ 0.62245933 0.62245933 0.62245933] [1 1 1] 0.5\n" 266 | ] 267 | }, 268 | { 269 | "data": { 270 | "text/plain": [ 271 | "array([ 0.7969562])" 272 | ] 273 | }, 274 | "execution_count": 125, 275 | "metadata": {}, 276 | "output_type": "execute_result" 277 | } 278 | ], 279 | "source": [ 280 | "x = [1, 1, 1]\n", 281 | "w = np.array([\n", 282 | " [[1, -1, 1],[-1, 1, 1], [1, 1, -1]],\n", 283 | " [[1, 1, 1]]\n", 284 | "])\n", 285 | "theata = np.array([\n", 286 | " [0.5, 0.5, 0.5],\n", 287 | " [0.5]\n", 288 | "])\n", 289 | "foward(x, w, theata, n_hidden=1, hidden_q=3, out_l=1 )" 290 | ] 291 | }, 292 | { 293 | "cell_type": "code", 294 | "execution_count": null, 295 | "metadata": {}, 296 | "outputs": [], 297 | "source": [] 298 | } 299 | ], 300 | "metadata": { 301 | "kernelspec": { 302 | "display_name": "Python 3", 303 | "language": "python", 304 | "name": "python3" 305 | }, 306 | "language_info": { 307 | "codemirror_mode": { 308 | "name": "ipython", 309 | "version": 3 310 | }, 311 | "file_extension": ".py", 312 | "mimetype": "text/x-python", 313 | "name": "python", 314 | "nbconvert_exporter": "python", 315 | "pygments_lexer": "ipython3", 316 | "version": "3.6.1" 317 | } 318 | }, 319 | "nbformat": 4, 320 | "nbformat_minor": 2 321 | } 322 | -------------------------------------------------------------------------------- /神经网络/NeuralNetwork.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 神经网络\n" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 106, 13 | "metadata": {}, 14 | "outputs": [], 15 | "source": [ 16 | "import numpy as np\n", 17 | "import pandas as pd\n", 18 | "import matplotlib.pyplot as plt\n", 19 | "%matplotlib inline" 20 | ] 21 | }, 22 | { 23 | "cell_type": "code", 24 | "execution_count": 107, 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "# 感知机实现或、与、非运算\n", 29 | "\n", 30 | "def sigmoid(x):\n", 31 | " return 1/(1+np.exp(-x))\n", 32 | "\n", 33 | "def sgn(x):\n", 34 | " if x >= 0:\n", 35 | " return 1\n", 36 | " if x < 0:\n", 37 | " return 0\n", 38 | "\n", 39 | "def perceptron(x, w, theata):\n", 40 | " length = len(x)\n", 41 | " g = sum([wi*xi for xi, wi in zip(x, w)])-theata\n", 42 | " return sigmoid(g)" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": 108, 48 | "metadata": {}, 49 | "outputs": [ 50 | { 51 | "data": { 52 | "text/plain": [ 53 | "0.5" 54 | ] 55 | }, 56 | "execution_count": 108, 57 | "metadata": {}, 58 | "output_type": "execute_result" 59 | } 60 | ], 61 | "source": [ 62 | "# 与运算\n", 63 | "x = [1, 1]\n", 64 | "w = [1, 1]\n", 65 | "theata = 2\n", 66 | "perceptron(x, w, theata)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 109, 72 | "metadata": {}, 73 | "outputs": [ 74 | { 75 | "data": { 76 | "text/plain": [ 77 | "0.62245933120185459" 78 | ] 79 | }, 80 | "execution_count": 109, 81 | "metadata": {}, 82 | "output_type": "execute_result" 83 | } 84 | ], 85 | "source": [ 86 | "# 或运算\n", 87 | "x = [1, 0]\n", 88 | "w = [1, 1]\n", 89 | "theata = 0.5\n", 90 | "perceptron(x, w, theata)" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 110, 96 | "metadata": {}, 97 | "outputs": [ 98 | { 99 | "data": { 100 | "text/plain": [ 101 | "0.62245933120185459" 102 | ] 103 | }, 104 | "execution_count": 110, 105 | "metadata": {}, 106 | "output_type": "execute_result" 107 | } 108 | ], 109 | "source": [ 110 | "# 非运算\n", 111 | "x = [0, 0]\n", 112 | "w = [-0.6, 0]\n", 113 | "theata = -0.5\n", 114 | "perceptron(x, w, theata)" 115 | ] 116 | }, 117 | { 118 | "cell_type": "code", 119 | "execution_count": 111, 120 | "metadata": {}, 121 | "outputs": [], 122 | "source": [ 123 | "def two_perceptron(x, w, theata):\n", 124 | " x0 = perceptron(x, w[0], 0.5) \n", 125 | " x1 = perceptron(x, w[1], 0.5)\n", 126 | " return perceptron([x0, x1], w[2], 0.5)\n", 127 | "\n", 128 | "\n", 129 | " " 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 112, 135 | "metadata": {}, 136 | "outputs": [ 137 | { 138 | "name": "stdout", 139 | "output_type": "stream", 140 | "text": [ 141 | "[1, -1]\n" 142 | ] 143 | }, 144 | { 145 | "data": { 146 | "text/plain": [ 147 | "0.56342679354672753" 148 | ] 149 | }, 150 | "execution_count": 112, 151 | "metadata": {}, 152 | "output_type": "execute_result" 153 | } 154 | ], 155 | "source": [ 156 | "# 异或XOR运算\n", 157 | "x = [1, 1]\n", 158 | "w = [[1, -1], [-1, 1], [1, 1]]\n", 159 | "print(w[0])\n", 160 | "two_perceptron(x, w, 0.5)" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 113, 166 | "metadata": {}, 167 | "outputs": [], 168 | "source": [ 169 | "from sklearn.datasets import make_blobs" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 114, 175 | "metadata": {}, 176 | "outputs": [ 177 | { 178 | "data": { 179 | "text/plain": [ 180 | "" 181 | ] 182 | }, 183 | "execution_count": 114, 184 | "metadata": {}, 185 | "output_type": "execute_result" 186 | }, 187 | { 188 | "data": { 189 | "image/png": "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\n", 190 | "text/plain": [ 191 | "" 192 | ] 193 | }, 194 | "metadata": {}, 195 | "output_type": "display_data" 196 | } 197 | ], 198 | "source": [ 199 | "x, y = make_blobs(n_samples=40, n_features=2, centers=2)\n", 200 | "plt.scatter(x[:, 0], x[:, 1], c=y, cmap='autumn')" 201 | ] 202 | }, 203 | { 204 | "cell_type": "code", 205 | "execution_count": 120, 206 | "metadata": {}, 207 | "outputs": [], 208 | "source": [ 209 | "def sigmoid(x):\n", 210 | " return 1/(1+np.exp(-x))\n", 211 | "def foward(x, w, b, n_hidden=0, hidden_q=0, out_l=1):\n", 212 | " hidden_input = np.array(x)\n", 213 | " Wout = np.array(w[-1])\n", 214 | " Bout = np.array(b[-1])\n", 215 | " for h in range(n_hidden):\n", 216 | " wh = np.array(w[h])\n", 217 | " bh = b[h]\n", 218 | " hidden = []\n", 219 | " for i in range(hidden_q):\n", 220 | " wi = np.array(wh[i, :])\n", 221 | " ah = np.dot(hidden_input, wi)-np.array(bh)[i]\n", 222 | " hidden.append(sigmoid(ah))\n", 223 | " hidden_input = np.array(hidden)\n", 224 | " output = []\n", 225 | " for j in range(out_l):\n", 226 | " print(j, hidden_input, Wout[j, :], Bout[j])\n", 227 | " wj = Wout[j, :]\n", 228 | " bj = np.dot(hidden_input, wj)-Bout[j]\n", 229 | " output.append(sigmoid(bj))\n", 230 | " output = np.array(output)\n", 231 | " return output" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": 121, 237 | "metadata": {}, 238 | "outputs": [ 239 | { 240 | "name": "stdout", 241 | "output_type": "stream", 242 | "text": [ 243 | "0 [1 0] [1 1] 0.5\n" 244 | ] 245 | } 246 | ], 247 | "source": [ 248 | "x = [1, 0]\n", 249 | "w = np.array([\n", 250 | " [[1, 1]]\n", 251 | "])\n", 252 | "theata = [[0.5]]\n", 253 | "a=foward(x, w, theata, n_hidden=0, hidden_q=0, out_l=1 )" 254 | ] 255 | }, 256 | { 257 | "cell_type": "code", 258 | "execution_count": 125, 259 | "metadata": {}, 260 | "outputs": [ 261 | { 262 | "name": "stdout", 263 | "output_type": "stream", 264 | "text": [ 265 | "0 [ 0.62245933 0.62245933 0.62245933] [1 1 1] 0.5\n" 266 | ] 267 | }, 268 | { 269 | "data": { 270 | "text/plain": [ 271 | "array([ 0.7969562])" 272 | ] 273 | }, 274 | "execution_count": 125, 275 | "metadata": {}, 276 | "output_type": "execute_result" 277 | } 278 | ], 279 | "source": [ 280 | "x = [1, 1, 1]\n", 281 | "w = np.array([\n", 282 | " [[1, -1, 1],[-1, 1, 1], [1, 1, -1]],\n", 283 | " [[1, 1, 1]]\n", 284 | "])\n", 285 | "theata = np.array([\n", 286 | " [0.5, 0.5, 0.5],\n", 287 | " [0.5]\n", 288 | "])\n", 289 | "foward(x, w, theata, n_hidden=1, hidden_q=3, out_l=1 )" 290 | ] 291 | }, 292 | { 293 | "cell_type": "code", 294 | "execution_count": null, 295 | "metadata": {}, 296 | "outputs": [], 297 | "source": [] 298 | } 299 | ], 300 | "metadata": { 301 | "kernelspec": { 302 | "display_name": "Python 3", 303 | "language": "python", 304 | "name": "python3" 305 | }, 306 | "language_info": { 307 | "codemirror_mode": { 308 | "name": "ipython", 309 | "version": 3 310 | }, 311 | "file_extension": ".py", 312 | "mimetype": "text/x-python", 313 | "name": "python", 314 | "nbconvert_exporter": "python", 315 | "pygments_lexer": "ipython3", 316 | "version": "3.6.1" 317 | } 318 | }, 319 | "nbformat": 4, 320 | "nbformat_minor": 2 321 | } 322 | -------------------------------------------------------------------------------- /线性模型/.ipynb_checkpoints/untitled-checkpoint.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/线性模型/.ipynb_checkpoints/untitled-checkpoint.txt -------------------------------------------------------------------------------- /线性模型/.ipynb_checkpoints/untitled1-checkpoint.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/线性模型/.ipynb_checkpoints/untitled1-checkpoint.txt -------------------------------------------------------------------------------- /线性模型/Images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/线性模型/Images/1.jpg -------------------------------------------------------------------------------- /线性模型/Images/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/线性模型/Images/2.jpg -------------------------------------------------------------------------------- /线性模型/Images/2_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/线性模型/Images/2_01.jpg -------------------------------------------------------------------------------- /线性模型/Images/2_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/线性模型/Images/2_1.jpg -------------------------------------------------------------------------------- /线性模型/Images/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/线性模型/Images/3.jpg -------------------------------------------------------------------------------- /线性模型/LogisticRegression.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n", 8 | "# 2 逻辑回归(logistic regression)\n", 9 | " 在分类问题中,我们要预测的y值是离散的值,我们将运用到逻辑回归(logistic regression)算法。在分类问题中,我们期望预测的值属于某一类。以二分类任务为例,其输出标签值$y\\in\\{0, 1\\}$,而线性回归模型产生的预测值$z=w^Tx+b$是实数值,于是我们需将$z$转换为$0/1$,最理想的是单位阶跃函数,如下图所示。\n", 10 | "\n", 11 | "![](Images/2_01.jpg)\n", 12 | "\n", 13 | "然而单位阶跃函数不连续,于是我们希望能找到能在一定程度上近似单位阶跃函数的“替代函数”,并希望它单调可微,Sigmoid函数正是这样一个函数:\n", 14 | "$$ y= f(x,w,b)=\\frac{1}{1+e^{-(w^Tx+b)}}$$\n", 15 | "\n", 16 | "![](Images/2_1.jpg)\n", 17 | "\n", 18 | "上式可以变化为:\n", 19 | "$$ ln\\frac{y}{1-y} = w^Tx+b$$\n", 20 | "我们将$y$值视为样本$x$为正例的可能性,则$1-y$为其反例的可能性。若将$y$视为类后验概率$p(y=1|x)$,则$1-y$为 后验概率$p(y=0|x)$,因而有\n", 21 | "$$ ln\\frac{p(y=1|x)}{p(y=0|x)} = w^Tx+b$$\n", 22 | "显然有:\n", 23 | "$$p(y=1|x)=\\frac{e^{(w^Tx+b)}}{1+e^{(w^Tx+b)}}$$\n", 24 | "$$p(y=0|x)=\\frac{1}{1+e^{(w^Tx+b)}}$$\n", 25 | "于是上述公式可以改写为:\n", 26 | "$$p(y=i|x_i;w,b)=y_i p(y=1|x_i;w,b) + (1-y_i) p(y=0|x_i;w,b)$$\n", 27 | "于是我们可以通过‘极大似然法’来估计$w$和$b$,即是下式最大化:\n", 28 | "$$l(w,b) = \\sum_{i=1}^{m}ln p(y=i|x_i;w,b)$$\n", 29 | "等价于使下式最小化\n", 30 | "$$ J(w,b)=-1/m\\sum_{i=1}^{m}ln p(y=i|x_i;w,b)=-1/m\\sum_{i=1}^{m}ln y_i p(y=1|x_i;w,b) + (1-y_i) p(y=0|x_i;w,b)$$\n", 31 | "因而$J(w,b)$即为逻辑回归的代价函数。\n", 32 | "\n" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 113, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "%matplotlib inline\n", 42 | "from sklearn.datasets import make_blobs\n", 43 | "import matplotlib.pyplot as plt\n", 44 | "import numpy as np" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 114, 50 | "metadata": {}, 51 | "outputs": [], 52 | "source": [ 53 | "x, y = make_blobs(n_features=1, n_samples=100, centers=2)\n" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 115, 59 | "metadata": {}, 60 | "outputs": [ 61 | { 62 | "data": { 63 | "text/plain": [ 64 | "" 65 | ] 66 | }, 67 | "execution_count": 115, 68 | "metadata": {}, 69 | "output_type": "execute_result" 70 | }, 71 | { 72 | "data": { 73 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFDVJREFUeJzt3XuQXGWZx/HvMzMkQIBFkgFjLiZqRMIqGMZ4KVjjsmJA\nl6ilFrgXha1KsWVctMpaQavUWv6wvLDrsgIxalSUgv1DxCwVxMsu4q7CZsIGQgzBIYAkXBJAIRgl\nmeTZP7qBzjCTPj3pmZ68fj9VXXPOed9zzjNv9/zmzNvd05GZSJLK0tXpAiRJ7We4S1KBDHdJKpDh\nLkkFMtwlqUCGuyQVyHCXpAIZ7pJUIMNdkgrU06kTT5s2LefMmdOp00vSQWnt2rWPZWZvs34dC/c5\nc+bQ39/fqdNL0kEpIh6o0s9pGUkqkOEuSQUy3CWpQIa7JBXIcJekAhnuklSgpuEeESsjYltE3DVC\ne0TEZRExEBF3RsSC9pcpSWpFlde5fxP4MnDVCO1nAvPqt9cDV9a/SirAJh7jFh7gdczgZF4MwE/Y\nzBoe4hC6OY3ZLGTGiPs/xA4u5ef00MVJHMdXuZ1d7OFjvIl3cQK72cM/cCM3cz8v4UjO57XsYg/H\nMoVJdHM3j7GOR9jJbqZyGL9nNzvYzRKOZwZHMcDjHEoPu9nLO3kVL+IwtvE7buAeJtHFStZxFJN5\nB/O4hFt4hj28gmOYwZEcxWR+wRaOYwpf52xexGF8gv9kM0/wXk7kr3kN3QTL6eca7mIqh/EOXkkC\nr2Iaf8ZLWxrLh9jBjfyKeUxted9WRZXPUI2IOcANmfmnw7R9Bbg5M6+pr28CFmXmw/s7Zl9fX/om\nJmliW8cjnMpKnk2JVZzDWh7mM9zM7xkE4DB6+A7v5t2c8IL9H+FpXsa/Ptd3qEs5gy9zG/fx5D7b\nJ9EFBHvYw5791NdDADBIcjiH0Mvh/A/ns4AVPM0udrK7pe/3SCaxg13PrZ/GbKZyGNezaZ9+3QST\n6eFfeBtLOaXSsR/haU7kCv7AIAF8gTP4e/paqg8gItZmZtMd2zHnPgN4sGF9S32bpIPc99jITnY/\nd/sWd/BVbt8nrH/PIF9l7bD7/yf38YcRgh3g34YJdoBd7GVXk2CHWqgP1n/17GQ3T/B7rmY9f6jX\n26rGYAf4BVtYxT0v6LeHZCe7+QrVL1D/i/vYxR52spvfsZsVLew7GuP6hGpELI2I/ojo3759+3ie\nWtIozKeXwzkEgMM5hJN5Ma/mWHoaouNQulnA9GH3fxXT6KpfXQ9nAdOfu/oeauS9Ru6zh+QNzGCQ\nvRX2bn68o5jMDI4ctu+hdPPaEb7v4RzPNPbWfxEdSs9zU1xjpR3/W2YrMKthfWZ92wtk5gpgBdSm\nZdpwbklj6H2cyBae4jo28ufM5UJez9/xWj7KTdzCAxxCN29nHp9m0bD7L2A6X+Mv+Tg/AWA6U1jP\nNiA4jdlcxbu4h8d5M99gB7vpJjiJ45jCIfRyBJPo4v94hIfYwSB7OYQuBtnLXuA1HMuJ9LKB7Uyi\nmy66+DRv5s+Yw7W8h8/zc3bwDHexjW6C45jCg+x4rrZJBD10s5NBugn+iUWcyLGcx/d5ml28mmP5\nNu/mCCaxmO+wicfpITieqUymhz5ewhc5o/JYLmA632AJl3Ebf8qxXNrCvqPRjjn3twPLgLOoPZF6\nWWYubHZM59wlqXVV59ybXrlHxDXAImBaRGwBPg21v9MyczmwmlqwDwA7gfNGX7YkqR2ahntmntuk\nPYEPta0iSdIB8x2qklQgw12SCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQVyHCXpAIZ7pJUIMNdkgpk\nuEtSgQx3SSqQ4S5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7\nJBXIcJekAhnuklQgw12SCmS4S1KBDHdJKpDhLkkFMtwlqUCVwj0iFkfEpogYiIiLhmn/k4j4j4i4\nIyI2RMR57S9VklRV03CPiG7gcuBMYD5wbkTMH9LtQ8AvM/MkYBFwaURManOtkqSKqly5LwQGMnNz\nZu4CrgWWDOmTwJEREcARwBPAYFsrlSRVViXcZwAPNqxvqW9r9GXgBOAhYD1wYWbubUuFkqSWtesJ\n1bcB64CXACcDX46Io4Z2ioilEdEfEf3bt29v06klSUNVCfetwKyG9Zn1bY3OA67LmgHgPuBVQw+U\nmSsysy8z+3p7e0dbsySpiSrhvgaYFxFz60+SngOsGtLn18DpABFxHHA8sLmdhUqSqutp1iEzByNi\nGXAT0A2szMwNEXFBvX05cAnwzYhYDwTw8cx8bAzrliTtR9NwB8jM1cDqIduWNyw/BJzR3tIkSaPl\nO1QlqUCGuyQVyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAhrskFchwl6QCGe6SVCDD\nXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXIcJekAhnuklQgw12SCmS4S1KBDHdJKpDhLkkFMtwl\nqUCGuyQVyHCXpAIZ7pJUIMNdkgpkuEtSgSqFe0QsjohNETEQEReN0GdRRKyLiA0R8dP2lilJakVP\nsw4R0Q1cDrwV2AKsiYhVmfnLhj5HA1cAizPz1xFx7FgVLElqrsqV+0JgIDM3Z+Yu4FpgyZA+7weu\ny8xfA2TmtvaWKUlqRZVwnwE82LC+pb6t0SuBF0XEzRGxNiL+tl0FSpJa13RapoXjnAKcDhwG/CIi\nbs3Mexo7RcRSYCnA7Nmz23RqSdJQVa7ctwKzGtZn1rc12gLclJm/y8zHgFuAk4YeKDNXZGZfZvb1\n9vaOtmZJUhNVwn0NMC8i5kbEJOAcYNWQPt8HTo2Inog4HHg9sLG9pUqSqmo6LZOZgxGxDLgJ6AZW\nZuaGiLig3r48MzdGxA+AO4G9wNcy866xLFySNLLIzI6cuK+vL/v7+ztybkk6WEXE2szsa9bPd6hK\nUoEMd0kqkOEuSQUy3CWpQIa7JBXIcJekAhnuklQgw12SCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQV\nyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEM\nd0kqkOEuSQUy3CWpQIa7JBXIcJekAlUK94hYHBGbImIgIi7aT7/XRcRgRLynfSVKklrVNNwjohu4\nHDgTmA+cGxHzR+j3OeCH7S5SktSaKlfuC4GBzNycmbuAa4Elw/T7MPBdYFsb65MkjUKVcJ8BPNiw\nvqW+7TkRMQN4F3Bl+0qTJI1Wu55Q/RLw8czcu79OEbE0Ivojon/79u1tOrUkaaieCn22ArMa1mfW\ntzXqA66NCIBpwFkRMZiZ1zd2yswVwAqAvr6+HG3RkqT9qxLua4B5ETGXWqifA7y/sUNmzn12OSK+\nCdwwNNglSeOnabhn5mBELANuArqBlZm5ISIuqLcvH+MaJUktqnLlTmauBlYP2TZsqGfmBw+8LEnS\ngfAdqpJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEMd0kq\nkOEuSQUy3CWpQIa7JBXIcJekAhnuklQgw12SCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQVyHCXpAIZ\n7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLcJalAlcI9IhZHxKaIGIiIi4Zp/6uIuDMi1kfEzyPipPaX\nKkmqqmm4R0Q3cDlwJjAfODci5g/pdh/w5sx8NXAJsKLdhUqSqqty5b4QGMjMzZm5C7gWWNLYITN/\nnpm/qa/eCsxsb5mSpFZUCfcZwIMN61vq20byd8CNB1KUJOnA9LTzYBHxFmrhfuoI7UuBpQCzZ89u\n56klSQ2qXLlvBWY1rM+sb9tHRLwG+BqwJDMfH+5AmbkiM/sys6+3t3c09UqSKqgS7muAeRExNyIm\nAecAqxo7RMRs4DrgbzLznvaXKUlqRdNpmcwcjIhlwE1AN7AyMzdExAX19uXAp4CpwBURATCYmX1j\nV7YkaX8iMzty4r6+vuzv7+/IuSXpYBURa6tcPPsOVUkqkOEuSQUy3CWpQIa7JBXIcJekAhnuklQg\nw12SCmS4S1KBDHdJKpDhLkkFMtwlqUCGuyQVyHCXpAIZ7pJUIMNdkgpkuEtSgQx3SSqQ4S5JBTLc\nJalAhrskFchwl6QCGe6SVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWpQIa7JBXIcJekAhnuklSgSuEe\nEYsjYlNEDETERcO0R0RcVm+/MyIWtL9USVJVPc06REQ3cDnwVmALsCYiVmXmLxu6nQnMq99eD1xZ\n/9p2q1bVbg88AL/5Dbz3vfDRj8L558MPfgAvfSkcfTTcd1+t/1NPwc6dMHs29PTAk0/WlqdMgUcf\nrW174xvhYx+rbf/sZ+GKK+DQQ2HhQli/Hu6+u9bvAx+AmTPht7+FrVvhRz+CwUGYPx9OOgm2b4fD\nD4e3vhW+/e3avosWwSc+Ad/5Tq391lvhiSfgFa+A170O/vu/Ydo0uOoqOOII+NKXau3LlsGcOWMx\ngpL+GERm7r9DxBuBz2Tm2+rrFwNk5mcb+nwFuDkzr6mvbwIWZebDIx23r68v+/v7Wyp21So499xa\nWD9/bpg7FzZvbulQLzBtGnzwg/DFL+6/X1cX7N3b2rG7uiCzdhvJ1Klwyinw05/C7t1wzDFw//21\nX0KS9KyIWJuZfc36VZmWmQE82LC+pb6t1T5ExNKI6I+I/u3bt1c49b5++MN9gx1qgXn//S0f6gWe\neQauv755v1aD/dl9mvwO5fHH4Wc/q9Wxd2/t6733tn4uSYJxfkI1M1dkZl9m9vX29ra8/xln1KY9\nGkW0Z/pi8mR45zub9+saxYh1ddXq3J+pU+G002p1dHXVvr785a2fS5Kgwpw7sBWY1bA+s76t1T4H\n7Oyz4Zprnp9z/+1v4X3vgwsvHH7OPeL5OfdZs2rz5k89VVueMgW2bYPu7n3n3I8+Gq68shauCxfC\nXXfBxo3Pz7nPmlWb6392zn3PHjjhBDj55NrxjjgCTj8drr4a7rgD3vIWuPji5+fcb7tt3zn3n/0M\nentrc+5Tpuw75+6UjKTRqjLn3gPcA5xOLbDXAO/PzA0Nfd4OLAPOovZE6mWZuXB/xx3NnLsk/bGr\nOufe9Mo9MwcjYhlwE9ANrMzMDRFxQb19ObCaWrAPADuB8w6keEnSgakyLUNmrqYW4I3bljcsJ/Ch\n9pYmSRot36EqSQUy3CWpQIa7JBXIcJekAhnuklQgw12SCtT0TUxjduKI7cADLewyDXhsjMppN2sd\nG9Y6Nqx1bIxVrS/NzKb/v6Vj4d6qiOiv8q6sicBax4a1jg1rHRudrtVpGUkqkOEuSQU6mMJ9RacL\naIG1jg1rHRvWOjY6WutBM+cuSaruYLpylyRVNKHCPSLeGxEbImJvRPQNabs4IgYiYlNEvG2E/Y+J\niB9FxK/qX180TnX/e0Ssq9/uj4h1I/S7PyLW1/t15J/ZR8RnImJrQ71njdBvcX2sByLiovGus17D\nFyLi7oi4MyK+FxFHj9CvI+PabIyi5rJ6+50RsWC8ahtSx6yI+K+I+GX95+vCYfosiognGx4Xn+pE\nrQ317Pc+nQhjGxHHN4zXuoh4KiI+MqRP58Y1MyfMDTgBOB64Gehr2D4fuAOYDMwF7gW6h9n/88BF\n9eWLgM914Hu4FPjUCG33A9M6PMafAT7WpE93fYxfBkyqj/38DtR6BtBTX/7cSPdnJ8a1yhhR+4yD\nG4EA3gDc1qH7fDqwoL58JLUP3xla6yLghk7UN5r7dKKM7ZDHwyPUXoM+IcZ1Ql25Z+bGzNw0TNMS\n4NrMfCYz76P2oSDDfdLTEuBb9eVvARU+FbV9IiKA9wHXjOd5x8BCYCAzN2fmLuBaamM7rjLzh5k5\nWF+9ldrHN04UVcZoCXBV1twKHB0R08e70Mx8ODNvry/vADYyzAfYH2QmxNg2OB24NzNbeWPmmJpQ\n4b4fM4AHG9a3MPyD87jMfLi+/Ahw3FgXNsRpwKOZ+asR2hP4cUSsjYil41jXUB+u/ym7coSpq6rj\nPZ7Op3alNpxOjGuVMZpw4xgRc4DXArcN0/ym+uPixog4cVwLe6Fm9+lEG9tzGPmiriPjWumTmNop\nIn4MvHiYpk9m5vfbdZ7MzIho20uBKtZ9Lvu/aj81M7dGxLHAjyLi7sy8pV01VqkVuBK4hNoPzyXU\nppHOb3cNVVUZ14j4JDAIXD3CYcZlXA92EXEE8F3gI5n51JDm24HZmfl0/XmY64F5411jg4PmPo2I\nScDZwMXDNHdsXMc93DPzL0ax21ZgVsP6zPq2oR6NiOmZ+XD9T7Rto6lxOM3qjtoHib8bOGU/x9ha\n/7otIr5H7U/7tj9gq45xRHwVuGGYpqrjfcAqjOsHgXcAp2d9EnOYY4zLuA5RZYzGbRybiYhDqAX7\n1Zl53dD2xrDPzNURcUVETMvMjvwflwr36YQZW+BM4PbMfHRoQyfH9WCZllkFnBMRkyNiLrXffP87\nQr8P1Jc/ALTtL4EK/gK4OzO3DNcYEVMi4shnl6k9WXjXONb3bB2N85LvGqGGNcC8iJhbvyo5h9rY\njquIWAz8I3B2Zu4coU+nxrXKGK0C/rb+yo43AE82TBuOm/pzQV8HNmbmP4/Q58X1fkTEQmrZ8Pj4\nVblPLVXu0wkxtnUj/sXe0XHtxLO4I92ohc0W4BngUeCmhrZPUnt1wibgzIbtX6P+yhpgKvAT4FfA\nj4FjxrH2bwIXDNn2EmB1ffll1F5RcQewgdq0QyfG+NvAeuBOaj8g04fWWl8/i9qrKu7tYK0D1OZV\n19VvyyfSuA43RsAFzz4OqL2S4/J6+3oaXgE2zuN4KrVpuDsbxvKsIbUuq4/fHdSevH5TJ2rd3306\nQcd2CrWw/pOGbRNiXH2HqiQV6GCZlpEktcBwl6QCGe6SVCDDXZIKZLhLUoEMd0kqkOEuSQUy3CWp\nQP8PKiTkOWFgz58AAAAASUVORK5CYII=\n", 74 | "text/plain": [ 75 | "" 76 | ] 77 | }, 78 | "metadata": {}, 79 | "output_type": "display_data" 80 | } 81 | ], 82 | "source": [ 83 | "plt.scatter(x, y, c=y, s=10, cmap='winter')" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": 116, 89 | "metadata": {}, 90 | "outputs": [], 91 | "source": [ 92 | "def model(x, w):\n", 93 | " return 1/(np.exp(-w*x)+1)\n", 94 | "\n", 95 | "def CostFunction(x, y, w):\n", 96 | " m = len(x)\n", 97 | " error = 0\n", 98 | " for xi, yi in zip(x, y):\n", 99 | " error += yi*np.log10(model(xi, w)) + (1-yi)*np.log10(1-model(xi, w))\n", 100 | " return -1*error/m" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": 117, 106 | "metadata": {}, 107 | "outputs": [], 108 | "source": [ 109 | "# 定义梯度下降函数求解\n", 110 | "\n", 111 | "def GradientDescent(x, y, w, alpha):\n", 112 | " tem = [w]\n", 113 | " eps = 10\n", 114 | " while abs(eps) > 0.0005:\n", 115 | " g = (CostFunction(x, y, w+0.01)-CostFunction(x, y, w-0.01))/0.02\n", 116 | " w = w - g*alpha\n", 117 | " eps = w - tem[-1]\n", 118 | " tem.append(w)\n", 119 | " return tem" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "execution_count": 118, 125 | "metadata": {}, 126 | "outputs": [ 127 | { 128 | "data": { 129 | "text/plain": [ 130 | "[]" 131 | ] 132 | }, 133 | "execution_count": 118, 134 | "metadata": {}, 135 | "output_type": "execute_result" 136 | }, 137 | { 138 | "data": { 139 | "image/png": "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\n", 140 | "text/plain": [ 141 | "" 142 | ] 143 | }, 144 | "metadata": {}, 145 | "output_type": "display_data" 146 | } 147 | ], 148 | "source": [ 149 | "# 代价函数可视化\n", 150 | "\n", 151 | "error_w = np.linspace(0, 3, 100)\n", 152 | "error = []\n", 153 | "for wi in error_w:\n", 154 | " error.append(CostFunction(x, y, wi))\n", 155 | "plt.plot(error_w, error)" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 119, 161 | "metadata": {}, 162 | "outputs": [ 163 | { 164 | "data": { 165 | "text/plain": [ 166 | "[]" 167 | ] 168 | }, 169 | "execution_count": 119, 170 | "metadata": {}, 171 | "output_type": "execute_result" 172 | }, 173 | { 174 | "data": { 175 | "image/png": "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\n", 176 | "text/plain": [ 177 | "" 178 | ] 179 | }, 180 | "metadata": {}, 181 | "output_type": "display_data" 182 | } 183 | ], 184 | "source": [ 185 | "# 梯度下降可视化(学习率为0.5),w初始值为0\n", 186 | "\n", 187 | "tem = GradientDescent(x, y, 0, 0.5)\n", 188 | "error_tem = [CostFunction(x, y, tem_i) for tem_i in tem]\n", 189 | "plt.plot(error_w , error)\n", 190 | "plt.plot(tem, error_tem)\n" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": 120, 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "data": { 200 | "text/plain": [ 201 | "[]" 202 | ] 203 | }, 204 | "execution_count": 120, 205 | "metadata": {}, 206 | "output_type": "execute_result" 207 | }, 208 | { 209 | "data": { 210 | "image/png": "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\n", 211 | "text/plain": [ 212 | "" 213 | ] 214 | }, 215 | "metadata": {}, 216 | "output_type": "display_data" 217 | } 218 | ], 219 | "source": [ 220 | "# 梯度下降可视化(学习率为0.1),w初始值为0\n", 221 | "\n", 222 | "tem = GradientDescent(x, y, 0, 0.1)\n", 223 | "error_tem = [CostFunction(x, y, tem_i) for tem_i in tem]\n", 224 | "plt.plot(error_w , error)\n", 225 | "plt.plot(tem, error_tem)\n" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": 121, 231 | "metadata": {}, 232 | "outputs": [ 233 | { 234 | "data": { 235 | "text/plain": [ 236 | "[]" 237 | ] 238 | }, 239 | "execution_count": 121, 240 | "metadata": {}, 241 | "output_type": "execute_result" 242 | }, 243 | { 244 | "data": { 245 | "image/png": "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\n7bG3AAAAAElFTkSuQmCC\n", 246 | "text/plain": [ 247 | "" 248 | ] 249 | }, 250 | "metadata": {}, 251 | "output_type": "display_data" 252 | } 253 | ], 254 | "source": [ 255 | "# 预测y值与训练集进行比较(w=2)\n", 256 | "\n", 257 | "plt.scatter(x, y, c=y, cmap='winter', s=20)\n", 258 | "x_range = np.linspace(-8, 8, 50)\n", 259 | "y_pred = [model(xi, tem[-1]) for xi in x_range ]\n", 260 | "plt.plot(x_range, y_pred, c='r')" 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": 122, 266 | "metadata": {}, 267 | "outputs": [ 268 | { 269 | "data": { 270 | "text/plain": [ 271 | "[]" 272 | ] 273 | }, 274 | "execution_count": 122, 275 | "metadata": {}, 276 | "output_type": "execute_result" 277 | }, 278 | { 279 | "data": { 280 | "image/png": "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\n", 281 | "text/plain": [ 282 | "" 283 | ] 284 | }, 285 | "metadata": {}, 286 | "output_type": "display_data" 287 | } 288 | ], 289 | "source": [ 290 | "# 预测y值与训练集进行比较(w=0.8)\n", 291 | "\n", 292 | "plt.scatter(x, y, c=y, cmap='winter', s=20)\n", 293 | "x_range = np.linspace(-8, 8, 50)\n", 294 | "y_pred = [model(xi, 0.8) for xi in x_range ]\n", 295 | "plt.plot(x_range, y_pred, c='r')" 296 | ] 297 | }, 298 | { 299 | "cell_type": "markdown", 300 | "metadata": {}, 301 | "source": [ 302 | "# 利用sklearn 实现逻辑回归" 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": 124, 308 | "metadata": {}, 309 | "outputs": [], 310 | "source": [ 311 | "from sklearn.linear_model import LogisticRegression" 312 | ] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "execution_count": 125, 317 | "metadata": {}, 318 | "outputs": [ 319 | { 320 | "ename": "AttributeError", 321 | "evalue": "'LogisticRegression' object has no attribute 'pred'", 322 | "output_type": "error", 323 | "traceback": [ 324 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 325 | "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", 326 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mLR\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mLogisticRegression\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mLR\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0my_pred\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mLR\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpred\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx_range\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'winter'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx_range\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 327 | "\u001b[1;31mAttributeError\u001b[0m: 'LogisticRegression' object has no attribute 'pred'" 328 | ] 329 | } 330 | ], 331 | "source": [ 332 | "LR = LogisticRegression()\n", 333 | "LR.fit(x, y)\n", 334 | "y_pred = LR.predict(x_range)\n", 335 | "plt.scatter(x, y, c=y, cmap='winter')\n", 336 | "plt.plot(x_range, y_pred)" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": 1, 342 | "metadata": {}, 343 | "outputs": [ 344 | { 345 | "ename": "NameError", 346 | "evalue": "name 'x_range' is not defined", 347 | "output_type": "error", 348 | "traceback": [ 349 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 350 | "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", 351 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mx_range\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 352 | "\u001b[1;31mNameError\u001b[0m: name 'x_range' is not defined" 353 | ] 354 | } 355 | ], 356 | "source": [ 357 | "x_range" 358 | ] 359 | }, 360 | { 361 | "cell_type": "code", 362 | "execution_count": null, 363 | "metadata": {}, 364 | "outputs": [], 365 | "source": [] 366 | } 367 | ], 368 | "metadata": { 369 | "kernelspec": { 370 | "display_name": "Python 3", 371 | "language": "python", 372 | "name": "python3" 373 | }, 374 | "language_info": { 375 | "codemirror_mode": { 376 | "name": "ipython", 377 | "version": 3 378 | }, 379 | "file_extension": ".py", 380 | "mimetype": "text/x-python", 381 | "name": "python", 382 | "nbconvert_exporter": "python", 383 | "pygments_lexer": "ipython3", 384 | "version": "3.6.1" 385 | } 386 | }, 387 | "nbformat": 4, 388 | "nbformat_minor": 2 389 | } 390 | -------------------------------------------------------------------------------- /逻辑回归模型/Images/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/逻辑回归模型/Images/1.jpg -------------------------------------------------------------------------------- /逻辑回归模型/Images/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/逻辑回归模型/Images/2.jpg -------------------------------------------------------------------------------- /逻辑回归模型/Images/2_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/逻辑回归模型/Images/2_01.jpg -------------------------------------------------------------------------------- /逻辑回归模型/Images/2_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/逻辑回归模型/Images/2_1.jpg -------------------------------------------------------------------------------- /逻辑回归模型/Images/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1003761102/Machine_learning_notes/79033aee936855c0da7168ddf1b012d888cd92c2/逻辑回归模型/Images/3.jpg -------------------------------------------------------------------------------- /逻辑回归模型/LogisticRegression.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "\n", 8 | "# 2 逻辑回归(logistic regression)\n", 9 | " 在分类问题中,我们要预测的y值是离散的值,我们将运用到逻辑回归(logistic regression)算法。在分类问题中,我们期望预测的值属于某一类。以二分类任务为例,其输出标签值$y\\in\\{0, 1\\}$,而线性回归模型产生的预测值$z=w^Tx+b$是实数值,于是我们需将$z$转换为$0/1$,最理想的是单位阶跃函数,如下图所示。\n", 10 | "\n", 11 | "![](Images/2_01.jpg)\n", 12 | "\n", 13 | "然而单位阶跃函数不连续,于是我们希望能找到能在一定程度上近似单位阶跃函数的“替代函数”,并希望它单调可微,Sigmoid函数正是这样一个函数:\n", 14 | "$$ y= f(x,w,b)=\\frac{1}{1+e^{-(w^Tx+b)}}$$\n", 15 | "\n", 16 | "![](Images/2_1.jpg)\n", 17 | "\n", 18 | "上式可以变化为:\n", 19 | "$$ ln\\frac{y}{1-y} = w^Tx+b$$\n", 20 | "我们将$y$值视为样本$x$为正例的可能性,则$1-y$为其反例的可能性。若将$y$视为类后验概率$p(y=1|x)$,则$1-y$为 后验概率$p(y=0|x)$,因而有\n", 21 | "$$ ln\\frac{p(y=1|x)}{p(y=0|x)} = w^Tx+b$$\n", 22 | "显然有:\n", 23 | "$$p(y=1|x)=\\frac{e^{(w^Tx+b)}}{1+e^{(w^Tx+b)}}$$\n", 24 | "$$p(y=0|x)=\\frac{1}{1+e^{(w^Tx+b)}}$$\n", 25 | "于是上述公式可以改写为:\n", 26 | "$$p(y=i|x_i;w,b)=y_i p(y=1|x_i;w,b) + (1-y_i) p(y=0|x_i;w,b)$$\n", 27 | "于是我们可以通过‘极大似然法’来估计$w$和$b$,即是下式最大化:\n", 28 | "$$l(w,b) = \\sum_{i=1}^{m}ln p(y=i|x_i;w,b)$$\n", 29 | "等价于使下式最小化\n", 30 | "$$ J(w,b)=-1/m\\sum_{i=1}^{m}ln p(y=i|x_i;w,b)=-1/m\\sum_{i=1}^{m}ln y_i p(y=1|x_i;w,b) + (1-y_i) p(y=0|x_i;w,b)$$\n", 31 | "因而$J(w,b)$即为逻辑回归的代价函数。\n", 32 | "\n" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 113, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "%matplotlib inline\n", 42 | "from sklearn.datasets import make_blobs\n", 43 | "import matplotlib.pyplot as plt\n", 44 | "import numpy as np" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 114, 50 | "metadata": {}, 51 | "outputs": [], 52 | "source": [ 53 | "x, y = make_blobs(n_features=1, n_samples=100, centers=2)\n" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 115, 59 | "metadata": {}, 60 | "outputs": [ 61 | { 62 | "data": { 63 | "text/plain": [ 64 | "" 65 | ] 66 | }, 67 | "execution_count": 115, 68 | "metadata": {}, 69 | "output_type": "execute_result" 70 | }, 71 | { 72 | "data": { 73 | "image/png": "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\nQP8PKiTkOWFgz58AAAAASUVORK5CYII=\n", 74 | "text/plain": [ 75 | "" 76 | ] 77 | }, 78 | "metadata": {}, 79 | "output_type": "display_data" 80 | } 81 | ], 82 | "source": [ 83 | "plt.scatter(x, y, c=y, s=10, cmap='winter')" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": 116, 89 | "metadata": {}, 90 | "outputs": [], 91 | "source": [ 92 | "def model(x, w):\n", 93 | " return 1/(np.exp(-w*x)+1)\n", 94 | "\n", 95 | "def CostFunction(x, y, w):\n", 96 | " m = len(x)\n", 97 | " error = 0\n", 98 | " for xi, yi in zip(x, y):\n", 99 | " error += yi*np.log10(model(xi, w)) + (1-yi)*np.log10(1-model(xi, w))\n", 100 | " return -1*error/m" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": 117, 106 | "metadata": {}, 107 | "outputs": [], 108 | "source": [ 109 | "# 定义梯度下降函数求解\n", 110 | "\n", 111 | "def GradientDescent(x, y, w, alpha):\n", 112 | " tem = [w]\n", 113 | " eps = 10\n", 114 | " while abs(eps) > 0.0005:\n", 115 | " g = (CostFunction(x, y, w+0.01)-CostFunction(x, y, w-0.01))/0.02\n", 116 | " w = w - g*alpha\n", 117 | " eps = w - tem[-1]\n", 118 | " tem.append(w)\n", 119 | " return tem" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "execution_count": 118, 125 | "metadata": {}, 126 | "outputs": [ 127 | { 128 | "data": { 129 | "text/plain": [ 130 | "[]" 131 | ] 132 | }, 133 | "execution_count": 118, 134 | "metadata": {}, 135 | "output_type": "execute_result" 136 | }, 137 | { 138 | "data": { 139 | "image/png": "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\n", 140 | "text/plain": [ 141 | "" 142 | ] 143 | }, 144 | "metadata": {}, 145 | "output_type": "display_data" 146 | } 147 | ], 148 | "source": [ 149 | "# 代价函数可视化\n", 150 | "\n", 151 | "error_w = np.linspace(0, 3, 100)\n", 152 | "error = []\n", 153 | "for wi in error_w:\n", 154 | " error.append(CostFunction(x, y, wi))\n", 155 | "plt.plot(error_w, error)" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": 119, 161 | "metadata": {}, 162 | "outputs": [ 163 | { 164 | "data": { 165 | "text/plain": [ 166 | "[]" 167 | ] 168 | }, 169 | "execution_count": 119, 170 | "metadata": {}, 171 | "output_type": "execute_result" 172 | }, 173 | { 174 | "data": { 175 | "image/png": "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\n", 176 | "text/plain": [ 177 | "" 178 | ] 179 | }, 180 | "metadata": {}, 181 | "output_type": "display_data" 182 | } 183 | ], 184 | "source": [ 185 | "# 梯度下降可视化(学习率为0.5),w初始值为0\n", 186 | "\n", 187 | "tem = GradientDescent(x, y, 0, 0.5)\n", 188 | "error_tem = [CostFunction(x, y, tem_i) for tem_i in tem]\n", 189 | "plt.plot(error_w , error)\n", 190 | "plt.plot(tem, error_tem)\n" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": 120, 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "data": { 200 | "text/plain": [ 201 | "[]" 202 | ] 203 | }, 204 | "execution_count": 120, 205 | "metadata": {}, 206 | "output_type": "execute_result" 207 | }, 208 | { 209 | "data": { 210 | "image/png": "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\n", 211 | "text/plain": [ 212 | "" 213 | ] 214 | }, 215 | "metadata": {}, 216 | "output_type": "display_data" 217 | } 218 | ], 219 | "source": [ 220 | "# 梯度下降可视化(学习率为0.1),w初始值为0\n", 221 | "\n", 222 | "tem = GradientDescent(x, y, 0, 0.1)\n", 223 | "error_tem = [CostFunction(x, y, tem_i) for tem_i in tem]\n", 224 | "plt.plot(error_w , error)\n", 225 | "plt.plot(tem, error_tem)\n" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": 121, 231 | "metadata": {}, 232 | "outputs": [ 233 | { 234 | "data": { 235 | "text/plain": [ 236 | "[]" 237 | ] 238 | }, 239 | "execution_count": 121, 240 | "metadata": {}, 241 | "output_type": "execute_result" 242 | }, 243 | { 244 | "data": { 245 | "image/png": "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\n7bG3AAAAAElFTkSuQmCC\n", 246 | "text/plain": [ 247 | "" 248 | ] 249 | }, 250 | "metadata": {}, 251 | "output_type": "display_data" 252 | } 253 | ], 254 | "source": [ 255 | "# 预测y值与训练集进行比较(w=2)\n", 256 | "\n", 257 | "plt.scatter(x, y, c=y, cmap='winter', s=20)\n", 258 | "x_range = np.linspace(-8, 8, 50)\n", 259 | "y_pred = [model(xi, tem[-1]) for xi in x_range ]\n", 260 | "plt.plot(x_range, y_pred, c='r')" 261 | ] 262 | }, 263 | { 264 | "cell_type": "code", 265 | "execution_count": 122, 266 | "metadata": {}, 267 | "outputs": [ 268 | { 269 | "data": { 270 | "text/plain": [ 271 | "[]" 272 | ] 273 | }, 274 | "execution_count": 122, 275 | "metadata": {}, 276 | "output_type": "execute_result" 277 | }, 278 | { 279 | "data": { 280 | "image/png": "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\n", 281 | "text/plain": [ 282 | "" 283 | ] 284 | }, 285 | "metadata": {}, 286 | "output_type": "display_data" 287 | } 288 | ], 289 | "source": [ 290 | "# 预测y值与训练集进行比较(w=0.8)\n", 291 | "\n", 292 | "plt.scatter(x, y, c=y, cmap='winter', s=20)\n", 293 | "x_range = np.linspace(-8, 8, 50)\n", 294 | "y_pred = [model(xi, 0.8) for xi in x_range ]\n", 295 | "plt.plot(x_range, y_pred, c='r')" 296 | ] 297 | }, 298 | { 299 | "cell_type": "markdown", 300 | "metadata": {}, 301 | "source": [ 302 | "# 利用sklearn 实现逻辑回归" 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": 124, 308 | "metadata": {}, 309 | "outputs": [], 310 | "source": [ 311 | "from sklearn.linear_model import LogisticRegression" 312 | ] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "execution_count": 125, 317 | "metadata": {}, 318 | "outputs": [ 319 | { 320 | "ename": "AttributeError", 321 | "evalue": "'LogisticRegression' object has no attribute 'pred'", 322 | "output_type": "error", 323 | "traceback": [ 324 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 325 | "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", 326 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mLR\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mLogisticRegression\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mLR\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0my_pred\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mLR\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpred\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx_range\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'winter'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx_range\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my_pred\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", 327 | "\u001b[1;31mAttributeError\u001b[0m: 'LogisticRegression' object has no attribute 'pred'" 328 | ] 329 | } 330 | ], 331 | "source": [ 332 | "LR = LogisticRegression()\n", 333 | "LR.fit(x, y)\n", 334 | "y_pred = LR.predict(x_range)\n", 335 | "plt.scatter(x, y, c=y, cmap='winter')\n", 336 | "plt.plot(x_range, y_pred)" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": 1, 342 | "metadata": {}, 343 | "outputs": [ 344 | { 345 | "ename": "NameError", 346 | "evalue": "name 'x_range' is not defined", 347 | "output_type": "error", 348 | "traceback": [ 349 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", 350 | "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", 351 | "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mx_range\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", 352 | "\u001b[1;31mNameError\u001b[0m: name 'x_range' is not defined" 353 | ] 354 | } 355 | ], 356 | "source": [ 357 | "x_range" 358 | ] 359 | }, 360 | { 361 | "cell_type": "code", 362 | "execution_count": null, 363 | "metadata": {}, 364 | "outputs": [], 365 | "source": [] 366 | } 367 | ], 368 | "metadata": { 369 | "kernelspec": { 370 | "display_name": "Python 3", 371 | "language": "python", 372 | "name": "python3" 373 | }, 374 | "language_info": { 375 | "codemirror_mode": { 376 | "name": "ipython", 377 | "version": 3 378 | }, 379 | "file_extension": ".py", 380 | "mimetype": "text/x-python", 381 | "name": "python", 382 | "nbconvert_exporter": "python", 383 | "pygments_lexer": "ipython3", 384 | "version": "3.6.1" 385 | } 386 | }, 387 | "nbformat": 4, 388 | "nbformat_minor": 2 389 | } 390 | --------------------------------------------------------------------------------