机器学习
概念
对于给定的任务T,在合理的性能度量方案P的前提下,程序可以自主学习任务T的经验E;随着提供合适、优质、大量的经验E,程序对于任务T的性能逐步提高
基本概念
- dataset 数据集
- instance 示例(没有结果的)/sample 样本(有结果的)
- attribute 属性/feature 特征
- classification 分类
- 连续值 regression 回归
- 离散值
- 监督学习
- 分类
- 回归
- 无监督学习
- 聚类(类内差距最小化,类间差距最大化)
- 输入空间x → 输出空间y 映射f y=f(x)
- 泛化:训练模型适应新样本的能力
- 学习过程:在所以假设(hypothesis)组成的空间中进行搜索
- 归纳偏好:算法在学习过程中对某种类型假设的偏好
- 奥卡姆剃刀原理:若有多个假设与观察一致,则选最简单的那个
- 语义分割:图片中像素点分类从而进行物品的分类
- VGG
- ResNet
- DensNet
- YOLO系列
- RCNN系列
- SSD
- DeepLab系列
- U-Net
- SAM
PAC
- 概率近似准确
$$
P(|f(x)-y|≤\epsilon)≥1-\delta
$$
NFL定理
一个算法若在某些问题上比另一个算法好,必存在另一些问题一者比另一者好。
三大问题
评估方法
- 测试集应该与训练集“互斥”
- 留出法
- 分层采样
- 随机划分
- 测试集不能太大、太小
- K-折交叉验证法
- 自助法
- 留出法
- 测试集应该与训练集“互斥”
性能度量
比较检验
交叉验证t校验
- k折交叉验证
McNemar检验(基于联列表,卡方检验)
分类
前馈型神经网络
反馈型神经网络
自组织神经网络
分支
分支一:计算机视觉(CV)
分支二:语音识别
- 鸡尾酒效应
- 同时多个声音出现,计算机无法准确识别各个说话主体,无法进行排异
分支三:文本挖掘/分类
- 关键字
分支四:机器翻译(MT)
分支五:机器人
Python-机器学习
工具包package类型
- Numpy
- FFT/Gauss/LSQ/SVD
- ndarray
- pandas
- DataFrame
- Series(Excel/csv/tsv)
- scipy
- Gamma
- Comb
- matplotlib
- scikit-learn
- ML
- tensorflow(Keras)/pyTorch/Theano(Keras)/Caffe/PandlePandle
- DL
安装包
- pip
IDE
- Anaconda
- PyCharm
Numpy、matplotlib、pandas实操
随机点阵图
import numpy as np
import matplotlib.pyplot as plt
#随机点阵图
data = np.random.rand(1000, 2)
print(data)
x = data[:, 0]
y = data[:, 1]
plt.plot(x, y, 'go', markersize=1)
plt.show()
效果:
随机柱状图
import numpy as np
import matplotlib.pyplot as plt
#随机柱状图
p = np.random.rand(10000)
np.set_printoptions(edgeitems=5000, suppress=True)
plt.hist(p, bins=20, color='g', edgecolor='k')
plt.show()
效果:(均匀分布)
import numpy as np
import matplotlib.pyplot as plt
#迭代柱状图
N = 10000
times = 100
z = np.zeros(N)
for i in range(times):
z += np.random.rand(N)
z /= times
plt.hist(z, bins=20, color='m', edgecolor='k')
效果:(高斯分布)
随机生成数组
- numpy -> ndarray
- pandas -> DataFrame
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
d = np.random.rand(3,4)
print(d)
print(type(d))
data = pd.DataFrame(data=d)
print('='*50)
print(data)
print(type(data))
随机折线图
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
x = np.linspace(0, 1, 100)
print(x)
y = x**x
plt.plot(x, y, 'r-', lw=1)
plt.show()
读写文本格式数据
前馈神经网络(BP算法)
结构
- 输入层
- 隐层
- 输出层
损失函数
$$
\sum_{Sample} \sum_{i=1}^k (\hat{y_k} - y_k)
$$
激活函数
- Sigmoid函数
- 优点:输出范围有限(0,1)
- 缺点:梯度下降明显,两头平坦 -> 梯度消失
$$
\psi(x)=\frac{1}{1+e^{-x}}
$$
- tanh函数
- 优点:值域对称,完全可微分、反对称
- 缺点:梯度消失问题
$$
tanh(x)=\frac{e^x - e^{-x}}{e^x + e^{-x}}
$$
- ReLu函数
- 优点:线性,收敛速度快,无梯度饱和
$$
R(z)=max(0,z)
$$
函数特性
- 非线性
- 可微性
- 单调性
- f(x) ≈ x
- 输出值范围
- 计算简单
- 归一化
交叉熵
二分类问题
$$
J(w)=\frac{1}{N}\sum_{n=1}^NH(p_n,q_n)=-\frac{1}{N}\sum_{n=1}^N[y_nlog\hat{y_k} + (1-y_n)log(1-\hat{y_k})]
$$
学习率(步长)
- 手动调整
- 固定学习率
- 动量法动态调整
- 随机梯度下降
- Adam自动调整
过拟合
防止方法:
- 参数范数惩罚
- 修改损失函数 -> 惩罚函数
- 数据增强
- 提前终止
- 每过几个epoch来验证一次,查看是否过拟合了
- Bagging等集成方法
- Dropout
- 有概率的在训练中放弃一些神经元点
- 批正则化
归一化处理
将一个数值组中最大最小值所在区间映射到[0,1]的区间上进行后续的数据处理