Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
hands-on-ml-zh
提交
01bd1a76
H
hands-on-ml-zh
项目概览
OpenDocCN
/
hands-on-ml-zh
通知
13
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hands-on-ml-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
01bd1a76
编写于
1月 02, 2019
作者:
P
PeterHo
提交者:
GitHub
1月 02, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #112 from PeterHo/dev
正态方程->正规方程
上级
7f6a530f
37c79a48
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
11 addition
and
11 deletion
+11
-11
docs/4.训练模型.md
docs/4.训练模型.md
+11
-11
未找到文件。
docs/4.训练模型.md
浏览文件 @
01bd1a76
...
...
@@ -57,11 +57,11 @@
公式中符号的含义大多数都在第二章(详见“符号”)进行了说明,不同的是:为了突出模型的参数向量 !
[
\theta
](
../images/tex-2554a2bb846cffd697389e5dc8912759.gif
)
,使用 !
[
h_{\theta}
](
../images/tex-b7ae93cd51ba1d38fe4ebac15eab3aa1.gif
)
来代替 !
[
h
](
../images/tex-2510c39011c5be704182423e3a695e91.gif
)
。以后的使用中为了公式的简洁,使用 !
[
MSE(\theta)
](
../images/tex-e6e3116680e8cef8739f29e51e9ae4dc.gif
)
来代替 !
[
MSE(\mathbf{X},h _{\theta})
](
../images/tex-8fdec996997ab7fb44bf97399fda93c7.gif
)
。
### 正
态方程
### 正
规方程(The Normal Equation)
为了找到最小化损失函数的 !
[
\theta
](
../images/tex-2554a2bb846cffd697389e5dc8912759.gif
)
值,可以采用公式解,换句话说,就是可以通过解正
态
方程直接得到最后的结果。
为了找到最小化损失函数的 !
[
\theta
](
../images/tex-2554a2bb846cffd697389e5dc8912759.gif
)
值,可以采用公式解,换句话说,就是可以通过解正
规
方程直接得到最后的结果。
公式 4-4:正
态
方程
公式 4-4:正
规
方程
![
\hat{\theta} = ({\mathbf{X}}^T\cdot\mathbf{X})^{-1}\cdot{\mathbf{X}}^T\cdot\mathbf{y}
](
../images/tex-43bfb04cdbbd85ad21489e8e2dc853ed.gif
)
...
...
@@ -80,7 +80,7 @@ y = 4 + 3 * X + np.random.randn(100, 1)
图 4-1:随机线性数据集
现在让我们使用正
态
方程来计算 !
[
\hat{\theta}
](
../images/tex-0678caa04da34220a4e8dc041488b618.gif
)
,我们将使用 Numpy 的线性代数模块(
`np.linalg`
)中的
`inv()`
函数来计算矩阵的逆,以及
`dot()`
方法来计算矩阵的乘法。
现在让我们使用正
规
方程来计算 !
[
\hat{\theta}
](
../images/tex-0678caa04da34220a4e8dc041488b618.gif
)
,我们将使用 Numpy 的线性代数模块(
`np.linalg`
)中的
`inv()`
函数来计算矩阵的逆,以及
`dot()`
方法来计算矩阵的乘法。
```
python
X_b
=
np
.
c_
[
np
.
ones
((
100
,
1
)),
X
]
...
...
@@ -133,13 +133,13 @@ array([[4.21509616],[9.75532293]])
### 计算复杂度
正
态
方程需要计算矩阵 !
[
{\mathbf{X}}^T\cdot\mathbf{X}
](
../images/tex-e5949d4f83eb4e13761f2b76ab62386e.gif
)
的逆,它是一个 !
[
n * n
](
../images/tex-6679fc33e499a90a99b97201f4d00ed5.gif
)
的矩阵(!
[
n
](
../images/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif
)
是特征的个数)。这样一个矩阵求逆的运算复杂度大约在 !
[
O(n^{2.4})
](
../images/tex-31ba2ac7dbc438cef695358d6e49deb3.gif
)
到 !
[
O(n^3)
](
../images/tex-4a7d22b39e93fbbcbe107e7a19e8bd34.gif
)
之间,具体值取决于计算方式。换句话说,如果你将你的特征个数翻倍的话,其计算时间大概会变为原来的 5.3(!
[
2^{2.4}
](
../images/tex-61f8abcb13be8d0a51b2868de491d3a8.gif
)
)到 8(!
[
2^3
](
../images/tex-5b9a77af89d04a685b4f649da485aed3.gif
)
)倍。
正
规
方程需要计算矩阵 !
[
{\mathbf{X}}^T\cdot\mathbf{X}
](
../images/tex-e5949d4f83eb4e13761f2b76ab62386e.gif
)
的逆,它是一个 !
[
n * n
](
../images/tex-6679fc33e499a90a99b97201f4d00ed5.gif
)
的矩阵(!
[
n
](
../images/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif
)
是特征的个数)。这样一个矩阵求逆的运算复杂度大约在 !
[
O(n^{2.4})
](
../images/tex-31ba2ac7dbc438cef695358d6e49deb3.gif
)
到 !
[
O(n^3)
](
../images/tex-4a7d22b39e93fbbcbe107e7a19e8bd34.gif
)
之间,具体值取决于计算方式。换句话说,如果你将你的特征个数翻倍的话,其计算时间大概会变为原来的 5.3(!
[
2^{2.4}
](
../images/tex-61f8abcb13be8d0a51b2868de491d3a8.gif
)
)到 8(!
[
2^3
](
../images/tex-5b9a77af89d04a685b4f649da485aed3.gif
)
)倍。
> 提示
>
> 当特征的个数较大的时候(例如:特征数量为 100000),正
态
方程求解将会非常慢。
> 当特征的个数较大的时候(例如:特征数量为 100000),正
规
方程求解将会非常慢。
有利的一面是,这个方程在训练集上对于每一个实例来说是线性的,其复杂度为 !
[
O(m)
](
../images/tex-0e2ae329177722b1818828e92b441032.gif
)
,因此只要有能放得下它的内存空间,它就可以对大规模数据进行训练。同时,一旦你得到了线性回归模型(通过解正
态
方程或者其他的算法),进行预测是非常快的。因为模型中计算复杂度对于要进行预测的实例数量和特征个数都是线性的。 换句话说,当实例个数变为原来的两倍多的时候(或特征个数变为原来的两倍多),预测时间也仅仅是原来的两倍多。
有利的一面是,这个方程在训练集上对于每一个实例来说是线性的,其复杂度为 !
[
O(m)
](
../images/tex-0e2ae329177722b1818828e92b441032.gif
)
,因此只要有能放得下它的内存空间,它就可以对大规模数据进行训练。同时,一旦你得到了线性回归模型(通过解正
规
方程或者其他的算法),进行预测是非常快的。因为模型中计算复杂度对于要进行预测的实例数量和特征个数都是线性的。 换句话说,当实例个数变为原来的两倍多的时候(或特征个数变为原来的两倍多),预测时间也仅仅是原来的两倍多。
接下来,我们将介绍另一种方法去训练模型。这种方法适合在特征个数非常多,训练实例非常多,内存无法满足要求的时候使用。
...
...
@@ -205,7 +205,7 @@ array([[4.21509616],[9.75532293]])
> 提示
>
> 在这个方程中每一步计算时都包含了整个训练集 ![\mathbf{X}](../images/tex-ca340abf4b48dc6d816137fbadf58b53.gif),这也是为什么这个算法称为批量梯度下降:每一次训练过程都使用所有的的训练数据。因此,在大数据集上,其会变得相当的慢(但是我们接下来将会介绍更快的梯度下降算法)。然而,梯度下降的运算规模和特征的数量成正比。训练一个数千数量特征的线性回归模型使用*梯度下降要比使用正
态
方程快的多。
> 在这个方程中每一步计算时都包含了整个训练集 ![\mathbf{X}](../images/tex-ca340abf4b48dc6d816137fbadf58b53.gif),这也是为什么这个算法称为批量梯度下降:每一次训练过程都使用所有的的训练数据。因此,在大数据集上,其会变得相当的慢(但是我们接下来将会介绍更快的梯度下降算法)。然而,梯度下降的运算规模和特征的数量成正比。训练一个数千数量特征的线性回归模型使用*梯度下降要比使用正
规
方程快的多。
...
...
@@ -236,7 +236,7 @@ for iteration in range(n_iterations):
array
([[
4.21509616
],[
2.77011339
]])
```
看!正
态
方程的表现非常好。完美地求出了梯度下降的参数。但是当你换一个学习率会发生什么?图 4-8 展示了使用了三个不同的学习率进行梯度下降的前 10 步运算(虚线代表起始位置)。
看!正
规
方程的表现非常好。完美地求出了梯度下降的参数。但是当你换一个学习率会发生什么?图 4-8 展示了使用了三个不同的学习率进行梯度下降的前 10 步运算(虚线代表起始位置)。
![](
../images/chapter_4/图4-8.PNG
)
...
...
@@ -310,7 +310,7 @@ sgd_reg = SGDRegressor(n_iter=50, penalty=None, eta0=0.1)
sgd_reg
.
fit
(
X
,
y
.
ravel
())
```
你可以再一次发现,这个结果非常的接近正
态
方程的解:
你可以再一次发现,这个结果非常的接近正
规
方程的解:
```
>>> sgd_reg.intercept_, sgd_reg.coef_
...
...
@@ -672,7 +672,7 @@ Logistic 函数(也称为 logit),用 ![\sigma()](../images/tex-8a5c57afba7
![
J(\theta)=-\frac{1}{m}\sum\limits_{i=1}^m\left[y^{(i)}log\left(\hat{p}^{(i)}\right)+\left(1-y^{(i)}\right)log\left(1-\hat{p}^{(i)}\right)\right]
](
../images/tex-b6a0de3f265cdeedc2ac1d0687fef2ea.gif
)
但是这个损失函数对于求解最小化损失函数的 !
[
\theta
](
../images/tex-2554a2bb846cffd697389e5dc8912759.gif
)
是没有公式解的(没有等价的正
态
方程)。 但好消息是,这个损失函数是凸的,所以梯度下降(或任何其他优化算法)一定能够找到全局最小值(如果学习速率不是太大,并且你等待足够长的时间)。公式 4-18 给出了损失函数关于第 !
[
j
](
../images/tex-363b122c528f54df4a0446b6bab05515.gif
)
个模型参数 !
[
\theta_j
](
../images/tex-cb0e17d96e58d55d1eb06dc1b14b7a7b.gif
)
的偏导数。
但是这个损失函数对于求解最小化损失函数的 !
[
\theta
](
../images/tex-2554a2bb846cffd697389e5dc8912759.gif
)
是没有公式解的(没有等价的正
规
方程)。 但好消息是,这个损失函数是凸的,所以梯度下降(或任何其他优化算法)一定能够找到全局最小值(如果学习速率不是太大,并且你等待足够长的时间)。公式 4-18 给出了损失函数关于第 !
[
j
](
../images/tex-363b122c528f54df4a0446b6bab05515.gif
)
个模型参数 !
[
\theta_j
](
../images/tex-cb0e17d96e58d55d1eb06dc1b14b7a7b.gif
)
的偏导数。
公式 4-18:逻辑回归损失函数的偏导数
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录