Skip to content

Commit ac79f15

Browse files
Merge branch 'python-2.7' of https://github.com/apachecn/MachineLearning into python-2.7
2 parents 3d843d5 + ba6ab3f commit ac79f15

File tree

7 files changed

+46
-11
lines changed

7 files changed

+46
-11
lines changed

docs/8.预测数值型数据:回归.md

+11-8
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@ HorsePower = 0.0015 * annualSalary - 0.99 * hoursListeningToPublicRadio
1919

2020
说到回归,一般都是指 `线性回归(linear regression)`。线性回归意味着可以将输入项分别乘以一些常量,再将结果加起来得到输出。
2121

22+
补充:
23+
线性回归假设特征和结果满足线性关系。其实线性关系的表达能力非常强大,每个特征对结果的影响强弱可以由前面的参数体现,而且每个特征变量可以首先映射到一个函数,然后再参与线性计算。这样就可以表达特征与结果之间的非线性关系。
24+
2225
## 回归 原理
2326

2427
### 1、线性回归
2528

26-
我们应该怎样从一大堆数据里求出回归方程呢? 假定输入数据存放在矩阵 x 中,而回归系数存放在向量 w 中。那么对于给定的数据 X1,预测结果将会通过 Y = X1^T w 给出。现在的问题是,手里有一些 X 和对应的 y,怎样才能找到 w 呢?一个常用的方法就是找出使误差最小的 w 。这里的误差是指预测 y 值和真实 y 值之间的差值,使用该误差的简单累加将使得正差值和负差值相互抵消,所以我们采用平方误差。
29+
我们应该怎样从一大堆数据里求出回归方程呢? 假定输入数据存放在矩阵 x 中,而回归系数存放在向量 w 中。那么对于给定的数据 X1,预测结果将会通过 Y = X1^T w 给出。现在的问题是,手里有一些 X 和对应的 y,怎样才能找到 w 呢?一个常用的方法就是找出使误差最小的 w 。这里的误差是指预测 y 值和真实 y 值之间的差值,使用该误差的简单累加将使得正差值和负差值相互抵消,所以我们采用平方误差(实际上就是我们通常所说的最小二乘法)
2730

28-
平方误差可以写做:
31+
平方误差可以写做(其实我们是使用这个函数作为 loss function):
2932

3033
![平方误差](../images/8.Regression/LinearR_18.png)
3134

@@ -194,7 +197,7 @@ LWLR 使用 “核”(与支持向量机中的核类似)来对附近的点
194197

195198
![局部加权线性回归高斯核](../images/8.Regression/LinearR_23.png)
196199

197-
这样就构建了一个只含对角元素的权重矩阵 **w**,并且点 x 与 x(i) 越近,w(i, i) 将会越大。上述公式中包含一个需要用户指定的参数 k,它决定了对附近的点赋予多大的权重,这也是使用 LWLR 时唯一需要考虑的参数,下面的图给出了参数 k 与权重的关系。
200+
这样就构建了一个只含对角元素的权重矩阵 **w**,并且点 x 与 x(i) 越近,w(i, i) 将会越大。上述公式中包含一个需要用户指定的参数 k ,它决定了对附近的点赋予多大的权重,这也是使用 LWLR 时唯一需要考虑的参数,下面的图给出了参数 k 与权重的关系。
198201

199202
![参数k与权重的关系](../images/8.Regression/LinearR_6.png)
200203

@@ -437,7 +440,7 @@ def abaloneTest():
437440

438441
#### 4.1、岭回归
439442

440-
简单来说,岭回归就是在矩阵 ![矩阵_1](../images/8.Regression/LinearR_9.png) 上加一个 λI 从而使得矩阵非奇异,进而能对 ![矩阵_2](../images/8.Regression/LinearR_10.png ) 求逆。其中矩阵I是一个 m * m 的单位矩阵,
443+
简单来说,岭回归就是在矩阵 ![矩阵_1](../images/8.Regression/LinearR_9.png) 上加一个 λI 从而使得矩阵非奇异,进而能对 ![矩阵_2](../images/8.Regression/LinearR_10.png ) 求逆。其中矩阵I是一个 n * n (等于列数) 的单位矩阵,
441444
对角线上元素全为1,其他元素全为0。而λ是一个用户定义的数值,后面会做介绍。在这种情况下,回归系数的计算公式将变成:
442445

