{ "cells": [ { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# %load ../../../preconfig.py\n", "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "sns.set(color_codes=True)\n", "#sns.set(font='SimHei')\n", "#plt.rcParams['axes.grid'] = False\n", "\n", "import numpy as np\n", "\n", "import pandas as pd\n", "pd.options.display.max_rows = 20\n", "\n", "#import sklearn\n", "\n", "#import itertools\n", "\n", "import logging\n", "logger = logging.getLogger()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "决策树简介和 Python 实现\n", "======================\n", "参考:\n", "\n", "+ [Building a decision tree from scratch - a beginner tutorial](http://www.patricklamle.com/Tutorials/Decision%20tree%20python/tuto_decision%20tree.html)\n", "\n", "+ 9.2 Tree-Based Methods - The Elements of Statistical Learning\n", "\n", "+ [Classification and Regression Trees (CART) Theory and Applications](http://edoc.hu-berlin.de/master/timofeev-roman-2004-12-20/PDF/timofeev.pdf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 0. 基本介绍\n", "本文主要是参照 Tree-Based Methods - The Elements of Statistical Learning 来实现一个简化版范例,其算法是 CART。\n", "\n", "决策树的思想本身非常朴素,关于它的基本介绍在网上已经非常丰富,比如:\n", "\n", "+ [算法杂货铺——分类算法之决策树(Decision tree)](http://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html)\n", "\n", "其主要问题是在每次决策时找到一个分割点,让生成的子集尽可能地纯净。这里涉及到四个问题:\n", "\n", "1. 如何分割样本?\n", "\n", "2. 如何评价子集的纯净度?\n", "\n", "3. 如何找到单个最佳的分割点,其子集最为纯净?\n", "\n", "4. 如何找到最佳的分割点序列,其最终分割子集总体最为纯净?\n", "\n", "接下来,围绕上述问题,一一概要说明,并加以演示。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 加载数据\n", "\n", "古话说,「三军未动,粮草先行」。\n", "\n", "我们先加载演示数据,使用的是 sklearn 自带的测试用例。" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.datasets import load_iris\n", "data = load_iris()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal_lengthsepal_widthpetal_lengthpetal_width
05.13.51.40.2
14.93.01.40.2
\n", "
" ], "text/plain": [ " sepal_length sepal_width petal_length petal_width\n", "0 5.1 3.5 1.4 0.2\n", "1 4.9 3.0 1.4 0.2" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 准备特征数据\n", "X = pd.DataFrame(data.data, \n", " columns=[\"sepal_length\", \"sepal_width\", \"petal_length\", \"petal_width\"])\n", "X.head(2)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
target
0setosa
1setosa
2setosa
\n", "
" ], "text/plain": [ " target\n", "0 setosa\n", "1 setosa\n", "2 setosa" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 准备标签数据\n", "y = pd.DataFrame(data.target, columns=['target'])\n", "y.replace(to_replace=range(3), value=data.target_names, inplace=True)\n", "y.head(3)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal_lengthsepal_widthpetal_lengthpetal_widthtarget
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
\n", "
" ], "text/plain": [ " sepal_length sepal_width petal_length petal_width target\n", "0 5.1 3.5 1.4 0.2 setosa\n", "1 4.9 3.0 1.4 0.2 setosa\n", "2 4.7 3.2 1.3 0.2 setosa" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 组建样本 [特征,标签]\n", "samples = pd.concat([X, y], axis=1) #, keys=[\"x\", \"y\"])\n", "samples.head(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.0 如何分割样本\n", "决策树的分割方法是取一个特征 $f$ 和阈值 $t$,以此为界将样本 $X$ 拆分为两个子集 $X_l, X_r$。其数学表达形同:\n", "\n", "\\begin{align}\n", " X = \\begin{cases}\n", " X_l, \\ \\text{if } X[f] < t \\\\\n", " X_r, \\ \\text{if } X[f] \\geq t\n", " \\end{cases}\n", "\\end{align}" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def splitter(samples, feature, threshold):\n", " # 按特征 f 和阈值 t 分割样本\n", " \n", " left_nodes = samples.query(\"{f} < {t}\".format(f=feature, t=threshold))\n", " right_nodes = samples.query(\"{f} >= {t}\".format(f=feature, t=threshold))\n", " \n", " return {\"left_nodes\": left_nodes, \"right_nodes\": right_nodes}" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "setosa 20\n", "versicolor 1\n", "virginica 1\n", "Name: target, dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "split = splitter(samples, \"sepal_length\", 5)\n", "\n", "# 左子集\n", "x_l = split[\"left_nodes\"].loc[:, \"target\"].value_counts()\n", "x_l" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "virginica 49\n", "versicolor 49\n", "setosa 30\n", "Name: target, dtype: int64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 右子集\n", "x_r = split[\"right_nodes\"].loc[:, \"target\"].value_counts()\n", "x_r" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2. 如何评价子集的纯净度?\n", "\n", "从常理来说,我们希望分割子集尽可能地纯净,最好是单个子集就只含有一类标签,从而保证决策结果精准。\n", "\n", "那么什么样的评价函数,可以用来度量各子集的纯净度呢?\n", "\n", "以刚才计算结果为例, $x_l$ 主要标签是 setosa,非常纯净,而 $x_r$ 则三种标签势均力敌,非常混杂。所以思路是,若一种标签在子集中占比非常大,则此子集就较纯净;若各标签占比差别不大,就较为混杂。\n", "\n", "常用的评价函数正是计算各标签 $c_k$ 在子集中的占比 $p_k = c_k / \\sum (c_k)$,并通过组合 $p_k$ 来描述占比集中或分散。" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def calc_class_proportion(node):\n", " # 计算各标签在集合中的占比\n", " \n", " y = node[\"target\"]\n", " return y.value_counts() / y.count()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "setosa 0.909091\n", "versicolor 0.045455\n", "virginica 0.045455\n", "Name: target, dtype: float64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "calc_class_proportion(split[\"left_nodes\"])" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "virginica 0.382812\n", "versicolor 0.382812\n", "setosa 0.234375\n", "Name: target, dtype: float64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "calc_class_proportion(split[\"right_nodes\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "主要的评价函数有三种,它们评价的是集合的不纯度(值越大,集合越混杂)。\n", "\n", "先做些数学定义以便于描述: \n", "假设对于集合 $m$ 有 $N_m$ 个样本,可分割成 $R_m$ 子集。 \n", "若总的标签类别有 $K$ 种,则标签 $k$ 在此集合中的占比为:\n", "\n", "\\begin{equation}\n", " \\hat{p}_{m k} = \\frac{1}{N_m} \\displaystyle \\sum_{x_i \\in R_m} I(y_i = k)\n", "\\end{equation}\n", "\n", "且令标签 $k$ 是占比最大的标签,即 $k(m) = \\operatorname{arg max}_k \\hat{p}_{m k}$.\n", "\n", "##### 1. Misclassification error\n", "我们一般把集合的分类结果定义为占比最大的标签,那么落在此集合中的其它标签就是误分类。其比率是 $1 - \\hat{p}_{m k}(m)$." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def misclassification_error(node):\n", " p_mk = calc_class_proportion(node)\n", " \n", " return 1 - p_mk.max()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.090909090909090939" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "misclassification_error(split[\"left_nodes\"])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.6171875" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "misclassification_error(split[\"right_nodes\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "对于二分类问题," ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
p1-p
00.001.00
10.010.99
20.020.98
\n", "
" ], "text/plain": [ " p 1-p\n", "0 0.00 1.00\n", "1 0.01 0.99\n", "2 0.02 0.98" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "binary_class = pd.Series(np.arange(0, 1.01, 0.01)).to_frame(name=\"p\")\n", "binary_class[\"1-p\"] = 1 - binary_class[\"p\"]\n", "binary_class.head(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "误分类率和占比 $p$ 的关系可划图为:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "binary_class[\"misclass\"] = binary_class.apply(lambda x: 1 - x.max(), axis=1)\n", "binary_class.plot(x=\"p\", y=\"misclass\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "当 $p=0.5$,两种标签各占一半,不纯度最高;当 $p=0$ 或 $p=1$, 只含有其中一种标签时,不纯度最低。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### 2. Gini index\n", "这里的基尼系数并非是经济上测量分配公平的指标。\n", "\n", "它的思路是从集合中随机抽取元素 $a \\in K_p$,再以 $K_p$ 在集合中的分布为参考随机给 $a$ 分配标签,那么误分配率就是基尼系数。\n", "\n", "具体到决策树的节点 $m$ 上,标签 $k_i$ 的占比为 $p_{k_i m}$。则抽中属于标签 $k_i$ 的元素概率是 $p_{k_i m}$,误分配到其它标签的概率是 $\\sum_{k' \\neq k_i} p_{k_i m} p_{k' m}$。对于整个集合的标签则是:\n", "\n", "\\begin{equation}\n", " G(m) = \\displaystyle \\sum_{k \\neq k'} p_{k m} p_{k' m} \\, \\overset{乘法分配律}{=} \\sum_{k = 1}^{K} p_{k m} (1 - p_{k m})\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def gini_index(node):\n", " p_mk = calc_class_proportion(node)\n", " \n", " return (p_mk * (1 - p_mk)).sum()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.1694214876033058" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gini_index(split[\"left_nodes\"])" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.6519775390625" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gini_index(split[\"right_nodes\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在二分类中,基尼系数和占比 $p$ 的关系可划图为:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n+EOYTCa88cYbE4e66fZMNsZbtmzBrl27sH37djz33HNYt24dNmzYICqq05psjGNjYzEyMjJxQVNx\ncTGSk5OF5HR2k42zr68vvLy8oNFoJo6+DQ4OiorqEv72qNp0es/q3aymKz8/HydOnJg4N7dt2zYU\nFhZO7OH9gx/8AM888wxkWcamTZsQFhZmqygua7IxzszMxO7du7FgwQJs2bIFkiRh69atWL16teDU\nzsXa+5junLUx/slPfoIXXngBADB//nzk5eWJjOu0rI3zjRUfGo0GcXFxeOSRRwQndm43zuHfSe9x\nL24iIiIHxI1KiIiIHBALmoiIyAGxoImIiBwQC5qIiMgBsaCJiIgcEAuaiIjIAbGgiYiIHBALmoiI\nyAHZbCcxInIMZ8+exS9/+UuoVCq0t7cjOzsbP/7xj6FWq0VHI6JJcAZN5AbKy8vx8ssvY9++fRgd\nHcU777wjOhIRWcGCJnIDCxcuRHx8PABg/fr1OH36tOBERGQNC5rIDahUX5zNslgsN31NRI6JBU3k\nBoqLi9HV1QWLxYKPPvoIK1asEB2JiKzgx2giNxAaGorvf//76OzsxLJly3irTCInwIImcgMhISF4\n8803RccgotvAQ9xEREQOSJJlWRYdgoiIiG7GGTQREZEDYkETERE5IBY0ERGRA2JBExEROSAWNBER\nkQP6/wGN/Cjo34jR5AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "binary_class[\"gini\"] = (binary_class[\"p\"] * binary_class[\"1-p\"] * 2)\n", "binary_class.plot(x=\"p\", y=\"gini\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### 3. Cross-entropy\n", "ref: \n", "[Qualitively what is Cross Entropy](http://stats.stackexchange.com/questions/80967/qualitively-what-is-cross-entropy)\n", "\n", "这个损失函数的思路来源于信息论:若某事件的发生概率是 $p$,则需至少 $\\log_2 (1/p)$ 位编码。那么对于所有事件,其最优编码的平均字长为 $\\sum_i p_i \\log_2 (1 / p_i)$。\n", "\n", "借用其思路,对于节点来说,其内容越混杂,就需要越多字长来区分。所以这里 cross-entropy 定义为:\n", "\n", "\\begin{equation}\n", " C(m) = \\displaystyle \\sum_{k=1}^K p_{m k} \\log (1 / p_{m k}) \\, = - \\sum_{k=1}^K p_{m k} \\log p_{m k}\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def cross_entropy(node):\n", " p_mk = calc_class_proportion(node)\n", " \n", " return - (p_mk * p_mk.apply(np.log)).sum()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.36764947740014225" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cross_entropy(split[\"left_nodes\"])" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1.075199711851601" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cross_entropy(split[\"right_nodes\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在二分类中,cross-entropy 和占比 $p$ 的关系可划图为:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = binary_class[[\"p\", \"1-p\"]]\n", "binary_class[\"cross_entropy\"] = -(x * np.log(x)).sum(axis=1)\n", "binary_class.plot(x=\"p\", y=\"cross_entropy\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在二分类问题中,三种评价函数的比较如图:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "binary_class.plot(x=\"p\", y=[\"misclass\", \"gini\", \"cross_entropy\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "为了便于比较,我们将 cross_entropy 也放缩到 $(0.5, 0.5)$。" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "binary_class[\"cross_entropy_scaled\"] = binary_class[\"cross_entropy\"] / binary_class[\"cross_entropy\"].max() * 0.5\n", "binary_class.plot(x=\"p\", y=[\"misclass\", \"gini\", \"cross_entropy_scaled\"], ylim=[0,0.55])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "可以看到,识分类率在整个区间是均一的,而 cross_entropy 越靠近纯净,其值变化越剧烈。所以 cross_entropy 对纯净更敏感的特性,有利于让结果子集更纯净,其使用相对较多。" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "#### 3. 如何找到单个最佳的分割点,其子集最为纯净?\n", "单个最佳分割点,涉及三个问题:\n", "\n", "1. 对于单次分割,分割前和分割后,集合的纯净度提升了多少?\n", "\n", "2. 给定一个特征,纯净度提升最大的阈值是多少?\n", "\n", "3. 对于多个特征,哪一个特征的最佳阈值对纯净度提升最大?\n", "\n", "\n", "##### 3.1 对于单次分割,分割前和分割后,集合的纯净度提升了多少?\n", "令测量不纯度的函数为 $G$, \n", "对一个节点 $m$ 来说,若其按分割方法 $f$ 得到子集 $m_l$ 和 $m_r$,则总的不纯度减少量为:\n", "\n", "\\begin{equation}\n", " G(m) - G(m_l) - G(m_r)\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def calc_impurity_measure(node, feathure, threshold, measure, min_nodes=5):\n", " child = splitter(node, feathure, threshold)\n", " left = child[\"left_nodes\"]\n", " right = child[\"right_nodes\"]\n", " \n", " if left.shape[0] <= min_nodes or right.shape[0] <= min_nodes:\n", " return 0\n", " \n", " \n", " impurity = pd.DataFrame([], \n", " columns=[\"score\", \"rate\"],\n", " index=[])\n", " \n", " impurity.loc[\"all\"] = [measure(node), node.shape[0]]\n", " impurity.loc[\"left\"] = [-measure(left), left.shape[0]]\n", " impurity.loc[\"right\"] = [-measure(right), right.shape[0]]\n", " \n", " impurity[\"rate\"] /= impurity.at[\"all\", \"rate\"]\n", " \n", " logger.info(impurity)\n", " \n", " return (impurity[\"score\"] * impurity[\"rate\"]).sum()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.08546401515151514" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "calc_impurity_measure(samples, \"sepal_length\", 5, gini_index)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "calc_impurity_measure(samples, \"sepal_length\", 1, gini_index)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### 3.2. 给定一个特征,纯净度提升最大的阈值是多少?\n", "\n", "对于一个给定的特征,理论上通过枚取所有可能的阈值,从中找到最大减少量的阈值点,就是此特征的最佳分隔点。\n", "\n", "但现实中,很多特征是连续的,或者阈值点太多,全部穷尽并不现实,往往需要用到最优化的寻优方法。这里为了简易起见,我们对特征的值由小到大设了10个分位点,进行计算。" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def find_best_threshold(node, feature, measure):\n", " threshold_candidates = node[feature].quantile(np.arange(0, 1, 0.2))\n", " \n", " res = pd.Series([], name=feature)\n", " for t in threshold_candidates:\n", " res[t] = calc_impurity_measure(node, feature, t, measure)\n", " \n", " logger.info(res)\n", " \n", " if res.max() == 0:\n", " return None\n", " else:\n", " return res.argmax()" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3.3999999999999999" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_best_threshold(samples, \"sepal_width\", gini_index)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "5.5999999999999996" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_best_threshold(samples, \"sepal_length\", gini_index)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### 3.3. 对于多个特征,哪一个特征的最佳阈值对纯净度提升最大?\n", "显然,最暴力的方法是:每次分割,我们穷尽所有特征,即可找到对此节点最佳分割点" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def find_best_split(node, measure):\n", " if node[\"target\"].unique().shape[0] <= 1:\n", " return None\n", " \n", " purity_gain = pd.Series([], name=\"feature\")\n", " \n", " for f in node.drop(\"target\", axis=1).columns:\n", " purity_gain[f] = find_best_threshold(node, f, measure)\n", " \n", " if pd.isnull(purity_gain.max()):\n", " return None\n", " else:\n", " best_split = {\"feature\": purity_gain.argmax(), \"threshold\": purity_gain.max()}\n", " best_split[\"child\"] = splitter(node, **best_split)\n", "\n", " return best_split" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "['sepal_length', 5.5999999999999996]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "best_split = find_best_split(samples, gini_index)\n", "[best_split[x] for x in [\"feature\", \"threshold\"]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4. 如何找到最佳的分割点序列,其最终分割子集总体最为纯净?\n", "搜索全局最优解在目前还没有有效的方法,所以退一步,我们用贪婪的思想,在每次分割时取最优,希望由局部最优的分割序列能够达到全局最优的效果。\n", "\n", "我们使用递归的方法由上而下依次计算,在处理节点顺序时使用深度优先方法组建出决策树。" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [], "source": [ "class BinaryNode:\n", " def __init__(self, samples, max_depth, measure=gini_index):\n", " self.samples = samples\n", " self.max_depth = max_depth\n", " self.measure = measure\n", " \n", " self.is_leaf = False\n", " self.class_ = None\n", " \n", " self.left = None\n", " self.right = None\n", " \n", " self.best_split = None\n", " \n", " def split(self, depth):\n", " if depth > self.max_depth:\n", " self.is_leaf = True\n", " self.class_ = self.samples[\"target\"].value_counts().argmax()\n", " return\n", " \n", " best_split = find_best_split(self.samples, self.measure)\n", " if pd.isnull(best_split):\n", " self.is_leaf = True\n", " self.class_ = self.samples[\"target\"].value_counts().argmax()\n", " return\n", "\n", " self.best_split = best_split\n", " left = self.best_split[\"child\"][\"left_nodes\"]\n", " self.left = BinaryNode(left.drop(best_split[\"feature\"], axis=1), self.max_depth)\n", " \n", " right = self.best_split[\"child\"][\"right_nodes\"]\n", " self.right = BinaryNode(right.drop(best_split[\"feature\"], axis=1), self.max_depth)\n", "\n", " # 先序深度优先\n", " self.left.split(depth+1)\n", " self.right.split(depth+1)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [], "source": [ "binaryNode = BinaryNode(samples, 3)\n", "binaryNode.split(0)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def show(node, depth):\n", " if node.left:\n", " show(node.left, depth+1)\n", " \n", " if node.is_leaf:\n", " print(\"{}{}\".format(\"\\t\"*(depth+2), node.class_))\n", " return \n", " else:\n", " print(\"{}{}: {}\".format(\"\\t\"*depth,\n", " node.best_split[\"feature\"],\n", " node.best_split[\"threshold\"]))\n", " if node.right:\n", " show(node.right, depth+1)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\t\t\t\tversicolor\n", "\tsepal_width: 2.8200000000000003\n", "\t\t\t\t\tsetosa\n", "\t\tpetal_length: 1.6\n", "\t\t\t\t\t\tsetosa\n", "\t\t\tpetal_width: 0.4\n", "\t\t\t\t\t\tsetosa\n", "sepal_length: 5.6\n", "\t\t\t\t\tversicolor\n", "\t\tsepal_width: 3.1\n", "\t\t\t\t\tversicolor\n", "\tpetal_length: 4.8\n", "\t\t\t\t\t\tversicolor\n", "\t\t\tpetal_width: 1.8\n", "\t\t\t\t\t\tvirginica\n", "\t\tsepal_width: 2.9\n", "\t\t\t\t\t\tvirginica\n", "\t\t\tpetal_width: 2.0\n", "\t\t\t\t\t\tvirginica\n" ] } ], "source": [ "show(binaryNode, 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "观察可知,这颗树是有问题的,如 petal_width: 0.4 下两个叶子的类别均是 setosa。在树生成后,可以通过后续的剪枝操作,让整颗树更精简。这里不再详述。" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }