Skip to content

Commit 003a199

Browse files
committed
2020-10-19 21:18:53
1 parent a1aea5f commit 003a199

File tree

226 files changed

+165
-165
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

226 files changed

+165
-165
lines changed

docs/ml/1.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 第1章 机器学习基础
22

3-
![机器学习基础_首页](http://data.apachecn.org/img/AiLearning/ml/1.MLFoundation/机器学习基础-首页.jpg)
3+
![机器学习基础_首页](img/机器学习基础-首页.jpg)
44

55
## 机器学习 概述
66

@@ -86,11 +86,11 @@
8686
这个算法可以训练程序做出某一决定。程序在某一情况下尝试所有的可能行动,记录不同行动的结果并试着找出最好的一次尝试来做决定。 属于这一类算法的有马尔可夫决策过程。
8787
### 训练过程
8888

89-
![机器学习训练过程图](http://data.apachecn.org/img/AiLearning/ml/1.MLFoundation/机器学习基础训练过程.jpg)
89+
![机器学习训练过程图](img/机器学习基础训练过程.jpg)
9090

9191
### 算法汇总
9292

93-
![算法汇总](http://data.apachecn.org/img/AiLearning/ml/1.MLFoundation/ml_algorithm.jpg)
93+
![算法汇总](img/ml_algorithm.jpg)
9494

9595

9696
## 机器学习 使用
@@ -104,7 +104,7 @@
104104

105105
> 举例
106106
107-
![选择算法图](http://data.apachecn.org/img/AiLearning/ml/1.MLFoundation/机器学习基础-选择算法.jpg)
107+
![选择算法图](img/机器学习基础-选择算法.jpg)
108108

109109
> 机器学习 开发流程
110110
@@ -215,7 +215,7 @@ F 值 = 70% * 50% * 2 / (70% + 50%) = 58.3%
215215

216216
下面这个图可以比较直观地展示出来:
217217

218-
![](http://data.apachecn.org/img/AiLearning/ml/1.MLFoundation/ml_add_1.jpg)
218+
![](img/ml_add_1.jpg)
219219

220220
### 特征工程的一些小东西
221221

@@ -225,7 +225,7 @@ F 值 = 70% * 50% * 2 / (70% + 50%) = 58.3%
225225

226226
下面给出一个特征工程的图:
227227

228-
![](http://data.apachecn.org/img/AiLearning/ml/1.MLFoundation/ml_add_2.jpg)
228+
![](img/ml_add_2.jpg)
229229

230230
### 其他
231231

docs/ml/10.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 第 10 章 K-Means(K-均值)聚类算法
22

3-
![K-Means(K-均值)聚类算法_首页](http://data.apachecn.org/img/AiLearning/ml/10.KMeans/K-Means_首页.jpg)
3+
![K-Means(K-均值)聚类算法_首页](img/K-Means_首页.jpg)
44

55
## 聚类
66

@@ -59,7 +59,7 @@ kmeans,如前所述,用于数据集内种类属性不明晰,希望能够
5959

6060
有关 ```质心` 术语更形象的介绍, 请参考下图:
6161

62-
![K-Means 术语图](http://data.apachecn.org/img/AiLearning/ml/10.KMeans/apachecn-k-means-term-1.jpg)
62+
![K-Means 术语图](img/apachecn-k-means-term-1.jpg)
6363

6464
### K-Means 工作流程
6565
1. 首先, 随机确定 K 个初始点作为质心(**不必是数据中的点**)。
@@ -162,15 +162,15 @@ def kMeans(dataSet, k, distMeas=distEclud, createCent=randCent):
162162
2. 测试一下 kMeans 函数是否可以如预期运行, 请看: <https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/10.kmeans/kMeans.py>
163163

164164
参考运行结果如下:
165-
![K-Means 运行结果1](http://data.apachecn.org/img/AiLearning/ml/10.KMeans/apachecn-k-means-run-result-1.jpg)
165+
![K-Means 运行结果1](img/apachecn-k-means-run-result-1.jpg)
166166

167167

168168

169169
### K-Means 聚类算法的缺陷
170170
> 在 kMeans 的函数测试中,可能偶尔会陷入局部最小值(局部最优的结果,但不是全局最优的结果).
171171
172172
局部最小值的的情况如下:
173-
![K-Means 局部最小值1](http://data.apachecn.org/img/AiLearning/ml/10.KMeans/apachecn-kmeans-partial-best-result-1.jpg)
173+
![K-Means 局部最小值1](img/apachecn-kmeans-partial-best-result-1.jpg)
174174
出现这个问题有很多原因,可能是k值取的不合适,可能是距离函数不合适,可能是最初随机选取的质心靠的太近,也可能是数据本身分布的问题。
175175

176176
为了解决这个问题,我们可以对生成的簇进行后处理,一种方法是将具有最大**SSE**值的簇划分成两个簇。具体实现时可以将最大簇包含的点过滤出来并在这些点上运行K-均值算法,令k设为2。
@@ -239,7 +239,7 @@ def biKMeans(dataSet, k, distMeas=distEclud):
239239

240240
上述函数可以运行多次,聚类会收敛到全局最小值,而原始的 kMeans() 函数偶尔会陷入局部最小值。
241241
运行参考结果如下:
242-
![二分 K-Means 运行结果1](http://data.apachecn.org/img/AiLearning/ml/10.KMeans/apachecn-bikmeans-run-result-1.jpg)
242+
![二分 K-Means 运行结果1](img/apachecn-bikmeans-run-result-1.jpg)
243243

244244
* **作者: [那伊抹微笑](http://cwiki.apachecn.org/display/~xuxin), [清都江水郎](http://cwiki.apachecn.org/display/~xuzhaoqing)**
245245
* [GitHub地址](https://github.com/apachecn/AiLearning): <https://github.com/apachecn/AiLearning>

docs/ml/11.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
# 第 11 章 使用 Apriori 算法进行关联分析
33

4-
![](http://data.apachecn.org/img/AiLearning/ml/11.Apriori/apachecn_apriori_homepage.jpg)
4+
![](img/apachecn_apriori_homepage.jpg)
55

66
## 关联分析
77
关联分析是一种在大规模数据集中寻找有趣关系的任务。
@@ -12,7 +12,7 @@
1212
## 相关术语
1313
* 关联分析(关联规则学习): 从大规模数据集中寻找物品间的隐含关系被称作 `关联分析(associati analysis)` 或者 `关联规则学习(association rule learning)`
1414
下面是用一个 `杂货店` 例子来说明这两个概念,如下图所示:
15-
![关联分析示例1](http://data.apachecn.org/img/AiLearning/ml/11.Apriori/apachecn_apriori_association_demo_1.jpg)
15+
![关联分析示例1](img/apachecn_apriori_association_demo_1.jpg)
1616

1717
* 频繁项集: {葡萄酒, 尿布, 豆奶} 就是一个频繁项集的例子。
1818
* 关联规则: 尿布 -> 葡萄酒 就是一个关联规则。这意味着如果顾客买了尿布,那么他很可能会买葡萄酒。
@@ -31,14 +31,14 @@
3131

3232
假设我们一共有 4 个商品: 商品0, 商品1, 商品2, 商品3。
3333
所有可能的情况如下:
34-
![4种商品的所有组合](http://data.apachecn.org/img/AiLearning/ml/11.Apriori/apachecn_apriori_goods_all_1.jpg)
34+
![4种商品的所有组合](img/apachecn_apriori_goods_all_1.jpg)
3535
如果我们计算所有组合的支持度,也需要计算 15 次。即 2^N - 1 = 2^4 - 1 = 15。
3636
随着物品的增加,计算的次数呈指数的形式增长 ...
3737
为了降低计算次数和时间,研究人员发现了一种所谓的 Apriori 原理,即某个项集是频繁的,那么它的所有子集也是频繁的。
3838
例如,如果 {0, 1} 是频繁的,那么 {0}, {1} 也是频繁的。
3939
该原理直观上没有什么帮助,但是如果反过来看就有用了,也就是说如果一个项集是 `非频繁项集`,那么它的所有超集也是非频繁项集,如下图所示:
4040

41-
![非频繁项集](http://data.apachecn.org/img/AiLearning/ml/11.Apriori/非频繁项集.png)
41+
![非频繁项集](img/非频繁项集.png)
4242

4343
在图中我们可以看到,已知灰色部分 {2,3} 是 `非频繁项集`,那么利用上面的知识,我们就可以知道 {0,2,3} {1,2,3} {0,1,2,3} 都是 `非频繁的`
4444
也就是说,计算出 {2,3} 的支持度,知道它是 `非频繁` 的之后,就不需要再计算 {0,2,3} {1,2,3} {0,1,2,3} 的支持度,因为我们知道这些集合不会满足我们的要求。
@@ -272,7 +272,7 @@ def apriori(dataSet, minSupport=0.5):
272272

273273
### 一个频繁项集可以产生多少条关联规则呢?
274274
如下图所示,给出的是项集 {0,1,2,3} 产生的所有关联规则:
275-
![关联规则网格示意图](http://data.apachecn.org/img/AiLearning/ml/11.Apriori/apachecn_association_rule_demo_1.jpg)
275+
![关联规则网格示意图](img/apachecn_association_rule_demo_1.jpg)
276276
与我们前面的 `频繁项集` 生成一样,我们可以为每个频繁项集产生许多关联规则。
277277
如果能减少规则的数目来确保问题的可解析,那么计算起来就会好很多。
278278
通过观察,我们可以知道,如果某条规则并不满足 `最小可信度` 要求,那么该规则的所有子集也不会满足 `最小可信度` 的要求。
@@ -386,7 +386,7 @@ def generateRules(L, supportData, minConf=0.7):
386386
* 1.首先从一个频繁项集开始,接着创建一个规则列表,其中规则右部分只包含一个元素,然后对这个规则进行测试。
387387
* 2.接下来合并所有剩余规则来创建一个新的规则列表,其中规则右部包含两个元素。
388388
* 如下图:
389-
* ![所有可能的项集组合](http://data.apachecn.org/img/AiLearning/ml/11.Apriori/所有可能的项集组合.png)
389+
* ![所有可能的项集组合](img/所有可能的项集组合.png)
390390
* 最后: 每次增加频繁项集的大小,Apriori 算法都会重新扫描整个数据集,是否有优化空间呢? 下一章: FP-growth算法等着你的到来
391391

392392
* * *

docs/ml/12.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
# 第12章 使用FP-growth算法来高效发现频繁项集
33

4-
![](http://data.apachecn.org/img/AiLearning/ml/12.FP-growth/apachecn_fp_growth_homepage.png)
4+
![](img/apachecn_fp_growth_homepage.png)
55

66
## 前言
77
[第11章]() 时我们已经介绍了用 `Apriori` 算法发现 `频繁项集``关联规则`
@@ -37,31 +37,31 @@ class treeNode:
3737
1. 遍历所有的数据集合,计算所有项的支持度。
3838
2. 丢弃非频繁的项。
3939
3. 基于 支持度 降序排序所有的项。
40-
![](http://data.apachecn.org/img/AiLearning/ml/12.FP-growth/步骤1-3.png)
40+
![](img/步骤1-3.png)
4141
4. 所有数据集合按照得到的顺序重新整理。
4242
5. 重新整理完成后,丢弃每个集合末尾非频繁的项。
43-
![](http://data.apachecn.org/img/AiLearning/ml/12.FP-growth/步骤4-5.png)
43+
![](img/步骤4-5.png)
4444

4545
步骤2:
4646
6. 读取每个集合插入FP树中,同时用一个头部链表数据结构维护不同集合的相同项。
47-
![](http://data.apachecn.org/img/AiLearning/ml/12.FP-growth/步骤6-1.png)
47+
![](img/步骤6-1.png)
4848
最终得到下面这样一棵FP树
49-
![](http://data.apachecn.org/img/AiLearning/ml/12.FP-growth/步骤6-2.png)
49+
![](img/步骤6-2.png)
5050

5151

5252
从FP树中挖掘出频繁项集
5353

5454
步骤3:
5555
1. 对头部链表进行降序排序
5656
2. 对头部链表节点从小到大遍历,得到条件模式基,同时获得一个频繁项集。
57-
![](http://data.apachecn.org/img/AiLearning/ml/12.FP-growth/步骤6-2.png)
57+
![](img/步骤6-2.png)
5858
如上图,从头部链表 t 节点开始遍历,t 节点加入到频繁项集。找到以 t 节点为结尾的路径如下:
59-
![](http://data.apachecn.org/img/AiLearning/ml/12.FP-growth/步骤7-1.png)
59+
![](img/步骤7-1.png)
6060
去掉FP树中的t节点,得到条件模式基<左边路径, 右边是值>[z,x,y,s,t]:2,[z,x,y,r,t]:1 。条件模式基的值取决于末尾节点 t ,因为 t 的出现次数最小,一个频繁项集的支持度由支持度最小的项决定。所以 t 节点的条件模式基的值可以理解为对于以 t 节点为末尾的前缀路径出现次数。
6161

6262
3. 条件模式基继续构造条件 FP树, 得到频繁项集,和之前的频繁项组合起来,这是一个递归遍历头部链表生成FP树的过程,递归截止条件是生成的FP树的头部链表为空。
6363
根据步骤 2 得到的条件模式基 [z,x,y,s,t]:2,[z,x,y,r,t]:1 作为数据集继续构造出一棵FP树,计算支持度,去除非频繁项,集合按照支持度降序排序,重复上面构造FP树的步骤。最后得到下面 t-条件FP树 :
64-
![](http://data.apachecn.org/img/AiLearning/ml/12.FP-growth/步骤7-2.png)
64+
![](img/步骤7-2.png)
6565
然后根据 t-条件FP树 的头部链表进行遍历,从 y 开始。得到频繁项集 ty 。然后又得到 y 的条件模式基,构造出 ty的条件FP树,即 ty-条件FP树。继续遍历ty-条件FP树的头部链表,得到频繁项集 tyx,然后又得到频繁项集 tyxz. 然后得到构造tyxz-条件FP树的头部链表是空的,终止遍历。我们得到的频繁项集有 t->ty->tyz->tyzx,这只是一小部分。
6666
* 条件模式基:头部链表中的某一点的前缀路径组合就是条件模式基,条件模式基的值取决于末尾节点的值。
6767
* 条件FP树:以条件模式基为数据集构造的FP树叫做条件FP树。

docs/ml/13.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 第13章 利用 PCA 来简化数据
22

3-
![利用PCA简化数据_首页](http://data.apachecn.org/img/AiLearning/ml/13.PCA/利用PCA简化数据_首页.jpg)
3+
![利用PCA简化数据_首页](img/利用PCA简化数据_首页.jpg)
44

55
## 降维技术
66

@@ -70,7 +70,7 @@
7070

7171
例如下图:
7272

73-
![应用PCA降维](http://data.apachecn.org/img/AiLearning/ml/13.PCA/应用PCA降维.png)
73+
![应用PCA降维](img/应用PCA降维.png)
7474

7575
> PCA 优缺点
7676
@@ -128,7 +128,7 @@ def replaceNanWithMean():
128128

129129
> 分析数据: 统计分析 N 的阈值
130130
131-
![PCA分析数据过程](http://data.apachecn.org/img/AiLearning/ml/13.PCA/PCA分析数据过程.jpg)
131+
![PCA分析数据过程](img/PCA分析数据过程.jpg)
132132

133133
> PCA 数据降维
134134

docs/ml/14.md

+12-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# 第14章 利用SVD简化数据
22
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
33

4-
![利用SVD简化数据首页](http://data.apachecn.org/img/AiLearning/ml/14.SVD/svd_headPage.jpg "利用SVD简化数据首页")
4+
![利用SVD简化数据首页](img/svd_headPage.jpg "利用SVD简化数据首页")
55

66
## SVD 概述
77

@@ -17,22 +17,22 @@
1717
隐性语义索引: 矩阵 = 文档 + 词语
1818
* 是最早的 SVD 应用之一,我们称利用 SVD 的方法为隐性语义索引(LSI)或隐性语义分析(LSA)。
1919

20-
![LSA举例](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-LSI举例.png)
20+
![LSA举例](img/使用SVD简化数据-LSI举例.png)
2121

2222
> 推荐系统
2323
2424
1. 利用 SVD 从数据中构建一个主题空间。
2525
2. 再在该空间下计算其相似度。(从高维-低维空间的转化,在低维空间来计算相似度,SVD 提升了推荐系统的效率。)
2626

27-
![主题空间案例1](http://data.apachecn.org/img/AiLearning/ml/14.SVD/SVD_推荐系统_主题空间案例1.jpg)
27+
![主题空间案例1](img/SVD_推荐系统_主题空间案例1.jpg)
2828

2929
* 上图右边标注的为一组共同特征,表示美式 BBQ 空间;另一组在上图右边未标注的为日式食品 空间。
3030

3131
> 图像压缩
3232
3333
例如: `32*32=1024 => 32*2+2*1+32*2=130`(2*1表示去掉了除对角线的0), 几乎获得了10倍的压缩比。
3434

35-
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-SVD公式.jpg)
35+
![SVD公式](img/使用SVD简化数据-SVD公式.jpg)
3636

3737
## SVD 原理
3838

@@ -54,11 +54,11 @@
5454

5555
$$Data_{m \ast n} = U_{m \ast k} \sum_{k \ast k} V_{k \ast n}$$
5656

57-
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-SVD公式.jpg)
57+
![SVD公式](img/使用SVD简化数据-SVD公式.jpg)
5858

5959
具体的案例: (大家可以试着推导一下: https://wenku.baidu.com/view/b7641217866fb84ae45c8d17.html
6060

61-
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/SVD公式的测试案例.jpg)
61+
![SVD公式](img/SVD公式的测试案例.jpg)
6262

6363
* 上述分解中会构建出一个矩阵 $$\sum$$ ,该矩阵只有对角元素,其他元素均为0(近似于0)。另一个惯例就是,$$\sum$$ 的对角元素是从大到小排列的。这些对角元素称为奇异值。
6464
* 奇异值与特征值(PCA 数据中重要特征)是有关系的。这里的奇异值就是矩阵 $$Data \ast Data^T$$ 特征值的平方根。
@@ -97,12 +97,12 @@ $$Data_{m \ast n} = U_{m \ast k} \sum_{k \ast k} V_{k \ast n}$$
9797
* 基于物品的相似度: 计算物品之间的距离。【耗时会随物品数量的增加而增加】
9898
* 由于物品A和物品C 相似度(相关度)很高,所以给买A的人推荐C。
9999

100-
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-基于物品相似度.png)
100+
![SVD公式](img/使用SVD简化数据-基于物品相似度.png)
101101

102102
* 基于用户的相似度: 计算用户之间的距离。【耗时会随用户数量的增加而增加】
103103
* 由于用户A和用户C 相似度(相关度)很高,所以A和C是兴趣相投的人,对于C买的物品就会推荐给A。
104104

105-
![SVD公式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/使用SVD简化数据-基于用户相似度.png)
105+
![SVD公式](img/使用SVD简化数据-基于用户相似度.png)
106106

107107
> 相似度计算
108108
@@ -146,7 +146,7 @@ $$Data_{m \ast n} = U_{m \ast k} \sum_{k \ast k} V_{k \ast n}$$
146146

147147
> 收集 并 准备数据
148148
149-
![SVD 矩阵](http://data.apachecn.org/img/AiLearning/ml/14.SVD/项目数据导入.jpg)
149+
![SVD 矩阵](img/项目数据导入.jpg)
150150

151151
```python
152152
def loadExData3():
@@ -177,9 +177,9 @@ recommend() 会调用 基于物品相似度 或者是 基于SVD,得到推荐
177177

178178
* 1.基于物品相似度
179179

180-
![基于物品相似度](http://data.apachecn.org/img/AiLearning/ml/14.SVD/基于物品相似度.jpg)
180+
![基于物品相似度](img/基于物品相似度.jpg)
181181

182-
![欧式距离的计算方式](http://data.apachecn.org/img/AiLearning/ml/14.SVD/欧式距离的计算方式.jpg)
182+
![欧式距离的计算方式](img/欧式距离的计算方式.jpg)
183183

184184
```python
185185
# 基于物品相似度的推荐引擎
@@ -229,7 +229,7 @@ def standEst(dataMat, user, simMeas, item):
229229

230230
* 2.基于SVD(参考地址: http://www.codeweblog.com/svd-%E7%AC%94%E8%AE%B0/)
231231

232-
![基于SVD.png](http://data.apachecn.org/img/AiLearning/ml/14.SVD/基于SVD.png)
232+
![基于SVD.png](img/基于SVD.png)
233233

234234
```python
235235
# 基于SVD的评分估计

docs/ml/15.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# 第15章 大数据与MapReduce
22

3-
![大数据与MapReduce首页](http://data.apachecn.org/img/AiLearning/ml/15.BigData_MapReduce/mr_headPage.jpg "大数据与MapReduce首页")
3+
![大数据与MapReduce首页](img/mr_headPage.jpg "大数据与MapReduce首页")
44

55
## 大数据 概述
66

@@ -37,7 +37,7 @@ MapReduce: 分布式的计算框架,可以将单个计算作业分配给多台
3737
* 数据被重复存放在不同的机器上,以防止某个机器失效
3838
* mapper 和 reducer 传输的数据形式为 key/value对
3939

40-
![MapReduce框架的示意图](http://data.apachecn.org/img/AiLearning/ml/15.BigData_MapReduce/mr_1_cluster.jpg "MapReduce框架的示意图")
40+
![MapReduce框架的示意图](img/mr_1_cluster.jpg "MapReduce框架的示意图")
4141

4242
> MapRedece 特点
4343

docs/ml/16.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@
4646
| 基于知识推荐 | |
4747
| 组合推荐 | |
4848

49-
![推荐方法对比](http://data.apachecn.org/img/AiLearning/ml/16.RecommendedSystem/推荐方法对比.png)
49+
![推荐方法对比](img/推荐方法对比.png)
5050

5151
### 基于知识推荐
5252

5353
基于知识的推荐(Knowledge-based Recommendation)在某种程度是可以看成是一种推理(Inference)技术,它不是建立在用户需要和偏好基础上推荐的。基于知识的方法因它们所用的功能知识不同而有明显区别。效用知识(Functional Knowledge)是一种关于一个项目如何满足某一特定用户的知识,因此能解释需要和推荐的关系,所以用户资料可以是任何能支持推理的知识结构,它可以是用户已经规范化的查询,也可以是一个更详细的用户需要的表示。
5454

55-
![基于知识的推荐](http://data.apachecn.org/img/AiLearning/ml/16.RecommendedSystem/基于知识的推荐.jpg)
55+
![基于知识的推荐](img/基于知识的推荐.jpg)
5656

5757
### 协同过滤推荐
5858

0 commit comments

Comments
 (0)