443446
![岭回归的回归系数计算](../images/8.Regression/LinearR_11.png )
@@ -457,7 +460,7 @@ def ridgeRegres(xMat,yMat,lam=0.2):
457460
'''
458461
Desc:
459462
这个函数实现了给定 lambda 下的岭回归求解。
460-
如果数据的特征比样本点还多,就不能再使用上面介绍的的线性回归和局部现行回归了,因为计算 (xTx)^(-1)会出现错误。
463+
如果数据的特征比样本点还多,就不能再使用上面介绍的的线性回归和局部线性回归了,因为计算 (xTx)^(-1)会出现错误。
461464
如果特征比样本点还多(n > m),也就是说,输入数据的矩阵x不是满秩矩阵。非满秩矩阵在求逆时会出现问题。
462465
为了解决这个问题,我们下边讲一下:岭回归,这是我们要讲的第一种缩减方法。
463466
Args:
@@ -528,16 +531,16 @@ def regression3():
528531

529532
![岭回归的运行效果](../images/8.Regression/LinearR_12.png)
530533

531-
上图绘制除了回归系数与 log(λ) 的关系。在最左边,即 λ 最小时,可以得到所有系数的原始值(与线性回归一致);而在右边,系数全部缩减为0;在中间部分的某值将可以取得最好的预测效果。为了定量地找到最佳参数值,还需要进行交叉验证。另外,要判断哪些变量对结果预测最具有影响力,在上图中观察它们对应的系数大小就可以了。
534+
上图绘制出了回归系数与 log(λ) 的关系。在最左边,即 λ 最小时,可以得到所有系数的原始值(与线性回归一致);而在右边,系数全部缩减为0;在中间部分的某值将可以取得最好的预测效果。为了定量地找到最佳参数值,还需要进行交叉验证。另外,要判断哪些变量对结果预测最具有影响力,在上图中观察它们对应的系数大小就可以了。
532535

533536

534-
#### 4.2、lasso
537+
#### 4.2、套索方法(Lasso,The Least Absolute Shrinkage and Selection Operator)
535538

536539
在增加如下约束时,普通的最小二乘法回归会得到与岭回归一样的公式:
537540

538541
![lasso_1](../images/8.Regression/LinearR_13.png)
539542

540-
上式限定了所有回归系数的平方和不能大于 λ 。使用普通的最小二乘法回归在当两个或更多的特征相关时,可能会得到一个很大的正系数和一个很大的负系数。正式因为上述限制条件的存在,使用岭回归可以避免这个问题。
543+
上式限定了所有回归系数的平方和不能大于 λ 。使用普通的最小二乘法回归在当两个或更多的特征相关时,可能会得到一个很大的正系数和一个很大的负系数。正是因为上述限制条件的存在,使用岭回归可以避免这个问题。
541544

542545
与岭回归类似,另一个缩减方法lasso也对回归系数做了限定,对应的约束条件如下:
543546

docs/naive-bayes-discuss.md

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
## 朴素贝叶斯讨论
3+
4+
> [@Time渐行渐远](https://github.com/Timehsw) [@那伊抹微笑](https://github.com/wangyangting) [@小瑶](https://github.com/chenyyx) [@如果迎着风就飞](https://github.com/orgs/apachecn/people/mikechengwei)
5+
6+
朴素贝叶斯就是用来求逆向概率的(已知)。
7+
8+
1. 根据训练数据集求(正向)概率。
9+
2. 根据测试数据集求(逆向)概率(根据 贝叶斯公式)。
10+
3. 求出的逆向概率,哪个大,就属于哪个类别。
11+
12+
### 疑问 1
13+
通过训练集求出了各个特征的概率, 然后测试集的特征和之前求出来的概率相乘, 这个就代表这个测试集的特征的概率了.
14+
有了这个基础后, 通过贝叶斯公式, 就可以得到这个测试集的特征属于哪个类别了, 他们相乘的依据是什么?
15+
16+
```
17+
朴素贝叶斯?
18+
条件独立性啊
19+
朴素贝叶斯不是基于两个定理吗
20+
一个是假设 条件独立性
21+
一个是 贝叶斯定理
22+
条件独立性 所以每个特征相乘得到的概率 就是这个数据的概率
23+
```
24+
25+
### 疑问 2
26+
凭啥测试集的特征乘以训练集的概率就是测试集的概率了.这么做的理论依据是什么?
27+
28+
```
29+
朴素贝叶斯就是利用先验知识来解决后验概率,因为训练集中我们已经知道了每个单词在类别0和1中的概率,即p(w|c).
30+
我们就是要利用这个知识去解决在出现这些单词的组合情况下,类别更可能是0还是1,即p(c|w).
31+
如果说之前的训练样本少, 那么这个 p(w|c) 就更可能不准确, 所以样本越多我们会觉得这个 p(w|c) 越可信.
32+
```

images/2.KNN/knn_later_1.png

2.06 KB
Loading

images/2.KNN/knn_later_2.png

2.53 KB
Loading

images/2.KNN/knn_later_3.png

1.04 KB
Loading

images/2.KNN/knn_later_4.png

1.55 KB
Loading

src/python/8.PredictiveNumericalDataRegression/regression.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -585,9 +585,9 @@ def regression5():
585585

586586

587587
if __name__ == "__main__":
588-
# regression1()
589-
regression2()
590-
abaloneTest()
588+
regression1()
589+
# regression2()
590+
# abaloneTest()
591591
# regression3()
592592
# regression4()
593593
# regression5()

0 commit comments

Comments
 (0)