From 1c30c32084a58e50b81442395f615385306a35c3 Mon Sep 17 00:00:00 2001 From: chenyyx Date: Wed, 13 Sep 2017 20:21:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B95.Logistic=E5=9B=9E=E5=BD=92?= =?UTF-8?q?=E5=92=8C8.=E5=9B=9E=E5=BD=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/5.Logistic回归.md | 20 +++++++- docs/8.预测数值型数据:回归.md | 75 ++++++++++++++++++++---------- images/8.Regression/LinearR_1.png | Bin 0 -> 1929 bytes 3 files changed, 69 insertions(+), 26 deletions(-) create mode 100644 images/8.Regression/LinearR_1.png diff --git a/docs/5.Logistic回归.md b/docs/5.Logistic回归.md index 2f80a147..b598da29 100644 --- a/docs/5.Logistic回归.md +++ b/docs/5.Logistic回归.md @@ -11,6 +11,12 @@ ### Sigmoid 函数 +#### 回归 概念 + +假设现在有一些数据点,我们用一条直线对这些点进行拟合(这条直线称为最佳拟合直线),这个拟合的过程就叫做回归。进而可以得到对这些点的拟合直线方程,那么我们根据这个回归方程,怎么进行分类呢?请看下面。 + +#### 二值型输出分类函数 + 我们想要的函数应该是: 能接受所有的输入然后预测出类别。例如,在两个类的情况下,上述函数输出 0 或 1.或许你之前接触过具有这种性质的函数,该函数称为 `海维塞得阶跃函数(Heaviside step function)`,或者直接称为 `单位阶跃函数`。然而,海维塞得阶跃函数的问题在于: 该函数在跳跃点上从 0 瞬间跳跃到 1,这个瞬间跳跃过程有时很难处理。幸好,另一个函数也有类似的性质(可以输出 0 或者 1 的性质),且数学上更易处理,这就是 Sigmoid 函数。 Sigmoid 函数具体的计算公式如下: ![Sigmoid 函数计算公式](../images/5.Logistic/LR_1.png) @@ -31,7 +37,17 @@ Sigmoid 函数的输入记为 z ,由下面公式得到: ### 梯度上升法 -梯度上升法基于的思想是: 要找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻。如果梯度记为 ▽ ,则函数 f(x, y) 的梯度由下式表示: +#### 梯度的介绍 +需要一点点向量方面的数学基础 + +``` +向量 = 值 + 方向 +梯度 = 向量 +梯度 = 梯度值 + 梯度方向 +``` + +#### 梯度上升法的思想 +要找到某函数的最大值,最好的方法是沿着该函数的梯度方向探寻。如果梯度记为 ▽ ,则函数 f(x, y) 的梯度由下式表示: ![梯度上升计算公式](../images/5.Logistic/LR_5.png) @@ -50,7 +66,7 @@ Sigmoid 函数的输入记为 z ,由下面公式得到: 介绍一下几个相关的概念: ``` 例如:y = w1x1 + w2x2 + ... + wnxn -梯度:参考上图的例子,二维图像,x方向是代表第一个系数,也就是 w1,y方向代表第二个系数也就是 w2,这样的向量就是梯度。 +梯度:参考上图的例子,二维图像,x方向代表第一个系数,也就是 w1,y方向代表第二个系数也就是 w2,这样的向量就是梯度。 α:上面的梯度算法的迭代公式中的阿尔法,这个代表的是移动步长。移动步长会影响最终结果的拟合程度,最好的方法就是随着迭代次数更改移动步长。 步长通俗的理解,100米,如果我一步走10米,我需要走10步;如果一步走20米,我只需要走5步。这里的一步走多少米就是步长的意思。 ▽f(w):代表沿着梯度变化的方向。 diff --git a/docs/8.预测数值型数据:回归.md b/docs/8.预测数值型数据:回归.md index a176198d..026c1e02 100644 --- a/docs/8.预测数值型数据:回归.md +++ b/docs/8.预测数值型数据:回归.md @@ -1,44 +1,71 @@ # 第8章 预测数值型数据:回归 -![预测数值型数据回归首页](/images/8.Regression/预测数值型数据回归首页.png "回归Regression首页") +![预测数值型数据回归首页](../images/8.Regression/预测数值型数据回归首页.png "回归Regression首页") -## 线性回归 +## 回归(Regression) 概述 -> 回归简介 +`我们前边提到的分类的目标变量是标称型数据,而回归则是对连续型的数据做出处理,回归的目的是预测数值型数据的目标值。` + +## 回归 场景 + +回归的目的是预测数值型的目标值。最直接的办法是依据输入写出一个目标值的计算公式。 + +假如你想要预测姐姐男友汽车的功率大小,可能会这样计算: + +HorsePower = 0.0015 * annualSalary - 0.99 * hoursListeningToPublicRadio + +这就是所谓的 `回归方程(regression equation)`,其中的 0.0015 和 -0.99 称作 `回归系数(regression weights)`,求这些回归系数的过程就是回归。一旦有了这些回归系数,再给定输入,做预测就非常容易了。具体的做法是用回归系数乘以输入值,再将结果全部加在一起,就得到了预测值。我们这里所说的,回归系数是一个向量,输入也是向量,这些运算也就是求出二者的内积。 + +说到回归,一般都是指 `线性回归(linear regression)`。线性回归意味着可以将输入项分别乘以一些常量,再将结果加起来得到输出。 + +## 回归 原理 + +### 回归 须知概念 + +#### 1、矩阵求逆 + +因为我们在计算回归方程的回归系数时,用到的计算公式如下: + +![回归系数的最佳估计计算公式](../images/8.Regression/LinearR_1.png) + +需要对矩阵求逆,因此这个方程只在逆矩阵存在的时候适用,我们在程序代码中对此作出判断。 +判断矩阵是否可逆的一个可选方案是: + +判断矩阵的行列式是否为 0,若为 0 ,矩阵就不存在逆矩阵,不为 0 的话,矩阵才存在逆矩阵。 + +#### 2、最小二乘法 + +最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。 + +### 回归 工作原理 ``` - 回归的目的是预测数值型的目标值。最直接的办法是依据输入写出一个目标值的计算公式。 - 假如你想要预测姐姐男友汽车的功率大小,可能会这么计算: - HorsePower = 0.0015 * annualSalary - 0.99 * hoursListeningToPublicRadio - 这就是所谓的回归方程(regression equation),其中的0.0015和-0.99称作回归系数(regression weights),求这些回归系数的过程就是回归。 - 一旦有了这些回归系数,再给定输入,做预测就非常容易了。具体的做法是用回归系数乘以输入值,再将结果全部加在一起,就得到了预测值。 - 说到回归,一般都是指线性回归(linear regression),所以本章里的回归和线性回归代表同一个意思。线性回归意味着可以将输入项分别乘以一些常量, - 再将结果加起来得到输出。需要说明的是,存在另一种称为非线性回归的回归模型,该模型不认同上面的做法,比如认为可能是输入的乘积。 - 这样,上面的功率计算公式也可以写做: - HorsePower = 0.0015 * annualSalary / hoursListeningToPublicRadio - 这就是一个非线性回归的例子,但是对此不进行深入讨论。 +读入数据,将数据特征想、特征标签y存储在矩阵x、y中 +验证 x^Tx 矩阵是否可逆 +使用最小二乘法求得 回归系数 w 的最佳估计 ``` -> 线性回归特点 +### 回归 开发流程 ``` - 优点:结果易于理解,计算上不复杂。 - 缺点:对非线性的数据拟合不好。 - 适用于数据类型:数值型和标称型数据。 +收集数据: 采用任意方法收集数据 +准备数据: 回归需要数值型数据,标称型数据将被转换成二值型数据 +分析数据: 绘出数据的可视化二维图将有助于对数据做出理解和分析,在采用缩减法求得新回归系数之后,可以将新拟合线绘在图上作为对比 +训练算法: 找到回归系数 +测试算法: 使用 R^2 或者预测值和数据的拟合度,来分析模型的效果 +使用算法: 使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签 ``` -> 回归的一般方法 +### 回归 算法特点 ``` - (1) 收集数据:采用任意方法收集数据。 - (2) 准备数据:回归需要数值型数据,标称型数据将被转换成二值型数据。 - (3) 分析数据:绘出数据的可视化二维图将有助于对数据做出理解和分析,在采用缩减法求得新回归系数之后,可以将新拟合线绘在图上作为对比。 - (4) 训练算法:找到回归系数。 - (5) 测试算法:使用 R^2 或者预测值和数据的拟合度,来分析模型的效果。 - (6) 使用算法:使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。 +优点:结果易于理解,计算上不复杂。 +缺点:对非线性的数据拟合不好。 +适用于数据类型:数值型和标称型数据。 ``` + > 线性回归的效果图 ![线性回归效果图](/images/8.Regression/线性回归效果图.png "线性回归效果图") diff --git a/images/8.Regression/LinearR_1.png b/images/8.Regression/LinearR_1.png new file mode 100644 index 0000000000000000000000000000000000000000..01cac4f8b9177791320f2c11e78718526e81a621 GIT binary patch literal 1929 zcmV;42X^?0P)l%}L@g4tc}79Z(uYtA$|;(tw1fl;B8sReh-^W+YpuPn%dcO*x;P)Z zBj9RxjZTICAmGH^F>&C;-HE$n5O9oEXS_RccMJlK(b}owy`rLG*REX&2?>uLJ+d?W zof`KsW5&3-xdD3r{{5Y}+Yf=RUAsPb@Lgx6D*W&>FTV=+!mi*Ou=Esj8PoF-` z$jDf_bZLEkJut<_#;#kp&fVQz0p>iZ1(-OsC6Sy}wH*em&dD*gM_wU~)w<-%9GAu1E?bom0s8OSA zrJZj)a^%RlbLSpEeoSdKF4k6-xDX49)|)qPe*OA&_Uze|vb?;!1q&8*M4N>QdN|@p z(XJm7n5$Q>{`~nfNOkYtUC$uT{QUV7{x;cI0w>z}g*IXaY*tw!TcxK>^fObZPSyB; zn}Via)6N-k<%J6uK7Ra2k?hf<2i0=-?%nhiE-o(Jx^-K;cyaIEy^kI}N{XYs+q7wu zx3@PvOk!f9hGu1D<(@rzT3T8#gM>qwEi5d&cI_I&fPjECYu21Ue}3%PvD2navuvk^ zwT!s6mROeG##=e}*?|W1KQGehwlIdUZJ;Hy`!7`}i1e&fcCmoHxy@{JSL zT4G$X!r4U`cl3~Gr3bI8t5Xz_(0cal>F4K1Q8{zw%)*5W$-Ej5u7c2hwHbW2YSk*u zPqaFO{FW_SNJK&=jtLJBfA;K|m@!URWr=aI3a4q@i8#3pAcD%u%H#-Dq!=8MAJfy* z7cE*OW2CJmRLKmSUs6(1s3>~JC@LsIq(NU_-<2y@rlqA}u*^W&MB2fF2jxkFw6&Jd zm2#jXEFf;*zHLxTE8N-R?AGz)$0sKzXJ==VL$`0=URztso*gk_1lw5=N<@AfB^%*R7{#9Xu4^=3Hcc_W`MH7#)pup=FgvR zq&HXAGBj=p0hF4WN(5ZIc=6JuOOcV0A{pw%$}_F%Dn*7uN<8M~=FXWj2gHvZJ4W=; zx>D=p5~LLk(k|^LXlg_47q%%=rpPmbCY0#JX`l6?;Ne8W2jFa4b+N=8LDNk{pFMk) z0>BbaPfwYXeZyS>Cwod|uU@_6S4L>#mLMNya@~m&Ck`AqfJuau5f!a)C)_wR6RpFC z4+m>Pp3~FNp+oQ9y-V-Rj3SYKgEm8%v@oQHp?x&j6a zK~zyu(bcP0DW}wf{QP_^-3xwNBdP`J$coaRo?< z1ay9BB3Vnfla-Z4|8DLC|M1~Mj!{WTN#n+iBi#1y-_NZExs`-26oEV0kDBD+;UOm5 zB&@YW2m~%F9N`id7pF%_u*rmqJKn=+3JcYB?%cUFRon+rpoR?_CNI-yyp3b@^X6v2 z9hqb;Hj{=salLl!TG~D`40dxnNYt>LR09L&BU~$_akix1aEF2CC=wGUOkiu`bwZot z5+#(Rr+qeIOCjN0hJ|9eWx^^;6j9_f_A&PjqeqWcUYQ+&vhwip&!0bM692QK`38ld zJwssSh$Q+g0-xp*f&B8|57FvC>lKMfjT6K*9wA2?a`_bz5kY;{OE5PhBp9?rmP1O2 zj*ccqVIMYoi>bY$zN2qm26TPVN_F7Lk~uAQhHgF{C_5myU4bja!RqG zWPs?nout@FN#FvG1G9E7q`b8}bU?iS@p&hv)c(B_Lt)oXcj9hWxP`LcQ&&lHX2B>s P00000NkvXXu0mjfBC)tc literal 0 HcmV?d00001