Skip to content

Commit

Permalink
2020-10-19 21:18:53
Browse files Browse the repository at this point in the history
  • Loading branch information
wizardforcel committed Oct 19, 2020
1 parent a1aea5f commit 003a199
Show file tree
Hide file tree
Showing 226 changed files with 165 additions and 165 deletions.
12 changes: 6 additions & 6 deletions docs/ml/1.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 第1章 机器学习基础

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

## 机器学习 概述

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

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

### 算法汇总

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


## 机器学习 使用
Expand All @@ -104,7 +104,7 @@

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

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

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

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

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

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

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

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

### 其他

Expand Down
10 changes: 5 additions & 5 deletions docs/ml/10.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 第 10 章 K-Means(K-均值)聚类算法

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

## 聚类

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

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

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

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

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



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

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

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

* **作者: [那伊抹微笑](http://cwiki.apachecn.org/display/~xuxin), [清都江水郎](http://cwiki.apachecn.org/display/~xuzhaoqing)**
* [GitHub地址](https://github.com/apachecn/AiLearning): <https://github.com/apachecn/AiLearning>
Expand Down
12 changes: 6 additions & 6 deletions docs/ml/11.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

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

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

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

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

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

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

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

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

* * *
Expand Down
16 changes: 8 additions & 8 deletions docs/ml/12.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

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

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

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

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


从FP树中挖掘出频繁项集

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

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

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

## 降维技术

Expand Down Expand Up @@ -70,7 +70,7 @@

例如下图:

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

> PCA 优缺点
Expand Down Expand Up @@ -128,7 +128,7 @@ def replaceNanWithMean():

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

> PCA 数据降维
Expand Down
24 changes: 12 additions & 12 deletions docs/ml/14.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 第14章 利用SVD简化数据
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>

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

## SVD 概述

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

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

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

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

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

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

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

## SVD 原理

Expand All @@ -54,11 +54,11 @@

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

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

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

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

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

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

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

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

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

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

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

* 1.基于物品相似度

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

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

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

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

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

```python
# 基于SVD的评分估计
Expand Down
4 changes: 2 additions & 2 deletions docs/ml/15.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 第15章 大数据与MapReduce

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

## 大数据 概述

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

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

> MapRedece 特点
Expand Down
4 changes: 2 additions & 2 deletions docs/ml/16.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@
| 基于知识推荐 | |
| 组合推荐 | |

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

### 基于知识推荐

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

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

### 协同过滤推荐

Expand Down
Loading

0 comments on commit 003a199

Please sign in to comment.