# AILearning
**Repository Path**: cjfjack/AILearning
## Basic Information
- **Project Name**: AILearning
- **Description**: No description available
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-06-26
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
- [监督学习](#监督学习)
- [线性回归](#线性回归)
- [分类](#分类)
- [logistic](#logistic回归)
- [KNN-近邻算法](#KNN-近邻算法)
- [决策树](#决策树)
- [朴素贝叶斯](#朴素贝叶斯)
- [支持向量机](#支持向量机)
# 监督学习
## 线性回归
说到回归,一般都是指 线性回归(linear regression)。线性回归意味着可以将输入项分别乘以一些常量,再将结果加起来得到输出。
回归系数公式:

## 分类
### logistic回归
#### 须知概念
- Sigmoid函数
- 回归概念:
用一条直线拟合一些数据点,这条直线叫作最佳拟合直线,这个过程称为回归
- 二值型输出分类函数
- 函数公式:

- 函数图像:

- 基于最优方法的回归系数确定
- 令函数输入 z 等于: 
- 其中 x 是分类器的输入数据,w 为要求的最佳参数
- 梯度上升法(梯度下降法)
#### 工作原理
```angular2html
每个回归系数初始化为 1
重复 R 次:
计算整个数据集的梯度
使用 步长 x 梯度 更新回归系数的向量
返回回归系数
```
#### 项目案例1: 使用 Logistic 回归在简单数据集上的分类
完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/5.Logistic/logistic.py
项目概述
在一个简单的数据集上,采用梯度上升法找到 Logistic 回归分类器在此数据集上的最佳回归系数
#### 项目案例2: 从疝气病症预测病马的死亡率
完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/5.Logistic/logistic.py
项目概述
使用 Logistic 回归来预测患有疝病的马的存活问题。疝病是描述马胃肠痛的术语。然而,这种病不一定源自马的胃肠问题,其他问题也可能引发马疝病。这个数据集中包含了医院检测马疝病的一些指标,有的指标比较主观,有的指标难以测量,例如马的疼痛级别。
### KNN-近邻算法
- 小结:
监督学习
- 基本原理:
通过距离度量来计算查询点(query point)与每个训练数据点的距离,然后选出与查询点(query point)相近的K个最邻点(K nearest neighbors),使用分类决策来选出对应的标签来作为该查询点的标签。
- KNNN三要素:
- K值:k值小的时候 近似误差小,估计误差大。 k值大 近似误差大,估计误差小。可使用交叉验证(cross validation,即使用一部分训练数据作为测试数据,统计错误率)选择合适的值
- 距离度量 Metric/Distance Measure:通常为 欧式距离(Euclidean distance),还可以是 Minkowski 距离 或者 曼哈顿距离。也可以是 地理空间中的一些距离公式
- 分类决策 (decision rule):分类决策 在 分类问题中 通常为通过少数服从多数 来选取票数最多的标签,在回归问题中通常为 K个最邻点的标签的平均值
#### KNN项目案例1: 优化约会网站的配对效果
完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py3.x/ml/2.KNN/kNN.py
项目概述:
海伦使用约会网站寻找约会对象。经过一段时间之后,她发现曾交往过三种类型的人:
- 不喜欢的人
- 魅力一般的人
- 极具魅力的人
#### 开发流程
```
收集数据:提供文本文件
准备数据:使用 Python 解析文本文件
分析数据:使用 Matplotlib 画二维散点图
训练算法:此步骤不适用于 k-近邻算法
测试算法:使用海伦提供的部分数据作为测试样本。
- 测试样本和非测试样本的区别在于:
- 测试样本是已经完成分类的数据,如果预测分类与实际类别不同,则标记为一个错误。
使用算法:产生简单的命令行程序,然后海伦可以输入一些特征数据以判断对方是否为自己喜欢的类型。
```
#### KNN项目案例2: 手写数字识别系统
完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py3.x/ml/2.KNN/kNN.py
项目概述:
构造一个能识别数字 0 到 9 的基于 KNN 分类器的手写数字识别系统。
需要识别的数字是存储在文本文件中的具有相同的色彩和大小:宽高是 32 像素 * 32 像素的黑白图像。
##### 开发流程
```angular2html
收集数据:提供文本文件。
准备数据:编写函数 img2vector(), 将图像格式转换为分类器使用的向量格式
分析数据:在 Python 命令提示符中检查数据,确保它符合要求
训练算法:此步骤不适用于 KNN
测试算法:编写函数使用提供的部分数据集作为测试样本,测试样本与非测试样本的
区别在于测试样本是已经完成分类的数据,如果预测分类与实际类别不同,
则标记为一个错误
使用算法:本例没有完成此步骤,若你感兴趣可以构建完整的应用程序,从图像中提取
数字,并完成数字识别,美国的邮件分拣系统就是一个实际运行的类似系统
```
### 决策树
#### 须知概念
- 信息熵(entropy):是一种信息的度量方式,指的是信息的混乱程度,信息越有序,信息熵值越低,反之越高
- 信息增益(information gain):在划分数据集前后信息发生的变化称为信息增益
### 定义
一种对实例进行分类的属性结构
### 组成
- 结点(node)
- 内部结点(internal node):表示实例的一种特征或属性,即没有到达最后子结点的结点
- 叶结点(leaf node):表示实例的分类,即最后的子结点
- 有向边(directed edge)
### 开发流程
```angular2html
收集数据:可以使用任何方法。
准备数据:树构造算法 (这里使用的是ID3算法,只适用于标称型数据,这就是为什么数值型数据必须离散化。 还有其他的树构造算法,比如CART)
分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。
训练算法:构造树的数据结构。
测试算法:使用训练好的树计算错误率。
使用算法:此步骤可以适用于任何监督学习任务,而使用决策树可以更好地理解数据的内在含义。
```
#### 项目案例1: 判定鱼类和非鱼类
项目概述
根据以下 2 个特征,将动物分成两类:鱼类和非鱼类。
特征:
1. 不浮出水面是否可以生存
2. 是否有脚蹼
完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/3.DecisionTree/DecisionTree.py
开发流程
```angular2html
收集数据:可以使用任何方法
准备数据:树构造算法(这里使用的是ID3算法,因此数值型数据必须离散化。)
分析数据:可以使用任何方法,构造树完成之后,我们可以将树画出来。
训练算法:构造树结构
测试算法:使用习得的决策树执行分类
使用算法:此步骤可以适用于任何监督学习任务,而使用决策树可以更好地理解数据的内在含义
```
计算香农熵公式:

### 朴素贝叶斯
利用贝叶斯公式进行分类:给定某个由 x、y 表示的数据点,那么该数据点来自类别 c1 的概率是多少?数据点来自类别 c2 的概率又是多少?记为p(c1|x, y) 和 p(c2|x, y),注意这些概率与概率 p(x, y|c1) 并不一样,不过可以使用贝叶斯准则来交换概率中条件与结果。具体地,应用贝叶斯准则得到:

#### 项目案例1: 屏蔽社区留言板的侮辱性言论
完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/4.NaiveBayes/bayes.py
项目概述
构建一个快速过滤器来屏蔽在线社区留言板上的侮辱性言论。如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当。对此问题建立两个类别: 侮辱类和非侮辱类,使用 1 和 0 分别表示。
#### 项目案例2: 使用朴素贝叶斯过滤垃圾邮件
完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/4.NaiveBayes/bayes.py
项目概述
完成朴素贝叶斯的一个最著名的应用: 电子邮件垃圾过滤
#### 项目案例3: 使用朴素贝叶斯分类器从个人广告中获取区域倾向
完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/4.NaiveBayes/bayes.py
项目概述
广告商往往想知道关于一个人的一些特定人口统计信息,以便能更好地定向推销广告。
我们将分别从美国的两个城市中选取一些人,通过分析这些人发布的信息,来比较这两个城市的人们在广告用词上是否不同。如果结论确实不同,那么他们各自常用的词是哪些,从人们的用词当中,我们能否对不同城市的人所关心的内容有所了解。
文档词袋模型
我们将每个词的出现与否作为一个特征,这可以被描述为 词集模型(set-of-words model)。
如果一个词在文档中出现不止一次,这可能意味着包含该词是否出现在文档中所不能表达的某种信息,这种方法被称为 词袋模型(bag-of-words model)。
### 支持向量机
#### 概念
支持向量机(Support Vector Machines, SVM)是一种监督学习算法
- 支持向量(Support Vector)指的是离分隔超平面最近的那些点
- 机(Machines)指的是算法,不是机器
#### 使用场景
- 要给左右两边的点分类
- 明显选择D会比B、C的分隔效果好很多

#### 工作原理
- 如果数据可以用一条直线完全分开,那么这些数据就叫做线性可分(linearly separable)数据,这条直线叫做分隔超平面(separting hyperplane)
- 如果线性可分数据有N维,这需要用N-1个对象来分隔,这些对象就是分类决策边界,也就是超平面(hyperplane)