diff --git a/.gitignore b/.gitignore index 790125a..32b46f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ .ipynb_checkpoints .idea -references diff --git a/1_logistic_regression/Least_squares.ipynb b/1_logistic_regression/Least_squares.ipynb index 0de3486..e6996ac 100644 --- a/1_logistic_regression/Least_squares.ipynb +++ b/1_logistic_regression/Least_squares.ipynb @@ -160,7 +160,54 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## How to use iterative method to estimate parameters?\n" + "## 如何使用迭代的方法求出模型参数\n", + "\n", + "当数据比较多的时候,或者模型比较复杂,无法直接使用解析的方式求出模型参数。因此更为常用的方式是,通过迭代的方式逐步逼近模型的参数。\n", + "\n", + "### 梯度下降法\n", + "在机器学习算法中,对于很多监督学习模型,需要对原始的模型构建损失函数,接下来便是通过优化算法对损失函数进行优化,以便寻找到最优的参数。在求解机器学习参数的优化算法中,使用较多的是基于梯度下降的优化算法(Gradient Descent, GD)。\n", + "\n", + "梯度下降法有很多优点,其中,在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的代价比较小,这使得梯度下降法能在很多大规模数据集上得到应用。梯度下降法的含义是通过当前点的梯度方向寻找到新的迭代点。\n", + "\n", + "梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。\n", + "\n", + "\n", + "我们同时可以假设这座山最陡峭的地方是无法通过肉眼立马观察出来的,而是需要一个复杂的工具来测量,同时,这个人此时正好拥有测量出最陡峭方向的能力。所以,此人每走一段距离,都需要一段时间来测量所在位置最陡峭的方向,这是比较耗时的。那么为了在太阳下山之前到达山底,就要尽可能的减少测量方向的次数。这是一个两难的选择,如果测量的频繁,可以保证下山的方向是绝对正确的,但又非常耗时,如果测量的过少,又有偏离轨道的风险。所以需要找到一个合适的测量方向的频率,来确保下山的方向不错误,同时又不至于耗时太多!\n", + "\n", + "\n", + "![gradient_descent](images/gradient_descent.png)\n", + "\n", + "如上图所示,得到了局部最优解。x,y表示的是$\\theta_0$和$\\theta_1$,z方向表示的是花费函数,很明显出发点不同,最后到达的收敛点可能不一样。当然如果是碗状的,那么收敛点就应该是一样的。\n", + "\n", + "对于某一个损失函数\n", + "$$\n", + "L = \\sum_{i=1}^{N} (y_i - a x_i + b)^2\n", + "$$\n", + "\n", + "我们更新的策略是:\n", + "$$\n", + "\\theta^1 = \\theta^0 - \\alpha \\triangledown L(\\theta)\n", + "$$\n", + "其中$\\theta$代表了模型中的参数,例如$a$, $b$\n", + "\n", + "此公式的意义是:L是关于$\\theta$的一个函数,我们当前所处的位置为$\\theta_0$点,要从这个点走到L的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是$\\alpha$,走完这个段步长,就到达了$\\theta_1$这个点!\n", + "\n", + "下面就这个公式的几个常见的疑问:\n", + "\n", + "* **$\\alpha$是什么含义?**\n", + "$\\alpha$在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过$\\alpha$来控制每一步走的距离,以保证不要步子跨的太大扯着蛋,哈哈,其实就是不要走太快,错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以$\\alpha$的选择在梯度下降法中往往是很重要的!$\\alpha$不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点!\n", + "![gd_stepsize](images/gd_stepsize.png)\n", + "\n", + "* **为什么要梯度要乘以一个负号?**\n", + "梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Program" ] }, { @@ -4889,7 +4936,10 @@ "source": [ "## How to use batch update method?\n", "\n", - "If some data is outliear, then the " + "If some data is outliear, then only use one data can make the learning inaccuracy and slow.\n", + "\n", + "\n", + "* [梯度下降方法的几种形式](https://blog.csdn.net/u010402786/article/details/51188876)" ] }, { diff --git a/1_logistic_regression/Least_squares.py b/1_logistic_regression/Least_squares.py index 3a7c63c..8e0e7e3 100644 --- a/1_logistic_regression/Least_squares.py +++ b/1_logistic_regression/Least_squares.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # --- # jupyter: # jupytext_format_version: '1.2' @@ -113,8 +114,50 @@ plt.legend() plt.show() # - -# ## How to use iterative method to estimate parameters? +# ## 如何使用迭代的方法求出模型参数 # +# 当数据比较多的时候,或者模型比较复杂,无法直接使用解析的方式求出模型参数。因此更为常用的方式是,通过迭代的方式逐步逼近模型的参数。 +# +# ### 梯度下降法 +# 在机器学习算法中,对于很多监督学习模型,需要对原始的模型构建损失函数,接下来便是通过优化算法对损失函数进行优化,以便寻找到最优的参数。在求解机器学习参数的优化算法中,使用较多的是基于梯度下降的优化算法(Gradient Descent, GD)。 +# +# 梯度下降法有很多优点,其中,在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的代价比较小,这使得梯度下降法能在很多大规模数据集上得到应用。梯度下降法的含义是通过当前点的梯度方向寻找到新的迭代点。 +# +# 梯度下降法的基本思想可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。 +# +# +# 我们同时可以假设这座山最陡峭的地方是无法通过肉眼立马观察出来的,而是需要一个复杂的工具来测量,同时,这个人此时正好拥有测量出最陡峭方向的能力。所以,此人每走一段距离,都需要一段时间来测量所在位置最陡峭的方向,这是比较耗时的。那么为了在太阳下山之前到达山底,就要尽可能的减少测量方向的次数。这是一个两难的选择,如果测量的频繁,可以保证下山的方向是绝对正确的,但又非常耗时,如果测量的过少,又有偏离轨道的风险。所以需要找到一个合适的测量方向的频率,来确保下山的方向不错误,同时又不至于耗时太多! +# +# +# ![gradient_descent](images/gradient_descent.png) +# +# 如上图所示,得到了局部最优解。x,y表示的是$\theta_0$和$\theta_1$,z方向表示的是花费函数,很明显出发点不同,最后到达的收敛点可能不一样。当然如果是碗状的,那么收敛点就应该是一样的。 +# +# 对于某一个损失函数 +# $$ +# L = \sum_{i=1}^{N} (y_i - a x_i + b)^2 +# $$ +# +# 我们更新的策略是: +# $$ +# \theta^1 = \theta^0 - \alpha \triangledown L(\theta) +# $$ +# 其中$\theta$代表了模型中的参数,例如$a$, $b$ +# +# 此公式的意义是:L是关于$\theta$的一个函数,我们当前所处的位置为$\theta_0$点,要从这个点走到L的最小值点,也就是山底。首先我们先确定前进的方向,也就是梯度的反向,然后走一段距离的步长,也就是$\alpha$,走完这个段步长,就到达了$\theta_1$这个点! +# +# 下面就这个公式的几个常见的疑问: +# +# * **$\alpha$是什么含义?** +# $\alpha$在梯度下降算法中被称作为学习率或者步长,意味着我们可以通过$\alpha$来控制每一步走的距离,以保证不要步子跨的太大扯着蛋,哈哈,其实就是不要走太快,错过了最低点。同时也要保证不要走的太慢,导致太阳下山了,还没有走到山下。所以$\alpha$的选择在梯度下降法中往往是很重要的!$\alpha$不能太大也不能太小,太小的话,可能导致迟迟走不到最低点,太大的话,会导致错过最低点! +# ![gd_stepsize](images/gd_stepsize.png) +# +# * **为什么要梯度要乘以一个负号?** +# 梯度前加一个负号,就意味着朝着梯度相反的方向前进!我们在前文提到,梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号 +# +# + +# ### Program # + n_epoch = 3000 # epoch size @@ -183,7 +226,10 @@ plt.show() # ## How to use batch update method? # -# If some data is outliear, then the +# If some data is outliear, then only use one data can make the learning inaccuracy and slow. +# +# +# * [梯度下降方法的几种形式](https://blog.csdn.net/u010402786/article/details/51188876) # ## How to fit polynomial function? # diff --git a/1_logistic_regression/images/gd_stepsize.png b/1_logistic_regression/images/gd_stepsize.png new file mode 100644 index 0000000..8886a50 Binary files /dev/null and b/1_logistic_regression/images/gd_stepsize.png differ diff --git a/1_logistic_regression/images/gradient_descent.png b/1_logistic_regression/images/gradient_descent.png new file mode 100644 index 0000000..ae8e47d Binary files /dev/null and b/1_logistic_regression/images/gradient_descent.png differ diff --git a/README.md b/README.md index d074b61..25dfadb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,17 @@ 本notebook教程包含了一些使用Python来学习机器学习的教程,通过本教程能够引导学习Python的基础知识和机器学习的背景和实际编程。 +## 内容 +1. [Python基础](0_python/) +2. [numpy & matplotlib](0_numpy_matplotlib_scipy_sympy/) +3. [kMenas](1_kmeans/) +4. [knn](1_knn/) +5. [Logistic Regression](1_logistic_regression/) +6. [Neural Network](nn/) +7. CNN +8. PyTorch -内容 +## 其他参考 * [安装Python环境](InstallPython.md) -* [参考资料等](References.md) \ No newline at end of file +* [参考资料等](References.md) +* [confusion matrix](metric/confusion_matrix.ipynb) \ No newline at end of file diff --git a/nn/images/bp_loss.png b/nn/images/bp_loss.png new file mode 100644 index 0000000..0be87f2 Binary files /dev/null and b/nn/images/bp_loss.png differ diff --git a/nn/images/bp_weight_update.png b/nn/images/bp_weight_update.png new file mode 100644 index 0000000..7e51940 Binary files /dev/null and b/nn/images/bp_weight_update.png differ diff --git a/nn/images/eqn_13_16.png b/nn/images/eqn_13_16.png new file mode 100644 index 0000000..ee5c699 Binary files /dev/null and b/nn/images/eqn_13_16.png differ diff --git a/nn/images/eqn_17_20.png b/nn/images/eqn_17_20.png new file mode 100644 index 0000000..9450644 Binary files /dev/null and b/nn/images/eqn_17_20.png differ diff --git a/nn/images/eqn_21_22.png b/nn/images/eqn_21_22.png new file mode 100644 index 0000000..ae8ecd9 Binary files /dev/null and b/nn/images/eqn_21_22.png differ diff --git a/nn/images/eqn_23_25.png b/nn/images/eqn_23_25.png new file mode 100644 index 0000000..d987e83 Binary files /dev/null and b/nn/images/eqn_23_25.png differ diff --git a/nn/images/eqn_26.png b/nn/images/eqn_26.png new file mode 100644 index 0000000..80568cc Binary files /dev/null and b/nn/images/eqn_26.png differ diff --git a/nn/images/eqn_27_29.png b/nn/images/eqn_27_29.png new file mode 100644 index 0000000..078649e Binary files /dev/null and b/nn/images/eqn_27_29.png differ diff --git a/nn/images/eqn_30_31.png b/nn/images/eqn_30_31.png new file mode 100644 index 0000000..bc42f67 Binary files /dev/null and b/nn/images/eqn_30_31.png differ diff --git a/nn/images/eqn_32_34.png b/nn/images/eqn_32_34.png new file mode 100644 index 0000000..31353c5 Binary files /dev/null and b/nn/images/eqn_32_34.png differ diff --git a/nn/images/eqn_35_40.png b/nn/images/eqn_35_40.png new file mode 100644 index 0000000..bbb9fac Binary files /dev/null and b/nn/images/eqn_35_40.png differ diff --git a/nn/images/eqn_3_4.png b/nn/images/eqn_3_4.png new file mode 100644 index 0000000..a8d25bd Binary files /dev/null and b/nn/images/eqn_3_4.png differ diff --git a/nn/images/eqn_5_6.png b/nn/images/eqn_5_6.png new file mode 100644 index 0000000..6465288 Binary files /dev/null and b/nn/images/eqn_5_6.png differ diff --git a/nn/images/eqn_7_12.png b/nn/images/eqn_7_12.png new file mode 100644 index 0000000..2db2fca Binary files /dev/null and b/nn/images/eqn_7_12.png differ diff --git a/nn/images/eqn_delta_hidden.png b/nn/images/eqn_delta_hidden.png new file mode 100644 index 0000000..6a6dbe5 Binary files /dev/null and b/nn/images/eqn_delta_hidden.png differ diff --git a/nn/images/eqn_delta_j.png b/nn/images/eqn_delta_j.png new file mode 100644 index 0000000..38ded29 Binary files /dev/null and b/nn/images/eqn_delta_j.png differ diff --git a/nn/images/eqn_ed_net_j.png b/nn/images/eqn_ed_net_j.png new file mode 100644 index 0000000..0ddb8a1 Binary files /dev/null and b/nn/images/eqn_ed_net_j.png differ diff --git a/nn/images/eqn_hidden_units.png b/nn/images/eqn_hidden_units.png new file mode 100644 index 0000000..df2e7a1 Binary files /dev/null and b/nn/images/eqn_hidden_units.png differ diff --git a/nn/images/eqn_matrix1.png b/nn/images/eqn_matrix1.png new file mode 100644 index 0000000..d0f86d6 Binary files /dev/null and b/nn/images/eqn_matrix1.png differ diff --git a/nn/images/eqn_w41_update.png b/nn/images/eqn_w41_update.png new file mode 100644 index 0000000..07d9477 Binary files /dev/null and b/nn/images/eqn_w41_update.png differ diff --git a/nn/images/eqn_w4b_update.png b/nn/images/eqn_w4b_update.png new file mode 100644 index 0000000..e98fa4d Binary files /dev/null and b/nn/images/eqn_w4b_update.png differ diff --git a/nn/images/eqn_w84_update.png b/nn/images/eqn_w84_update.png new file mode 100644 index 0000000..d9dc5fd Binary files /dev/null and b/nn/images/eqn_w84_update.png differ diff --git a/nn/images/formular_2.png b/nn/images/formular_2.png new file mode 100644 index 0000000..126b334 Binary files /dev/null and b/nn/images/formular_2.png differ diff --git a/nn/images/formular_3.png b/nn/images/formular_3.png new file mode 100644 index 0000000..ae405fc Binary files /dev/null and b/nn/images/formular_3.png differ diff --git a/nn/images/formular_4.png b/nn/images/formular_4.png new file mode 100644 index 0000000..8d84dd1 Binary files /dev/null and b/nn/images/formular_4.png differ diff --git a/nn/images/formular_5.png b/nn/images/formular_5.png new file mode 100644 index 0000000..3726dac Binary files /dev/null and b/nn/images/formular_5.png differ diff --git a/nn/images/forumlar_delta4.png b/nn/images/forumlar_delta4.png new file mode 100644 index 0000000..3c52b8b Binary files /dev/null and b/nn/images/forumlar_delta4.png differ diff --git a/nn/images/forumlar_delta8.png b/nn/images/forumlar_delta8.png new file mode 100644 index 0000000..d31e110 Binary files /dev/null and b/nn/images/forumlar_delta8.png differ diff --git a/nn/images/neuron.gif b/nn/images/neuron.gif new file mode 100644 index 0000000..6eb2301 Binary files /dev/null and b/nn/images/neuron.gif differ diff --git a/nn/images/nn1.jpeg b/nn/images/nn1.jpeg new file mode 100644 index 0000000..678c3a5 Binary files /dev/null and b/nn/images/nn1.jpeg differ diff --git a/nn/images/nn2.png b/nn/images/nn2.png new file mode 100644 index 0000000..192b1c2 Binary files /dev/null and b/nn/images/nn2.png differ diff --git a/nn/images/nn3.png b/nn/images/nn3.png new file mode 100644 index 0000000..564b961 Binary files /dev/null and b/nn/images/nn3.png differ diff --git a/nn/images/nn_parameters_demo.png b/nn/images/nn_parameters_demo.png new file mode 100644 index 0000000..004f28d Binary files /dev/null and b/nn/images/nn_parameters_demo.png differ diff --git a/nn/images/sigmod.jpg b/nn/images/sigmod.jpg new file mode 100644 index 0000000..4490fd9 Binary files /dev/null and b/nn/images/sigmod.jpg differ diff --git a/nn/mlp_bp.ipynb b/nn/mlp_bp.ipynb new file mode 100644 index 0000000..6385ea9 --- /dev/null +++ b/nn/mlp_bp.ipynb @@ -0,0 +1,600 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 多层神经网络和反向传播\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 神经元\n", + "\n", + "神经元和感知器本质上是一样的,只不过我们说感知器的时候,它的激活函数是阶跃函数;而当我们说神经元时,激活函数往往选择为sigmoid函数或tanh函数。如下图所示:\n", + "![neuron](images/neuron.gif)\n", + "\n", + "计算一个神经元的输出的方法和计算一个感知器的输出是一样的。假设神经元的输入是向量$\\vec{x}$,权重向量是$\\vec{w}$(偏置项是$w_0$),激活函数是sigmoid函数,则其输出y:\n", + "$$\n", + "y = sigmod(\\vec{w}^T \\cdot \\vec{x})\n", + "$$\n", + "\n", + "sigmoid函数的定义如下:\n", + "$$\n", + "sigmod(x) = \\frac{1}{1+e^{-x}}\n", + "$$\n", + "将其带入前面的式子,得到\n", + "$$\n", + "y = \\frac{1}{1+e^{-\\vec{w}^T \\cdot \\vec{x}}}\n", + "$$\n", + "\n", + "sigmoid函数是一个非线性函数,值域是(0,1)。函数图像如下图所示\n", + "![sigmod_function](images/sigmod.jpg)\n", + "\n", + "sigmoid函数的导数是:\n", + "$$\n", + "y = sigmod(x) \\ \\ \\ \\ \\ \\ (1) \\\\\n", + "y' = y(1-y)\n", + "$$\n", + "可以看到,sigmoid函数的导数非常有趣,它可以用sigmoid函数自身来表示。这样,一旦计算出sigmoid函数的值,计算它的导数的值就非常方便。\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 神经网络是啥?\n", + "\n", + "![nn1](images/nn1.jpeg)\n", + "\n", + "神经网络其实就是按照一定规则连接起来的多个神经元。上图展示了一个全连接(full connected, FC)神经网络,通过观察上面的图,我们可以发现它的规则包括:\n", + "\n", + "* 神经元按照层来布局。最左边的层叫做输入层,负责接收输入数据;最右边的层叫输出层,我们可以从这层获取神经网络输出数据。输入层和输出层之间的层叫做隐藏层,因为它们对于外部来说是不可见的。\n", + "* 同一层的神经元之间没有连接。\n", + "* 第N层的每个神经元和第N-1层的所有神经元相连(这就是full connected的含义),第N-1层神经元的输出就是第N层神经元的输入。\n", + "* 每个连接都有一个权值。\n", + "\n", + "上面这些规则定义了全连接神经网络的结构。事实上还存在很多其它结构的神经网络,比如卷积神经网络(CNN)、循环神经网络(RNN),他们都具有不同的连接规则。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 计算神经网络的输出\n", + "\n", + "神经网络实际上就是一个输入向量$\\vec{x}$到输出向量$\\vec{y}$的函数,即:\n", + "\n", + "$$\n", + "\\vec{y} = f_{network}(\\vec{x})\n", + "$$\n", + "根据输入计算神经网络的输出,需要首先将输入向量$\\vec{x}$的每个元素的值$x_i$赋给神经网络的输入层的对应神经元,然后根据式1依次向前计算每一层的每个神经元的值,直到最后一层输出层的所有神经元的值计算完毕。最后,将输出层每个神经元的值串在一起就得到了输出向量$\\vec{y}$。\n", + "\n", + "接下来举一个例子来说明这个过程,我们先给神经网络的每个单元写上编号。\n", + "\n", + "![nn2](images/nn2.png)\n", + "\n", + "如上图,输入层有三个节点,我们将其依次编号为1、2、3;隐藏层的4个节点,编号依次为4、5、6、7;最后输出层的两个节点编号为8、9。因为我们这个神经网络是全连接网络,所以可以看到每个节点都和上一层的所有节点有连接。比如,我们可以看到隐藏层的节点4,它和输入层的三个节点1、2、3之间都有连接,其连接上的权重分别为$w_{41}$,$w_{42}$,$w_{43}$。那么,我们怎样计算节点4的输出值$a_4$呢?\n", + "\n", + "\n", + "为了计算节点4的输出值,我们必须先得到其所有上游节点(也就是节点1、2、3)的输出值。节点1、2、3是输入层的节点,所以,他们的输出值就是输入向量$\\vec{x}$本身。按照上图画出的对应关系,可以看到节点1、2、3的输出值分别是$x_1$,$x_2$,$x_3$。我们要求输入向量的维度和输入层神经元个数相同,而输入向量的某个元素对应到哪个输入节点是可以自由决定的,你偏非要把$x_1$赋值给节点2也是完全没有问题的,但这样除了把自己弄晕之外,并没有什么价值。\n", + "\n", + "一旦我们有了节点1、2、3的输出值,我们就可以根据式1计算节点4的输出值$a_4$:\n", + "![eqn_3_4](images/eqn_3_4.png)\n", + "\n", + "上式的$w_{4b}$是节点4的偏置项,图中没有画出来。而$w_{41}$,$w_{42}$,$w_{43}$分别为节点1、2、3到节点4连接的权重,在给权重$w_{ji}$编号时,我们把目标节点的编号$j$放在前面,把源节点的编号$i$放在后面。\n", + "\n", + "同样,我们可以继续计算出节点5、6、7的输出值$a_5$,$a_6$,$a_7$。这样,隐藏层的4个节点的输出值就计算完成了,我们就可以接着计算输出层的节点8的输出值$y_1$:\n", + "![eqn_5_6](images/eqn_5_6.png)\n", + "\n", + "同理,我们还可以计算出$y_2$的值。这样输出层所有节点的输出值计算完毕,我们就得到了在输入向量$\\vec{x} = (x_1, x_2, x_3)^T$时,神经网络的输出向量$\\vec{y} = (y_1, y_2)^T$。这里我们也看到,输出向量的维度和输出层神经元个数相同。\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 神经网络的矩阵表示\n", + "\n", + "神经网络的计算如果用矩阵来表示会很方便(当然逼格也更高),我们先来看看隐藏层的矩阵表示。\n", + "\n", + "首先我们把隐藏层4个节点的计算依次排列出来:\n", + "![eqn_hidden_units](images/eqn_hidden_units.png)\n", + "\n", + "接着,定义网络的输入向量$\\vec{x}$和隐藏层每个节点的权重向量$\\vec{w}$。令\n", + "\n", + "![eqn_7_12](images/eqn_7_12.png)\n", + "\n", + "代入到前面的一组式子,得到:\n", + "\n", + "![eqn_13_16](images/eqn_13_16.png)\n", + "\n", + "现在,我们把上述计算$a_4$, $a_5$,$a_6$,$a_7$的四个式子写到一个矩阵里面,每个式子作为矩阵的一行,就可以利用矩阵来表示它们的计算了。令\n", + "![eqn_matrix1](images/eqn_matrix1.png)\n", + "\n", + "带入前面的一组式子,得到\n", + "![formular_2](images/formular_2.png)\n", + "\n", + "在式2中,$f$是激活函数,在本例中是$sigmod$函数;$W$是某一层的权重矩阵;$\\vec{x}$是某层的输入向量;$\\vec{a}$是某层的输出向量。式2说明神经网络的每一层的作用实际上就是先将输入向量左乘一个数组进行线性变换,得到一个新的向量,然后再对这个向量逐元素应用一个激活函数。\n", + "\n", + "每一层的算法都是一样的。比如,对于包含一个输入层,一个输出层和三个隐藏层的神经网络,我们假设其权重矩阵分别为$W_1$,$W_2$,$W_3$,$W_4$,每个隐藏层的输出分别是$\\vec{a}_1$,$\\vec{a}_2$,$\\vec{a}_3$,神经网络的输入为$\\vec{x}$,神经网络的输出为$\\vec{y}$,如下图所示:\n", + "![nn_parameters_demo](images/nn_parameters_demo.png)\n", + "\n", + "则每一层的输出向量的计算可以表示为:\n", + "![eqn_17_20](images/eqn_17_20.png)\n", + "\n", + "\n", + "这就是神经网络输出值的矩阵计算方法。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 神经网络的训练 - 反向传播算法\n", + "\n", + "现在,我们需要知道一个神经网络的每个连接上的权值是如何得到的。我们可以说神经网络是一个模型,那么这些权值就是模型的参数,也就是模型要学习的东西。然而,一个神经网络的连接方式、网络的层数、每层的节点数这些参数,则不是学习出来的,而是人为事先设置的。对于这些人为设置的参数,我们称之为超参数(Hyper-Parameters)。\n", + "\n", + "反向传播算法其实就是链式求导法则的应用。然而,这个如此简单且显而易见的方法,却是在Roseblatt提出感知器算法将近30年之后才被发明和普及的。对此,Bengio这样回应道:\n", + "\n", + "> 很多看似显而易见的想法只有在事后才变得显而易见。\n", + "\n", + "按照机器学习的通用套路,我们先确定神经网络的目标函数,然后用随机梯度下降优化算法去求目标函数最小值时的参数值。\n", + "\n", + "我们取网络所有输出层节点的误差平方和作为目标函数:\n", + "![bp_loss](images/bp_loss.png)\n", + "\n", + "其中,$E_d$表示是样本$d$的误差。\n", + "\n", + "然后,使用随机梯度下降算法对目标函数进行优化:\n", + "![bp_weight_update](images/bp_weight_update.png)\n", + "\n", + "随机梯度下降算法也就是需要求出误差$E_d$对于每个权重$w_{ji}$的偏导数(也就是梯度),怎么求呢?\n", + "![nn3](images/nn3.png)\n", + "\n", + "观察上图,我们发现权重$w_{ji}$仅能通过影响节点$j$的输入值影响网络的其它部分,设$net_j$是节点$j$的加权输入,即\n", + "![eqn_21_22](images/eqn_21_22.png)\n", + "\n", + "$E_d$是$net_j$的函数,而$net_j$是$w_{ji}$的函数。根据链式求导法则,可以得到:\n", + "\n", + "![eqn_23_25](images/eqn_23_25.png)\n", + "\n", + "\n", + "上式中,$x_{ji}$是节点传递给节点$j$的输入值,也就是节点$i$的输出值。\n", + "\n", + "对于的$\\frac{\\partial E_d}{\\partial net_j}$推导,需要区分输出层和隐藏层两种情况。\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 输出层权值训练\n", + "\n", + "![nn3](images/nn3.png)\n", + "\n", + "对于输出层来说,$net_j$仅能通过节点$j$的输出值$y_j$来影响网络其它部分,也就是说$E_d$是$y_j$的函数,而$y_j$是$net_j$的函数,其中$y_j = sigmod(net_j)$。所以我们可以再次使用链式求导法则:\n", + "![eqn_26](images/eqn_26.png)\n", + "\n", + "考虑上式第一项:\n", + "![eqn_27_29](images/eqn_27_29.png)\n", + "\n", + "\n", + "考虑上式第二项:\n", + "![eqn_30_31](images/eqn_30_31.png)\n", + "\n", + "将第一项和第二项带入,得到:\n", + "![eqn_ed_net_j.png](images/eqn_ed_net_j.png)\n", + "\n", + "如果令$\\delta_j = - \\frac{\\partial E_d}{\\partial net_j}$,也就是一个节点的误差项$\\delta$是网络误差对这个节点输入的偏导数的相反数。带入上式,得到:\n", + "![eqn_delta_j.png](images/eqn_delta_j.png)\n", + "\n", + "将上述推导带入随机梯度下降公式,得到:\n", + "![eqn_32_34.png](images/eqn_32_34.png)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 隐藏层权值训练\n", + "\n", + "现在我们要推导出隐藏层的$\\frac{\\partial E_d}{\\partial net_j}$。\n", + "\n", + "![nn3](images/nn3.png)\n", + "\n", + "首先,我们需要定义节点$j$的所有直接下游节点的集合$Downstream(j)$。例如,对于节点4来说,它的直接下游节点是节点8、节点9。可以看到$net_j$只能通过影响$Downstream(j)$再影响$E_d$。设$net_k$是节点$j$的下游节点的输入,则$E_d$是$net_k$的函数,而$net_k$是$net_j$的函数。因为$net_k$有多个,我们应用全导数公式,可以做出如下推导:\n", + "![eqn_35_40](images/eqn_35_40.png)\n", + "\n", + "因为$\\delta_j = - \\frac{\\partial E_d}{\\partial net_j}$,带入上式得到:\n", + "![eqn_delta_hidden.png](images/eqn_delta_hidden.png)\n", + "\n", + "\n", + "至此,我们已经推导出了反向传播算法。需要注意的是,我们刚刚推导出的训练规则是根据激活函数是sigmoid函数、平方和误差、全连接网络、随机梯度下降优化算法。如果激活函数不同、误差计算方式不同、网络连接结构不同、优化算法不同,则具体的训练规则也会不一样。但是无论怎样,训练规则的推导方式都是一样的,应用链式求导法则进行推导即可。\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 具体解释\n", + "\n", + "我们假设每个训练样本为$(\\vec{x}, \\vec{t})$,其中向量$\\vec{x}$是训练样本的特征,而$\\vec{t}$是样本的目标值。\n", + "\n", + "![nn3](images/nn3.png)\n", + "\n", + "首先,我们根据上一节介绍的算法,用样本的特征$\\vec{x}$,计算出神经网络中每个隐藏层节点的输出$a_i$,以及输出层每个节点的输出$y_i$。\n", + "\n", + "然后,我们按照下面的方法计算出每个节点的误差项$\\delta_i$:\n", + "\n", + "* **对于输出层节点$i$**\n", + "![formular_3.png](images/formular_3.png)\n", + "其中,$\\delta_i$是节点$i$的误差项,$y_i$是节点$i$的输出值,$t_i$是样本对应于节点$i$的目标值。举个例子,根据上图,对于输出层节点8来说,它的输出值是$y_1$,而样本的目标值是$t_1$,带入上面的公式得到节点8的误差项应该是:\n", + "![forumlar_delta8.png](images/forumlar_delta8.png)\n", + "\n", + "* **对于隐藏层节点**\n", + "![formular_4.png](images/formular_4.png)\n", + "\n", + "其中,$a_i$是节点$i$的输出值,$w_{ki}$是节点$i$到它的下一层节点$k$的连接的权重,$\\delta_k$是节点$i$的下一层节点$k$的误差项。例如,对于隐藏层节点4来说,计算方法如下:\n", + "![forumlar_delta4.png](images/forumlar_delta4.png)\n", + "\n", + "\n", + "最后,更新每个连接上的权值:\n", + "![formular_5.png](images/formular_5.png)\n", + "\n", + "其中,$w_{ji}$是节点$i$到节点$j$的权重,$\\eta$是一个成为学习速率的常数,$\\delta_j$是节点$j$的误差项,$x_{ji}$是节点$i$传递给节点$j$的输入。例如,权重$w_{84}$的更新方法如下:\n", + "![eqn_w84_update.png](images/eqn_w84_update.png)\n", + "\n", + "类似的,权重$w_{41}$的更新方法如下:\n", + "![eqn_w41_update.png](images/eqn_w41_update.png)\n", + "\n", + "\n", + "偏置项的输入值永远为1。例如,节点4的偏置项$w_{4b}$应该按照下面的方法计算:\n", + "![eqn_w4b_update.png](images/eqn_w4b_update.png)\n", + "\n", + "我们已经介绍了神经网络每个节点误差项的计算和权重更新方法。显然,计算一个节点的误差项,需要先计算每个与其相连的下一层节点的误差项。这就要求误差项的计算顺序必须是从输出层开始,然后反向依次计算每个隐藏层的误差项,直到与输入层相连的那个隐藏层。这就是反向传播算法的名字的含义。当所有节点的误差项计算完毕后,我们就可以根据式5来更新所有的权重。\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Program" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "% matplotlib inline\n", + "\n", + "import numpy as np\n", + "from sklearn import datasets, linear_model\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# generate sample data\n", + "np.random.seed(0)\n", + "X, y = datasets.make_moons(200, noise=0.20)\n", + "\n", + "# plot data\n", + "plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0. 0. 0.]\n", + "[[0.64542838 0.53253913]\n", + " [0.69587439 0.42127568]\n", + " [0.6467884 0.5194472 ]\n", + " [0.66961109 0.4603445 ]\n", + " [0.68655514 0.45194099]\n", + " [0.68403036 0.46245535]\n", + " [0.65214419 0.52105738]\n", + " [0.68892948 0.43762808]\n", + " [0.65145727 0.5206233 ]\n", + " [0.69530054 0.42184819]\n", + " [0.63375592 0.54536443]\n", + " [0.67734017 0.45826309]\n", + " [0.68873965 0.44569752]\n", + " [0.68078977 0.46324812]\n", + " [0.62047762 0.57572069]\n", + " [0.66201234 0.50066075]\n", + " [0.62652672 0.57428354]\n", + " [0.67509297 0.46349122]\n", + " [0.62805646 0.56459649]\n", + " [0.6152309 0.59291485]\n", + " [0.68078014 0.47463854]\n", + " [0.68748493 0.441169 ]\n", + " [0.62239908 0.58064425]\n", + " [0.67780698 0.46845549]\n", + " [0.61527952 0.59674834]\n", + " [0.65301299 0.51009919]\n", + " [0.68376885 0.46380142]\n", + " [0.67950967 0.47280018]\n", + " [0.65645741 0.50068735]\n", + " [0.63190383 0.55322732]\n", + " [0.64037549 0.54669781]\n", + " [0.63787445 0.53626206]\n", + " [0.68467178 0.44815997]\n", + " [0.64570275 0.52307364]\n", + " [0.63344061 0.55925768]\n", + " [0.66650866 0.50490272]\n", + " [0.66778592 0.48305992]\n", + " [0.66821283 0.4855335 ]\n", + " [0.62708697 0.55849838]\n", + " [0.63539954 0.54308505]\n", + " [0.6904015 0.43232959]\n", + " [0.62327583 0.57132177]\n", + " [0.63599942 0.5506892 ]\n", + " [0.6639626 0.48714273]\n", + " [0.68848035 0.44364042]\n", + " [0.61757474 0.58765271]\n", + " [0.67112162 0.48276929]\n", + " [0.63035903 0.55087898]\n", + " [0.67762199 0.45834684]\n", + " [0.68731172 0.44302289]\n", + " [0.62012115 0.57656213]\n", + " [0.67576847 0.46515467]\n", + " [0.68195096 0.47546646]\n", + " [0.65345847 0.50121404]\n", + " [0.6912795 0.43349233]\n", + " [0.64241185 0.54058069]\n", + " [0.64086261 0.53843287]\n", + " [0.69231373 0.42931476]\n", + " [0.62351095 0.57425031]\n", + " [0.61877032 0.58419728]\n", + " [0.66997231 0.47376432]\n", + " [0.63513368 0.53712308]\n", + " [0.68923874 0.44208853]\n", + " [0.65058673 0.52584242]\n", + " [0.68680992 0.44426858]\n", + " [0.63646722 0.53146383]\n", + " [0.61773704 0.58747212]\n", + " [0.68683432 0.44921554]\n", + " [0.62428515 0.5741634 ]\n", + " [0.6265398 0.55867386]\n", + " [0.68940031 0.43474757]\n", + " [0.62197316 0.57076654]\n", + " [0.68821242 0.43274634]\n", + " [0.62632075 0.56167933]\n", + " [0.67996616 0.45840974]\n", + " [0.62840877 0.55422297]\n", + " [0.65735698 0.50007275]\n", + " [0.653575 0.51892012]\n", + " [0.62728417 0.56933143]\n", + " [0.6722307 0.47508204]\n", + " [0.67766291 0.48462976]\n", + " [0.62045451 0.5777636 ]\n", + " [0.69462011 0.42118748]\n", + " [0.65379768 0.54029292]\n", + " [0.65015355 0.51394856]\n", + " [0.61399683 0.60063388]\n", + " [0.66967155 0.48178393]\n", + " [0.61883545 0.58214799]\n", + " [0.68330641 0.44954534]\n", + " [0.66958159 0.50147962]\n", + " [0.63123528 0.56360973]\n", + " [0.64975211 0.52940887]\n", + " [0.6791724 0.47711072]\n", + " [0.62127769 0.57407004]\n", + " [0.67138342 0.49887158]\n", + " [0.68166774 0.46593973]\n", + " [0.68914381 0.44418348]\n", + " [0.6814121 0.45406161]\n", + " [0.63320629 0.54115769]\n", + " [0.66525169 0.483365 ]\n", + " [0.70113207 0.4021057 ]\n", + " [0.66042727 0.5239104 ]\n", + " [0.6158391 0.5984706 ]\n", + " [0.67563006 0.47185796]\n", + " [0.62405364 0.56675149]\n", + " [0.6341422 0.54968736]\n", + " [0.65033621 0.50399789]\n", + " [0.61560564 0.59223984]\n", + " [0.68851143 0.44424884]\n", + " [0.63032714 0.55790845]\n", + " [0.62373144 0.56780916]\n", + " [0.6190955 0.58654498]\n", + " [0.61479149 0.59778757]\n", + " [0.64013597 0.52883008]\n", + " [0.65526041 0.51466915]\n", + " [0.69730956 0.41614571]\n", + " [0.63243373 0.55370584]\n", + " [0.67098643 0.49947521]\n", + " [0.68511739 0.44534543]\n", + " [0.65313156 0.51375309]\n", + " [0.63300568 0.56124219]\n", + " [0.63605962 0.539493 ]\n", + " [0.64836686 0.51628529]\n", + " [0.62139293 0.58008798]\n", + " [0.64932898 0.51333776]\n", + " [0.6235741 0.56673449]\n", + " [0.67305114 0.47308517]\n", + " [0.65700846 0.50320471]\n", + " [0.68682776 0.44420681]\n", + " [0.65349271 0.53822609]\n", + " [0.64658026 0.53509776]\n", + " [0.63130791 0.54998535]\n", + " [0.62871243 0.55143978]\n", + " [0.67641457 0.46208977]\n", + " [0.68083831 0.4618562 ]\n", + " [0.67051156 0.48964901]\n", + " [0.67839015 0.46427427]\n", + " [0.64545239 0.51292276]\n", + " [0.6606294 0.52549281]\n", + " [0.64222193 0.53932354]\n", + " [0.65220627 0.50861605]\n", + " [0.63349683 0.54876668]\n", + " [0.62113983 0.58530881]\n", + " [0.61760612 0.58478278]\n", + " [0.62154618 0.57528528]\n", + " [0.66276585 0.49998043]\n", + " [0.64789962 0.52213533]\n", + " [0.69171714 0.43236179]\n", + " [0.61884282 0.59008273]\n", + " [0.66202646 0.48904737]\n", + " [0.68505323 0.44422315]\n", + " [0.69703152 0.41719461]\n", + " [0.65463078 0.51385956]\n", + " [0.62727924 0.56710318]\n", + " [0.68234907 0.45343016]\n", + " [0.62152597 0.57502776]\n", + " [0.69106941 0.43467972]\n", + " [0.6577279 0.50070683]\n", + " [0.62167217 0.58763578]\n", + " [0.6319471 0.56142611]\n", + " [0.66526845 0.48615861]\n", + " [0.69239083 0.43076428]\n", + " [0.6302144 0.56671889]\n", + " [0.68269858 0.45823332]\n", + " [0.69473345 0.42048606]\n", + " [0.66914479 0.49183979]\n", + " [0.62590343 0.57079016]\n", + " [0.67882189 0.45883859]\n", + " [0.69099277 0.43617846]\n", + " [0.69857324 0.4111444 ]\n", + " [0.6257689 0.57580567]\n", + " [0.64428699 0.51370314]\n", + " [0.62812104 0.5542497 ]\n", + " [0.64162491 0.52666474]\n", + " [0.66370428 0.48858184]\n", + " [0.68245629 0.45374376]\n", + " [0.6439251 0.54817104]\n", + " [0.63229486 0.54634744]\n", + " [0.63368004 0.54360187]\n", + " [0.62920379 0.56252525]\n", + " [0.68802781 0.44443285]\n", + " [0.63367224 0.54096919]\n", + " [0.66908967 0.50101927]\n", + " [0.69333237 0.43288566]\n", + " [0.66294924 0.5164213 ]\n", + " [0.62071028 0.58516989]\n", + " [0.63089179 0.55649663]\n", + " [0.6960798 0.41867759]\n", + " [0.63428896 0.54164095]\n", + " [0.62316292 0.56879113]\n", + " [0.63333752 0.54240036]\n", + " [0.62334574 0.57923263]\n", + " [0.65510668 0.51380363]\n", + " [0.65758931 0.50857068]\n", + " [0.64630815 0.52118855]\n", + " [0.62065332 0.5763107 ]\n", + " [0.67037756 0.49168361]\n", + " [0.66297331 0.4903177 ]\n", + " [0.62110186 0.58268245]\n", + " [0.68025074 0.46575819]]\n" + ] + } + ], + "source": [ + "# generate the NN model\n", + "class NN_Model:\n", + " epsilon = 0.01 # learning rate\n", + " n_epoch = 1000 # iterative number\n", + " \n", + "nn = NN_Model()\n", + "nn.n_input_dim = X.shape[1] # input size\n", + "nn.n_output_dim = 2 # output node size\n", + "nn.n_hide_dim = 3 # hidden node size\n", + "\n", + "# initial weight array\n", + "nn.W1 = np.random.randn(nn.n_input_dim, nn.n_hide_dim) / np.sqrt(nn.n_input_dim)\n", + "nn.b1 = np.zeros((1, nn.n_hide_dim))\n", + "nn.W2 = np.random.randn(nn.n_hide_dim, nn.n_output_dim) / np.sqrt(nn.n_hide_dim)\n", + "nn.b2 = np.zeros((1, nn.n_output_dim))\n", + "\n", + "# defin sigmod & its derivate function\n", + "def sigmod(X):\n", + " return 1.0/(1+np.exp(-X))\n", + "\n", + "def sigmod_derivative(X):\n", + " f = sigmod(X)\n", + " return f*(1-f)\n", + "\n", + "# network forward calculation\n", + "def forward(n, X):\n", + " n.z1 = sigmod(X.dot(n.W1) + n.b1)\n", + " n.z2 = sigmod(n.z1.dot(n.W2) + n.b2)\n", + " return n\n", + "\n", + "# use random weight to perdict\n", + "forward(nn, X)\n", + "y = nn.z2[:, 0]>nn.z2[:,1]\n", + "y_pred = np.zeros(nn.z2.shape[0])\n", + "y_pred[np.where(nn.z2[:,0] 很多看似显而易见的想法只有在事后才变得显而易见。 +# +# 按照机器学习的通用套路,我们先确定神经网络的目标函数,然后用随机梯度下降优化算法去求目标函数最小值时的参数值。 +# +# 我们取网络所有输出层节点的误差平方和作为目标函数: +# ![bp_loss](images/bp_loss.png) +# +# 其中,$E_d$表示是样本$d$的误差。 +# +# 然后,使用随机梯度下降算法对目标函数进行优化: +# ![bp_weight_update](images/bp_weight_update.png) +# +# 随机梯度下降算法也就是需要求出误差$E_d$对于每个权重$w_{ji}$的偏导数(也就是梯度),怎么求呢? +# ![nn3](images/nn3.png) +# +# 观察上图,我们发现权重$w_{ji}$仅能通过影响节点$j$的输入值影响网络的其它部分,设$net_j$是节点$j$的加权输入,即 +# ![eqn_21_22](images/eqn_21_22.png) +# +# $E_d$是$net_j$的函数,而$net_j$是$w_{ji}$的函数。根据链式求导法则,可以得到: +# +# ![eqn_23_25](images/eqn_23_25.png) +# +# +# 上式中,$x_{ji}$是节点传递给节点$j$的输入值,也就是节点$i$的输出值。 +# +# 对于的$\frac{\partial E_d}{\partial net_j}$推导,需要区分输出层和隐藏层两种情况。 +# +# + +# ### 输出层权值训练 +# +# ![nn3](images/nn3.png) +# +# 对于输出层来说,$net_j$仅能通过节点$j$的输出值$y_j$来影响网络其它部分,也就是说$E_d$是$y_j$的函数,而$y_j$是$net_j$的函数,其中$y_j = sigmod(net_j)$。所以我们可以再次使用链式求导法则: +# ![eqn_26](images/eqn_26.png) +# +# 考虑上式第一项: +# ![eqn_27_29](images/eqn_27_29.png) +# +# +# 考虑上式第二项: +# ![eqn_30_31](images/eqn_30_31.png) +# +# 将第一项和第二项带入,得到: +# ![eqn_ed_net_j.png](images/eqn_ed_net_j.png) +# +# 如果令$\delta_j = - \frac{\partial E_d}{\partial net_j}$,也就是一个节点的误差项$\delta$是网络误差对这个节点输入的偏导数的相反数。带入上式,得到: +# ![eqn_delta_j.png](images/eqn_delta_j.png) +# +# 将上述推导带入随机梯度下降公式,得到: +# ![eqn_32_34.png](images/eqn_32_34.png) +# + +# ### 隐藏层权值训练 +# +# 现在我们要推导出隐藏层的$\frac{\partial E_d}{\partial net_j}$。 +# +# ![nn3](images/nn3.png) +# +# 首先,我们需要定义节点$j$的所有直接下游节点的集合$Downstream(j)$。例如,对于节点4来说,它的直接下游节点是节点8、节点9。可以看到$net_j$只能通过影响$Downstream(j)$再影响$E_d$。设$net_k$是节点$j$的下游节点的输入,则$E_d$是$net_k$的函数,而$net_k$是$net_j$的函数。因为$net_k$有多个,我们应用全导数公式,可以做出如下推导: +# ![eqn_35_40](images/eqn_35_40.png) +# +# 因为$\delta_j = - \frac{\partial E_d}{\partial net_j}$,带入上式得到: +# ![eqn_delta_hidden.png](images/eqn_delta_hidden.png) +# +# +# 至此,我们已经推导出了反向传播算法。需要注意的是,我们刚刚推导出的训练规则是根据激活函数是sigmoid函数、平方和误差、全连接网络、随机梯度下降优化算法。如果激活函数不同、误差计算方式不同、网络连接结构不同、优化算法不同,则具体的训练规则也会不一样。但是无论怎样,训练规则的推导方式都是一样的,应用链式求导法则进行推导即可。 +# + +# ### 具体解释 +# +# 我们假设每个训练样本为$(\vec{x}, \vec{t})$,其中向量$\vec{x}$是训练样本的特征,而$\vec{t}$是样本的目标值。 +# +# ![nn3](images/nn3.png) +# +# 首先,我们根据上一节介绍的算法,用样本的特征$\vec{x}$,计算出神经网络中每个隐藏层节点的输出$a_i$,以及输出层每个节点的输出$y_i$。 +# +# 然后,我们按照下面的方法计算出每个节点的误差项$\delta_i$: +# +# * **对于输出层节点$i$** +# ![formular_3.png](images/formular_3.png) +# 其中,$\delta_i$是节点$i$的误差项,$y_i$是节点$i$的输出值,$t_i$是样本对应于节点$i$的目标值。举个例子,根据上图,对于输出层节点8来说,它的输出值是$y_1$,而样本的目标值是$t_1$,带入上面的公式得到节点8的误差项应该是: +# ![forumlar_delta8.png](images/forumlar_delta8.png) +# +# * **对于隐藏层节点** +# ![formular_4.png](images/formular_4.png) +# +# 其中,$a_i$是节点$i$的输出值,$w_{ki}$是节点$i$到它的下一层节点$k$的连接的权重,$\delta_k$是节点$i$的下一层节点$k$的误差项。例如,对于隐藏层节点4来说,计算方法如下: +# ![forumlar_delta4.png](images/forumlar_delta4.png) +# +# +# 最后,更新每个连接上的权值: +# ![formular_5.png](images/formular_5.png) +# +# 其中,$w_{ji}$是节点$i$到节点$j$的权重,$\eta$是一个成为学习速率的常数,$\delta_j$是节点$j$的误差项,$x_{ji}$是节点$i$传递给节点$j$的输入。例如,权重$w_{84}$的更新方法如下: +# ![eqn_w84_update.png](images/eqn_w84_update.png) +# +# 类似的,权重$w_{41}$的更新方法如下: +# ![eqn_w41_update.png](images/eqn_w41_update.png) +# +# +# 偏置项的输入值永远为1。例如,节点4的偏置项$w_{4b}$应该按照下面的方法计算: +# ![eqn_w4b_update.png](images/eqn_w4b_update.png) +# +# 我们已经介绍了神经网络每个节点误差项的计算和权重更新方法。显然,计算一个节点的误差项,需要先计算每个与其相连的下一层节点的误差项。这就要求误差项的计算顺序必须是从输出层开始,然后反向依次计算每个隐藏层的误差项,直到与输入层相连的那个隐藏层。这就是反向传播算法的名字的含义。当所有节点的误差项计算完毕后,我们就可以根据式5来更新所有的权重。 +# +# + +# ## Program + +# + +% matplotlib inline + +import numpy as np +from sklearn import datasets, linear_model +import matplotlib.pyplot as plt + +# generate sample data +np.random.seed(0) +X, y = datasets.make_moons(200, noise=0.20) + +# plot data +plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral) +plt.show() + +# + +# generate the NN model +class NN_Model: + epsilon = 0.01 # learning rate + n_epoch = 1000 # iterative number + +nn = NN_Model() +nn.n_input_dim = X.shape[1] # input size +nn.n_output_dim = 2 # output node size +nn.n_hide_dim = 3 # hidden node size + +# initial weight array +nn.W1 = np.random.randn(nn.n_input_dim, nn.n_hide_dim) / np.sqrt(nn.n_input_dim) +nn.b1 = np.zeros((1, nn.n_hide_dim)) +nn.W2 = np.random.randn(nn.n_hide_dim, nn.n_output_dim) / np.sqrt(nn.n_hide_dim) +nn.b2 = np.zeros((1, nn.n_output_dim)) + +# defin sigmod & its derivate function +def sigmod(X): + return 1.0/(1+np.exp(-X)) + +def sigmod_derivative(X): + f = sigmod(X) + return f*(1-f) + +# network forward calculation +def forward(n, X): + n.z1 = sigmod(X.dot(n.W1) + n.b1) + n.z2 = sigmod(n.z1.dot(n.W2) + n.b2) + return n + +# use random weight to perdict +forward(nn, X) +y = nn.z2[:, 0]>nn.z2[:,1] +y_pred = np.zeros(nn.z2.shape[0]) +y_pred[np.where(nn.z2[:,0]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.scatter(X_train, y_train)\n", + "plt.scatter(X_test, y_test)\n", + "plt.xlabel('Data')\n", + "plt.ylabel('Target');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Linear regression\n", + "=================\n", + "Create linear regression object, which we use later to apply linear regression on data" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn import linear_model\n", + "import numpy as np\n", + "regr = linear_model.LinearRegression()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Fit the model using the training set" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "regr.fit(X_train, y_train);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We found the coefficients and the bias (the intercept)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[988.07836941]\n", + "150.80798145969447\n" + ] + } + ], + "source": [ + "print(regr.coef_)\n", + "print(regr.intercept_)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we calculate the mean square error on the test set" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training error: 3960.4058766864073\n", + "Test error: 3811.1989929980004\n" + ] + } + ], + "source": [ + "# The mean square error\n", + "print(\"Training error: \", np.mean((regr.predict(X_train) - y_train) ** 2))\n", + "print(\"Test error: \", np.mean((regr.predict(X_test) - y_test) ** 2))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting data and linear model\n", + "==============================\n", + "Now we want to plot the train data and teachers (marked as dots). \n", + "\n", + "With line we represents the data and predictions (linear model that we found):\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0,0.5,'Target')" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Visualises dots, where each dot represent a data exaple and corresponding teacher\n", + "plt.scatter(X_train, y_train, color='black')\n", + "# Plots the linear model\n", + "plt.plot(X_train, regr.predict(X_train), color='blue', linewidth=3);\n", + "plt.xlabel('Data')\n", + "plt.ylabel('Target')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We do similar with test data, and show that linear model is valid for a test set:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Visualises dots, where each dot represent a data example and corresponding teacher\n", + "plt.scatter(X_test, y_test, color='black')\n", + "# Plots the linear model\n", + "plt.plot(X_test, regr.predict(X_test), color='blue', linewidth=3);\n", + "plt.xlabel('Data')\n", + "plt.ylabel('Target');" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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": 1 +} diff --git a/references/logistic_regression_demo/3b - Linear regression 2D.ipynb b/references/logistic_regression_demo/3b - Linear regression 2D.ipynb new file mode 100644 index 0000000..0cec971 --- /dev/null +++ b/references/logistic_regression_demo/3b - Linear regression 2D.ipynb @@ -0,0 +1,433 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Loading data\n", + "=====================================================\n", + "We will work with \"Parkinsons Telemonitoring\" dataset of the University of Oxford. The original study used a range of linear regression methods to predict the clinician's Parkinson's disease symptom score on the UPDRS scale\n", + "\n", + "We load the dataset \"Parkinsons Telemonitoring\" using the numpy loadtxt function.\n", + "\n", + "The columns are separated by ',' delimiter, which we pass to the loadtxt function." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# matplotlib inline\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "data = np.loadtxt(\"data/artifical_lin.txt\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to work now with 2-dim data, in order to plot it in 3d space. Therefore we select 2 columns (attributes) from total of 12 columns. \n", + "\n", + "In this example we will select attributes \"Clinician's motor UPDRS score\" and \"Clinician's total UPDRS score\", which are 4th and 5th columns. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.00747581 0.43208362]\n", + " [0.49910584 0.20943748]\n", + " [0.11935362 0.59634898]\n", + " [0.47691878 0.91091956]\n", + " [0.73039367 0.88576849]\n", + " [0.96646013 0.75029941]\n", + " [0.0254202 0.74285026]\n", + " [0.17781366 0.59303845]\n", + " [0.44925923 0.89314114]\n", + " [0.08370431 0.26143735]]\n", + "[1.45054918 1.1025327 1.33827336 2.6022192 2.2101526 2.6110778\n", + " 1.71069895 2.23335293 3.10281928 0.86406978]\n" + ] + } + ], + "source": [ + "X = data[:, :-1]\n", + "y = data[:, -1]\n", + "print(X[:10, :])\n", + "print(y[:10])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We shuffle examples:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(500, 2)\n", + "(500,)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/bushuhui/.virtualenv/fintech/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n", + "/home/bushuhui/.virtualenv/fintech/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n", + "/home/bushuhui/.virtualenv/fintech/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n" + ] + } + ], + "source": [ + "from sklearn.utils import shuffle\n", + "X, y = shuffle(X, y, random_state=1)\n", + "print(X.shape)\n", + "print(y.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we split the data into train and test set:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train_set_size = 250 \n", + "(250, 2)\n", + "(250, 2)\n" + ] + } + ], + "source": [ + "train_set_size = int(X.shape[0] / 2)\n", + "print(\"train_set_size = %d \" % train_set_size)\n", + "\n", + "X_train = X[:train_set_size, :] # selects first train_set_size rows (examples) for train set\n", + "X_test = X[train_set_size:, :] # selects from row train_set_size until the last one for test set\n", + "print(X_train.shape)\n", + "print(X_test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we split the targets into train and test set in similar way as we splitted data:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(250,)\n", + "(250,)\n" + ] + } + ], + "source": [ + "y_train = y[:train_set_size] # selects first 15 rows (targets) for train set\n", + "y_test = y[train_set_size:] # selects from row 250 until the last one for test set\n", + "print(y_train.shape)\n", + "print(y_test.shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's look at the data in the 3d plot. There is some linear relationship in the data:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from mpl_toolkits.mplot3d import Axes3D\n", + "fig = plt.figure()\n", + "ax = Axes3D(fig)\n", + "ax.scatter3D(X_train[:500, 0], X_train[:500, 1], y_train[:500])\n", + "ax.view_init(6,-20)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Linear regression\n", + "=================\n", + "Create linear regression object, which we use later to apply linear regression on data" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/bushuhui/.virtualenv/fintech/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88\n", + " return f(*args, **kwds)\n" + ] + } + ], + "source": [ + "from sklearn import linear_model\n", + "regr = linear_model.LinearRegression()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Fit the model using the training set" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "regr.fit(X_train, y_train);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We found the coefficients and the bias (the intercept)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.08241879 2.96344602]\n", + "0.09703581706766884\n" + ] + } + ], + "source": [ + "print(regr.coef_)\n", + "print(regr.intercept_)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we calculate the mean square error on the test set" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training error: 0.1527714636459691\n", + "Test error: 0.16965042383819598\n" + ] + } + ], + "source": [ + "# The mean square error\n", + "print(\"Training error: \", np.mean((regr.predict(X_train) - y_train) ** 2))\n", + "print(\"Test error: \", np.mean((regr.predict(X_test) - y_test) ** 2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting data and linear model\n", + "==============================\n", + "Now we want to plot the train data and teachers in 3d plot (marked as dots). \n", + "\n", + "With plane we represents the data and predictions (linear model that we found).\n", + "\n", + "We first scatter the 3d points using mplot3d:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from mpl_toolkits.mplot3d import Axes3D\n", + "fig = plt.figure()\n", + "ax = Axes3D(fig)\n", + "\n", + "\n", + "ax.scatter3D(X_train[:500, 0], X_train[:500, 1], y_train[:500]) # plots 3d points, 500 is number of points which are visualized\n", + "\n", + "# here we create plane which we want to plot, using the train data and predictions (you don't need to understand it)\n", + "range_x = np.linspace(X_train[:, 0].min(), X_train[:, 0].max(), num=10)\n", + "range_y = np.linspace(X_train[:, 1].min(), X_train[:, 1].max(), num=10)\n", + "xx, yy = np.meshgrid(range_x, range_y)\n", + "zz = np.vstack([xx.ravel(), yy.ravel()]).T\n", + "pred = regr.predict(zz)\n", + "pred = pred.reshape(10, 10)\n", + "\n", + "ax.plot_surface(xx, yy, pred, alpha=.1) # plots the plane\n", + "ax.view_init(6,-20)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we plot the data and the plane in similar way for test data:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from mpl_toolkits.mplot3d import Axes3D\n", + "fig = plt.figure()\n", + "ax = Axes3D(fig)\n", + "ax.scatter3D(X_test[:500, 0], X_test[:500, 1], y_test[:500]) # plots 3d points 500 is number of points which are visualized\n", + "\n", + "# here we create plane which we want to plot, using the train data and predictions (you don't need to understand it)\n", + "range_x = np.linspace(X_test[:, 0].min(), X_test[:, 0].max(), num=10)\n", + "range_y = np.linspace(X_test[:, 1].min(), X_test[:, 1].max(), num=10)\n", + "xx, yy = np.meshgrid(range_x, range_y)\n", + "zz = np.vstack([xx.ravel(), yy.ravel()]).T\n", + "pred = regr.predict(zz)\n", + "pred = pred.reshape(10, 10)\n", + "\n", + "ax.plot_surface(xx, yy, pred, alpha=.1) # plots the plane\n", + "ax.view_init(6,-20)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Playing with this Notebook\n", + "==========================\n", + "\n", + "Do linear regression on dataset named 'artifical_lin\".\n", + "\n", + "Try to see what happens with the error, if you change the sizes of train set and test set. \n", + "\n", + "Add noise to the data, and fit the model again. How does the error changes when you add more noise?\n", + "\n", + "You add noise using normal distribution, with mean 0 and width 0.4 (you can vary this parameters).\n", + "noise = np.random.normal(0,0.4, (train_set_size,2))\n", + "\n", + "Add noise to data:\n", + "X = X + noise\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/references/logistic_regression_demo/4 - Logistic Regression.ipynb b/references/logistic_regression_demo/4 - Logistic Regression.ipynb new file mode 100644 index 0000000..3f8d950 --- /dev/null +++ b/references/logistic_regression_demo/4 - Logistic Regression.ipynb @@ -0,0 +1,658 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Logistic Regression\n", + "===================" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we generate some data to train to train with." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.datasets import make_blobs\n", + "X, y = make_blobs(centers=2) # generate dataset consisting of two Gaussian clusters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Take a look at how large the data is and what the labels look like:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X.shape: (100, 2)\n", + "y: [1 0 0 1 1 0 1 0 0 0 1 0 1 1 1 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0\n", + " 0 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 1 1 1 0 1 0 1 1 0 1 1 0 0 0 1 0 1 1 0 1 0\n", + " 1 0 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 1 0 1 0 0]\n" + ] + } + ], + "source": [ + "print \"X.shape:\", X.shape \n", + "print \"y: \", y " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the data is two-dimensional, we can easily visualize it:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nDx9vb7oOGMDTEyZc0zdlAdasWcO9vXrRDThsNmNq0IBVGzZgsVgu23b58uX8/e67yc7JoaqvL4uW\nLaNp06ZlvGciUlYqzDz5v+xUIX9Vhw8fJrJJE/6RkUEQEOvmRtthw3h16tRrbuPgwYOsW7cOb29v\nevbs+adX2SwsLCQ9PZ1KlSppjr1IBaeQtwNTp07l0HPP8c7FuzYdASI9PTl5yTddReTWpA9e7YCD\ngwM5l5xR5wAO1zhUIyLy/yk9KpiBAwey3M2Nf5rNzAUGuLkxauxYW5clIjcpDddUQImJibwWG8uZ\nU6foOmAADw0erPFyEdGYvIiIPdOYvIiIFKOQFxGxYwp5ERE7ppAXEbFjCnkRETumkBcRsWMKeRER\nO6aQFxGxYwp5ERE7ppAXEbFjCnkRETumkBcRsWMKeRERO6aQFxGxYwp5ERE7ppAXEbFjCnkRETum\nkBcRsWMKeRERO6aQFxGxYwp5ERE7ppAXEbFjCnkRETumkBcRsWMKeRERO1ZuIR8fH09ISAj169dn\n5syZ5dWNiIj8CZNhGEZ5NBwWFsb06dPx9/enS5curF+/nipVqlg7NZkop25FROxWSbKzXM7kz58/\nD8Bdd92Fv78/nTt3ZtOmTeXRlYiI/AnH8mh0y5YtBAcHFy03bNiQjRs30r1796J1sbGxRT9HRUUR\nFRVVHqWIiNy04uLiiIuLK1Ub5RLy1+LSkBcRkcv9/xPgyZMnX3cb5TJcEx4ezr59+4qW9+zZQ2Rk\nZHl0JSIif6JcQt7LywuwzrBJTExk1apVRERElEdXIiLyJ8ptuGbatGk89thj5OXlMWrUqKKZNSIi\ncuOU2xTKP+1UUyhFRK5bhZlCKSIiFYNCXkTEjinkRUTsmEJeRMSOKeRFROyYQl5ExI4p5EVE7JhC\nXkTEjinkRUTsmEJeRMSOKeRFROyYQl5ExI4p5EVE7JhCXkTEjinkRUTsmEJeRMSOKeRFROyYQl5E\nxI4p5EVE7JhCXkTEjinkRUTsmEJeRMSOKeRFROyYQl5ExI4p5EVE7JhCXkTEjinkRUTsmEJeRMSO\nKeRFROyYQl5ExI4p5EVE7JhCXkTEjinkRUTsmEJeRMSOKeRFROyYQl5ExI6VecjHxsbi5+dHWFgY\nYWFhLF++vKy7EBGRa+RY1g2aTCbGjBnDmDFjyrppERG5TuUyXGMYRnk0KyIi16nMz+QBZs6cycKF\n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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.prism()\n", + "plt.scatter(X[:, 0], X[:, 1], c=y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import logistic regression from scikit-learn and generate a classification object." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.linear_model import LogisticRegression\n", + "logreg = LogisticRegression()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Split the dataset into a training set and a test set." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "X_train = X[:50]\n", + "y_train = y[:50]\n", + "X_test = X[50:]\n", + "y_test = y[50:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To get an idea of how hard the task is, let us visualize the data again, this time only labeling the training points.\n", + "\n", + "The test points are plottet as white triangles.\n", + "Can we see which class the test points belong to?" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.prism()\n", + "plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train)\n", + "plt.scatter(X_test[:, 0], X_test[:, 1], c='white', marker='^')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That doesn't look too hard.\n", + "\n", + "Now let's fit the logistic regression model to the training data, to see if we can do it automatically:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", + " intercept_scaling=1, penalty='l2', random_state=None, tol=0.0001)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logreg.fit(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we have a look at how logistic regression did on the training set.\n", + "\n", + "We do this by now setting colors using the predicted class." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAADtCAYAAAAcNaZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH89JREFUeJzt3Wd8VNXaxuH/JJM2SYQECISiEJCOCBh6NyDFQ1Egdg4I\nHkSxHAUEfVXUY0GKimBBRLCCiqBYwAJSE0JvgnQBaQktvc16P2xEFCGUzJ6U+/pEMjN7P5sfudlZ\ne631OIwxBhERsYWPtwsQESlOFLoiIjZS6IqI2EihKyJiI4WuiIiNnOd6weFw2FmHiEiRcb5JYecM\n3bw+KCIiZ8vrhlXDCyIiNlLoiojYSKErImIjha6IiI0UuiIiNlLoiojYSKErImIjha6IiI0UuiIi\nNipSoZubm0tycrK3yxAROaciE7pT3n6bksHBlA0PJ7p2bfbu3evtkkREzuI4V7seh8NRaPZeSEhI\noHvbtixIS6M68JyvL/Pr1WPxmjXeLk1Eipm8srNI3OnGx8fT3e2mBuAAhuXmsnz9+kLzn4aIFB9F\nInTLly/PSqeTrFNfxwGRYWHanlJECpwiEbo9evTgqlatuC4khNjQUHq5XEz+4ANvlyUicpYiMaYL\n4Ha7+fHHHzly5AhNmjShatWq3i5JRIqhvLKzyISuiEhBUCwepImIFBYKXRERGyl0RURspNC9CAsX\nLqRNgwY0qFqVJx97jJycHG+XJCKFjEL3Aq1bt47eXbty39q1vLVzJ4smTGDkI49w/PhxenfpQpjL\nxdXlyzN37lxvlyoiBZhmL5whNTWVadOmkZSYSPvrr6dFixanXxv19NOkP/ssL7rdAGwDrg8PJ6pa\nNRITEqhpDNHAC76+vPXhh8TGxnrnIkTEqzR74QKlp6fTJjqa+Y8+SvqoUfTp2JEP3n+fjIwMNmzY\nQGZWFkm+vqffnwTg40PCihUMNIbOwGtA49xc7r7rLtauXeulKxGRgkx3uqdMnTqVmUOG8E1qKg5g\nNdAlNBSXy0VAWhqHs7JwAHdkZ1PF7Wacy0W1+vXpvHw5j546xmxgCNAUiLj7bia+846XrkZEvEV3\nuhfo+PHjVM3O5o/dGqoCx1JSeOTwYX5JTmZHZiZlfX3Z1707W/v1483PPqNK5cr4n3GMAMANXAfk\n6iGbiPwDp7cLKChiYmJ43teXHkBtYERAAIHZ2dx6agy3JNA1M5Ow6GhGjBgBQEhICL1mz6ZUejoh\nwP1AZ2BsUBCz77nHOxciIgWa7nRPqVevHtM//5wHKlXi2pAQcjp1olq1asw+9XoK8H1gIDVq1GDh\nwoW0vvZahvTtS8yNN/Jxq1aMiooiLCqKQ61b88ncuTRv3vyCzpuZmckTw4YREx1Nv9hY9u3b57Fr\nFBHv05jueWzYsIEu7dpRLieH/VlZdO/Th0EPP0xM8+ZMSkujCjDM5aJh//6MmTDhks5xa/fupH7/\nPfelp7PE15ePypRhzdatXHHFFfl7MSJiC214c5mSk5PZuHEj4eHh1KhRg2efeYbkUaMYfWrYYQfQ\nJiyMfUePApCSksLPP/+MMYa2bdsSEhJyzmOnpKQQERbG0ZwcAk99r2NoKPe9/z7du3f38JWJiCfk\nlZ0a081DaGgozZo1O/11YFAQu51OyLK2TE8EggICADh06BBtoqMplZiIOzeXwSEhxG/cSGRk5D8e\n2+FwYIAzH7llAz4+GvWRgiU7G/z8vF1F0aCf7ot01113MT80lOsdDmoANzocdLrpJgCeHj6clnv3\n0jo9nfpZWdQ/epSOzZqd83+94OBgbuvdm+4uFzOBB/z8OBQeTvv27e27IJHz2LkT7r8f6tQBTcjJ\nHwrdPCxZsoR7//1vHvjPf9i0aRNly5blwaFD2e3ryxvAu8Yw6733mDdvHpvWruUbIA2oC6wHftuz\nhy1btpzz+G9Nn84Njz/OjJgYHP37s2jlSoKDg+25OJFzWLUKbrkFGjeGK66ARYvAqd+L84XGdM9j\n3rx53NWzJ4+lp5PqcPCqy8VPy5cz5K67eGztWjqdet+bQFyvXuzYt4+KcXF8fOr7a4HWwPdxcTRp\n0iTP88XFxfHDDz8QFhZG3759zzseLJLfjIH582H0aPj1V3j4YRg4EEJDvV1Z4aIx3csw9qmnmJCe\nTh8AY/BNS2Pi2LEEBAZy4oz3HXc4CAgKokPnzhyKizv9/XDA7XBQt27dPM81c8YMHuzfn74ZGawO\nCGDyq6+ydM0a3fWKx2Vnw4wZ8PLL4HbDsGEQGwv+/nl/Vi5egRxeWLp0KbFdu3JTTAyzZ8/O+wMe\nkpmRQYkzvi5pDFnp6TwyahQPBAUxHngceN7fn7rR0XTr1o0ZQUF8CKwAbnU4qN+wIVOmTOG33347\n77mGDxnCrLQ0XnS7+Tw9nfK7djFt2jTPXZwUeykp8MorULUqvPsuvPgirF8Pd96pwPUocw7necmj\n4uLiTOmgIPMWmA/BVHK5zIxPPvFKLW9NmmRqulzmRzBfgokMCjLz5s0zxhizePFic9tNN5nwwEDT\nITjYtAwNNfWvvtqMHDHChDkcprTDYYLB3OJ0mgEBASYiNNRs3LjxnOcqERhoDlm/4RkD5gEwzaKj\n7bpUKUYOHjRm5EhjSpUypndvY1as8HZFRUte2VngQnfgHXeYcWeEz5dg2jVs6JVa3G63eWPiRNOs\ndm3T6pprzKxZs/7yep+uXc3zPj7GgHGD6e/vb0J8fc1aMIPAjDzjOl5xOEyvTp3Oea6m9eqZ3mD2\ng1kApgyYkIAAT1+iFCNbtxpzzz3GhIUZM3iwMdu3e7uioimv7CxwwwvGmNObzgA4Tn3PGxwOB4MG\nD2bZpk0sWreOnj17/uX1PTt20PLUIgkH0CoriyscDuoDR7H2cPhDLWNIOnz4nOfq068f63x8uBb4\nDzAKCDhjK0mRSxUXBzffDC1bQrlysHUrTJxoDSuI/Qpc6N59//0873LxDvAJcJ/LxX+GDvV2WWdJ\nTU3lwOHDjAGygBPA26cesK0BOgIvYq1Y2wc843LRsUePcx7v9ttv56DDwW3AUGA84Ha7SUpK8vCV\nSFHkdsPcudC6Ndx6K7RrB7t2wahRUKaMt6sr3gpc6DZt2pTPv/uO+Z068Um7doyfPp1bbr3V22Wd\n5ZWxY7kuJQUfIAyIAJLCwpj6wQfEuFxMCA1lt9NJAz8/qjsc/JKby97du8nMzPzH4+Xk5OB0OvEF\nlgJPAw38/FixYoVdlyRFQGYmTJ0K9erBk0/CvffCtm3WAgdNhCkgLnVcorgbeMcdZtKp8doTYJaA\nqV+lijHGmMTERJOQkGDmzJljyrtcZjGYnWA6BwWZhwYN+sfjHTt2zAT7+ZnEU8fMBlM7JMQsWrTI\nzsuSQur4cWNGjzamfHljOnQw5vvvjXG7vV1V8ZRXdha4O93CIrpVK6a5XJwAXMC7/v5En9rOsVSp\nUlx33XUs/fln7k1LoyVQBRiXns5XX3zxj8crWbIk9w0eTPvgYP4HdHG5uKpRowveIlKKp99/h+HD\nISoK1q61hhTmz4eYGHA48v682E+LIy7R3QMGsD4hgfLTpuHncBDdqBGfTZz4l/eUCA9np5+fNfsc\n2AWUOM+WjS+OH0+j5s1ZtWIFPatWZcCAAfjqYZr8g82bYcwYmD3bmle7ahVUruztquRCaBnwZUpO\nTiYrK4vw8HAcf7u1SExMpMk119Di6FEqZGczJSCA9z77jC5dunipWinMjIGlS61luvHxMGSINWZb\nqpS3K5MzaT9dL0tKSmLatGmkJCfT9cYbadSokbdLkkLG7YYvv7TC9vBhePRR6NsXgoK8XZn8E4Wu\nSCGVkQHvv28NI5QoYe2J0LMnaMSpYNOGNwVYdnY2ftoZWv7m2DF480147TVo2BDeftuab6sHY0WD\nZi94werVq6lRsSKBAQFUjYwkPj7e2yVJAbB3L/z3v9ZKsV9+sWYhfP01tGmjwC1KFLo2S0tL418x\nMYzav59sYxhz8CA9briBEydO5P1hKZL+2Nmrfn3w8YF162D6dGuBgxQ9Cl2bbdu2jbDcXG7B+svv\nCVQCNm/e7N3CxFbGwIIF0Lkz3HAD1K5ttcYZMwYqVfJ2deJJGtO1WUREBL9nZXEYa+nwUWB3VhZl\ny5b1cmVih9xcmDXLmomQnAxDh1pzbU/1NpViQKFrs8jISP47dChNxo2jvTH87HAwcNAgoqKivF2a\neFBaGrz3Howda+309fjj0K2bNZwgxYumjHnJ0qVL2bRpEzVq1KBNmzbeLkc8JCnJ2kZx4kRo1sy6\ns23RwttViSdpnq6IF+zaBePHwwcfWHNrH30UatXydlVih7yyU7/ciOSj1aut/Wujo62tFDdtgilT\nFLjyJ4WuyGX6o3V5hw7WOO1111kzEV54ASIjvV2dFDR6kCZyibKzYeZMq3V5To61TPeWW9RJV85P\noStykVJSrCGDceOgShV4/nlrvq1WjcmFUOiKXKBDh2DCBHjrLWjbFj79FBo39nZVUthoTFckD9u2\nwaBBULMmJCbC8uUKXLl0Cl2Rc4iPh169oHlziIiwWpe/+SZUq+btyqQw0/CCyBncbvj2W2uZ7p49\n1q5f770HISHerkyKCoWuCJCVBR99ZG0443RaK8f69AFtdyz5TaErxdrJk9Ym4a++ao3Zjh+vTrri\nWQpdKZYOHLCCdvJk6NgR5syxujSIeJoepEmxsmULDBgAdepYO3+tXAkff6zAFfvoTleKhaVLrZVj\ny5fDfffBr79C6dLerkqKI4WuFFluN3z1lTUT4eBBeOQR62GZy+XtyqQ4U+hKkZOZaW2p+PLL1lSv\n4cPhppvUulwKBoWuFBnHj//Zurx+fXjjDWu5rmYiSEGiB2lS6O3daw0dREXB5s3w3XfWAod27RS4\nUvAodKXQ2rAB+va17mqNgbVrrdbl11zj7cpEzk2hK4WKMbBwIXTpYs2vrVEDduywtlm88kpvVyeS\nN43pSqGQmwtffGHNRDhxwuo5NmsWBAZ6uzKRi6PQlQItPf3P1uURETBiBHTvrtblUngpdKVASkqC\nSZPg9dehaVOYNk2ty6Vo0P2CFCi7d8MDD8DVV1t/XrjQ2hdBgStFhUJXCoQ1a+C226BRI2vF2MaN\nal0uRZNCV7zGGPjhB2sWwr/+BQ0awK5d8OKLUL68t6sT8QyN6YrtcnKsHmOjR1ubhw8dat3lqnW5\nFAcKXbFNaqo1ZDB+vDWn9rnnrNblmokgxYlCVzzu8GFrFsIbb0Dr1tb+tU2bersqEe/QPYZ4zPbt\nMHiwtWrs0CFrT9vPP1fgSvGm0JV8l5AAvXtDs2YQHm51a3jrLahe3duViXifhhckXxhj7e41ejTs\n3AkPPwxTp6p1ucjfKXTlsmRlwSefWBuG+/jAsGFqXS5yPgpduSTJyVYn3fHjrTHbsWOhQwftXyuS\nF4WuXJQDB6zODJMnQ0wMzJ5trSITkQujB2lyQbZuhYEDrdblKSmwYoU1rKDAFbk4utOV81q2zHo4\ntmyZWpeL5AeFrpzF7Ya5c62w/f13tS4XyU8KXTktMxM+/NCaiRAcbM1EuOkmcOpfiUi+0Y+TcOKE\ntXjh1Vehbl2YOFGddEU8RaFbjO3bZwXtu+9aG898843VWVdEPEezF4qhTZugXz+rVXlODqxeDR98\noMAVsYPudIsJY2DxYuvh2KpVMGSItSFNeLi3KxMpXhS6RVxurtVjbPRoOHrUal3+2WdqXS7iLQrd\nIio9HaZPt5bnhofD8OHQrRv4+nq7MpHiTaFbxBw9am0WPmECREdbnRpattRMBJGCQg/Siog9e+Ch\nh6BaNdixA376Cb76Clq1UuCKFCQK3UJu3Tq44w5o2NBq7LhhgzUFrHZtb1cmIv9EoVsIGQM//gg3\n3ABdulhTv3butB6WVajg7epE5Hw0pluI5ORYMw9eftl6UPboo/DllxAQ4O3KRORCOYwx5h9fcDg4\nx0tis9RUq/XN2LFQsaK1J0LXrmpdLlIQ5ZWdutMtwI4csfZBmDTJmoHw0UdWs0cRKbx0r1QA7dxp\n7V1bo4a1teLixTBrlgJXpChQ6BYgq1bBLbdA48ZQogRs3gxvv22Fr4gUDRpe8DJjYP58a+bBtm1W\n6/LJkyE01NuViYgnKHS9JDsbZsywZiIYYz0ci41V63KRok6ha7OUFHjnHRg3Dq6+Gl56yZpvq1Vj\nIsWDQtcmBw9a+yG8/bbVlWHWLLjuOm9XJSJ204M0D9u6Fe65x1qWe/w4xMXBzJkKXJHiSne6HhIX\nZz0cW7IEBg+2wrdMGW9XJSLeptDNR243fP219XBs716rdfn771uddUVEQKGbL/5oXT5mjNWRYdgw\n6NVLrctF5GyKhcvw99blEyZA+/aaiSAi56bQvQT791tBO2UKdOoEc+dCgwberkpECgPNXrgIf7Qu\nr1cPsrKs1uUffqjAFZELpzvdPBhjzUAYPRoSEtS6XEQuj0L3HM5sXZ6YCEOHWvNrg4K8XZmIFGYK\n3b/JyLBal48ZAyVLWq3Le/RQ63IRyR8K3VPObF3eqJG101fr1pqJICL5q9g/SPvtN2s7xWrVrK0V\nf/jBWuDQpo0CV0TyX7EN3fXr4c47rZkHTqf19XvvWfNtRUQ8pViFrjHw00/W3NpOnaBOHdixw1q2\nW7Git6sTkeKgWIzp5uTA559bMxHS0qzW5XPmqHW5iNivSLdgT0v7s3V5ZKQ1E+HGG9W6XEQ8p1i2\nYE9MtFqXT5wIzZtbO321aOHtqkREitiY7q5d1oqx6tVh3z5YtAhmz1bgikjBUSRC94/W5dHREBJi\n7ZEweTLUrOntykRE/qrQhq4xMG8exMRYK8aio6073RdesMZvRUQKokI3ppudbe2B8PLL1v4IQ4da\nd7n+/t6uTEQkb4UmdFNSrP1rx42DqCjrjrZTJ60aE5HCpcCH7qFD8Prr8Oab0LYtfPopNG7s7apE\nRC5NgR3T3bkTBg2yHoYlJcHy5QpcESn8Cuyd7i+/QESE1bo8IsLb1YiI5I8ivSJNRMRueWVngR1e\nEBEpihS6IiI2UuiKiNhIoSsiYiOFroiIjRS6IiI2UuiKiNhIoSsiYiOFroiIjRS6IiI2UuiKiNhI\noStiI+1nIgpdERskJyfTrXdXAoL8CYu4gslTJnu7JPESha6IDQbc14/NQT/SNTGH6J+SGfb0Qyxc\nuBCAAwcO0OaGFriuCKRyzUqnv5+fjhw5wpQpU5gyZQqHDx/O9+PLhdPWjiI2KF2+JE3iTuC60vp6\n85MObnY8wTOjnqFh8/pkttlMtWE5JC2HDX2DWZewkcqVK+fLuffs2UPjlo0IbZ4ODjixOID4xSuJ\niorKl+PLX2lrR5ECoFSZcE5stP5sDKRtDKBM6TIkJyezae1maj2fg38YRHaBiHY+LFu2LN/O/cSz\nIynT/xgNZqTR4JM0Iu89wchRw/Pt+HJxFLoiNpg49m3W93WxYVAgKzsHE7ynMv379ycoKAiHw4e0\n3db73DmQss0QHh6eb+c+cHg/V9R3n/46tL6bg0d+z7fjy8VR6IrYICYmhvhFK7mvzmieuW0SCUtW\nExwcjNPpZPTo0Sxv42LTI07i2wVTt0I0HTp0yLdzd2rXlT1jXGQchswjsGe0i07tbsy348vF0Ziu\nSAGwaNEi4uLiqFChArGxsTid+de+0O128/CwB3nrjbcxxjDgnrt5bezr+Pr65ts55E95ZadCV6SY\n+OPn2eFweLmSoi2v7Cyw3YBFJH8pbAsGjemKXKLc3FxefPkFOnRvS7//3MX+/fu9XZIUAgpdkUt0\n7wP38Prc50jt+zMrSn1MrWuvpsctN/LOu++c/vVyz549rFu3joyMDFtrM8aQk5Nj6znlwmhMV+QS\n5OTkEBQcSNfDufiVsL63qCMEV4G0FS763Xg/J5JP8P6H0/AP9SH7JPS9rT/Dhg6jUqVKHq1t+vvT\nuf+hwaSdTKdpm8bM+mgOERERHj2n/EkP0kQ84HToHsnF7wrre8t6QMXeUKY9zK/qJKyaP9WeS2PV\nAIgaBFlH4fiskqxctibfVpv9XUJCAjHd2tBkfjqhNeGXx5yU3dyUBd8u9sj55GxakSbiAU6nkzv+\nfTurero4MBc2PgHH10C5zuAMBneOm/Au6WwbBw0mQp1noMHrUObOk7zy+niP1bVkyRLK986lRD3w\n8YMao3JY9nO8x84nF0+hK3KJJk+cwsDrh5E7vhG7Jzmp0h9ObIK1twbRvHVTjs93kZ0MgRX+/Exg\nRTcnU457rKayZcuSss4Pc2oB2rHVEB5R0mPnk4un0BW5RE6nkydHPsXyH1eyeul6Kq2N4fjw2vSu\nfy/ff/0TnaJvImOXk7WD4fh6OLIIdo920afHrR6rqXfv3lTxv4a4liFsuNvFml4uJr/+rsfOJxdP\nY7oil8ntdjP+tXF8Nf8LIkqV5bn/e5Hq1asDsGXLFkaPe4nvF35HYGAATw1/jjtuv8Oj9eTk5DBn\nzhySkpJo1aoVtWrV8uj55K/0IE3Ew4Y/PpT3f5hElcfTSNniYO+4UL6Y8SXh4eHUqlXropf07t69\nm/j4eCIiImjbtu1fFjVs376dzZs3k7AqgfmLviYoMIgnhz5L+/bt8/uy5BIpdEU87IpSIbRcnUrw\nVdbXCXc6OPyVk+AyAZQrUZEF3y2mdOnSF3Ss+fPn0+v2noQ1zeXkFkPNCvW5p++9BAQEcPR4EiOf\nHo6zlJvUI5lUuBlCrrY2sJn/1U80adLEg1cpF0qhK+JhJUqH0GJlKsGVra/jb4fwaKj2IGx6yI8G\nJ3vy0dQZZ30uOTmZVatWkZ2dja+vL5GRkbTv3Jrq7yYS0R5yM+GH+hAY5iQ4PIB9P6fS9HOIj7Wm\npQVFwt6ZUOFm6BQwiEmvvmHvhcs/0t4LIh523+AhTO31GpVHpJG8GQ7Ng2teBocDysVms/6htWd9\nZseOHbSOaY6JSOX4vlQcxhen8SPleAZNm1vv8Q2AUq2gZP0cqt2fg8+98MuzENkdGk+z3lO6NWx6\nAvy6+dl4xXI5NHtB5DL9b9TzjOz3AiHT2+L3dV3KXBtAQITVIeLQ537UrXXNWZ8ZcP+/KXN/Ii3i\nU+m8G0KvyeWqhzMILA1rBlmfTdkOB+ZCWLT1mfCmkL4PSp5xuNBakHnEwb0DB9tyrXL5NLwgko8y\nMzPp0vMG1v6yEmeQg3D/cvw8f+lZy3CvrB5JrTkHueLUxIJfx0LaXshOdPD7NwaTA+4scFWBmATI\nSYO4jgEc+zUT/1LQ8lsILAvxt0Gzkjcy+9OvvHC18k80vCDiIUlJScycOZPMzEy6detGVFQUAQEB\nfD/3JzZv3kxWVhZ169bF39//rM9eW78B26d+T+2XcshJgX2fQsVY2PqRockMCL8OHH6woBl8Ge7A\n6evLgHv68d6eqVQfkcniDlYQu8o4ue35O71w9XKpdKcrcgkOHjxIo2bXEtT0JM4Sbg7O8uPHbxfS\nqFGjC/r8oUOHiOnalt8O7Cb1eAYBwU7cGT4EuvypNz2Fsh3BnQ1xrYIZ8+BkYmNjycjIIKx0STru\nzCawnNVPbWmDED5+7UvatWvn2QuWC6Y7XREPGD3uJUK7J1HvFWv7xNDoTB554kEWfrvkgj5ftmxZ\n1sZvZM+ePTidTlJTUyldujTr16/nplu6EdHGl+RfDY2qtaBPnz74+PjgcrkY+fhIJrQeQ+meqRz4\n3I9gAolPiKNly5b4+elhWmGgB2kil+Bw0kGCa/25X21ILdi/bz/XNq1LUEgAdRrVYP369Wd9bsGC\nBVSuURFXaCDtu7QmKCiIK6+8klq1alGmTBmuv/561q/czNM936BJ9TYsWrCI0pFhvDD6eYwxPPX4\n00wd+zHpsytQ8hqo8EQib/z0LDff1kO/mRYSCl2RS/CvG3rw23gXyVsh4yBsfyKQw4cO43vXZm7Y\nn0XwA78S06UdJ0+ePP2Z3bt306PPv6j0yn467M3kcP3lVK5VkdLlS/K/F587HZpXXXUVv2zfzOqj\nC2izKZ0mS5IZ/97/+PCjDwEoV64c6Y4TRH+aTeV/Q6M56Sz8+Sf27t3rjb8KuUgKXZFLENsnlqED\nnyS+dSgLawXRtGxnAkv5EjXY4FcCruoL/uVz2Lhx4+nPLFu2jIh2PpTrDP4loc5LhpxMN9fOPcGr\nH7zA1GlTT7/36/lzqPpUGkHlIbQ6XPlIGl/Nnw1AdnY2Tpfj9E+vjx/4BviQlZVl69+BXBqFrsgl\nGvbIcI4dOknysTReGTOB1ENZZB2zXstJgZR92YSHh59+f3h4OKnbDe5ToxKpu8DhAyXrQ5URacz+\n9rPT7y0VXprkLX+eK22Lk7KlygHQsGFDgrNK8csIJ4lLYeNgf6peeTVRUVEev2a5fApdkXxQoUIF\n7hk4iOUtgtn0qJPlLUPo1SOWmjVrnn5Phw4dqFM+mvh2wax9wMHClqdWrvlC6q8+lA77cy7vy8+M\nZ8f/hbBhUABrbg/k2MwwHnt0JACBgYEs/mE5dfZ3I+mRmjRx9+H7uQvw8dGPc2GgKWMi+cQYwzff\nfMPGjRupUaMG3bt3P6vteU5ODp988gmrVq1i8tS3qHBrLibTwdHvgs5q47Nr1y7mzJmDv78/vXv3\npkyZMjZfkVwKbXgjUkDt2rWLWbNm4evrS2xsLJGRkd4uSfKBQldExEZqTCkiUoAodEVEbKTQFRGx\nkUJXRMRGCl0RERspdEVEbKTQFRGxkUJXRMRGCl0RERspdEVEbKTQFRGxkUJXRMRGCl0RERspdEVE\nbKTQFRGxkUJXRMRGCl0RERspdEVEbKTQFRGxkUJXRMRGCl0RERspdEVEbKTQFRGxkUJXRMRGCl0R\nERspdEVEbKTQFRGxkUJXRMRGCl0RERspdEVEbKTQFRGxkUJXRMRGCl0RERspdEVEbKTQFRGxkUJX\nRMRGCl0RERs5z/eiw+Gwqw4RkWLhnKFrjLGzDhGRYkHDCyIiNlLoiojYSKErImIjha6IiI0UuiIi\nNlLoiojY6P8B89y1HqfLjHwAAAAASUVORK5CYII=\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from utility import plot_decision_boundary\n", + "y_pred_train = logreg.predict(X_train)\n", + "plt.scatter(X_train[:, 0], X_train[:, 1], c=y_pred_train)\n", + "plot_decision_boundary(logreg, X)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks pretty good. It is not always that easy to inspect the result visually,\n", + "so we can also use the logistic regression object to calculate a core for us:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy on training set: 1.0\n" + ] + } + ], + "source": [ + "print \"Accuracy on training set:\", logreg.score(X_train, y_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1.0 means an accuracy of 100%, just as it looked like.\n", + "\n", + "Now let us have a look at how the algorithm generalizes to the test data." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy on test set: 1.0\n" + ] + }, + { + "data": { + "image/png": "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\niesNvzaG8Pug7H9hxKi3AGjTpg3Vw+uytoUfcb1MLGtybuWaF6TuMlMi+N+WOqOGxbL3dX/+6G5l\n8//5cvrrYAa+PAgAX19fVvy8mupHOnKybxXqux5kyYJfMZv117kg0CljSuUSEWHAgAGMGjUKs9kE\nJmNlWZmyYRzafwQw2vzMmjWLjRs3MnXaZMr8x4k4TJxabGPDqs2UL1/+/PH279/PvHnz8PHxoUuX\nLpQsWdJDZ6auh+4yppQbiQjZ2dkXPWY2m89P+brQ/v37mTNnDl5eXjz00EOEhYW5q0yVhzR0lVLK\njbQxpVJK5SMaukoVYC+8+DybNm3ydBnqOujwglIF1Jo1a2jctBFNWzVi2eKVOb9BuYUOLyhVSL0y\ntB+1xsLW7ZtZvXq1p8tR10hDV6kCaM2aNWyJ38StzwqRr6bzytB+ni5JXSMNXaUKoFeG9sOvXhpH\n5oDZV1j56yq92i0gdGtHpQqgGlVrUuxoAMwFR4YDL6/l7Nq1i4YNG3q6NJUDvZGmVAHXp19vPvrq\nA5rXbcOCbxd7upwiTxdHKFWIJSQkUKFKeRqvTWd1MxvLF6+mVq1ani6rSNPZC0oVYm+PeouI/3MR\nEAWR/R28OmyAp0tSOdArXaUKqKSkJEqFlqRUMy/spc1kpwl7v0ljx44dVK5c2dPlFVnaI02pQspu\nt/PpJ9NxOBznHzN3NFOmTBkPVqVyole6SimVi3RMVyml8hENXaWUciMNXaWUciMNXaWUciMNXaWU\nciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMN\nXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWUciMNXaWU\nciPL1Z40mUzuqkMppYqEK4auiLizDqWUKhJ0eEEppdxIQ1cppdxIQ1cppdxIQ1cppdxIQ1cppdxI\nQ1cppdzo/wEzbZF7AN/ugwAAAABJRU5ErkJggg==\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "y_pred_test = logreg.predict(X_test)\n", + "plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred_test, marker='^')\n", + "plt.scatter(X_train[:, 0], X_train[:, 1], c=y_pred_train)\n", + "plot_decision_boundary(logreg, X)\n", + "print \"Accuracy on test set:\", logreg.score(X_test, y_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also take a look at the coefficients, but they probably don't tell you much." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.42842754, -0.62076837]])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logreg.coef_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "MNIST DIGITS\n", + "-------------\n", + "Let's go back to the MNIST example of before.\n", + "This dataset is a bit more exciting since it is much higher dimensional and not as easy to separate.\n", + "First we load the data again" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.datasets import fetch_mldata\n", + "mnist = fetch_mldata(\"MNIST original\")\n", + "X_digits, y_digits = mnist.data, mnist.target" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember what the dataset looks like:\n", + "\n", + "- 70000 examples, 784 dimensional\n", + "- ten classes, 0-9\n", + "- each 784 vector is a 28 * 28 digit" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_digits.shape: (70000, 784)\n", + "Unique entries of y_digits: [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]\n" + ] + } + ], + "source": [ + "print \"X_digits.shape:\", X_digits.shape\n", + "print \"Unique entries of y_digits:\", np.unique(y_digits)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPwAAAD5CAYAAAADZljUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAELJJREFUeJzt3X9MVfX/B/DnrY/YJkgqIjTwR828Buq92AVqEy+2NYYF\nOmtow5qXloKlhtofzdklXWYtzVFTtrwtc1CzZaUWLldHjaWXJTDHblMrJzlIqE2ukwy38/2jbzcJ\neB/uvZx7r7yej80N7ut0zmvHnp577vt9z9ui67oOIhLhjmg3QESRw8ATCcLAEwnCwBMJwsATCcLA\nEwlieuBPnDiBmTNnYvr06aiurjb7cEGbOnUqZs+eDbvdjuzs7Gi3A5fLhUmTJmHWrFmB1/x+P4qL\nizF58mQsWrQI165di6n+3G430tLSYLfbYbfbUV9fH7X+2trakJ+fj4yMDDidTtTW1gKInXM4WH8R\nO4e6yWw2m378+HH94sWL+owZM/TOzk6zDxmUqVOn6r///nu02wg4ceKEfubMGT0zMzPw2vbt2/Xn\nn39e//PPP/XVq1frb775Zkz153a79bfeeitqPd2qvb1db2pq0nVd1zs7O/Vp06bp3d3dMXMOB+sv\nUufQ1Cv81atXAQB5eXmYMmUKHn30UZw+fdrMQ4ZEj6G5R/PmzcO4ceP6vOb1elFWVobRo0fD5XJF\n9RwO1B8QO+cwJSUFNpsNAJCUlISMjAw0NjbGzDkcrD8gMufQ1MA3NjbCarUGfn/ggQdw6tQpMw8Z\nNIvFggULFmDRokX44osvot3OgG49j1arFV6vN8od9VddXY3c3Fxs374dfr8/2u0AAC5cuIDW1lZk\nZ2fH5Dn8p7+cnBwAkTmH4j+0a2hoQEtLC7Zt24bKykp0dHREu6V+YuXqOZjy8nL88ssvOHr0KH76\n6SfU1NREuyX4/X6UlJRg586diI+Pj7lzeGt/Y8aMidg5NDXwDocDP/74Y+D31tZW5ObmmnnIoKWm\npgIAZs6ciaKiIhw6dCjKHfXncDjg8/kAAD6fDw6HI8od9ZWcnAyLxYLExESsXr0aBw8ejGo/vb29\nWLJkCZYvX47i4mIAsXUOB+ovUufQ1MAnJiYC+PuT+osXL+Lrr78OvH2JBdevXw+8ders7MTRo0dR\nUFAQ5a76y8nJgcfjQU9PDzweT8z9o9ne3g4AuHnzJmpra1FYWBi1XnRdR1lZGTIzM7Fu3brA67Fy\nDgfrL2Ln0OxPBTVN061Wq37ffffpu3btMvtwQfn555/1OXPm6HPmzNEXLFig7927N9ot6UuXLtVT\nU1P1uLg4PS0tTfd4PHp3d7deVFSkp6en68XFxbrf7496f6NGjdLT0tL0vXv36suXL9dnzZqlz507\nV3/xxRejOupx8uRJ3WKx6HPmzNFtNptus9n0r776KmbO4UD9ffnllxE7hxZdj7GbGyIyjfgP7Ygk\nYeCJBPmfGTu1WCxm7JaIhmiwO/WQr/BGc+R1XQ/8eeWVV/r8Hmt/2B/7G0n9qYQc+LVr16KmpgbH\njh3Du+++i66urlB3RUQRElLgb5c58kTUV0j38IPNkV+4cGHgNbfbHfj57rvvDr3DCHA6ndFuQYn9\nhWek96dpGjRNG9K2IY3DHzt2DHv37kVdXR0AYM+ePbh8+TK2bNny904tFsN7CSIyhyp/Ib2lvx3m\nyBNRfyEFPtbnyBPRwEIeh3/77bexcuVK9Pb2Ys2aNUhKShrOvojIBKbMpec9PFH0DPs9PBHdnhh4\nIkEYeCJBGHgiQRh4IkEYeCJBGHgiQRh4IkEYeCJBGHgiQRh4IkEYeCJBGHgiQRh4IkEYeCJBGHgi\nQRh4IkEYeCJBGHgiQRh4IkEYeCJBGHgiQUxZH55k+OGHH5T1d955R1n/4IMPlPVnnnlGWX/hhReU\n9aysLGVdIl7hiQRh4IkEYeCJBGHgiQRh4IkEYeCJBGHgiQThctE0oObmZsNt8vPzlfXu7u7hamdA\niYmJyvoff/xh6vFjlSp/IU+8mTp1KsaOHYs777wTo0aNgtfrDblBIoqMkANvsVigaRrGjx8/nP0Q\nkYnCmlqretvudrsDPzudTjidznAORUSD0DQNmqYNaduQ7+HvvfdeJCQkYNq0aXC5XCgqKvp3p7yH\nv+3xHv72Zco9fENDA1JTU+Hz+fD4448jOzsbKSkpITdJROYLeVguNTUVADBz5kwUFRXh0KFDw9YU\nEZkjpMBfv34dfr8fANDZ2YmjR4+ioKBgWBsjouEX0lv63377DYsXLwYATJgwAevXr0d6evqwNkbm\nMhpGXbJkieE+rl69qqxbLBZlfezYscp6XFycst7V1aWsf//998r63Llzwzr+7SikwE+bNm1IH+oQ\nUWzh1FoiQRh4IkEYeCJBGHgiQRh4IkEYeCJB+H3429T169eV9TNnzijrpaWlynpbW5thD0Z/x0bj\n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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "print(y_digits[0])\n", + "plt.rc(\"image\", cmap=\"binary\")\n", + "plt.matshow(X_digits[0].reshape(28, 28))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We could try to learn all ten classes with logistic regression, but let us keep with two classes for the moment.\n", + "We will use two classes that are quite hard to distinguish: seven and nine.\n", + "\n", + "To create a dataset only consisting of the classes zero and one, we need a new numpy trick!\n", + "\n", + "We can not only slice our data using ranges, like ``X[5:10]``, we can also select elements using conditions, like so:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "zeros.shape: (6903, 784)\n", + "ones.shape: (7877, 784)\n" + ] + } + ], + "source": [ + "zeros = X_digits[y_digits==0] # select all the rows of X where y is zero (i.e. the zeros)\n", + "ones = X_digits[y_digits==1] # select all the rows of X where y is one (i.e. the ones)\n", + "print \"zeros.shape: \", zeros.shape\n", + "print \"ones.shape: \", ones.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lets have a quick look to see that we did it right." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPwAAAD5CAYAAAADZljUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAD2RJREFUeJzt3X9MVfUfx/HX/fJV/gjyR/xs4K+WYKCCjR9zSTfbGsMJ\nmn+YTk1gM4FKM/3P2XW1zDWzYk3dFGtzuLLNyiyZrh1/sCVsgStGSyvSGSq0iltaQzvfP76TVOQA\n93LuvfB5Pja363kfz3nvbC8/53PPj+uxbdsWACP8J9wNAAgdAg8YhMADBiHwgEEIPGAQAg8YxPXA\nnzhxQtOmTdODDz6o6upqt3c3aJMmTdKMGTOUnZ2t3NzccLejsrIyJSYmavr06T3L/H6/SkpKNGHC\nBC1YsEB//PFHRPXn8/mUkpKi7OxsZWdn68iRI2Hr78KFC3rssceUkZEhr9er2tpaSZFzDPvqL2TH\n0HZZVlaWffz4cbutrc1OS0uzOzo63N7loEyaNMn+5Zdfwt1GjxMnTthfffWVnZmZ2bNs69at9rPP\nPmv/9ddfdlVVlf36669HVH8+n8/etm1b2Hq6VXt7u93U1GTbtm13dHTYkydPtru6uiLmGPbVX6iO\noasj/O+//y5JKigo0MSJE/XEE0/o9OnTbu4yIHYE3Xs0Z84cjRs37rZlDQ0NKi8vV3R0tMrKysJ6\nDO/WnxQ5xzApKUlZWVmSpLi4OGVkZKixsTFijmFf/UmhOYauBr6xsVHp6ek9f3/ooYf05ZdfurnL\nQfN4PJo7d64WLFigTz75JNzt3NWtxzE9PV0NDQ1h7qi36upq5efna+vWrfL7/eFuR5J07tw5tbS0\nKDc3NyKP4c3+8vLyJIXmGBr/pV19fb3OnDmjLVu2aN26dbp06VK4W+olUkbPvlRUVOjHH39UXV2d\nvv/+e+3atSvcLcnv92vx4sXavn27YmJiIu4Y3trfPffcE7Jj6Grgc3Jy9O233/b8vaWlRfn5+W7u\nctCSk5MlSdOmTVNxcbEOHToU5o56y8nJUWtrqySptbVVOTk5Ye7odgkJCfJ4PBozZoyqqqp08ODB\nsPbT3d2tRYsWafny5SopKZEUWcfwbv2F6hi6GvgxY8ZI+v839W1tbTp69GjP6UskuHr1as+pU0dH\nh+rq6lRYWBjmrnrLy8tTTU2Nrl27ppqamoj7T7O9vV2SdP36ddXW1qqoqChsvdi2rfLycmVmZmrt\n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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.matshow(ones[0].reshape(28, 28)) # change the 0 to another number to see some more zeros. Or try looking at some ones." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we generate some new data set.\n", + "\n", + "For the training labels y, we write as many 0's as the ``zeros`` array is long, the asame for ``ones``." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_new.shape: (14780, 784)\n", + "y_new.shape: (14780,)\n", + "y_new: [0 0 0 ..., 1 1 1]\n" + ] + } + ], + "source": [ + "X_new = np.vstack([zeros, ones]) # this \"stacks\" sevens and nines vertically\n", + "print \"X_new.shape: \", X_new.shape\n", + "y_new = np.hstack([np.repeat(0, zeros.shape[0]), np.repeat(1, ones.shape[0])])\n", + "print \"y_new.shape: \", y_new.shape\n", + "print \"y_new: \", y_new" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we shuffle them around and create a training and test dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.utils import shuffle\n", + "X_new, y_new = shuffle(X_new, y_new)\n", + "X_mnist_train = X_new[:5000]\n", + "y_mnist_train = y_new[:5000]\n", + "X_mnist_test = X_new[5000:]\n", + "y_mnist_test = y_new[5000:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let us learn a logistic regression model." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", + " intercept_scaling=1, penalty='l2', random_state=None, tol=0.0001)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "logreg.fit(X_mnist_train, y_mnist_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "... and visualize the coefficients.\n", + "\n", + "We can see that the middle is dark, corresponding to high positive values for where\n", + "a 1 would be. Around it is a lighter circle, corresponding to the position of a 0." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.matshow(logreg.coef_.reshape(28, 28))\n", + "plt.colorbar()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, let as look at the accuracy on training and test set:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy training set: 1.0\n", + "Accuracy test set: 0.998466257669\n" + ] + } + ], + "source": [ + "print \"Accuracy training set:\", logreg.score(X_mnist_train, y_mnist_train)\n", + "print \"Accuracy test set:\", logreg.score(X_mnist_test, y_mnist_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Playing around with this notebook\n", + "=================================\n", + "1. What would be the accuracy of a completely random predictor on the first dataset?\n", + "\n", + "2. Can you still pick out the class yourself if you set the ``cluster_std`` to ``10`` in ``make_blobs``? Can logistic regression do it?\n", + "\n", + "3. Try to separate some other digit classes from MNIST. Which are hard, which are not?\n", + "\n", + "4. Visualize the classes 0 and 1 using PCA down to two dimensions. Use a scatter plot as above. Would you expect they can be separated with a linear classifier?" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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": 1 +} diff --git a/references/logistic_regression_demo/data/artifical_lin.txt b/references/logistic_regression_demo/data/artifical_lin.txt new file mode 100644 index 0000000..fc158e3 --- /dev/null +++ b/references/logistic_regression_demo/data/artifical_lin.txt @@ -0,0 +1,500 @@ +7.475811838082768723e-03 4.320836189610323119e-01 1.450549175723391038e+00 +4.991058415580543750e-01 2.094374801667562291e-01 1.102532698521218268e+00 +1.193536163361264002e-01 5.963489824485116442e-01 1.338273355186238245e+00 +4.769187785997547335e-01 9.109195645869490043e-01 2.602219201834365947e+00 +7.303936733915606938e-01 8.857684867949857654e-01 2.210152595170989276e+00 +9.664601349489546633e-01 7.502994138032407223e-01 2.611077802324385910e+00 +2.542019778882254055e-02 7.428502628957164289e-01 1.710698945274088834e+00 +1.778136599348375535e-01 5.930384510525207320e-01 2.233352927908840435e+00 +4.492592286670140656e-01 8.931411427088303823e-01 3.102819283880683177e+00 +8.370430987882071516e-02 2.614373501818388901e-01 8.640697795350422705e-01 +8.341080791107999826e-01 6.784596613777602592e-01 3.226838828319181562e+00 +7.167018545861755241e-01 1.103531872063134855e-02 3.812269666339226926e-02 +8.183226795351219440e-01 6.657461817854845032e-01 1.547628048238904874e+00 +2.834730567607464113e-01 3.260372156848528880e-01 1.066274317849608133e+00 +4.816520737750709102e-01 9.933843474355296133e-01 3.471689866478016473e+00 +5.507062166025468164e-01 1.219201174732618131e-01 -3.873755702169334736e-02 +9.275675675329209113e-01 7.595330167450311531e-01 2.289908502396237111e+00 +7.561238363026515641e-01 6.840828577303232905e-01 2.519846561855788813e+00 +4.957723968953803295e-01 8.670850445766850045e-01 2.935924016824970284e+00 +5.408335800327461751e-01 3.247707156381132165e-01 8.585149457083230962e-01 +6.892698013969100757e-02 9.085711937091790480e-01 2.274493253938949078e+00 +6.741864184517211145e-01 7.817210669276070112e-01 2.513319828565115710e+00 +8.243668219151468746e-01 2.917544002350455079e-01 1.599121705167765972e+00 +8.776077707996776667e-01 1.677106045886949115e-01 7.843847468722240368e-01 +2.500776223292151546e-01 3.588873034434612030e-01 1.653274592743033899e+00 +2.021786578617587038e-01 1.418393464135232485e-01 3.933672100694594609e-01 +2.685507556945776475e-02 7.321598812138923051e-01 2.127765105548871993e+00 +8.195523222775495942e-01 3.451370805481794868e-01 1.377961502837144137e+00 +1.971981386783976387e-01 4.517957732604490628e-01 1.883090356939532306e+00 +9.324125360887314251e-02 8.518183180329133020e-01 2.720069834246886309e+00 +2.682640801887333781e-01 7.666508565073675285e-01 2.133635338893320910e+00 +5.988554394607304987e-01 5.078756300002995605e-02 -1.323176605521795279e-01 +4.132057609719871349e-01 7.733878480448631576e-01 2.669836471857727211e+00 +8.968299298666455588e-01 1.759543852410582199e-01 9.980225650229066492e-01 +6.604143061271943171e-01 6.340983996248182875e-01 2.105840665588138982e+00 +5.266614520604195882e-02 1.525488634313088010e-02 -2.153966553289855534e-01 +6.974062198613504293e-01 5.944606189059847834e-01 1.763717859467236915e+00 +5.387863758358174548e-01 1.019159109038116906e-01 9.558460757183967482e-02 +6.249043870655015542e-01 4.299862339088595942e-01 1.522006406940794809e+00 +6.661354880603580497e-01 6.036168002547487310e-01 1.930785326585231942e+00 +4.085927067704629989e-01 3.085466034371613375e-01 8.242125987920496666e-01 +2.645712089691105717e-01 7.794962481435983026e-01 2.138245618867576248e+00 +5.732978944125887155e-01 4.848706031355866086e-01 1.080208500702684260e+00 +2.713139146988112760e-01 1.379451495861444554e-01 4.228339638555064228e-01 +2.755820924890763912e-01 8.530702479483407430e-01 3.322053433962536939e+00 +2.091501940600326570e-02 2.048108692344442483e-01 4.191702012093132534e-01 +1.534394912084446894e-02 9.148363421420675490e-01 1.800710510442548484e+00 +1.278958637503535556e-01 3.910178296001215470e-01 1.326305294981870109e+00 +7.343913194845445025e-01 9.578241564768665839e-01 3.666444442007755988e+00 +8.728738265684310438e-01 8.137136652443932583e-02 -6.680219410291982074e-02 +3.434930909495775841e-01 3.668093961439626849e-01 1.298070495530361690e+00 +6.340750930182676992e-01 4.293034895647808158e-01 1.753627303728895637e+00 +7.916753701139102040e-01 8.792271853310851260e-01 2.593999286745963584e+00 +1.783997341756226040e-01 3.861425389666840458e-01 9.128976540430178144e-01 +5.928812756610245538e-01 4.438943836328812509e-02 1.000094214885776989e+00 +9.664522600713033595e-01 9.466939185617491148e-01 2.906269893635449630e+00 +4.066561253239548979e-01 9.171665625609342065e-01 2.742986919040616645e+00 +8.236115710884057695e-01 2.647959880978716374e-01 9.459738056948978624e-01 +6.320423316726820895e-01 8.360438827586792465e-01 3.216488737449289648e+00 +5.138224534917832376e-01 5.374361346225066116e-01 1.527247360071752880e+00 +4.579382292678627620e-01 3.949198869420947888e-01 1.501425648147641345e+00 +9.576670559259582438e-01 3.983246523147065954e-01 1.237575342612352136e+00 +1.138067686089871966e-01 1.567309453549632359e-01 7.005322455414590976e-01 +6.404494439786647675e-01 1.780641159603901791e-01 7.938637139365654072e-01 +1.387840471133794384e-02 6.237823673113149781e-01 1.476386204302320593e+00 +3.030445989624356296e-01 6.198141088519637520e-02 4.567005603096885302e-01 +3.802531980402333867e-01 5.409927006646785275e-01 1.883581189342869333e+00 +6.705087997031178304e-02 1.741428118633180366e-01 9.121942481269487146e-01 +8.211668779283721742e-01 5.249226808311039383e-01 2.170534841817413074e+00 +2.069294306883516787e-01 2.366319826124895220e-01 1.542613224726550936e+00 +9.532381178881612627e-01 8.535486150346145440e-01 2.356388047056950708e+00 +7.960224813956610079e-01 3.619061945798818236e-02 5.172188609486845223e-01 +8.877672702671365323e-01 9.713145572816609397e-01 3.306905373104077839e+00 +7.489306869397681643e-01 8.473656034978621632e-01 2.535918702634719413e+00 +7.177108320559019150e-01 1.087337598575145448e-01 1.586935432727936135e-01 +2.447720414767670105e-01 5.109625703599354196e-01 1.407260059648873574e+00 +9.890927331418312152e-01 2.953923437136736219e-01 1.072070459129647713e+00 +1.086920779608940846e-01 6.318071227439751025e-01 1.557679918613608994e+00 +9.644991742126940437e-01 4.703489200292593209e-01 1.636317030674938611e+00 +6.213140595058208593e-02 8.477486902449127282e-02 3.813767326246751410e-01 +4.952571105530045870e-01 5.700052493447709256e-01 1.934233726936544162e+00 +2.726756709341970897e-01 2.146651782929371866e-01 7.986346066861963466e-01 +8.917441922488205108e-01 9.560923675042851677e-01 3.119016030037050413e+00 +7.707565352454615049e-02 1.161474483544463476e-01 -1.644060962672083126e-01 +8.619330010808275988e-01 5.483846347652111541e-01 1.887271595787430201e+00 +6.756497088473898405e-01 1.596640416697148179e-02 3.250751138478518709e-01 +6.078153373128571957e-01 3.720033630724720597e-01 1.411933889913144835e+00 +3.174037326900748246e-01 1.549614002822162773e-01 8.161302398949438208e-01 +4.476293363565838623e-01 8.210638934292713298e-01 2.480054998404300992e+00 +7.084428331937857592e-01 6.952726744740225229e-01 1.912595645951341350e+00 +7.313728224808281331e-01 4.590841357253414579e-01 1.092024568392572004e+00 +8.346529609846853326e-01 6.280661067885178195e-01 1.703742672110366119e+00 +1.949849239944413393e-01 7.815804264527685952e-01 2.740131052532522649e+00 +3.618961197943663111e-01 9.493746530596582911e-01 3.483716212818180669e+00 +9.426901777014041750e-01 5.218380228405639087e-02 4.376997690535605612e-01 +8.226362345946165444e-01 4.809419675081207934e-01 1.458586094754612761e+00 +7.067354980129005870e-01 7.228649825823781905e-01 2.419791589190408487e+00 +1.023755386264367795e-01 7.922838157573184326e-01 2.441085427209842340e+00 +2.289851593560128240e-01 5.546786377010594071e-01 1.647696527055220850e+00 +4.460650478440573163e-01 2.191506522298012349e-01 1.024946687942562829e+00 +4.483396050145066480e-01 2.429242359343196656e-01 1.309989269584039384e+00 +9.430377189635058555e-01 8.411778387111719102e-01 3.432728797502154983e+00 +2.864482468911577762e-02 8.546327218757242550e-01 2.722370794510544201e+00 +2.241511135464431259e-01 7.859659876748782414e-01 2.491116071935152387e+00 +9.966196752234992573e-01 6.955150962623877220e-01 3.093102615008462841e+00 +2.477410776072497267e-01 8.178117265377349288e-02 7.342611816274411396e-01 +3.790620764631877915e-01 9.593005540814388832e-01 3.171558355615661906e+00 +7.558769731762405852e-01 2.294088007751564628e-01 5.538922276913116338e-01 +7.192011532951225750e-02 6.754074740436515345e-01 2.527960192024258479e+00 +3.234731742291891976e-01 8.990872474399824732e-02 2.308891315011747103e-01 +1.105033974749317638e-01 3.560288831966261780e-01 1.355952289465385707e+00 +4.316861899693822391e-01 6.140824910286386551e-01 2.175048267024927817e+00 +4.173677249147860202e-01 8.307176675711246405e-01 2.891136308161926127e+00 +4.878284313449211540e-01 1.217117118902810713e-02 3.765562264346458687e-02 +5.698100028891839308e-02 9.369647431950471894e-01 2.828524603619942734e+00 +7.937063049510053592e-01 9.965934172054009554e-01 3.621790555298875613e+00 +9.185931909842128817e-01 6.488091171997073525e-01 2.143860442680804557e+00 +9.007204053721260539e-01 8.537714025365400472e-01 2.646754629169127071e+00 +8.278514553747188254e-01 2.005889941342431371e-01 7.271439836489447250e-01 +2.373489829046158128e-01 1.418258400242289330e-02 -6.020465063396163163e-01 +6.117272773480567638e-01 6.369715377051763383e-01 1.454500098779854422e+00 +9.961403950188231216e-01 3.421270980816193408e-01 1.695221418633425792e+00 +3.060008110713063889e-02 6.001080183202910368e-01 2.002526417406803372e+00 +2.164319231564044710e-01 8.136362177731774059e-01 1.757163156232044887e+00 +4.320315166604467016e-01 4.720548127901512681e-01 1.795390386829843532e+00 +9.817822535962430486e-01 9.617769716915969269e-01 2.665581707035302728e+00 +7.824931791481782861e-01 8.442127024468111252e-01 3.127126340389913661e+00 +9.034259616014704841e-01 3.510687988820446748e-01 1.524380717380441341e+00 +9.340361687788649725e-01 6.443396379643503424e-01 1.577033167963769245e+00 +9.349627019103919912e-01 9.740965725817858356e-01 2.777737402561453184e+00 +5.903568814739056370e-01 3.993580841930692849e-01 9.865016362870495659e-01 +4.310475296439005843e-01 4.231135093604750930e-01 6.160817574532500007e-01 +4.066501997846739824e-01 7.450933101505008427e-01 2.074051841595779599e+00 +1.029377684482553068e-01 3.799493301021364955e-01 1.256140270860516495e+00 +2.166875813791702132e-01 5.680548857183227440e-01 1.860536057054025694e+00 +7.361620363451337745e-03 6.692094353896700376e-01 2.297233859209406592e+00 +2.251381419088346325e-01 8.652108236891861148e-01 2.666916298098993998e+00 +1.504251225087782640e-01 1.130070792465698304e-02 -5.110469555600358760e-01 +5.937063067825341101e-01 2.716007117804829507e-01 1.267438724867238964e+00 +4.634541081507811411e-01 6.681602022681033537e-01 2.564355938834183224e+00 +2.250187085316336377e-01 9.707240268187979915e-01 2.676052205504153569e+00 +9.815037489648346103e-01 2.641637699209509194e-02 1.554105300329002293e-01 +5.798419531491214585e-01 7.299465348305756995e-01 2.111624689082501227e+00 +8.972502355513533034e-01 9.156452851300300733e-01 3.126488976232349337e+00 +4.125381992536247822e-01 3.249668969776204897e-01 1.830878545388462175e+00 +8.269411939892717944e-01 7.979113620685827080e-01 2.707397108997154689e+00 +9.993682944332172857e-01 6.221934355638074621e-01 2.549876142740037821e+00 +1.309511636557203484e-02 3.505925898386655915e-01 1.305297897892122805e+00 +4.102824415325945218e-02 7.457568198685821104e-01 1.543540270208316301e+00 +8.117891142542627003e-01 1.272650640958630230e-01 1.082974948650097691e+00 +7.481657398409454762e-01 9.308262831414119143e-01 2.578937787382042934e+00 +5.088769917590663105e-03 5.245899619502442102e-01 1.727984379791936531e+00 +6.400399192179795360e-01 9.629290544827761034e-01 2.938595199549385306e+00 +2.773619565845855117e-01 4.542961730983430257e-01 1.168737911397091711e+00 +6.686043177934657411e-01 7.553176981648601629e-01 1.644825403924084384e+00 +2.637964834961262772e-01 9.844424430040311647e-01 3.632246264813325798e+00 +4.529904429357893836e-01 5.591014088518869718e-01 1.421411174425226243e+00 +5.914692044780885949e-01 5.224614059870554827e-01 1.501115101695089438e+00 +5.278611861799314964e-01 8.706323340559083412e-01 2.599792319687709963e+00 +7.265719805715095125e-01 4.647055521928602495e-01 1.623872125626333318e+00 +2.374412593234882518e-01 6.781222697832595125e-01 2.978750721035211768e+00 +1.096602828167132504e-01 6.233577231346018044e-01 1.686962232177067644e+00 +8.285502135116481481e-01 3.054139242298121726e-01 1.144537009942264483e+00 +7.915711302950751982e-01 7.848184053509537073e-01 2.892002414681882794e+00 +1.762498459189343336e-02 4.855504085991589891e-01 1.619558293913433200e+00 +6.262818009408183118e-01 1.603201032517899138e-01 6.252513064490023975e-01 +2.830688286014748645e-02 5.242293138669631425e-01 1.202461608418680550e+00 +3.427022322407036192e-01 7.081650882875548669e-01 2.150677972793977322e+00 +5.135236067462749521e-01 2.438597121143804003e-01 6.384817981414274701e-01 +2.868808958191264580e-01 7.384571396801111742e-01 3.105295444220282697e+00 +9.736860152443834737e-01 2.079390705386722216e-01 1.557250606379207980e-01 +6.894495333611394550e-02 6.130594376948936830e-01 2.315876000332821594e+00 +1.168590212315750998e-01 4.037889878947520383e-02 3.152764638159926136e-01 +3.147609473561659987e-01 8.448606103547418034e-02 3.681880790089999689e-01 +1.905475300857236709e-01 5.576451121753612794e-01 1.735782833118906243e+00 +8.174670994045084571e-01 7.522671285033422084e-02 2.910705593068040886e-01 +2.930085957594632529e-01 9.567630851274011583e-01 3.172637074347888664e+00 +7.861908323714857927e-01 1.787212591142121054e-01 8.352226099770573287e-01 +8.722257250051403954e-01 8.081061274551285534e-01 2.732557324289121681e+00 +6.899075115902838506e-01 9.443001359106594217e-01 3.398727077247677641e+00 +6.031118963945732991e-01 3.453224833949740669e-01 1.425321208931602079e+00 +3.407956303640705675e-01 9.140476767703493710e-01 3.401458356178787668e+00 +1.945621485096249437e-01 5.923940054625942420e-01 2.566378888181803930e+00 +3.161255927431180224e-01 7.527318319996485485e-01 1.902379634338783321e+00 +9.542504369658332264e-01 7.563093485068556054e-01 1.960997642569395571e+00 +7.503283219779900426e-01 5.828935470434386534e-01 2.446196965775033760e+00 +4.578297753833164840e-01 3.519832708438854763e-01 8.666562129287116445e-01 +6.068951551160934876e-01 3.577481854345385681e-01 1.279663020567587850e+00 +9.286620665777755024e-01 1.989483889154278762e-01 4.980914890658610372e-01 +9.089161333377616669e-01 9.360413652931209860e-01 2.729168699217892513e+00 +2.715020470435951516e-01 6.263210538722676635e-01 1.953520274587866812e+00 +4.484390918011750271e-01 6.187772636825238370e-01 2.289293295258222116e+00 +6.530080949979680804e-01 3.122995150457112956e-01 1.618902454343966735e-01 +2.463316498886304329e-01 5.226564427863324980e-01 1.229133364816173302e+00 +4.141071607560687928e-01 4.798880667179711290e-01 1.484116980207792924e+00 +3.744430435917297517e-01 3.136728207944586844e-01 1.394232745042316868e+00 +9.704834640778647881e-03 2.409452879945052084e-01 1.099945707772545633e+00 +1.247533430143018540e-01 9.278300040342389865e-01 1.969712680896271717e+00 +9.639914914830710613e-01 7.146319051580746207e-01 1.916158759622974328e+00 +9.697007427592747586e-01 4.344846988263826315e-01 1.529407530737709742e+00 +6.432789358766941579e-01 1.159531498655849147e-01 8.070333907812549112e-02 +7.954444389320014519e-02 7.857091264773297112e-03 -3.041162080678399410e-02 +2.056292786003366402e-02 9.139983937786330115e-01 2.283253682769141424e+00 +6.896932244254023736e-01 4.071345432110594631e-01 1.608724082101808062e+00 +1.179590669697371252e-01 2.516637324101815842e-01 6.254825903210164961e-01 +5.717954038454533539e-01 7.118334045214347316e-02 4.939509993242007790e-01 +7.652646562234205474e-01 3.355166863650271836e-01 6.348712599175490023e-01 +8.211691611012003067e-01 8.338493619363586129e-01 2.737468720090254326e+00 +2.169688389528605654e-01 3.278673542269121555e-01 1.327212744232495689e+00 +8.825445819422383931e-01 3.988053665091583211e-01 1.838918711522194549e+00 +7.630053686338290619e-01 7.118875637069269624e-01 2.036324433274867118e+00 +8.682088181253480030e-01 8.022112043828562022e-01 2.771127215122880294e+00 +1.617129307945597283e-01 3.235671693450348219e-02 2.576392368990635950e-01 +2.998997587073576332e-01 9.881916976518770879e-01 3.636341806624223238e+00 +4.166599629826496232e-01 4.948038506801873959e-01 1.604337709904139819e+00 +5.346101161310027328e-01 3.346227769794102302e-01 1.407399360732258575e+00 +5.586469090878520838e-01 9.291034722693523040e-01 2.834402154732535095e+00 +7.495713414978937283e-01 2.230812889919575603e-02 -2.557682884596298445e-01 +1.776544927826729792e-01 8.330048151716381577e-01 3.165953386815831827e+00 +2.370892922909140221e-01 9.645650999746180343e-01 2.848768860709277373e+00 +6.461924835393765276e-01 9.880609977186249893e-02 1.668412393504021818e-01 +1.553521768486154642e-02 6.646524478743683906e-01 2.595752388284229717e+00 +2.304588954137405388e-01 6.865243600025272563e-02 5.432053718528367936e-01 +2.895677903304353373e-01 6.671957989519927690e-02 1.011850249507597832e+00 +1.509853317223704972e-01 4.906855357405467410e-01 1.149671642059096444e+00 +2.695189180420017871e-01 6.034853329583748094e-01 1.407443348919456216e+00 +3.459764986793533170e-01 2.784403907717262205e-01 1.269648748329526677e+00 +6.512027084577440839e-01 8.181789021711619592e-01 2.478800034415616693e+00 +3.889098625215544613e-01 3.863808815073727088e-01 1.725517777318716028e+00 +1.566168732205782677e-01 5.040095278958177660e-01 1.445050834954967778e+00 +1.506836183177537869e-01 7.794054440250003379e-01 1.827809424017371231e+00 +6.008472067370227432e-01 6.576294941390324889e-01 2.840072456764028530e+00 +3.529786254613809238e-02 7.906953468826860565e-02 2.914537265792652709e-01 +5.838745443766220067e-01 4.772899699307178167e-01 1.562650054560695834e+00 +1.146386622596683447e-01 9.203557773271238140e-01 2.689497621397455962e+00 +7.527449308386525706e-01 6.556932866566937967e-01 1.353679760380875008e+00 +5.772945696666064164e-01 9.877894057653435755e-02 7.237928965909140588e-01 +8.474621057352611508e-01 4.665830019054897360e-01 1.901384774582225878e+00 +4.727060331868276899e-01 3.727054816128867465e-01 1.321924051574254966e+00 +5.098999975310586352e-01 9.609943282665764919e-01 3.645184030881743364e+00 +6.906392732383714872e-02 6.549105132437355037e-01 3.089488200682487751e+00 +7.823921352054278300e-01 9.097819054222342494e-01 2.846727756943917775e+00 +9.943033096890919742e-01 8.444706344914977292e-01 3.381869668356601633e+00 +5.178662245948807419e-01 4.365645138590940055e-01 1.617148994110577664e+00 +9.534817465122435998e-02 1.230465622023014793e-01 5.958602476658144687e-01 +9.136055467588631851e-01 9.813729037345580997e-01 2.801133207970882388e+00 +8.333185088873177326e-01 3.682929206749316897e-01 1.581381594818430436e+00 +4.771459736855861999e-01 5.740580398746287782e-01 1.045186811835778551e+00 +3.367532669053258099e-01 9.863295921596789695e-01 3.324781710758984765e+00 +1.594746085675310399e-01 1.159932473938930508e-01 1.169134788908752665e+00 +1.194465875871124627e-01 7.888348212226486966e-01 1.975195364474281234e+00 +9.220174949309249968e-01 1.121314629070164770e-01 3.351474538644472201e-01 +2.541061042050157814e-01 9.685797070542766507e-01 2.153441410522853872e+00 +8.307572662553505127e-01 2.508448740688680179e-01 5.784611982958615117e-01 +1.376235448843345921e-01 3.617318129659841119e-02 6.221258106163279900e-03 +1.840436481673137781e-01 6.808323222169596622e-01 1.882607549485687315e+00 +6.342511202490156430e-01 6.365513878416173554e-02 4.041269791780713883e-01 +6.123378869386941759e-01 8.101128409854028156e-01 2.459317063345435983e+00 +1.397822621492095241e-02 6.212810177816235901e-01 2.486015825552446934e+00 +2.648893147818288663e-01 7.721405542346180262e-01 2.969950102138114278e+00 +4.355738705629145224e-01 5.015560297114354249e-01 1.631130975396188676e+00 +6.767645550708526470e-01 6.719988217135804964e-01 2.402001209385296487e+00 +8.969482811011396661e-01 6.216162704899576008e-01 2.391939545978828185e+00 +2.807005865638156905e-01 8.765866332782691339e-01 2.445553814010947402e+00 +8.776631729638195711e-01 4.409557801676966537e-02 3.437035580118271705e-01 +1.132318932995939331e-01 3.878734620588315529e-01 1.126828874551153659e+00 +6.505608066743523432e-01 5.570322166309906731e-01 1.405162532082802507e+00 +6.352826777968835215e-01 9.032073994924333382e-01 2.875864603770365679e+00 +6.075075314259952286e-01 9.988317036228566703e-02 2.788370701672525653e-01 +5.520087431768604391e-01 9.498021697608852731e-01 2.877145609157186534e+00 +3.487420901728126577e-01 3.894438219111665545e-01 1.967127108295036342e+00 +9.888404807347624947e-01 9.617904325249965192e-01 2.959924223051830339e+00 +4.969393094569252156e-01 7.919237167339300276e-01 3.236077804420792958e+00 +4.616402216694177607e-01 7.207236959796187170e-01 2.939117327649773515e+00 +3.099152128633931857e-01 8.613633170191453692e-01 3.079330776691408644e+00 +7.086847469763453145e-01 8.869181625632798216e-01 2.871147840108290161e+00 +5.377941856756937034e-01 6.587775309256123091e-01 2.160967816912532591e+00 +7.646364267701427631e-01 2.455421095608366633e-01 8.572966621828197464e-01 +8.622835239476616120e-01 3.000231196956705260e-01 1.259991882594763801e+00 +3.345859103381273458e-01 6.329893531710280019e-01 2.681060716320600612e+00 +9.934007225599694735e-01 4.543513071834827111e-01 1.315428869334155149e+00 +5.759080950066908233e-02 2.884858963551498734e-01 -7.850174925890418542e-02 +4.269505081601583374e-01 8.051743259836636746e-01 1.978542162816029570e+00 +6.524171982482834808e-01 9.279905907169705426e-01 3.060068499975705070e+00 +6.734843198314031110e-01 6.334571393198266120e-01 1.336145401266799482e+00 +3.575328041680904123e-01 3.986721918236949547e-01 7.723321667448483918e-01 +9.403819198182535866e-01 6.083547482391497008e-01 2.086252971355057717e+00 +8.261928456459203263e-01 7.570886069856381795e-01 2.281536649939948092e+00 +9.971820442967808118e-01 7.992046415584097563e-01 2.704741105823545322e+00 +5.172650976969177528e-01 3.724498668637581389e-01 1.673405379121174485e+00 +8.705251688169839408e-01 2.588070565460098837e-02 2.202940496938309289e-01 +1.833966134012716687e-01 4.876258081198566741e-01 1.679427029342003275e+00 +1.513744990398393497e-01 1.073838804974480698e-01 5.451570316432030605e-02 +4.189926345521661766e-01 8.098320316679730180e-02 8.531055954522728801e-02 +7.543787800059154058e-02 9.848391042115073324e-01 3.320126219861897710e+00 +9.443531958206554666e-01 3.626975445534534881e-01 1.522215910344035361e+00 +9.301133473836653565e-03 7.468683831400360074e-01 2.334020525485814623e+00 +9.642102501462823660e-02 9.376298281258887979e-01 2.880496019421884935e+00 +8.756395279972406520e-03 3.716757697309374109e-01 1.208645232007073744e+00 +4.687172502852384737e-01 3.820892126647807974e-01 1.854532680014708834e+00 +5.913476236001140585e-01 2.189669997631138454e-01 1.012501326332066132e+00 +7.387636329667006674e-01 5.920302587231973668e-01 2.412974575569116098e+00 +8.630538270295081693e-01 7.792900613671284171e-01 1.878971948852477647e+00 +3.338134227415587851e-01 5.674753975143114193e-01 1.695213821857337599e+00 +9.584543540591695665e-01 5.927514450250956912e-01 1.370840158264928110e+00 +6.241369121140725174e-01 6.771593195494135520e-01 2.488457865425464988e+00 +9.371467607092121010e-02 5.101183721846589414e-01 1.744021612594066850e+00 +2.493145976044208734e-02 8.668047761071785429e-01 2.752694079365073154e+00 +4.464666703723130237e-02 6.965892190700817554e-02 3.990281308246132475e-02 +5.023918872272138403e-01 2.040379432923519198e-01 5.516673767989469512e-01 +5.877438415473072997e-01 6.615594275407946645e-01 2.239059703919524136e+00 +2.542344007676432538e-01 2.107911890480862471e-02 -1.814458337391371134e-01 +2.605715458050029687e-01 3.705245057473609549e-01 1.623875658479395634e+00 +3.079127212378973688e-02 5.645134485765185284e-01 1.396775220088774416e+00 +2.935412713526179829e-01 6.360212413725220282e-01 1.784000484477348714e+00 +6.921359345671137531e-01 4.471545089601747236e-02 6.832107745984026259e-01 +6.008873041498907774e-01 7.245640966372686176e-01 2.449924662944541254e+00 +4.188308403428122606e-01 8.643009544846647074e-01 2.760272756702002894e+00 +7.900049678498655137e-01 5.336134216172517819e-01 2.017342915403988357e+00 +8.916015312642323609e-01 5.935368189827650021e-02 6.154584039205877044e-01 +6.886796487300256286e-01 7.351803922338089325e-01 1.955426791912523221e+00 +4.097948721282183016e-01 8.938378872878225412e-01 3.119817310501979524e+00 +7.971993055816052332e-01 2.098045641727298571e-01 1.283885910722696089e+00 +2.983937173575484936e-01 5.264553012450376990e-01 1.531566251661298006e+00 +7.088314414946647046e-01 8.127418738639392570e-01 2.358159220704926007e+00 +2.794745935386844238e-02 4.257614762297438071e-01 2.267702959680207631e+00 +1.442114455984099264e-01 8.172152263897196622e-01 2.893849234749763077e+00 +5.483618677638720795e-01 5.176509315932831257e-04 1.301219352870777612e+00 +6.427378960850457235e-01 7.552474603789007812e-01 2.472390033497665840e+00 +9.012632286266673010e-01 3.977661209204516046e-01 1.584245481446183046e+00 +7.751416839326413788e-01 6.567156244957739197e-01 2.375680585799090139e+00 +7.881789859035825963e-02 1.398809975130443917e-02 1.062458766386323861e+00 +7.285305002856791168e-01 7.524358560494234238e-01 1.777475646463399617e+00 +2.379830689652752129e-01 8.531137154968296832e-01 3.784977853443068696e+00 +6.570932175321538837e-01 6.318373986277122656e-01 2.448493198991143593e+00 +1.769712777161163153e-01 4.881231080553715129e-01 1.218194871634332488e+00 +9.787091902618055839e-01 7.234517063722307739e-01 2.078608673775485638e+00 +5.325543940594856807e-01 3.878463636417355254e-01 1.117218762232110807e+00 +3.776294030850475547e-01 2.938102869436330922e-01 1.323709562131879736e+00 +4.523604325372018176e-01 1.784904810357289540e-01 4.552447289805042763e-01 +1.181792173078843877e-02 8.635937518630699694e-01 3.410988741402070090e+00 +7.034518033946576265e-01 3.367757382672672550e-01 8.910639855322948222e-01 +8.948050446054094387e-01 8.843895733410821469e-01 3.156833444330739091e+00 +6.259623697221685656e-01 5.704639272128342320e-02 1.958388498885558493e-01 +5.235755207298292691e-01 3.340819322875727693e-01 6.268974481184578229e-01 +8.638754732141373793e-02 2.774203914755931644e-01 2.935415055568650899e-01 +4.317114149216787489e-01 4.650713813752526127e-01 1.995060795329805625e+00 +8.917705774149951026e-01 1.697700091575871095e-01 5.572552195849169721e-01 +1.752132038065331576e-01 4.061422078489875798e-01 2.293701656882313422e+00 +2.928100157108124435e-01 4.671233284818390175e-01 1.080626851389180132e+00 +7.819621667662703945e-01 8.008189799725141667e-01 3.080348037192132793e+00 +3.690479178198524668e-02 4.992162633659427140e-01 1.440659064292583391e+00 +4.255218965268586784e-01 4.299491437783846681e-01 1.718854994552853732e+00 +6.508378905405213244e-01 5.125476346950736950e-01 1.590678829535723260e+00 +5.072290338100746698e-01 1.864644592367400433e-01 4.459607970314258818e-01 +4.276686579201467442e-01 2.301907304104228169e-01 9.303368310914639228e-01 +3.476699595249291841e-01 8.611313302243546186e-01 3.033742925183159134e+00 +5.490920356870296892e-01 2.171881655774017261e-01 4.104681509594124700e-01 +7.510282078843535380e-01 4.979744383443573952e-01 1.696128527266623331e+00 +3.906216874866195177e-01 1.165731551035269487e-01 1.438532496121395221e-01 +6.050298171092189925e-01 5.186689934233152943e-01 1.479263961155669271e+00 +1.317855929821913907e-01 8.963483353857124580e-01 3.139096945167396679e+00 +1.652283583767804043e-01 5.119575423296794936e-01 8.744003971758654847e-01 +3.282157425301530651e-01 4.670372656905332764e-01 1.516522852725733284e+00 +5.574891210005790132e-01 6.653447637772980094e-02 7.154585981647222370e-01 +7.897971783219093211e-02 9.666951250533402096e-01 2.778803608643247713e+00 +5.317142691264395982e-01 8.525494190186935217e-01 2.189194935042349410e+00 +9.139282861202384645e-01 8.300394780564672725e-01 2.314393252321646166e+00 +7.003936096648044618e-02 3.614369733524737116e-01 1.458722832872220376e+00 +3.329160644636194322e-01 7.612584046270625127e-01 1.728766841894803008e+00 +7.223716278606399088e-01 3.424502960158398723e-01 1.475182310351810244e+00 +7.579486958675392128e-01 1.404431732978919101e-01 7.638063148058644725e-01 +4.879941143072841214e-01 8.776430610393899379e-01 2.590578637109576032e+00 +5.059776587492628153e-01 6.011431791188193152e-01 1.727646528689702032e+00 +1.235219504874963681e-01 1.179922675331297466e-01 2.158455983551904600e-02 +7.725252796637381847e-01 2.402553529530193632e-01 6.088324063553911536e-01 +6.044899109013432970e-01 3.526318875917974216e-01 9.820642697335023596e-01 +2.788842141255436502e-01 9.449528134942402069e-01 2.637117406174539269e+00 +8.124980818899407708e-01 9.135864179859349843e-01 2.976694424729694699e+00 +1.430100926327314559e-01 3.895334755875521360e-01 1.484207112180311761e+00 +1.346184020583984786e-02 9.470172860355422495e-01 2.018323715053156331e+00 +5.315817357323743275e-01 7.364967952142569274e-01 1.340839329042298633e+00 +4.307840966796572246e-02 2.388285466023543080e-02 -1.547847363833975143e-01 +1.108508058799980711e-01 6.309926088062709493e-01 1.846453177067780338e+00 +1.369271739615056660e-01 9.521833918572530919e-02 -1.367807803943321687e-02 +8.709137663984527489e-01 5.830997774574926407e-01 1.470710178479174957e+00 +5.120154121503293077e-01 4.166566820874566535e-01 7.946903526350351799e-01 +1.315315743704883467e-01 6.371999314248233404e-01 2.694171092891537000e+00 +2.153395548126788572e-01 8.908231491211437980e-01 2.548016980999377346e+00 +6.774899744365372456e-01 1.475000211999840660e-01 1.016389505906764912e+00 +7.205521389499305318e-01 5.167944263926570470e-01 1.439864432386541271e+00 +6.298537683329488157e-01 1.103889021762568534e-01 5.788912312050239484e-01 +3.003320757630068005e-01 2.839265518953392187e-01 7.902651533713537235e-01 +1.358787769867572104e-01 5.338502558571581735e-01 1.242159045055135191e+00 +7.211422730895343802e-01 6.832532426805910664e-01 2.427868407009705631e+00 +5.077081666456587650e-01 2.692338638244742288e-01 9.469604095963046753e-01 +9.076515738388084564e-01 2.492821227198076528e-01 3.774681688921412981e-01 +3.057001659291251894e-01 3.716474170584588288e-01 1.981864586654419114e+00 +2.393124933107569907e-01 7.217250161625320404e-01 2.590482589440039618e+00 +2.651245410444329487e-01 3.496052218356904273e-01 1.227039102958267680e+00 +2.431967384773501273e-01 9.985048262565618948e-01 3.235888446285136943e+00 +2.698483691693887021e-02 9.743108744110025032e-01 3.342329366195278428e+00 +2.279608585095488360e-01 8.859818045797949182e-01 2.942464448708598912e+00 +4.483609672705520799e-01 6.670998887972758862e-01 2.076419722111321420e+00 +8.904753906462610225e-01 3.111374055960492990e-01 1.456989638885515248e+00 +1.514761014203253042e-01 1.678783474502699713e-01 1.167981405462522382e+00 +7.520504570944019918e-01 4.375530060069278138e-01 1.481577723376456435e+00 +2.397778092861350130e-01 7.997618535980651755e-01 2.342757484666917911e+00 +2.531206670418394422e-01 4.615506965402542683e-01 1.636592790074103743e+00 +7.435728910834795702e-01 3.736777422149617500e-03 -3.830974855301556015e-01 +3.688643214472042686e-01 1.883043946844410454e-01 5.667628887874931465e-01 +2.618105734985738398e-01 7.634161407858581772e-01 2.196219235036334094e+00 +9.804012704778609644e-01 6.778374519788783470e-01 2.062332573557930537e+00 +4.626539226850950870e-01 2.165404571632910669e-01 6.080610405596087453e-01 +8.806516367168518711e-01 8.681734757726988772e-01 3.521148834689036278e+00 +9.023441618521538254e-01 3.364042065683817695e-01 6.872849186385355802e-01 +4.269233628358508614e-01 8.040080415256076751e-01 2.145076436418656751e+00 +4.600117779487580272e-01 3.367630808640548201e-01 5.949168512934720487e-01 +1.807768509788476585e-03 2.420663221130627818e-01 7.130138029462870231e-01 +4.099820340838236099e-01 7.899034529768680368e-01 2.385191132276404335e+00 +4.849960694889798862e-02 1.982840001315443468e-01 6.301584230118260077e-01 +8.996124640016156526e-01 7.420756892900272073e-01 2.209456858526119838e+00 +1.492016935091921015e-01 2.147096921654393364e-01 1.314425927159785124e+00 +1.361244278677032904e-01 1.899184959262427697e-01 6.815115507105167225e-01 +5.070936213629948508e-01 8.151840969923447311e-01 2.572251842372536235e+00 +4.659745595556220588e-01 9.428226134576906947e-01 3.071537444706702757e+00 +9.429245506623894491e-01 6.629318320075742177e-01 2.498955264337161974e+00 +1.802342851054937745e-01 3.490106428957023832e-01 9.240467110042074328e-01 +8.098958385965702167e-01 1.226346777314701875e-02 -3.309643649656411890e-01 +5.417547087050482713e-01 6.658204838297733241e-01 1.509700168401965970e+00 +9.456770645166309164e-01 3.030826325980775504e-01 1.073362218932768508e+00 +4.844072092975458821e-01 7.530251506190279720e-01 2.253037890330522153e+00 +1.874829847214434242e-01 1.996541089309411543e-02 -3.827100215589169796e-01 +5.894178411794452899e-01 4.522767998056613781e-01 9.605762030309467070e-01 +7.873570305224111276e-01 6.561221564940420414e-01 2.147138860156095674e+00 +1.426527504041810168e-01 9.867494222735424536e-01 3.020454741531790166e+00 +9.391927900435999010e-01 6.852766761662199002e-01 2.251124587022512724e+00 +2.368729390231125720e-01 8.279672581331573022e-01 2.296374797803339085e+00 +7.486337179086945959e-01 6.735218106509133218e-02 -4.227848779936776991e-02 +8.866159120116020587e-01 2.321480186461521988e-02 4.525468707059353557e-01 +8.845205620098687271e-01 8.477203631758970515e-01 2.299410628329696671e+00 +1.569325367885284761e-01 5.465081367442979898e-01 9.567354628390964955e-01 +4.175773650674116100e-01 7.437289433230617197e-01 2.075641144696740881e+00 +6.766508167025210296e-01 1.401104088860956054e-01 8.133522740106857718e-02 +2.437293122123680433e-01 1.741358823378642562e-01 9.869212503030849737e-02 +5.354261087357714555e-02 5.238690518893841519e-01 1.827060912740871679e+00 +8.985079867885620297e-01 4.541127439489960338e-01 1.284689462189573028e+00 +9.859180124719979510e-02 2.425293585860593959e-01 1.794219286375581479e+00 +3.104681315904065375e-01 4.366134028470973760e-01 9.124668454612738788e-01 +2.914313030904192026e-02 3.635290659195751228e-01 6.599022168391472931e-01 +3.850158813867096130e-01 1.568035139584514903e-01 4.341784148718722536e-01 +9.497671415857267263e-02 8.881066740374826685e-01 1.856075846989231337e+00 +4.979692524704951717e-01 3.101180946379102910e-01 1.361135155764561899e+00 +6.715576315226775561e-01 6.363144202920870685e-01 1.740954301332964027e+00 +2.471059521149722160e-01 9.509378395509832105e-01 3.021130562435957678e+00 +5.031370421739999044e-01 3.645016208974644067e-01 1.768883080217330317e+00 +9.759302242105675207e-01 1.773781471130541076e-01 9.632829436705716564e-01 +9.453444859710471437e-01 9.036040116608030637e-01 2.750251783594621191e+00 +4.426946929417193699e-01 8.918920263333366405e-01 2.828866422749941378e+00 +9.111891321942485744e-01 3.253675627557718331e-01 1.231973602741280427e+00 +4.970636523091295222e-01 3.228304762823941410e-02 5.036444899974941158e-01 +3.193557603678188750e-01 3.889202362317200068e-01 1.004191383201526344e+00 +3.485843550016007875e-01 8.262768964751382450e-01 2.565665132595759346e+00 +5.833289580151596043e-01 1.596871640559106575e-01 7.812570651796820753e-01 +4.402007532660496825e-01 5.064557025928083656e-01 1.774856594303265922e+00 +5.628722233494043437e-01 9.995482018959611636e-03 -2.601902637070271918e-01 +2.950397190587025209e-01 1.288467888888046309e-01 7.000016542288067800e-01 +4.125472898302278146e-01 5.288952843785157398e-01 1.681793552162739180e+00 +8.269697309788622830e-01 2.497309294178413630e-01 9.397450583987179140e-01 +5.574931907283097177e-01 3.858638212528101574e-01 1.180284844401800814e+00 +2.215280295953003797e-01 6.958626403994585541e-01 1.731253414679733815e+00 +7.510261583555487563e-01 1.788188634455023518e-01 1.299925429501493923e+00 +2.635068227062731250e-01 5.956180221311812018e-01 1.595594858207789235e+00 +5.746838584203813882e-01 6.007903034197219494e-01 2.482844353550380578e+00 +5.740375370137625888e-01 3.261523485439853376e-01 7.240137689199145354e-01 +8.724587612099971023e-01 8.990685917081793210e-01 1.735138035221868380e+00 +5.785830373398077597e-01 6.128477676944743546e-01 1.987830964497920849e+00 +3.085802115660345457e-01 5.502498020075829999e-01 1.973949401517510527e+00 +5.162006561767278345e-01 3.647541951345616429e-01 7.132521642174485255e-01 +8.616414380258615724e-01 3.072826265633465948e-01 1.136706872178240069e+00 +3.367459218196163784e-01 7.189389091626905426e-01 2.520265143634899729e+00 +9.396466651065726872e-02 6.951274172570279797e-01 1.824043186306287589e+00 +1.065124086653937985e-01 5.595047494642528818e-01 1.298440379292570501e+00 +1.381754126276079075e-01 2.549005463370730418e-01 1.155870242740047127e+00 +1.253495284869140525e-01 9.311165344688681067e-01 3.488381325091368446e+00 +9.178938763431406800e-01 5.723086887159402059e-01 2.382892900012446802e+00 +7.714372705401217889e-01 5.399780067964872199e-01 1.248773051140989132e+00 +5.804936310782647935e-01 1.589546100553630437e-01 9.328016607099975932e-02 +4.427299235563127988e-01 7.233402821966863350e-01 2.006316910364275508e+00 +9.348250418258826633e-01 9.206452652236770673e-01 2.723270530799336786e+00 +3.916080401109484077e-01 6.031447716605714549e-01 2.610184334768270720e+00 +9.743011306032670626e-01 5.991816078526247535e-01 1.947173168675800481e+00 +9.688051256697772784e-01 2.367515763185765731e-01 1.165564742156855793e+00 +7.373234204899167255e-01 7.897627365541004529e-02 -4.823097352893258027e-01 +6.319097362953710606e-01 7.778166682524637610e-01 3.200794474196090977e+00 +8.796209364071548853e-01 3.472706073402113125e-01 1.250685385265472238e+00 +9.980931791489400240e-03 5.344631825592538465e-01 2.151465895779983484e+00 +1.037284470534557412e-01 6.808117120647625420e-01 2.051178607733819437e+00 +7.160352138637519070e-01 5.160321394322857635e-01 2.134852334773936100e+00 +4.220681228603470059e-01 2.297364297620837492e-01 6.227097790945155253e-01 diff --git a/references/logistic_regression_demo/data/artifical_lin_2.txt b/references/logistic_regression_demo/data/artifical_lin_2.txt new file mode 100644 index 0000000..0423e6d --- /dev/null +++ b/references/logistic_regression_demo/data/artifical_lin_2.txt @@ -0,0 +1,500 @@ +8.902553502043442091e-01 7.193530285868554586e-03 4.722861935711917702e+00 +5.187697179813973714e-01 6.626770873501095505e-01 2.117691187792796192e+00 +6.324427967744761236e-01 4.150316424384996594e-01 2.702997323313629963e+00 +5.340072258966490626e-01 7.297102861553304010e-01 2.848763845110981130e+00 +7.562907835710708238e-02 3.484983252202819015e-01 5.146583752179294535e-01 +6.459029351260444640e-01 1.788244889218169043e-01 2.483893007426155375e+00 +1.388942812241027447e-01 7.757611799635943939e-01 8.890859526034898819e-01 +5.376807862498653723e-01 6.867758089571460722e-01 2.784178074435446071e+00 +7.935116785508896653e-01 4.153415179689987635e-01 4.285964429548942967e+00 +1.253406552553094633e-01 6.240312870134454570e-01 7.336055984814593423e-01 +2.151430327831104217e-01 8.613651676712985594e-01 7.756012896092056019e-01 +5.991670323278381893e-01 2.579790094794917055e-01 2.761184029097501380e+00 +6.977054736867238649e-02 7.383416443956168917e-01 7.741753201883817548e-01 +9.587867685558741915e-01 2.751722383328303323e-02 4.905116787264796940e+00 +2.817130961862280847e-01 3.875394124534615736e-01 1.252643285526846562e+00 +7.237968908416224645e-01 3.861207672558994997e-01 3.225284852878170128e+00 +2.583450592711957761e-01 3.719396745654124370e-01 1.656527019070396234e+00 +8.765418000733125048e-01 2.969654372399725961e-01 4.737000161453560843e+00 +2.530576672013497008e-01 2.907461634243216908e-01 8.456199138660842607e-01 +8.104234330079270743e-01 2.912753898366352567e-01 3.560448387613745158e+00 +3.132662218424453471e-01 8.104371841944167931e-01 2.379701935140821067e+00 +5.658656150123088091e-01 3.817405960024843337e-01 2.783999692048556795e+00 +9.320637820750818925e-01 2.055182814725818874e-01 4.620336288127786517e+00 +6.968573654044996069e-01 2.551101782246331107e-01 3.703069846077785332e+00 +5.708332849426074329e-01 1.685198486129718676e-01 2.654030427193004638e+00 +3.705122845651063201e-01 9.348592942833078290e-02 1.297476213773902654e+00 +7.970337772561465473e-01 9.127383875190620000e-02 4.005564186422864381e+00 +4.620883032895647391e-01 7.090573460005439310e-01 1.811161547965992380e+00 +1.606139397731517482e-01 6.657830134602090721e-01 1.103191166302748938e+00 +1.500945265064396184e-01 3.770079899236062904e-01 1.175213496736928320e+00 +1.879123817299752641e-01 3.239600575201229127e-03 1.281344024824248251e+00 +9.413500161180935466e-01 5.335380202142231409e-01 5.062085445358230906e+00 +5.461756304730255307e-01 8.901292332727767098e-01 3.493524911885176554e+00 +8.081365858242761657e-01 8.100848584189198620e-01 4.117091361112418468e+00 +3.625810857166555934e-02 4.741567524987179150e-01 3.201028028192264840e-01 +1.739556227654529552e-01 7.803527316212930387e-01 6.499576998325453658e-01 +9.118433002076955507e-01 6.407675739336321508e-01 5.042263269352003086e+00 +9.998784077161502193e-01 7.483976874124339540e-01 5.558845672463395005e+00 +1.406330017950156996e-01 8.131089126127777345e-01 8.529366417981125714e-01 +7.427175211937184773e-01 1.786391147649002420e-04 4.025158756424569440e+00 +8.071400872932689152e-01 3.301877988765022920e-01 4.274905913060541351e+00 +6.132877578731208423e-01 1.388406393319641108e-02 3.188711023622514684e+00 +5.057427384266398596e-01 8.405641769019488452e-01 2.349412155304785976e+00 +2.031797303967974866e-02 4.719344647695818962e-01 3.813620389379724918e-01 +4.736517272410867285e-02 1.534027798909988194e-01 3.593867733048692337e-01 +4.776335617360186747e-01 4.987151799687639109e-02 1.830409779965475714e+00 +1.976771659235542211e-01 8.102491563458151802e-01 1.465082449387908214e+00 +8.945277437407285204e-01 5.392442740263292400e-03 3.947977295918374985e+00 +8.287561257675116755e-01 9.743429561462796373e-01 4.534874261370233306e+00 +1.688380953731634104e-01 4.118891207022779000e-02 1.279418479007899734e+00 +1.448747667435124065e-02 8.478624793678177785e-01 1.227845464298549794e-01 +7.742161855443102647e-01 4.517992793261232931e-01 3.799220840937802990e+00 +6.114291464929603181e-01 7.721238794474678535e-01 2.582738843687039321e+00 +5.332141338542684128e-02 1.811323490623216736e-01 -5.532764692228755443e-01 +9.408886628973710531e-01 1.556565907796476633e-01 4.862013173368588959e+00 +1.867209140598263817e-01 1.414268718940004943e-01 5.030266519738164632e-01 +4.213143040736690992e-01 8.981987503649613291e-01 2.185246694783867127e+00 +9.078690166323477584e-01 2.985901095637112368e-01 4.347341964190630570e+00 +6.110259216367625035e-01 2.740891329508408081e-01 3.112286516279270110e+00 +2.864246944057999844e-01 4.440232541035162850e-01 1.501611354202824433e+00 +7.976000361064515820e-01 9.521214723407201985e-01 4.676176245403160792e+00 +9.395323120171954479e-01 3.682769163024779413e-01 3.837826959829171436e+00 +4.915802305852885468e-01 1.325592992176947149e-01 3.045887408887914205e+00 +6.912135045495396701e-01 9.095021180520060922e-01 3.901784361171318771e+00 +8.365021221710774446e-01 2.330423758527274680e-01 4.692752544016114413e+00 +8.994373430431622518e-01 5.579966443853318081e-01 4.651076766571110355e+00 +8.840047829869890350e-01 7.946302924232317988e-02 4.495470865914159120e+00 +4.870030547843984259e-02 1.130417536936701994e-01 -1.979842822663985258e-01 +2.566144231215066185e-01 8.004514469172895330e-01 1.846141508114071073e+00 +2.939425243328720461e-01 5.546059304307632276e-01 1.672088188764273786e+00 +3.887721728600385118e-01 3.277396764886075786e-01 1.622788204200148465e+00 +2.765333636294917685e-01 9.149313567016718052e-01 1.274653239072587319e+00 +5.173775106636566701e-01 4.149392656687573844e-01 2.246544924727742032e+00 +9.891094556265209725e-01 6.923113664898092878e-01 4.836418038491469673e+00 +3.981472653836684028e-01 4.207151626684387802e-01 2.622178491653474275e+00 +8.827783903913843933e-02 5.398600383984650808e-01 5.854720332511057501e-01 +8.695327093477914771e-01 9.037758084512063084e-01 4.217357887069312916e+00 +9.261141014600784427e-01 8.648792135202629794e-01 4.362203110770590975e+00 +9.612459417162249053e-01 7.050786237077200092e-02 4.819714013999864655e+00 +2.175702969902234551e-01 5.383503237913629391e-01 6.422898183962644225e-01 +1.141591865049933485e-01 3.067751231168288628e-01 9.708775886892598850e-01 +9.272686854457729000e-01 7.215902803912347396e-01 4.912604569584945402e+00 +5.142798403237214266e-02 1.323898218486864176e-01 -2.901656550987544714e-01 +3.477567836222974496e-01 7.258162872275639721e-01 1.499258770144148878e+00 +3.235652288022236034e-01 8.369419714161933088e-01 1.571424800555489609e+00 +7.203814453323311717e-01 4.727506656800010143e-01 3.610536347843415150e+00 +7.960667136507829644e-01 3.151108943578667665e-01 3.752957460338226969e+00 +2.288503628882998520e-01 4.024954251467381949e-01 1.371885357377812920e+00 +4.597628562196365287e-01 8.536134369011283418e-01 2.732575733060945478e+00 +6.347368854302326557e-01 6.357899574546558297e-01 3.034337764857596209e+00 +4.550391785745410145e-01 4.880784332075441823e-01 2.755172191061923570e+00 +1.614857391711226331e-01 4.614475762528154057e-01 1.499379129535866273e+00 +6.643461971390929310e-01 7.954073913580996802e-01 3.531564275970451749e+00 +1.965089225797753691e-01 7.636878482296945991e-01 1.451592487989275648e+00 +1.038971224149078942e-01 3.766159557047549233e-01 -1.836209249054253645e-01 +8.677666738428043702e-01 7.301133471076725057e-01 5.089526743702606382e+00 +2.111611745437268484e-01 6.009916007985899311e-01 1.282591111998210964e+00 +8.165867355173265230e-01 8.691451449107020499e-01 4.150710836202859966e+00 +3.541549885223922445e-01 4.126823205016850737e-01 1.746130910505607536e+00 +2.682537411455077070e-01 5.898466928168949464e-01 1.688764412028580075e+00 +8.679848596269212901e-01 5.608438559562867187e-01 3.835160975999336141e+00 +5.776833370668147394e-01 2.731663343536713251e-01 2.505993440852065657e+00 +8.138648125452317972e-01 3.718807175174709823e-02 4.028457616581778034e+00 +2.282377830458008905e-01 8.730998562571533617e-01 1.516197472423553627e+00 +3.461019532650697617e-01 5.821410153889622352e-01 1.004111206774395804e+00 +3.783886586420059928e-01 8.135627697992697804e-01 2.115310715120200857e+00 +8.534863514661925610e-01 4.892294575400191192e-03 4.447818431098251146e+00 +6.481313117292060166e-01 3.244210515162255781e-01 3.658318972809582625e+00 +4.068552360857179417e-01 1.308692143986797118e-01 1.909640133336931278e+00 +3.470492019114007620e-01 3.248366399862634424e-02 1.229853411392451301e+00 +1.803367765699718239e-01 1.822694920673567642e-01 8.396573726461289411e-01 +5.827091441604549393e-01 9.670590760160453492e-01 2.859802087839336426e+00 +8.866423412642148172e-01 5.889083209276405606e-01 4.575011256779902169e+00 +4.625427554234465832e-01 2.062725334982733472e-01 2.831277898318763420e+00 +7.681228254469802952e-01 3.103104106796082950e-01 4.387633281419768494e+00 +2.526355891537099829e-01 7.617333331965988608e-01 1.114869422139043609e+00 +7.603477278415293750e-01 4.241384240546804962e-01 3.749759653376115054e+00 +6.203407641210935131e-01 7.137261472194282863e-01 3.845803566538283924e+00 +5.460065626420126383e-01 6.961595933740327702e-02 2.607109568577683056e+00 +2.002964571171567121e-01 9.836069085534716594e-01 9.439292093204048051e-01 +4.111579845363828589e-01 4.942143050291614159e-04 2.014214453147192607e+00 +5.645844948925443640e-01 3.598987404824569580e-01 3.443453989379621216e+00 +9.792195162518624318e-01 7.976062421249713319e-01 4.888998610361928066e+00 +3.919576698632000200e-01 8.298716087831260468e-01 2.368435603719456051e+00 +8.273517898490360123e-01 8.978670536590080964e-01 4.394100575666468167e+00 +7.946735660263274381e-01 6.215152458852629680e-01 3.747096732015856801e+00 +5.961957851041439493e-01 2.461206941442136698e-01 3.374475969432942257e+00 +2.859418838668200680e-01 4.253262462006508482e-01 1.236450630546637841e+00 +9.284125059869496877e-02 1.023211363768292692e-01 8.078131097547296413e-01 +9.942014694080807402e-01 4.401475622539808841e-01 4.478781628662761527e+00 +9.660790698231932483e-01 2.157934563130896599e-01 5.139668619561629015e+00 +1.819280091787371934e-01 2.450541968023522976e-02 3.235996722822381821e-01 +6.228574615567123995e-01 3.175805215380118618e-01 3.061935718089351166e+00 +4.106235935497739575e-01 9.932038108499299245e-01 1.527363224316587553e+00 +8.241855016207615403e-01 6.723237130512089710e-01 4.292850669843126354e+00 +4.942330091732183295e-02 9.734433703964097129e-01 8.522371467976199710e-01 +7.928026671381125379e-01 5.377329766501475206e-01 4.269632283568844500e+00 +4.019913504018723938e-01 6.641977194508473792e-01 2.015170053280050499e+00 +6.727365172965377171e-01 9.472694398556646966e-01 3.377089737324597163e+00 +8.471272616565498348e-01 5.881538977075595476e-01 4.392336826747588852e+00 +9.953130974848735102e-01 5.148218292773272253e-01 5.277731189116402710e+00 +6.172057967770711029e-01 5.483888340607580014e-01 3.115421823647429367e+00 +7.667299866969052857e-01 9.708997836540530502e-01 4.815854014705881703e+00 +8.781626806683332509e-01 6.634197225683624577e-02 5.365951496188033687e+00 +4.294200428945138537e-02 6.696048344399376795e-01 -2.275716814686346567e-01 +5.440453006410250758e-01 6.064316601914145899e-01 3.356510781321417003e+00 +1.399761884378478705e-01 3.518806601919229893e-01 3.577695275566450395e-01 +8.617267230190176486e-01 5.817745672790290978e-01 4.380852978567977729e+00 +8.264449990414002301e-02 8.814671293110630801e-01 8.430203107240037408e-01 +3.554315087585453448e-01 1.052810186720425367e-01 1.697177576687770806e+00 +3.434478849249136267e-01 4.693421423115070601e-01 1.634727581041684141e+00 +4.811747232410813480e-01 2.085887053917928613e-01 2.177694796147195966e+00 +7.302922441145309751e-02 5.158455228807825588e-01 -5.309006260347731709e-02 +3.658734359575759321e-01 9.328332684465587832e-01 2.523958506341843044e+00 +3.657999960478349744e-01 4.081630405036833498e-01 2.111385140904039837e+00 +6.443174387789217805e-01 5.491135794316760466e-01 3.366581180589497180e+00 +9.523794802263382264e-01 1.383789433423351367e-01 4.929200293322493209e+00 +4.546913387947764118e-01 9.715774690687235537e-01 1.675694272311694988e+00 +9.968356156113117317e-01 4.849172172090066013e-02 5.499251190168591208e+00 +1.080802422921062211e-01 8.101819144197683897e-01 5.936288997891117081e-01 +9.968880256402596896e-01 6.114623789164482792e-01 5.284518758584743736e+00 +5.632787639975594951e-01 9.298242639666138842e-01 3.107059073342421485e+00 +9.929753879792999616e-01 8.277738257041842296e-01 5.322221163042863523e+00 +2.017873440820810993e-01 3.930041059519143731e-01 1.662831985484818809e+00 +9.988387775047696815e-01 6.406545347041754379e-01 5.024155855036609886e+00 +7.928318114305882292e-01 9.562120145401467042e-01 3.880440662985864986e+00 +8.491150745182682869e-01 3.159146326781765435e-01 4.153138632374417050e+00 +2.538959571592438458e-01 9.152979260463364186e-01 1.425816156136774593e+00 +1.593521171925258439e-01 7.912454811296263379e-01 6.645027624838938385e-01 +4.687429644847865839e-01 6.169269754948423223e-01 2.318841373712335674e+00 +5.917214079785239056e-01 4.910927510555839204e-01 2.613624254253550827e+00 +5.159279263802796223e-01 5.365655117605450108e-02 2.356555547714634269e+00 +6.591863970099155479e-01 6.717663880576866253e-01 3.565002125565192248e+00 +2.353643520705253067e-01 6.117795523900337873e-02 1.053403399203287849e+00 +9.050467773061064980e-01 5.916260158603710018e-01 5.032003229394669930e+00 +5.130829149189519711e-01 7.054695271858724137e-01 3.023972070674382895e+00 +5.946913876118109510e-01 6.759359176617056875e-01 3.668847014476045221e+00 +6.245089498291649388e-01 5.991354645614580532e-01 3.174217498078534483e+00 +9.175513731195615863e-01 2.008496049192866062e-01 4.481042734737560096e+00 +2.627023761581419592e-01 6.756838359786891957e-01 1.962880687582638339e+00 +4.080917878138698995e-01 3.550958257571504850e-01 1.773222645699008559e+00 +6.761975173333450995e-01 7.035843745311997077e-01 3.646215505941157176e+00 +1.213245902031894197e-01 8.304395741316301649e-01 1.428499551425091774e+00 +4.429739754493243753e-01 6.792941621952564013e-01 1.740577045825967062e+00 +8.086469038977305290e-01 2.632471450436880689e-01 3.600809383061207125e+00 +6.793637147200348725e-01 8.130003247485133588e-01 3.578466665421228932e+00 +3.278330562730565889e-01 3.053195962968354715e-01 2.017123323688825742e+00 +5.601724056241701444e-01 9.502574964657128920e-01 3.787256636353711237e+00 +2.812221250012958418e-01 6.256619352802152978e-01 1.354117263602656385e+00 +4.591503551836220165e-01 6.994040558540611796e-01 2.611546123315748424e+00 +1.741841616904893364e-02 1.994594239735637542e-01 2.180155993493790301e-03 +7.947968108101745033e-01 5.809813800307277454e-01 4.108806760165046867e+00 +6.951791123019658292e-01 7.531792040448515024e-03 3.524650861968446680e+00 +8.555011297950287918e-01 6.592057432749437451e-01 4.132370780325799409e+00 +8.561582747701000917e-01 3.718286774329542244e-01 4.512464374466206962e+00 +2.654009300233250990e-01 5.850267012824045265e-01 1.276558037832541403e+00 +2.768625995117022232e-01 3.081426789498873386e-01 1.187842454855385643e+00 +3.941124620889586705e-01 7.509965570437445725e-01 2.507479506634473054e+00 +6.713386114230961432e-01 7.578530303471531226e-02 3.568353984972153725e+00 +7.560506967163682646e-01 1.024499151114731665e-01 3.723865621757185274e+00 +1.806270859597414180e-02 7.109895257280992587e-01 -3.821610113221962646e-03 +5.304541601357893876e-01 5.440232983860595617e-01 2.372159670668812836e+00 +4.083183069007400023e-01 8.747853423214335677e-02 1.282918692687436302e+00 +1.106452590284701110e-01 1.071864798143432607e-01 3.860397439482302628e-01 +1.177711726368863010e-01 9.525478610767630361e-01 7.523116950455114305e-01 +7.032665632909994580e-01 2.710214934413025523e-01 3.381370525555345452e+00 +1.010749651379918568e-01 3.332479537340378162e-01 9.455254057624443709e-01 +1.063975870085455133e-01 6.182755188765054477e-02 4.008501639690126295e-01 +1.496747909510319774e-01 1.796009792503032720e-01 9.225866852352979652e-01 +7.127826032464666950e-01 2.014182235583916736e-03 3.551616246980145775e+00 +1.120445926250559499e-01 7.697964015004733485e-01 4.989883878130709216e-01 +3.480537144688354845e-01 6.064120155352608066e-01 1.700370020689161432e+00 +5.903050320993662448e-01 5.874799979352398616e-01 3.397164990386770889e+00 +2.999418794752777284e-01 4.745115611223454932e-01 9.544355780523869903e-01 +8.161672816912131090e-01 2.376170388099575481e-01 4.245337357280297930e+00 +7.841150676575880940e-01 4.246443328555549179e-02 3.544431586715989013e+00 +1.888468662989832847e-01 1.588353013347186815e-01 1.355757381154146790e+00 +7.833663614903485506e-02 4.261665732398400852e-02 6.109301450525963517e-01 +9.026481770631714641e-01 3.076573390407671971e-01 4.432786615971243016e+00 +2.670964823025856472e-02 4.677940032664674730e-01 -3.801484706112182033e-02 +9.314633957246650775e-01 6.983712531909573862e-01 4.951670684342587947e+00 +5.325406900292606327e-02 3.723933969945265599e-01 4.343157639521054714e-01 +7.344499009926139799e-01 6.992355376368768471e-01 3.846558295644644687e+00 +2.695096457961408953e-01 5.117833729099821038e-01 8.956853997660404465e-01 +1.107737426657140478e-02 7.820856802133314689e-01 3.419652185585412285e-01 +1.266328546384232201e-02 9.737762952534544381e-01 3.208850087732688650e-01 +9.742103929520157246e-01 2.465152312553294811e-01 4.908928922838748932e+00 +9.431512191776294518e-01 5.445640124298737339e-01 4.371405740503699455e+00 +4.685842404870689260e-01 1.940286296095491414e-01 2.960018317863545967e+00 +4.069078704231012811e-01 4.086612490605914250e-01 1.997713291886546783e+00 +8.203293619248421820e-01 4.842311857959981092e-01 4.288152129869915896e+00 +1.655870282244578107e-01 9.263402953726815880e-01 -1.371848231998213929e-01 +8.051375479173161764e-01 5.648739416463132157e-01 3.871323705867104614e+00 +4.958101601140715298e-01 4.550976109219856403e-01 2.342683755862304817e+00 +3.022921738409011239e-01 5.850906911661442056e-01 1.733913846286263771e+00 +8.261508186840310630e-01 5.673235742902436041e-01 4.102463670415864350e+00 +5.050822352032021678e-01 1.688141234528890422e-01 1.991936616609028654e+00 +2.515172464477288816e-01 1.681478490960512939e-01 1.121911802395029190e+00 +5.263810435223783557e-01 8.514030391672555709e-02 2.511142190287897868e+00 +7.740604474300135651e-01 1.710906378902935510e-01 4.069337549008531063e+00 +8.136210720851223543e-01 4.886343242359501016e-01 4.212500435358648154e+00 +4.661160735365488250e-01 7.058440886560580774e-01 3.037085615343088296e+00 +4.242240344439670574e-01 4.237200424056742909e-01 3.328482059929308789e+00 +9.716365604834359404e-01 1.390851225906999389e-01 5.150097438849347675e+00 +1.118418607702701406e-01 8.254801758072631834e-01 7.667690156887928543e-01 +9.040859471999541652e-01 4.915470453646719751e-01 4.760751852537422835e+00 +2.424823162795021192e-01 5.742061383399259533e-01 1.319183405974152956e+00 +3.543391246477066714e-01 6.755905890131740366e-01 1.704998683481461441e+00 +2.135852723294864308e-01 8.904816047166850268e-01 1.442281712505609992e+00 +1.903698799876129000e-01 4.516535191118928871e-01 9.761455706688600964e-01 +3.530153476827597725e-01 5.250488936431743081e-01 1.430971316469179744e+00 +4.277753743395051877e-01 4.628648328438786930e-01 1.878709286548413626e+00 +5.369675195416835356e-01 2.580986218837634238e-01 2.600615011120702480e+00 +2.546915474505969668e-01 7.775789294357958736e-01 9.063075077892018827e-01 +8.729387250977393986e-01 8.663100694350281961e-01 4.798971238209840173e+00 +9.117683396985862831e-01 3.159908020608167556e-01 3.706562475407189527e+00 +7.745796600423543454e-01 4.953520921860106174e-01 3.876554941068059978e+00 +4.177153720805908410e-01 7.170787294717717586e-02 2.269550443272649431e+00 +9.397554111882033823e-01 2.314113511233855114e-01 4.868031352435417958e+00 +6.978906283403238930e-01 6.027190710947856189e-01 3.272065933823683714e+00 +9.867946174870922960e-01 7.554518113060578743e-01 5.158494636624732621e+00 +3.959843884024971672e-02 3.616724225907808066e-01 6.469027443911796738e-01 +9.578756271735796579e-01 3.539823400375810003e-01 5.485371760677108632e+00 +6.152670093561325437e-01 5.115356310380463345e-01 2.754818503780777306e+00 +9.810151687727044489e-01 8.692210052251059249e-02 4.284886585260795577e+00 +2.830662491111537449e-01 7.957951723069504046e-01 1.680928689766612472e+00 +6.034150706678950149e-01 4.126116473219870739e-01 3.784414542578703244e+00 +5.779951770432674163e-01 6.716316996626865432e-01 3.334913580380273856e+00 +6.201337006852551959e-01 4.488529673797322372e-01 3.347552394360280736e+00 +3.476405497810753920e-01 5.062354840316863891e-01 1.983774287074308029e+00 +7.921736986669751790e-01 2.884214658967099165e-02 4.243078657594337777e+00 +1.943616200067197486e-01 4.807304187292147368e-01 1.571193852163393245e+00 +8.452039072298875855e-01 9.667501309157785494e-01 5.063179028495235379e+00 +9.935088542838369507e-01 8.305038283104202446e-01 5.408675447077476939e+00 +7.490785446071297482e-01 9.481095336535100282e-01 4.147884154780753008e+00 +9.325198926247071363e-01 4.952448235763340367e-02 4.747077465701705634e+00 +6.681437517817250260e-01 9.327321958943725067e-01 3.118946774472070693e+00 +9.738751147927149354e-02 2.117023718252546427e-01 -2.727828504450833247e-01 +3.401885988134277783e-01 7.137427129138051995e-01 1.141184534163143027e+00 +9.112289752867522852e-01 9.614208039275407014e-01 5.660917284666649785e+00 +1.703223790937545834e-01 3.280258260817743299e-01 7.837825596359903058e-01 +3.908042827512103745e-02 9.518434040550575181e-01 3.677968104146689399e-02 +3.039489810078243037e-01 5.120114777313169441e-01 9.805833554165650501e-01 +6.380574901082720629e-01 4.867615974021388681e-01 3.109859668341811378e+00 +6.342403097055698824e-01 7.546286985064016850e-01 3.397502497295331381e+00 +5.638698020701464753e-01 8.923442495380846662e-01 2.369266542220243910e+00 +3.575636917065314613e-01 1.547211110349390184e-01 1.292296987015075782e+00 +6.303122673573039458e-01 3.083555354371561030e-01 2.616369001864625954e+00 +5.210461831411086209e-01 6.749954577903509723e-01 1.975368681996582998e+00 +5.942703722928894816e-01 4.871116855642279031e-01 3.718527256418860283e+00 +3.533922613993187856e-01 8.017186938272113927e-01 2.050415758601479066e+00 +7.949563516492000881e-01 7.569940514803505938e-01 4.381287648780601174e+00 +8.501907066323004525e-01 7.393984740440502357e-01 4.919093916773214836e+00 +9.200298009768502761e-01 9.938852717343175103e-01 4.259044777638105295e+00 +8.644560207454676792e-01 9.975330340514554361e-01 4.682193981225292845e+00 +1.088519527208741122e-01 1.963812665577030492e-01 1.070733100207510891e+00 +4.556158466394802931e-01 4.899313216767148260e-01 2.769691407307627529e+00 +2.974315517605302661e-01 8.173500794692589722e-01 1.735941272044910555e+00 +2.396113243268572779e-01 3.906404844484276939e-01 1.406972990200790807e+00 +8.100658765102481951e-01 2.648888092432173380e-01 4.658400777557799799e+00 +4.277788414474006373e-01 4.022644362132115070e-01 2.772478440852416792e+00 +5.822175634400963418e-01 8.206669741395847817e-01 3.404000987263741784e+00 +7.125901857884929802e-01 5.928688878268014717e-01 2.746991602948760658e+00 +2.979836332894291173e-01 3.986253846989663563e-01 1.703858007849015976e+00 +7.997698902784957653e-01 4.059258984225663225e-01 3.534310292757433025e+00 +4.522283778821561961e-01 8.710208434442369141e-01 3.019092050051808584e+00 +7.581376719297696631e-01 8.220998888792908632e-01 4.418695479960300432e+00 +1.972428942832202825e-01 1.154221742223087155e-01 8.425430296432390165e-01 +6.223627999722493032e-01 7.314930526686147516e-02 2.314344759304361787e+00 +5.808300754248821862e-01 6.781466720147005800e-01 2.602975187488947739e+00 +9.576552439612673329e-02 9.928949432726992264e-01 5.030806356841338589e-01 +4.100191968015015620e-01 1.766477706761815369e-02 2.199085868051550374e+00 +2.892753633894417087e-01 5.249937301651120825e-01 1.510928050123241828e+00 +5.480326803984194584e-01 6.765224924869054357e-01 2.256073738015950347e+00 +4.653862840236095977e-01 1.475417366536124764e-01 1.938120603143478560e+00 +1.481108453258558333e-01 4.675039260192945800e-01 1.311026471697977147e+00 +1.299439650181278827e-01 1.994133519847534064e-01 5.454775900606607664e-01 +1.106819435806695173e-01 7.764336624926136965e-01 9.666599147513424972e-01 +5.566539743940633889e-01 8.994534645058296363e-01 2.927366595661727633e+00 +9.067406463349181323e-02 8.621879052072318750e-01 8.315219299702474309e-01 +6.938256790006662733e-01 6.065923110957928133e-01 3.284626404618808948e+00 +8.614276617758029886e-01 2.475854633144438655e-01 4.680055810944661943e+00 +2.167196015288621602e-01 7.132989102141332749e-01 1.149718497607195244e+00 +8.413586552623651960e-01 5.516499469071780570e-01 3.311758835415347768e+00 +3.907179200432292498e-01 4.357109683062667660e-01 2.274073788004209895e+00 +1.589735395931844986e-01 8.208887640617014148e-01 1.015565884492410476e+00 +9.613965492088401010e-01 4.809474690694466315e-01 5.157947985083261244e+00 +8.297755466368100796e-01 1.644098554161677050e-01 3.586618888242581349e+00 +8.388098815227268412e-01 4.476810509068985811e-01 5.040051653054658409e+00 +2.279856297891573735e-01 2.433050868928676724e-01 1.550905751489106921e+00 +7.893810651517562116e-01 3.221654836020699797e-01 3.997764308421166035e+00 +6.561675210916022571e-01 4.351741126163224394e-01 3.039802858379251571e+00 +5.740090150255279244e-01 5.948497497584274152e-01 2.908245846269567725e+00 +7.328360080277063204e-01 2.134127006746993072e-01 4.568117657375682761e+00 +4.946637824629790403e-01 9.510041338062535932e-02 1.822473122426795378e+00 +8.627953936010578362e-01 7.932255036082680455e-02 4.492409540273036406e+00 +2.082514147474257005e-01 4.924490887581506326e-01 1.043094182591048469e+00 +6.138460921037049989e-01 4.272596946961463305e-01 2.219129657444722348e+00 +9.252039330093201341e-01 3.945180092044131559e-01 4.436142674559070187e+00 +1.821449462205293468e-01 3.871847528554943629e-01 1.422428385194712819e+00 +4.041894486358277305e-02 4.730473946927595819e-01 -3.012226300897136166e-02 +3.636686652037771639e-01 5.873537929400659552e-01 1.851504192678116612e+00 +6.978650572978981614e-01 3.882536807361431919e-01 3.060444352409822155e+00 +1.078527797771136054e-01 6.957852579382399760e-01 -6.518479046929900322e-01 +9.325503438800145650e-01 2.143804208718624871e-02 4.610707268249928603e+00 +6.663415478668331948e-01 9.281821628240296551e-01 3.002954918326525835e+00 +4.813244567031937926e-02 7.079686934907392093e-02 6.160699011960787397e-01 +2.257010966384187522e-02 7.687909081325765559e-01 4.691271534502503560e-01 +6.061116229161606084e-01 4.191344814402613306e-01 3.747818547247798282e+00 +4.655677615800267732e-01 5.827148457971130791e-01 2.376212361555217978e+00 +2.825891342108899362e-02 3.532841522503780141e-01 6.620932360305411546e-01 +6.009826152607300465e-02 7.905021321943074275e-01 3.638498600086091939e-01 +8.827068713844454795e-02 4.438307876100586746e-01 5.808743778595876206e-01 +7.991261876646593709e-01 7.854151510467033415e-02 4.204719952423675799e+00 +1.189838444905066961e-01 7.416370166532364472e-01 8.322146103945595730e-01 +6.225837692759601527e-01 6.310620232117586381e-01 3.453154489543852623e+00 +7.311956651166588994e-01 3.168642488438819793e-01 4.352727674411122294e+00 +5.756564763243883220e-01 2.828406554721885069e-01 3.947408034545492939e+00 +9.382055486044094117e-01 7.168147601660477264e-01 4.948352770080884255e+00 +9.546660828884934169e-02 1.437744534916255423e-01 4.844118257903424207e-01 +1.151229123196606530e-02 5.435892212943771451e-02 -7.713427384278788157e-01 +4.289306534746354371e-01 7.585115118695228142e-01 1.672943511274438855e+00 +2.720841418364485786e-01 1.683401564116593363e-01 9.880622913101808624e-01 +9.553521920108963839e-01 5.848667324267601275e-01 4.808516969944884423e+00 +9.560671618377164505e-01 5.181438446082220484e-01 4.933951664828871486e+00 +5.196770028592577750e-01 7.306585795529608740e-01 3.451093432477776446e+00 +5.349779123318809670e-02 2.328861462583488029e-01 7.704348747284186505e-01 +3.859630940832011747e-01 9.789769759429359786e-01 2.074017873792239453e+00 +7.490205155897455835e-01 3.267712126974233744e-01 3.651412368265581243e+00 +1.668441368245933143e-01 9.133330140609380310e-01 1.243613443703563526e+00 +2.205754665833413730e-01 7.832697007249476151e-01 8.595611522198556287e-01 +9.404829422756235680e-01 9.929289525804722016e-01 5.870103925445858906e+00 +1.885613455195433996e-01 9.627881098859110143e-01 3.800423621122401840e-01 +2.979547345918899248e-01 4.730276887758750881e-01 1.935528123129407918e+00 +8.519970016958130499e-01 5.943420665775437373e-01 4.310612038812805302e+00 +7.865511680844923248e-01 9.416708270931484215e-02 3.582760101894609139e+00 +3.547299087599004030e-01 8.445259368683057932e-01 2.127252690320021067e+00 +8.516151544949630559e-01 8.147740388614883589e-01 4.810189857293523552e+00 +9.837521205417909531e-01 9.499682533043930510e-01 4.754976751498949383e+00 +3.737339448736265446e-02 5.689895437011959212e-01 -1.117927867466818603e-01 +1.248452393691709128e-01 3.108682762971861635e-01 3.059567719721493773e-01 +8.485331105413984609e-02 8.067137657807001982e-01 7.644506990207884378e-01 +8.493746129016015445e-01 9.598202598405187747e-01 4.648012803649603342e+00 +1.661884326471347872e-01 9.545306174615980632e-01 1.210655276442758055e+00 +2.115569588053255456e-01 7.917981136715546153e-01 4.492708813379883148e-01 +7.973993318061458613e-01 9.554658728242193533e-02 4.119536471100667008e+00 +4.199405150546330345e-01 3.148719730595287425e-01 1.236848839470887640e+00 +6.762135448160583318e-01 5.604047250520123313e-01 2.910528104527299931e+00 +1.793503471079430645e-01 6.921908683206966506e-01 1.611537779389007552e+00 +3.393629583105367553e-01 7.712311693730592443e-01 1.848155157842310992e+00 +8.362277165385599842e-01 8.309138865141540986e-01 4.206771899349675436e+00 +7.851254371836934309e-01 3.006834116028120896e-01 3.505872113422314307e+00 +4.007973546322256553e-01 8.691050993207729558e-01 2.328489728285702220e+00 +8.735930802668734341e-01 6.962474167713060824e-01 3.580318220057124634e+00 +5.871151497198540126e-01 1.153138340802493111e-01 2.539780065278996801e+00 +6.462095801076146451e-01 1.281924764607952349e-01 4.137574844925852702e+00 +9.236416657093560190e-01 7.178359759200697576e-01 4.226289114208362285e+00 +9.194376552125794744e-01 3.121869331310231921e-01 5.213485048810325928e+00 +4.384694901432926173e-01 8.387390970367403220e-02 2.743511503146341290e+00 +7.152802840844866283e-01 2.143176360763772159e-01 3.858880502287514336e+00 +7.475678434845520748e-01 2.674533934032751192e-01 3.273610117647138384e+00 +3.411257136223635467e-01 6.670886650940466289e-02 1.864105062920903277e+00 +2.132768386275984973e-02 9.256663982227738563e-01 -1.163649561141600342e-01 +5.897306418192969080e-01 7.003134124765836299e-01 3.359490726121215687e+00 +4.802798226410556204e-01 6.483683637597190685e-01 1.993783201669373506e+00 +8.176621480896004712e-01 1.043603729430799820e-01 4.091295839545188606e+00 +7.855212575202087377e-01 7.157119340511944872e-01 4.507042197180223475e+00 +5.684528941022698456e-01 2.856354236553743098e-01 2.437751537534779800e+00 +9.930883471075108160e-01 7.712736516485831917e-01 4.929021629209715982e+00 +6.530624944143862409e-01 8.343149271709339176e-01 2.913924188638919777e+00 +5.819676274191801779e-01 2.540258043319393311e-01 2.757011911636317869e+00 +4.486322285661017428e-01 3.548077819389158227e-01 2.008724623551346511e+00 +5.337060915547677808e-01 2.134512399881538514e-01 2.045276372596628978e+00 +5.266467762777323758e-01 9.431487670339336882e-01 2.872547719207049433e+00 +8.101758718861310493e-01 9.025539622773742776e-01 4.449909344161872227e+00 +7.699639056639613344e-01 9.683912061347941247e-01 4.472990741094066358e+00 +9.233466972407796680e-01 5.286249270385992016e-01 3.977771758806475155e+00 +8.623248714303998197e-01 1.334532827503559504e-01 4.578051879720754336e+00 +2.045649072490571818e-01 8.511360791325676134e-01 1.622138715515219820e+00 +8.808425032518121256e-01 3.278457833231640528e-02 4.767460771953611953e+00 +1.747261335267188409e-01 5.208159514249149913e-01 9.107489734808142945e-01 +9.038321562587570135e-02 5.097515707018624997e-01 8.679635110003780518e-01 +2.667337674975465145e-01 3.395183568046972189e-01 3.954282994748328228e-01 +8.942288885142990473e-01 1.218536601033595179e-01 4.516544786048811488e+00 +2.495138014351878653e-01 3.362240006002403803e-02 7.274186371739601586e-01 +6.632655291795690466e-01 1.051626646997456671e-01 3.366351748724312198e+00 +4.636131384771519093e-01 7.391689207887839341e-01 9.190924064812198147e-01 +9.849727748399310645e-01 4.105825659188074850e-01 5.081535606333690502e+00 +8.200513987740756239e-01 7.870989941024173486e-01 5.105767638351050408e+00 +8.345258582652974599e-01 6.504287753442997699e-01 4.469356354417690191e+00 +5.530559412316298218e-01 3.014739582304205578e-01 2.221987665263402967e+00 +5.728205136550856835e-01 6.961249314381353637e-01 3.332064394953069275e+00 +7.728992910594711940e-02 7.465071614300229363e-01 5.072220713377015855e-01 +3.553351520590779522e-01 5.618566588746031210e-01 1.805773594922777336e+00 +7.780093699322522260e-01 6.370279516433825506e-01 3.796003212735603594e+00 +4.200421460868658530e-01 8.648496031052255173e-02 2.073022179648955188e+00 +7.015632316649023092e-01 6.484387924575446549e-01 3.559606914505504260e+00 +2.405632780665224457e-01 3.195669345676046547e-01 7.324100489677702885e-01 +3.311074230748540792e-01 8.685757534288673920e-02 1.123436154899798867e+00 +3.998601941346905386e-01 5.552870830766860610e-01 1.915775874339034512e+00 +3.912244127302044738e-01 9.760058205599845271e-01 1.832042737206649452e+00 +7.545640111214302337e-01 6.239422861366119566e-01 3.933844589523757929e+00 +1.731020325733930720e-01 8.307779734406610661e-01 1.584837322370275192e+00 +9.140779443033931750e-01 1.761632572799414209e-01 4.635617983734372949e+00 +6.406597700159744058e-01 4.449920268218388042e-02 3.619782604199833553e+00 +1.801895938347751747e-01 2.885096528520691983e-02 9.253929900355385429e-01 +3.038534282472222792e-01 8.109008691606200969e-02 1.931362524069328845e+00 +2.364111047450501157e-01 9.621771163112075032e-01 1.175931679959700382e+00 +1.888579567058331632e-01 2.989827457994593818e-01 1.331691847396279549e+00 +4.017801235588650544e-01 5.746849052510728528e-01 2.284038251179917545e+00 +7.691213425655432090e-01 3.395055574798373499e-01 3.100343064061910958e+00 +6.550934968984141182e-01 3.720036956270784678e-01 3.491089545507741754e+00 +4.023686635365519848e-02 9.581326531584744011e-01 3.637448978915412967e-01 +6.285091574769069434e-01 9.827706180286350790e-01 3.274648861414132028e+00 +7.868202014082179563e-01 5.408929245820974785e-01 4.063026715844942238e+00 +3.910870713585677949e-01 4.115275676678212813e-01 1.977382791230766657e+00 +4.810888481033770425e-01 2.335910309083686354e-01 2.112886227322197108e+00 +9.483244100044019298e-02 3.605432105348165273e-01 2.671379064678270909e-01 +3.615132104900360410e-01 8.959298980423738845e-01 1.439109578489957020e+00 +3.496088798675596188e-01 1.159868538215188538e-01 1.100416491082838011e+00 +1.752584989807870475e-01 8.500433679768688577e-01 9.456504046667791874e-01 +5.696541721886292375e-01 2.719451527203955443e-01 3.207022932205441546e+00 +1.257906969503060912e-01 5.102860482935389630e-01 4.391573016080443370e-01 +9.659180041815862428e-02 6.949380529845092802e-01 7.072119294438530268e-01 +2.054150544247815846e-01 5.882009510622373538e-01 5.779033712916188392e-01 +2.210044142168009484e-01 4.618615594701123150e-01 9.140878975298083464e-01 +4.154650354296188786e-01 4.045679816906707638e-01 2.198907643480010332e+00 +7.371618606847257782e-01 3.338129400401774749e-01 3.245693217291083954e+00 +3.937950341162077539e-01 2.663433002832898966e-01 1.386067558419330936e+00 +3.114390166515048630e-01 6.835068649679199027e-01 1.388705802372090403e+00 +2.969984169267261276e-01 2.167207871474979841e-01 1.225921547211908269e+00 +8.665887431269525543e-01 2.719244077785530900e-01 4.962370196944209333e+00 +5.920168417723699061e-01 5.686248008396056486e-01 3.691946248409955444e+00 +7.039049387710701877e-01 9.766367763810511748e-01 4.356350940590338006e+00 +3.805298246038364418e-01 8.410053556422516507e-01 1.971952595700146027e+00 +2.261698816689344804e-01 5.125989413008203988e-01 4.317032515586423091e-01 +8.080180552046107856e-01 1.312926632015042339e-01 3.368419745332182469e+00 +7.284160939898801645e-01 5.059757554471627783e-01 4.317314105858608642e+00 +4.129099719860259698e-01 1.671213862046826426e-01 2.035668918620091805e+00 +6.233205366576620721e-01 6.614357814101893274e-01 3.208310246239634456e+00 +8.109529878867841601e-01 3.114791270951091651e-01 4.178127503612525828e+00 +5.568666377962800951e-01 7.908161752846655235e-01 3.274160032551334254e+00 +6.584994598486142436e-01 7.441165751555391950e-01 3.849476891377942245e+00 +8.838710503302456001e-01 1.582292539619044591e-01 4.073499503581468062e+00 +7.647528413413395842e-02 9.997612698905589124e-01 2.572544553349556118e-01 +8.560337057837326125e-01 1.906169904574519514e-01 3.681701253116876682e+00 +4.132389782657139854e-01 6.875371741120974711e-01 2.352924830879973062e+00 +5.916647208438258199e-01 6.878460327662490048e-01 3.104853608287138744e+00 +2.782180868122997586e-01 6.776851436298622078e-01 1.761580580541214802e+00 +9.266054863421087084e-01 2.627492879721394781e-01 4.628763757826364511e+00 +5.523392520960408447e-01 6.644924434656053203e-01 3.125174246926364141e+00 +5.287394139091310397e-01 6.394872222310177268e-02 3.117993250820441098e+00 +3.686558096442410504e-01 6.268691773262476952e-01 1.936875223460121642e+00 +9.508303497338959076e-01 2.603495644055497937e-01 5.539503503356506542e+00 +4.974170422761559074e-02 5.234160700859691318e-01 9.854439982145415389e-01 +9.343567329844875147e-01 1.007677945281176823e-01 5.049580527766805105e+00 +3.951543969490975972e-01 5.731481704547733980e-01 2.435359065439732795e+00 +2.593456023940206023e-01 9.908603604474142124e-02 1.265386858376813972e+00 +1.945948991403323447e-03 7.928332931112429538e-01 -7.151524026985970339e-01 +8.014805253134763552e-01 6.015755345876689919e-01 4.634065213613259182e+00 diff --git a/references/logistic_regression_demo/data/breast-cancer-wisconsin.data b/references/logistic_regression_demo/data/breast-cancer-wisconsin.data new file mode 100644 index 0000000..a50b76f --- /dev/null +++ b/references/logistic_regression_demo/data/breast-cancer-wisconsin.data @@ -0,0 +1,699 @@ +1000025,5,1,1,1,2,1,3,1,1,2 +1002945,5,4,4,5,7,10,3,2,1,2 +1015425,3,1,1,1,2,2,3,1,1,2 +1016277,6,8,8,1,3,4,3,7,1,2 +1017023,4,1,1,3,2,1,3,1,1,2 +1017122,8,10,10,8,7,10,9,7,1,4 +1018099,1,1,1,1,2,10,3,1,1,2 +1018561,2,1,2,1,2,1,3,1,1,2 +1033078,2,1,1,1,2,1,1,1,5,2 +1033078,4,2,1,1,2,1,2,1,1,2 +1035283,1,1,1,1,1,1,3,1,1,2 +1036172,2,1,1,1,2,1,2,1,1,2 +1041801,5,3,3,3,2,3,4,4,1,4 +1043999,1,1,1,1,2,3,3,1,1,2 +1044572,8,7,5,10,7,9,5,5,4,4 +1047630,7,4,6,4,6,1,4,3,1,4 +1048672,4,1,1,1,2,1,2,1,1,2 +1049815,4,1,1,1,2,1,3,1,1,2 +1050670,10,7,7,6,4,10,4,1,2,4 +1050718,6,1,1,1,2,1,3,1,1,2 +1054590,7,3,2,10,5,10,5,4,4,4 +1054593,10,5,5,3,6,7,7,10,1,4 +1056784,3,1,1,1,2,1,2,1,1,2 +1057013,8,4,5,1,2,?,7,3,1,4 +1059552,1,1,1,1,2,1,3,1,1,2 +1065726,5,2,3,4,2,7,3,6,1,4 +1066373,3,2,1,1,1,1,2,1,1,2 +1066979,5,1,1,1,2,1,2,1,1,2 +1067444,2,1,1,1,2,1,2,1,1,2 +1070935,1,1,3,1,2,1,1,1,1,2 +1070935,3,1,1,1,1,1,2,1,1,2 +1071760,2,1,1,1,2,1,3,1,1,2 +1072179,10,7,7,3,8,5,7,4,3,4 +1074610,2,1,1,2,2,1,3,1,1,2 +1075123,3,1,2,1,2,1,2,1,1,2 +1079304,2,1,1,1,2,1,2,1,1,2 +1080185,10,10,10,8,6,1,8,9,1,4 +1081791,6,2,1,1,1,1,7,1,1,2 +1084584,5,4,4,9,2,10,5,6,1,4 +1091262,2,5,3,3,6,7,7,5,1,4 +1096800,6,6,6,9,6,?,7,8,1,2 +1099510,10,4,3,1,3,3,6,5,2,4 +1100524,6,10,10,2,8,10,7,3,3,4 +1102573,5,6,5,6,10,1,3,1,1,4 +1103608,10,10,10,4,8,1,8,10,1,4 +1103722,1,1,1,1,2,1,2,1,2,2 +1105257,3,7,7,4,4,9,4,8,1,4 +1105524,1,1,1,1,2,1,2,1,1,2 +1106095,4,1,1,3,2,1,3,1,1,2 +1106829,7,8,7,2,4,8,3,8,2,4 +1108370,9,5,8,1,2,3,2,1,5,4 +1108449,5,3,3,4,2,4,3,4,1,4 +1110102,10,3,6,2,3,5,4,10,2,4 +1110503,5,5,5,8,10,8,7,3,7,4 +1110524,10,5,5,6,8,8,7,1,1,4 +1111249,10,6,6,3,4,5,3,6,1,4 +1112209,8,10,10,1,3,6,3,9,1,4 +1113038,8,2,4,1,5,1,5,4,4,4 +1113483,5,2,3,1,6,10,5,1,1,4 +1113906,9,5,5,2,2,2,5,1,1,4 +1115282,5,3,5,5,3,3,4,10,1,4 +1115293,1,1,1,1,2,2,2,1,1,2 +1116116,9,10,10,1,10,8,3,3,1,4 +1116132,6,3,4,1,5,2,3,9,1,4 +1116192,1,1,1,1,2,1,2,1,1,2 +1116998,10,4,2,1,3,2,4,3,10,4 +1117152,4,1,1,1,2,1,3,1,1,2 +1118039,5,3,4,1,8,10,4,9,1,4 +1120559,8,3,8,3,4,9,8,9,8,4 +1121732,1,1,1,1,2,1,3,2,1,2 +1121919,5,1,3,1,2,1,2,1,1,2 +1123061,6,10,2,8,10,2,7,8,10,4 +1124651,1,3,3,2,2,1,7,2,1,2 +1125035,9,4,5,10,6,10,4,8,1,4 +1126417,10,6,4,1,3,4,3,2,3,4 +1131294,1,1,2,1,2,2,4,2,1,2 +1132347,1,1,4,1,2,1,2,1,1,2 +1133041,5,3,1,2,2,1,2,1,1,2 +1133136,3,1,1,1,2,3,3,1,1,2 +1136142,2,1,1,1,3,1,2,1,1,2 +1137156,2,2,2,1,1,1,7,1,1,2 +1143978,4,1,1,2,2,1,2,1,1,2 +1143978,5,2,1,1,2,1,3,1,1,2 +1147044,3,1,1,1,2,2,7,1,1,2 +1147699,3,5,7,8,8,9,7,10,7,4 +1147748,5,10,6,1,10,4,4,10,10,4 +1148278,3,3,6,4,5,8,4,4,1,4 +1148873,3,6,6,6,5,10,6,8,3,4 +1152331,4,1,1,1,2,1,3,1,1,2 +1155546,2,1,1,2,3,1,2,1,1,2 +1156272,1,1,1,1,2,1,3,1,1,2 +1156948,3,1,1,2,2,1,1,1,1,2 +1157734,4,1,1,1,2,1,3,1,1,2 +1158247,1,1,1,1,2,1,2,1,1,2 +1160476,2,1,1,1,2,1,3,1,1,2 +1164066,1,1,1,1,2,1,3,1,1,2 +1165297,2,1,1,2,2,1,1,1,1,2 +1165790,5,1,1,1,2,1,3,1,1,2 +1165926,9,6,9,2,10,6,2,9,10,4 +1166630,7,5,6,10,5,10,7,9,4,4 +1166654,10,3,5,1,10,5,3,10,2,4 +1167439,2,3,4,4,2,5,2,5,1,4 +1167471,4,1,2,1,2,1,3,1,1,2 +1168359,8,2,3,1,6,3,7,1,1,4 +1168736,10,10,10,10,10,1,8,8,8,4 +1169049,7,3,4,4,3,3,3,2,7,4 +1170419,10,10,10,8,2,10,4,1,1,4 +1170420,1,6,8,10,8,10,5,7,1,4 +1171710,1,1,1,1,2,1,2,3,1,2 +1171710,6,5,4,4,3,9,7,8,3,4 +1171795,1,3,1,2,2,2,5,3,2,2 +1171845,8,6,4,3,5,9,3,1,1,4 +1172152,10,3,3,10,2,10,7,3,3,4 +1173216,10,10,10,3,10,8,8,1,1,4 +1173235,3,3,2,1,2,3,3,1,1,2 +1173347,1,1,1,1,2,5,1,1,1,2 +1173347,8,3,3,1,2,2,3,2,1,2 +1173509,4,5,5,10,4,10,7,5,8,4 +1173514,1,1,1,1,4,3,1,1,1,2 +1173681,3,2,1,1,2,2,3,1,1,2 +1174057,1,1,2,2,2,1,3,1,1,2 +1174057,4,2,1,1,2,2,3,1,1,2 +1174131,10,10,10,2,10,10,5,3,3,4 +1174428,5,3,5,1,8,10,5,3,1,4 +1175937,5,4,6,7,9,7,8,10,1,4 +1176406,1,1,1,1,2,1,2,1,1,2 +1176881,7,5,3,7,4,10,7,5,5,4 +1177027,3,1,1,1,2,1,3,1,1,2 +1177399,8,3,5,4,5,10,1,6,2,4 +1177512,1,1,1,1,10,1,1,1,1,2 +1178580,5,1,3,1,2,1,2,1,1,2 +1179818,2,1,1,1,2,1,3,1,1,2 +1180194,5,10,8,10,8,10,3,6,3,4 +1180523,3,1,1,1,2,1,2,2,1,2 +1180831,3,1,1,1,3,1,2,1,1,2 +1181356,5,1,1,1,2,2,3,3,1,2 +1182404,4,1,1,1,2,1,2,1,1,2 +1182410,3,1,1,1,2,1,1,1,1,2 +1183240,4,1,2,1,2,1,2,1,1,2 +1183246,1,1,1,1,1,?,2,1,1,2 +1183516,3,1,1,1,2,1,1,1,1,2 +1183911,2,1,1,1,2,1,1,1,1,2 +1183983,9,5,5,4,4,5,4,3,3,4 +1184184,1,1,1,1,2,5,1,1,1,2 +1184241,2,1,1,1,2,1,2,1,1,2 +1184840,1,1,3,1,2,?,2,1,1,2 +1185609,3,4,5,2,6,8,4,1,1,4 +1185610,1,1,1,1,3,2,2,1,1,2 +1187457,3,1,1,3,8,1,5,8,1,2 +1187805,8,8,7,4,10,10,7,8,7,4 +1188472,1,1,1,1,1,1,3,1,1,2 +1189266,7,2,4,1,6,10,5,4,3,4 +1189286,10,10,8,6,4,5,8,10,1,4 +1190394,4,1,1,1,2,3,1,1,1,2 +1190485,1,1,1,1,2,1,1,1,1,2 +1192325,5,5,5,6,3,10,3,1,1,4 +1193091,1,2,2,1,2,1,2,1,1,2 +1193210,2,1,1,1,2,1,3,1,1,2 +1193683,1,1,2,1,3,?,1,1,1,2 +1196295,9,9,10,3,6,10,7,10,6,4 +1196915,10,7,7,4,5,10,5,7,2,4 +1197080,4,1,1,1,2,1,3,2,1,2 +1197270,3,1,1,1,2,1,3,1,1,2 +1197440,1,1,1,2,1,3,1,1,7,2 +1197510,5,1,1,1,2,?,3,1,1,2 +1197979,4,1,1,1,2,2,3,2,1,2 +1197993,5,6,7,8,8,10,3,10,3,4 +1198128,10,8,10,10,6,1,3,1,10,4 +1198641,3,1,1,1,2,1,3,1,1,2 +1199219,1,1,1,2,1,1,1,1,1,2 +1199731,3,1,1,1,2,1,1,1,1,2 +1199983,1,1,1,1,2,1,3,1,1,2 +1200772,1,1,1,1,2,1,2,1,1,2 +1200847,6,10,10,10,8,10,10,10,7,4 +1200892,8,6,5,4,3,10,6,1,1,4 +1200952,5,8,7,7,10,10,5,7,1,4 +1201834,2,1,1,1,2,1,3,1,1,2 +1201936,5,10,10,3,8,1,5,10,3,4 +1202125,4,1,1,1,2,1,3,1,1,2 +1202812,5,3,3,3,6,10,3,1,1,4 +1203096,1,1,1,1,1,1,3,1,1,2 +1204242,1,1,1,1,2,1,1,1,1,2 +1204898,6,1,1,1,2,1,3,1,1,2 +1205138,5,8,8,8,5,10,7,8,1,4 +1205579,8,7,6,4,4,10,5,1,1,4 +1206089,2,1,1,1,1,1,3,1,1,2 +1206695,1,5,8,6,5,8,7,10,1,4 +1206841,10,5,6,10,6,10,7,7,10,4 +1207986,5,8,4,10,5,8,9,10,1,4 +1208301,1,2,3,1,2,1,3,1,1,2 +1210963,10,10,10,8,6,8,7,10,1,4 +1211202,7,5,10,10,10,10,4,10,3,4 +1212232,5,1,1,1,2,1,2,1,1,2 +1212251,1,1,1,1,2,1,3,1,1,2 +1212422,3,1,1,1,2,1,3,1,1,2 +1212422,4,1,1,1,2,1,3,1,1,2 +1213375,8,4,4,5,4,7,7,8,2,2 +1213383,5,1,1,4,2,1,3,1,1,2 +1214092,1,1,1,1,2,1,1,1,1,2 +1214556,3,1,1,1,2,1,2,1,1,2 +1214966,9,7,7,5,5,10,7,8,3,4 +1216694,10,8,8,4,10,10,8,1,1,4 +1216947,1,1,1,1,2,1,3,1,1,2 +1217051,5,1,1,1,2,1,3,1,1,2 +1217264,1,1,1,1,2,1,3,1,1,2 +1218105,5,10,10,9,6,10,7,10,5,4 +1218741,10,10,9,3,7,5,3,5,1,4 +1218860,1,1,1,1,1,1,3,1,1,2 +1218860,1,1,1,1,1,1,3,1,1,2 +1219406,5,1,1,1,1,1,3,1,1,2 +1219525,8,10,10,10,5,10,8,10,6,4 +1219859,8,10,8,8,4,8,7,7,1,4 +1220330,1,1,1,1,2,1,3,1,1,2 +1221863,10,10,10,10,7,10,7,10,4,4 +1222047,10,10,10,10,3,10,10,6,1,4 +1222936,8,7,8,7,5,5,5,10,2,4 +1223282,1,1,1,1,2,1,2,1,1,2 +1223426,1,1,1,1,2,1,3,1,1,2 +1223793,6,10,7,7,6,4,8,10,2,4 +1223967,6,1,3,1,2,1,3,1,1,2 +1224329,1,1,1,2,2,1,3,1,1,2 +1225799,10,6,4,3,10,10,9,10,1,4 +1226012,4,1,1,3,1,5,2,1,1,4 +1226612,7,5,6,3,3,8,7,4,1,4 +1227210,10,5,5,6,3,10,7,9,2,4 +1227244,1,1,1,1,2,1,2,1,1,2 +1227481,10,5,7,4,4,10,8,9,1,4 +1228152,8,9,9,5,3,5,7,7,1,4 +1228311,1,1,1,1,1,1,3,1,1,2 +1230175,10,10,10,3,10,10,9,10,1,4 +1230688,7,4,7,4,3,7,7,6,1,4 +1231387,6,8,7,5,6,8,8,9,2,4 +1231706,8,4,6,3,3,1,4,3,1,2 +1232225,10,4,5,5,5,10,4,1,1,4 +1236043,3,3,2,1,3,1,3,6,1,2 +1241232,3,1,4,1,2,?,3,1,1,2 +1241559,10,8,8,2,8,10,4,8,10,4 +1241679,9,8,8,5,6,2,4,10,4,4 +1242364,8,10,10,8,6,9,3,10,10,4 +1243256,10,4,3,2,3,10,5,3,2,4 +1270479,5,1,3,3,2,2,2,3,1,2 +1276091,3,1,1,3,1,1,3,1,1,2 +1277018,2,1,1,1,2,1,3,1,1,2 +128059,1,1,1,1,2,5,5,1,1,2 +1285531,1,1,1,1,2,1,3,1,1,2 +1287775,5,1,1,2,2,2,3,1,1,2 +144888,8,10,10,8,5,10,7,8,1,4 +145447,8,4,4,1,2,9,3,3,1,4 +167528,4,1,1,1,2,1,3,6,1,2 +169356,3,1,1,1,2,?,3,1,1,2 +183913,1,2,2,1,2,1,1,1,1,2 +191250,10,4,4,10,2,10,5,3,3,4 +1017023,6,3,3,5,3,10,3,5,3,2 +1100524,6,10,10,2,8,10,7,3,3,4 +1116116,9,10,10,1,10,8,3,3,1,4 +1168736,5,6,6,2,4,10,3,6,1,4 +1182404,3,1,1,1,2,1,1,1,1,2 +1182404,3,1,1,1,2,1,2,1,1,2 +1198641,3,1,1,1,2,1,3,1,1,2 +242970,5,7,7,1,5,8,3,4,1,2 +255644,10,5,8,10,3,10,5,1,3,4 +263538,5,10,10,6,10,10,10,6,5,4 +274137,8,8,9,4,5,10,7,8,1,4 +303213,10,4,4,10,6,10,5,5,1,4 +314428,7,9,4,10,10,3,5,3,3,4 +1182404,5,1,4,1,2,1,3,2,1,2 +1198641,10,10,6,3,3,10,4,3,2,4 +320675,3,3,5,2,3,10,7,1,1,4 +324427,10,8,8,2,3,4,8,7,8,4 +385103,1,1,1,1,2,1,3,1,1,2 +390840,8,4,7,1,3,10,3,9,2,4 +411453,5,1,1,1,2,1,3,1,1,2 +320675,3,3,5,2,3,10,7,1,1,4 +428903,7,2,4,1,3,4,3,3,1,4 +431495,3,1,1,1,2,1,3,2,1,2 +432809,3,1,3,1,2,?,2,1,1,2 +434518,3,1,1,1,2,1,2,1,1,2 +452264,1,1,1,1,2,1,2,1,1,2 +456282,1,1,1,1,2,1,3,1,1,2 +476903,10,5,7,3,3,7,3,3,8,4 +486283,3,1,1,1,2,1,3,1,1,2 +486662,2,1,1,2,2,1,3,1,1,2 +488173,1,4,3,10,4,10,5,6,1,4 +492268,10,4,6,1,2,10,5,3,1,4 +508234,7,4,5,10,2,10,3,8,2,4 +527363,8,10,10,10,8,10,10,7,3,4 +529329,10,10,10,10,10,10,4,10,10,4 +535331,3,1,1,1,3,1,2,1,1,2 +543558,6,1,3,1,4,5,5,10,1,4 +555977,5,6,6,8,6,10,4,10,4,4 +560680,1,1,1,1,2,1,1,1,1,2 +561477,1,1,1,1,2,1,3,1,1,2 +563649,8,8,8,1,2,?,6,10,1,4 +601265,10,4,4,6,2,10,2,3,1,4 +606140,1,1,1,1,2,?,2,1,1,2 +606722,5,5,7,8,6,10,7,4,1,4 +616240,5,3,4,3,4,5,4,7,1,2 +61634,5,4,3,1,2,?,2,3,1,2 +625201,8,2,1,1,5,1,1,1,1,2 +63375,9,1,2,6,4,10,7,7,2,4 +635844,8,4,10,5,4,4,7,10,1,4 +636130,1,1,1,1,2,1,3,1,1,2 +640744,10,10,10,7,9,10,7,10,10,4 +646904,1,1,1,1,2,1,3,1,1,2 +653777,8,3,4,9,3,10,3,3,1,4 +659642,10,8,4,4,4,10,3,10,4,4 +666090,1,1,1,1,2,1,3,1,1,2 +666942,1,1,1,1,2,1,3,1,1,2 +667204,7,8,7,6,4,3,8,8,4,4 +673637,3,1,1,1,2,5,5,1,1,2 +684955,2,1,1,1,3,1,2,1,1,2 +688033,1,1,1,1,2,1,1,1,1,2 +691628,8,6,4,10,10,1,3,5,1,4 +693702,1,1,1,1,2,1,1,1,1,2 +704097,1,1,1,1,1,1,2,1,1,2 +704168,4,6,5,6,7,?,4,9,1,2 +706426,5,5,5,2,5,10,4,3,1,4 +709287,6,8,7,8,6,8,8,9,1,4 +718641,1,1,1,1,5,1,3,1,1,2 +721482,4,4,4,4,6,5,7,3,1,2 +730881,7,6,3,2,5,10,7,4,6,4 +733639,3,1,1,1,2,?,3,1,1,2 +733639,3,1,1,1,2,1,3,1,1,2 +733823,5,4,6,10,2,10,4,1,1,4 +740492,1,1,1,1,2,1,3,1,1,2 +743348,3,2,2,1,2,1,2,3,1,2 +752904,10,1,1,1,2,10,5,4,1,4 +756136,1,1,1,1,2,1,2,1,1,2 +760001,8,10,3,2,6,4,3,10,1,4 +760239,10,4,6,4,5,10,7,1,1,4 +76389,10,4,7,2,2,8,6,1,1,4 +764974,5,1,1,1,2,1,3,1,2,2 +770066,5,2,2,2,2,1,2,2,1,2 +785208,5,4,6,6,4,10,4,3,1,4 +785615,8,6,7,3,3,10,3,4,2,4 +792744,1,1,1,1,2,1,1,1,1,2 +797327,6,5,5,8,4,10,3,4,1,4 +798429,1,1,1,1,2,1,3,1,1,2 +704097,1,1,1,1,1,1,2,1,1,2 +806423,8,5,5,5,2,10,4,3,1,4 +809912,10,3,3,1,2,10,7,6,1,4 +810104,1,1,1,1,2,1,3,1,1,2 +814265,2,1,1,1,2,1,1,1,1,2 +814911,1,1,1,1,2,1,1,1,1,2 +822829,7,6,4,8,10,10,9,5,3,4 +826923,1,1,1,1,2,1,1,1,1,2 +830690,5,2,2,2,3,1,1,3,1,2 +831268,1,1,1,1,1,1,1,3,1,2 +832226,3,4,4,10,5,1,3,3,1,4 +832567,4,2,3,5,3,8,7,6,1,4 +836433,5,1,1,3,2,1,1,1,1,2 +837082,2,1,1,1,2,1,3,1,1,2 +846832,3,4,5,3,7,3,4,6,1,2 +850831,2,7,10,10,7,10,4,9,4,4 +855524,1,1,1,1,2,1,2,1,1,2 +857774,4,1,1,1,3,1,2,2,1,2 +859164,5,3,3,1,3,3,3,3,3,4 +859350,8,10,10,7,10,10,7,3,8,4 +866325,8,10,5,3,8,4,4,10,3,4 +873549,10,3,5,4,3,7,3,5,3,4 +877291,6,10,10,10,10,10,8,10,10,4 +877943,3,10,3,10,6,10,5,1,4,4 +888169,3,2,2,1,4,3,2,1,1,2 +888523,4,4,4,2,2,3,2,1,1,2 +896404,2,1,1,1,2,1,3,1,1,2 +897172,2,1,1,1,2,1,2,1,1,2 +95719,6,10,10,10,8,10,7,10,7,4 +160296,5,8,8,10,5,10,8,10,3,4 +342245,1,1,3,1,2,1,1,1,1,2 +428598,1,1,3,1,1,1,2,1,1,2 +492561,4,3,2,1,3,1,2,1,1,2 +493452,1,1,3,1,2,1,1,1,1,2 +493452,4,1,2,1,2,1,2,1,1,2 +521441,5,1,1,2,2,1,2,1,1,2 +560680,3,1,2,1,2,1,2,1,1,2 +636437,1,1,1,1,2,1,1,1,1,2 +640712,1,1,1,1,2,1,2,1,1,2 +654244,1,1,1,1,1,1,2,1,1,2 +657753,3,1,1,4,3,1,2,2,1,2 +685977,5,3,4,1,4,1,3,1,1,2 +805448,1,1,1,1,2,1,1,1,1,2 +846423,10,6,3,6,4,10,7,8,4,4 +1002504,3,2,2,2,2,1,3,2,1,2 +1022257,2,1,1,1,2,1,1,1,1,2 +1026122,2,1,1,1,2,1,1,1,1,2 +1071084,3,3,2,2,3,1,1,2,3,2 +1080233,7,6,6,3,2,10,7,1,1,4 +1114570,5,3,3,2,3,1,3,1,1,2 +1114570,2,1,1,1,2,1,2,2,1,2 +1116715,5,1,1,1,3,2,2,2,1,2 +1131411,1,1,1,2,2,1,2,1,1,2 +1151734,10,8,7,4,3,10,7,9,1,4 +1156017,3,1,1,1,2,1,2,1,1,2 +1158247,1,1,1,1,1,1,1,1,1,2 +1158405,1,2,3,1,2,1,2,1,1,2 +1168278,3,1,1,1,2,1,2,1,1,2 +1176187,3,1,1,1,2,1,3,1,1,2 +1196263,4,1,1,1,2,1,1,1,1,2 +1196475,3,2,1,1,2,1,2,2,1,2 +1206314,1,2,3,1,2,1,1,1,1,2 +1211265,3,10,8,7,6,9,9,3,8,4 +1213784,3,1,1,1,2,1,1,1,1,2 +1223003,5,3,3,1,2,1,2,1,1,2 +1223306,3,1,1,1,2,4,1,1,1,2 +1223543,1,2,1,3,2,1,1,2,1,2 +1229929,1,1,1,1,2,1,2,1,1,2 +1231853,4,2,2,1,2,1,2,1,1,2 +1234554,1,1,1,1,2,1,2,1,1,2 +1236837,2,3,2,2,2,2,3,1,1,2 +1237674,3,1,2,1,2,1,2,1,1,2 +1238021,1,1,1,1,2,1,2,1,1,2 +1238464,1,1,1,1,1,?,2,1,1,2 +1238633,10,10,10,6,8,4,8,5,1,4 +1238915,5,1,2,1,2,1,3,1,1,2 +1238948,8,5,6,2,3,10,6,6,1,4 +1239232,3,3,2,6,3,3,3,5,1,2 +1239347,8,7,8,5,10,10,7,2,1,4 +1239967,1,1,1,1,2,1,2,1,1,2 +1240337,5,2,2,2,2,2,3,2,2,2 +1253505,2,3,1,1,5,1,1,1,1,2 +1255384,3,2,2,3,2,3,3,1,1,2 +1257200,10,10,10,7,10,10,8,2,1,4 +1257648,4,3,3,1,2,1,3,3,1,2 +1257815,5,1,3,1,2,1,2,1,1,2 +1257938,3,1,1,1,2,1,1,1,1,2 +1258549,9,10,10,10,10,10,10,10,1,4 +1258556,5,3,6,1,2,1,1,1,1,2 +1266154,8,7,8,2,4,2,5,10,1,4 +1272039,1,1,1,1,2,1,2,1,1,2 +1276091,2,1,1,1,2,1,2,1,1,2 +1276091,1,3,1,1,2,1,2,2,1,2 +1276091,5,1,1,3,4,1,3,2,1,2 +1277629,5,1,1,1,2,1,2,2,1,2 +1293439,3,2,2,3,2,1,1,1,1,2 +1293439,6,9,7,5,5,8,4,2,1,2 +1294562,10,8,10,1,3,10,5,1,1,4 +1295186,10,10,10,1,6,1,2,8,1,4 +527337,4,1,1,1,2,1,1,1,1,2 +558538,4,1,3,3,2,1,1,1,1,2 +566509,5,1,1,1,2,1,1,1,1,2 +608157,10,4,3,10,4,10,10,1,1,4 +677910,5,2,2,4,2,4,1,1,1,2 +734111,1,1,1,3,2,3,1,1,1,2 +734111,1,1,1,1,2,2,1,1,1,2 +780555,5,1,1,6,3,1,2,1,1,2 +827627,2,1,1,1,2,1,1,1,1,2 +1049837,1,1,1,1,2,1,1,1,1,2 +1058849,5,1,1,1,2,1,1,1,1,2 +1182404,1,1,1,1,1,1,1,1,1,2 +1193544,5,7,9,8,6,10,8,10,1,4 +1201870,4,1,1,3,1,1,2,1,1,2 +1202253,5,1,1,1,2,1,1,1,1,2 +1227081,3,1,1,3,2,1,1,1,1,2 +1230994,4,5,5,8,6,10,10,7,1,4 +1238410,2,3,1,1,3,1,1,1,1,2 +1246562,10,2,2,1,2,6,1,1,2,4 +1257470,10,6,5,8,5,10,8,6,1,4 +1259008,8,8,9,6,6,3,10,10,1,4 +1266124,5,1,2,1,2,1,1,1,1,2 +1267898,5,1,3,1,2,1,1,1,1,2 +1268313,5,1,1,3,2,1,1,1,1,2 +1268804,3,1,1,1,2,5,1,1,1,2 +1276091,6,1,1,3,2,1,1,1,1,2 +1280258,4,1,1,1,2,1,1,2,1,2 +1293966,4,1,1,1,2,1,1,1,1,2 +1296572,10,9,8,7,6,4,7,10,3,4 +1298416,10,6,6,2,4,10,9,7,1,4 +1299596,6,6,6,5,4,10,7,6,2,4 +1105524,4,1,1,1,2,1,1,1,1,2 +1181685,1,1,2,1,2,1,2,1,1,2 +1211594,3,1,1,1,1,1,2,1,1,2 +1238777,6,1,1,3,2,1,1,1,1,2 +1257608,6,1,1,1,1,1,1,1,1,2 +1269574,4,1,1,1,2,1,1,1,1,2 +1277145,5,1,1,1,2,1,1,1,1,2 +1287282,3,1,1,1,2,1,1,1,1,2 +1296025,4,1,2,1,2,1,1,1,1,2 +1296263,4,1,1,1,2,1,1,1,1,2 +1296593,5,2,1,1,2,1,1,1,1,2 +1299161,4,8,7,10,4,10,7,5,1,4 +1301945,5,1,1,1,1,1,1,1,1,2 +1302428,5,3,2,4,2,1,1,1,1,2 +1318169,9,10,10,10,10,5,10,10,10,4 +474162,8,7,8,5,5,10,9,10,1,4 +787451,5,1,2,1,2,1,1,1,1,2 +1002025,1,1,1,3,1,3,1,1,1,2 +1070522,3,1,1,1,1,1,2,1,1,2 +1073960,10,10,10,10,6,10,8,1,5,4 +1076352,3,6,4,10,3,3,3,4,1,4 +1084139,6,3,2,1,3,4,4,1,1,4 +1115293,1,1,1,1,2,1,1,1,1,2 +1119189,5,8,9,4,3,10,7,1,1,4 +1133991,4,1,1,1,1,1,2,1,1,2 +1142706,5,10,10,10,6,10,6,5,2,4 +1155967,5,1,2,10,4,5,2,1,1,2 +1170945,3,1,1,1,1,1,2,1,1,2 +1181567,1,1,1,1,1,1,1,1,1,2 +1182404,4,2,1,1,2,1,1,1,1,2 +1204558,4,1,1,1,2,1,2,1,1,2 +1217952,4,1,1,1,2,1,2,1,1,2 +1224565,6,1,1,1,2,1,3,1,1,2 +1238186,4,1,1,1,2,1,2,1,1,2 +1253917,4,1,1,2,2,1,2,1,1,2 +1265899,4,1,1,1,2,1,3,1,1,2 +1268766,1,1,1,1,2,1,1,1,1,2 +1277268,3,3,1,1,2,1,1,1,1,2 +1286943,8,10,10,10,7,5,4,8,7,4 +1295508,1,1,1,1,2,4,1,1,1,2 +1297327,5,1,1,1,2,1,1,1,1,2 +1297522,2,1,1,1,2,1,1,1,1,2 +1298360,1,1,1,1,2,1,1,1,1,2 +1299924,5,1,1,1,2,1,2,1,1,2 +1299994,5,1,1,1,2,1,1,1,1,2 +1304595,3,1,1,1,1,1,2,1,1,2 +1306282,6,6,7,10,3,10,8,10,2,4 +1313325,4,10,4,7,3,10,9,10,1,4 +1320077,1,1,1,1,1,1,1,1,1,2 +1320077,1,1,1,1,1,1,2,1,1,2 +1320304,3,1,2,2,2,1,1,1,1,2 +1330439,4,7,8,3,4,10,9,1,1,4 +333093,1,1,1,1,3,1,1,1,1,2 +369565,4,1,1,1,3,1,1,1,1,2 +412300,10,4,5,4,3,5,7,3,1,4 +672113,7,5,6,10,4,10,5,3,1,4 +749653,3,1,1,1,2,1,2,1,1,2 +769612,3,1,1,2,2,1,1,1,1,2 +769612,4,1,1,1,2,1,1,1,1,2 +798429,4,1,1,1,2,1,3,1,1,2 +807657,6,1,3,2,2,1,1,1,1,2 +8233704,4,1,1,1,1,1,2,1,1,2 +837480,7,4,4,3,4,10,6,9,1,4 +867392,4,2,2,1,2,1,2,1,1,2 +869828,1,1,1,1,1,1,3,1,1,2 +1043068,3,1,1,1,2,1,2,1,1,2 +1056171,2,1,1,1,2,1,2,1,1,2 +1061990,1,1,3,2,2,1,3,1,1,2 +1113061,5,1,1,1,2,1,3,1,1,2 +1116192,5,1,2,1,2,1,3,1,1,2 +1135090,4,1,1,1,2,1,2,1,1,2 +1145420,6,1,1,1,2,1,2,1,1,2 +1158157,5,1,1,1,2,2,2,1,1,2 +1171578,3,1,1,1,2,1,1,1,1,2 +1174841,5,3,1,1,2,1,1,1,1,2 +1184586,4,1,1,1,2,1,2,1,1,2 +1186936,2,1,3,2,2,1,2,1,1,2 +1197527,5,1,1,1,2,1,2,1,1,2 +1222464,6,10,10,10,4,10,7,10,1,4 +1240603,2,1,1,1,1,1,1,1,1,2 +1240603,3,1,1,1,1,1,1,1,1,2 +1241035,7,8,3,7,4,5,7,8,2,4 +1287971,3,1,1,1,2,1,2,1,1,2 +1289391,1,1,1,1,2,1,3,1,1,2 +1299924,3,2,2,2,2,1,4,2,1,2 +1306339,4,4,2,1,2,5,2,1,2,2 +1313658,3,1,1,1,2,1,1,1,1,2 +1313982,4,3,1,1,2,1,4,8,1,2 +1321264,5,2,2,2,1,1,2,1,1,2 +1321321,5,1,1,3,2,1,1,1,1,2 +1321348,2,1,1,1,2,1,2,1,1,2 +1321931,5,1,1,1,2,1,2,1,1,2 +1321942,5,1,1,1,2,1,3,1,1,2 +1321942,5,1,1,1,2,1,3,1,1,2 +1328331,1,1,1,1,2,1,3,1,1,2 +1328755,3,1,1,1,2,1,2,1,1,2 +1331405,4,1,1,1,2,1,3,2,1,2 +1331412,5,7,10,10,5,10,10,10,1,4 +1333104,3,1,2,1,2,1,3,1,1,2 +1334071,4,1,1,1,2,3,2,1,1,2 +1343068,8,4,4,1,6,10,2,5,2,4 +1343374,10,10,8,10,6,5,10,3,1,4 +1344121,8,10,4,4,8,10,8,2,1,4 +142932,7,6,10,5,3,10,9,10,2,4 +183936,3,1,1,1,2,1,2,1,1,2 +324382,1,1,1,1,2,1,2,1,1,2 +378275,10,9,7,3,4,2,7,7,1,4 +385103,5,1,2,1,2,1,3,1,1,2 +690557,5,1,1,1,2,1,2,1,1,2 +695091,1,1,1,1,2,1,2,1,1,2 +695219,1,1,1,1,2,1,2,1,1,2 +824249,1,1,1,1,2,1,3,1,1,2 +871549,5,1,2,1,2,1,2,1,1,2 +878358,5,7,10,6,5,10,7,5,1,4 +1107684,6,10,5,5,4,10,6,10,1,4 +1115762,3,1,1,1,2,1,1,1,1,2 +1217717,5,1,1,6,3,1,1,1,1,2 +1239420,1,1,1,1,2,1,1,1,1,2 +1254538,8,10,10,10,6,10,10,10,1,4 +1261751,5,1,1,1,2,1,2,2,1,2 +1268275,9,8,8,9,6,3,4,1,1,4 +1272166,5,1,1,1,2,1,1,1,1,2 +1294261,4,10,8,5,4,1,10,1,1,4 +1295529,2,5,7,6,4,10,7,6,1,4 +1298484,10,3,4,5,3,10,4,1,1,4 +1311875,5,1,2,1,2,1,1,1,1,2 +1315506,4,8,6,3,4,10,7,1,1,4 +1320141,5,1,1,1,2,1,2,1,1,2 +1325309,4,1,2,1,2,1,2,1,1,2 +1333063,5,1,3,1,2,1,3,1,1,2 +1333495,3,1,1,1,2,1,2,1,1,2 +1334659,5,2,4,1,1,1,1,1,1,2 +1336798,3,1,1,1,2,1,2,1,1,2 +1344449,1,1,1,1,1,1,2,1,1,2 +1350568,4,1,1,1,2,1,2,1,1,2 +1352663,5,4,6,8,4,1,8,10,1,4 +188336,5,3,2,8,5,10,8,1,2,4 +352431,10,5,10,3,5,8,7,8,3,4 +353098,4,1,1,2,2,1,1,1,1,2 +411453,1,1,1,1,2,1,1,1,1,2 +557583,5,10,10,10,10,10,10,1,1,4 +636375,5,1,1,1,2,1,1,1,1,2 +736150,10,4,3,10,3,10,7,1,2,4 +803531,5,10,10,10,5,2,8,5,1,4 +822829,8,10,10,10,6,10,10,10,10,4 +1016634,2,3,1,1,2,1,2,1,1,2 +1031608,2,1,1,1,1,1,2,1,1,2 +1041043,4,1,3,1,2,1,2,1,1,2 +1042252,3,1,1,1,2,1,2,1,1,2 +1057067,1,1,1,1,1,?,1,1,1,2 +1061990,4,1,1,1,2,1,2,1,1,2 +1073836,5,1,1,1,2,1,2,1,1,2 +1083817,3,1,1,1,2,1,2,1,1,2 +1096352,6,3,3,3,3,2,6,1,1,2 +1140597,7,1,2,3,2,1,2,1,1,2 +1149548,1,1,1,1,2,1,1,1,1,2 +1174009,5,1,1,2,1,1,2,1,1,2 +1183596,3,1,3,1,3,4,1,1,1,2 +1190386,4,6,6,5,7,6,7,7,3,4 +1190546,2,1,1,1,2,5,1,1,1,2 +1213273,2,1,1,1,2,1,1,1,1,2 +1218982,4,1,1,1,2,1,1,1,1,2 +1225382,6,2,3,1,2,1,1,1,1,2 +1235807,5,1,1,1,2,1,2,1,1,2 +1238777,1,1,1,1,2,1,1,1,1,2 +1253955,8,7,4,4,5,3,5,10,1,4 +1257366,3,1,1,1,2,1,1,1,1,2 +1260659,3,1,4,1,2,1,1,1,1,2 +1268952,10,10,7,8,7,1,10,10,3,4 +1275807,4,2,4,3,2,2,2,1,1,2 +1277792,4,1,1,1,2,1,1,1,1,2 +1277792,5,1,1,3,2,1,1,1,1,2 +1285722,4,1,1,3,2,1,1,1,1,2 +1288608,3,1,1,1,2,1,2,1,1,2 +1290203,3,1,1,1,2,1,2,1,1,2 +1294413,1,1,1,1,2,1,1,1,1,2 +1299596,2,1,1,1,2,1,1,1,1,2 +1303489,3,1,1,1,2,1,2,1,1,2 +1311033,1,2,2,1,2,1,1,1,1,2 +1311108,1,1,1,3,2,1,1,1,1,2 +1315807,5,10,10,10,10,2,10,10,10,4 +1318671,3,1,1,1,2,1,2,1,1,2 +1319609,3,1,1,2,3,4,1,1,1,2 +1323477,1,2,1,3,2,1,2,1,1,2 +1324572,5,1,1,1,2,1,2,2,1,2 +1324681,4,1,1,1,2,1,2,1,1,2 +1325159,3,1,1,1,2,1,3,1,1,2 +1326892,3,1,1,1,2,1,2,1,1,2 +1330361,5,1,1,1,2,1,2,1,1,2 +1333877,5,4,5,1,8,1,3,6,1,2 +1334015,7,8,8,7,3,10,7,2,3,4 +1334667,1,1,1,1,2,1,1,1,1,2 +1339781,1,1,1,1,2,1,2,1,1,2 +1339781,4,1,1,1,2,1,3,1,1,2 +13454352,1,1,3,1,2,1,2,1,1,2 +1345452,1,1,3,1,2,1,2,1,1,2 +1345593,3,1,1,3,2,1,2,1,1,2 +1347749,1,1,1,1,2,1,1,1,1,2 +1347943,5,2,2,2,2,1,1,1,2,2 +1348851,3,1,1,1,2,1,3,1,1,2 +1350319,5,7,4,1,6,1,7,10,3,4 +1350423,5,10,10,8,5,5,7,10,1,4 +1352848,3,10,7,8,5,8,7,4,1,4 +1353092,3,2,1,2,2,1,3,1,1,2 +1354840,2,1,1,1,2,1,3,1,1,2 +1354840,5,3,2,1,3,1,1,1,1,2 +1355260,1,1,1,1,2,1,2,1,1,2 +1365075,4,1,4,1,2,1,1,1,1,2 +1365328,1,1,2,1,2,1,2,1,1,2 +1368267,5,1,1,1,2,1,1,1,1,2 +1368273,1,1,1,1,2,1,1,1,1,2 +1368882,2,1,1,1,2,1,1,1,1,2 +1369821,10,10,10,10,5,10,10,10,7,4 +1371026,5,10,10,10,4,10,5,6,3,4 +1371920,5,1,1,1,2,1,3,2,1,2 +466906,1,1,1,1,2,1,1,1,1,2 +466906,1,1,1,1,2,1,1,1,1,2 +534555,1,1,1,1,2,1,1,1,1,2 +536708,1,1,1,1,2,1,1,1,1,2 +566346,3,1,1,1,2,1,2,3,1,2 +603148,4,1,1,1,2,1,1,1,1,2 +654546,1,1,1,1,2,1,1,1,8,2 +654546,1,1,1,3,2,1,1,1,1,2 +695091,5,10,10,5,4,5,4,4,1,4 +714039,3,1,1,1,2,1,1,1,1,2 +763235,3,1,1,1,2,1,2,1,2,2 +776715,3,1,1,1,3,2,1,1,1,2 +841769,2,1,1,1,2,1,1,1,1,2 +888820,5,10,10,3,7,3,8,10,2,4 +897471,4,8,6,4,3,4,10,6,1,4 +897471,4,8,8,5,4,5,10,4,1,4 diff --git a/references/logistic_regression_demo/ipython_notebook_config.py b/references/logistic_regression_demo/ipython_notebook_config.py new file mode 100644 index 0000000..65f423e --- /dev/null +++ b/references/logistic_regression_demo/ipython_notebook_config.py @@ -0,0 +1,15 @@ +import os +c = get_config() + +# Kernel config +c.IPKernelApp.pylab = 'inline' # if you want plotting support always + +# Notebook config +#c.NotebookApp.certfile = os.path.join(os.getcwd(), u'mycert.pem') +#c.NotebookApp.ip = '*' +c.NotebookApp.open_browser = True +#c.NotebookApp.NotebookManager.notebook_dir = os.path.join(os.environ["HOME"], "Desktop", "Tutorial") +#c.NotebookApp.notebook_dir = os.path.join(os.environ["HOME"], "Desktop", "Tutorial") +# It's a good idea to put it on a known, fixed port +c.NotebookApp.port = 9999 +#c.NotebookApp.password = u'sha1:60e7d2645fb4:97064d28bad2a4a12950055c830d9637b652c9ec' diff --git a/references/logistic_regression_demo/utility.py b/references/logistic_regression_demo/utility.py new file mode 100644 index 0000000..213a11f --- /dev/null +++ b/references/logistic_regression_demo/utility.py @@ -0,0 +1,25 @@ +import numpy as np +import matplotlib.pyplot as plt + + +def plot_decision_boundary(clf, X): + w = clf.coef_.ravel() + a = -w[0] / w[1] + xx = np.linspace(np.min(X[:, 0]), np.max(X[:, 0])) + yy = a * xx - clf.intercept_ / w[1] + plt.plot(xx, yy) + plt.xticks(()) + plt.yticks(()) + +def plotEllipse(pos,P,edge='k',face='none',line_width='.1'): + from numpy.linalg import svd + from matplotlib.patches import Ellipse + import math + from numpy import pi + from matplotlib.pyplot import gca + U, s , Vh = svd(P) + orient = math.atan2(U[1,0],U[0,0])*180/pi + ellipsePlot = Ellipse(xy=pos, width=2.0*math.sqrt(s[0]), height=2.0*math.sqrt(s[1]), angle=orient,facecolor=face, edgecolor=edge, lw=line_width) + ax = gca() + ax.add_patch(ellipsePlot); + return ellipsePlot diff --git a/references/nn/.nn_2.py.kate-swp b/references/nn/.nn_2.py.kate-swp new file mode 100644 index 0000000..f37ba8f Binary files /dev/null and b/references/nn/.nn_2.py.kate-swp differ diff --git a/nn/nn-from-scratch b/references/nn/nn-from-scratch similarity index 100% rename from nn/nn-from-scratch rename to references/nn/nn-from-scratch diff --git a/references/nn/nn_1.py b/references/nn/nn_1.py new file mode 100644 index 0000000..7487ee4 --- /dev/null +++ b/references/nn/nn_1.py @@ -0,0 +1,98 @@ +# +# BP demo code +# +# reference: +# https://www.2cto.com/kf/201612/543750.html +# + +import numpy as np +from sklearn import datasets, linear_model +import matplotlib.pyplot as plt + + +class Config: + nn_input_dim = 2 + nn_output_dim = 2 + epsilon = 0.01 + reg_lambda = 0.01 + + +def generate_data(): + np.random.seed(0) + X, y = datasets.make_moons(200, noise=0.20) + return X, y + + +def visualize(X, y, model): + plot_decision_boundary(lambda x:predict(model,x), X, y) + plt.title("Logistic Regression") + + +def plot_decision_boundary(pred_func, X, y): + x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5 + y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5 + h = 0.01 + xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) + Z = pred_func(np.c_[xx.ravel(), yy.ravel()]) + Z = Z.reshape(xx.shape) + plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral) + plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral) + plt.show() + +def predict(model, x): + W1, b1, W2, b2 = model['W1'], model['b1'], model['W2'], model['b2'] + z1 = x.dot(W1) + b1 + a1 = np.tanh(z1) + z2 = a1.dot(W2) + b2 + exp_scores = np.exp(z2) + probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True) + return np.argmax(probs, axis=1) + + +def build_model(X, y, nn_hdim, num_passes=20000, print_loss=False): + num_examples = len(X) + np.random.seed(0) + W1 = np.random.randn(Config.nn_input_dim, nn_hdim) / np.sqrt(Config.nn_input_dim) + b1 = np.zeros((1, nn_hdim)) + W2 = np.random.randn(nn_hdim, Config.nn_output_dim) / np.sqrt(nn_hdim) + b2 = np.zeros((1, Config.nn_output_dim)) + + model = {} + + for i in range(0, num_passes): + + z1 = X.dot(W1) + b1 + a1 = np.tanh(z1) + z2 = a1.dot(W2) + b2 + exp_scores = np.exp(z2) + probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True) + + delta3 = probs + delta3[range(num_examples), y] -= 1 + dW2 = (a1.T).dot(delta3) + db2 = np.sum(delta3, axis=0, keepdims=True) + delta2 = delta3.dot(W2.T) * (1 - np.power(a1, 2)) + dW1 = np.dot(X.T, delta2) + db1 = np.sum(delta2, axis=0) + + dW2 += Config.reg_lambda * W2 + dW1 += Config.reg_lambda * W1 + + W1 += -Config.epsilon * dW1 + b1 += -Config.epsilon * db1 + W2 += -Config.epsilon * dW2 + b2 += -Config.epsilon * db2 + + model = {'W1': W1, 'b1': b1, 'W2': W2, 'b2': b2} + + return model + + +def main(): + X, y = generate_data() + model = build_model(X, y, 3) + visualize(X, y, model) + + +if __name__ == "__main__": + main() diff --git a/references/nn/nn_2.py b/references/nn/nn_2.py new file mode 100644 index 0000000..7bedb8c --- /dev/null +++ b/references/nn/nn_2.py @@ -0,0 +1,15 @@ + +import numpy as np +from sklearn import datasets, linear_model +import matplotlib.pyplot as plt + + +class nn: + epsilon = 0.01 + + +def generate_data(): + np.random.seed(0) + X, y = datasets.make_moons(200, noise=0.20) + return X, y + diff --git a/supervised_learning/Recognizing hand-written digits - SVM.ipynb b/references/supervised_learning/Recognizing hand-written digits - SVM.ipynb similarity index 100% rename from supervised_learning/Recognizing hand-written digits - SVM.ipynb rename to references/supervised_learning/Recognizing hand-written digits - SVM.ipynb diff --git a/supervised_learning/supervised learning.ipynb b/references/supervised_learning/supervised learning.ipynb similarity index 100% rename from supervised_learning/supervised learning.ipynb rename to references/supervised_learning/supervised learning.ipynb