从零到完整:数据挖掘技术体系详解
本文系统梳理了数据挖掘从基础概念到主流算法的完整知识体系。内容覆盖数据预处理、特征工程、可视化方法、关联分析、推荐系统、时间序列分析、回归与分类模型、神经网络、决策树、集成学习以及模型评估等核心模块,并结合 Pandas、Matplotlib、sklearn、Surprise 等常用工具进行了结构化总结。文章旨在构建一条清晰的数据挖掘学习路径,帮助读者快速掌握常用算法原理、应用场景以及使用流程,适
本文篇幅有限,对算法不进行过多赘述!需要了解可以搜索站内其他大佬的具体算法博客
一、数据挖掘基础
▲数据挖掘是从大量的数据中提取隐含在其中的,人们事先不知道的、但有潜在价值的信息和知识的过程。
▲数据挖掘的同义词:知识发现、数据抽取、数据考古学、数据捕捞等。
1.1 数据挖掘流程
▲业务理解 - > 数据理解 - > 数据准备 - > 构建模型 - > 评估模型 - > 部署模型
1.2 数据挖掘和机器学习的区别和联系
▲区别:数据挖掘核心目标是发现知识,机器学习是做出预测;数据挖掘侧重点更注重结果的可解释性和业务价值,机器学习更注重算法的性能和预测的准确性;数据挖掘的典型任务是关联规则学习、聚类分析、预测、异常检测、序列模式挖掘;机器学习典型任务是分类、回归、聚类、深度学习。
联系:机器学习是数据挖掘的重要工具;数据挖掘的挖掘步骤中大量使用了机器学习算法来发现知识。最终目的都是将数据转化为有价值的信息。
1.3 数据挖掘的任务
▲预测:主要包括分类和回归两类问题;
▲聚类:是把数据按照相似性归纳成若干类别;
▲关联分析:两个或两个以上变量的取值之间存在的规律称为关联;
▲异常检测:指全局或局部范围内偏离一般水平的观测对象。
二、数据预处理
2.1 认识数据预处理
数据预处理是对原始数据进行一系列审查、校验、转换、清理等操作,使其满足数据挖掘算法要求的过程。是数据挖掘流程(CRISP-DM流程)中的数据准备。
▲旨在将原始数据转化为适合建模和分析的高质量数据。
4大任务:
数据清洗:数据中的重复值、异常值、缺失值(空值)
数据集成:将多个数据源中的数据合并,存放于一个一致的数据存储中
数据转换:数据标准化、数据哑变量处理、数据离散化
数据规约:维度规约、数量规约、数据压缩
2.1.1 数据清洗
异常值是指数据中个别的数值明显偏离其余的数值,有时也称为离群点。
检测异常值方法:
1.具体业务法:根据对业务的理解,对每一个指标设定一个合理的范围,一旦超过这个范围,认定为异常值。
2.3σ原则:又称为拉依达法则,在符合正态分布的数据集中,数据的数值分布几乎全部集中在区间▲**(μ-3σ, μ+3σ)内,超出这个范围的不超过0.3%,根据小概率原理,认为超过3σ的部分数据为异常数据**。
▲3.箱线图分析:箱线图展示了数据的四分位数、中位数以及上下限。超出上下限的点被认为是潜在异常值。
QL:下四分位数
QU:上四分位数
IQR:四分位数间距(四分位差),QU-QL
▲上限:QU+1.5IQR;下限:QL-1.5IQR
处理异常值:
▲删除异常值;替换异常值。
▲检测缺失值:isnull方法
▲处理缺失值:删除法(dropna方法)、替换法(fillna方法)
▲检测重复值:duplicated方法
▲处理重复值:删除法(drop_duplicates方法)
2.1.2 数据转换
数据离散化
▲某些算法需要分类数据,或将连续特征分段。即连续数据离散化。
数据哑变量转换
▲模型只认识数字,需要将分类数据转换为数值数据也叫独热编码(One-Hot Encoding)。即非数值转换为数值。
数据标准化
数据标准化的核心就是消除不同特征之间的量纲影响,使不同指标具有可比性。▲标准化分为标准差标准化(Z-score标准化)、最小最大标准化、消除量纲。
2.1.3 数据规约
数据规约定义:在尽可能保持数据原貌的前提下,通过一系列技术来减小数据集的规模。终极目标:更少的数据,更高的效率。
▲
| 策略 | 核心思想 | 常用方法 |
|---|---|---|
| 维度规约 | 减少特征的数量(减少列) | 主成分分析(PCA)、特征选择 |
| 数量规约 | 减少数据量(减少行) | 抽样、聚类/直方图、回归模型 |
| 数据压缩 | 减少数据存储空间 | 编码(如Huffman编码)、小波变换 |
2.2 数据预处理工具Pandas
Pandas(panel data & data analysis),是专门用于数据预处理和分析的工具,是一个针对结构化数据的工具集;能用于数据挖掘和数据分析,同时也提供数据清洗、数据合并、数据转换功能。
▲Pandas最重要的两个数据结构是Series和DataFrame。
2.2.1 DataFrame和Series
Pandas读取文件,读取完成后返回的数据类型是DataFrame。
▲与DataFrame相比,Series没有columns属性。其他一致。
▲
| 函数 | 返回值 | 备注 |
|---|---|---|
| values | 元素 | 表的数据部分 |
| index | 索引 | 行索引/行名称 |
| columns | 列名 | 列名称/表头 |
| dtypes | 元素类型 | 表内元素类型 |
| size | 元素个数 | 表内元素个数 |
| ndim | 维度数 | 数据部分的维度信息 |
| shape | 数据形状(行列数目) | 表的数据部分的形状 |
2.2.2 文件操作
▲Pandas可以读取csv、excel文件,以及SQL数据库。
▲
| 读文件 | 写文件 | |
|---|---|---|
| excel | pd.read_excel() | df.to_excel() |
| csv | pd.read_csv() | df.to_csv() |
2.2.3 增删查改
查:
对单列数据的访问:
df["列名称"]
对多列数据的访问:
df["列名1", "列名2"]
访问一行或多行,借助loc访问:
df[["行名"]],df[["行名1", "行名2"]]
访问指定行的指定列:
DataFrame.loc[行索引名称或条件, 列索引名称或条件]
访问特定行和特定列:
# 访问age=19的所有学生
con = df["age"] == 19
data = df.loc[con,:]
print(data)
# 访问age=19的学生的姓名和年龄
con = df["age"] == 19
data = df.loc[con,["name", "age"]]
print(data)
▲iloc和loc的区别是iloc接收的必须是行索引和列索引的位置。
增:新建一个列索引,并对该索引下的数据赋值。
▲删:删用drop
drop(labels, axis=0, inplace=False,errors='raise')
# axis为0是表示删除行,为1表示删除列
# labels接受string或array。代表删除的行或列的标签,无默认
# axis接受0或1,表示操作的轴向,默认为0
# inplace接受boolean。代表操作是否对原数据生效,默认为False
改:原理是将这部分数据提取出来,重新赋值为别的数据。改直接对原数据修改,操作无法撤销。
排序:使用sort_values()
# 升序
df.sort_values(by="age")
# 降序
df.sort_values(by="age", ascending=False)
2.2.4 统计
| 函数 | 说明 | 函数 | 说明 |
|---|---|---|---|
| min | 最小值 | max | 最大值 |
| mean | 均值 | std | 标准差 |
| median | 中位数 | var | 方差 |
| ▲quantile | 四分位数 | count | 非空值数目 |
| ▲mode | 众数 | describe | 描述统计 |
| idxmax | 最大值索引 | idxmin | 最小值索引 |
| unique | 不重复的数据 |
▲2.2.5 数据预处理常用函数
df.describe()
df.info
查询数据集各列的数据类型,是否为空值,数据类型,内存占用情况。
pandas.merge()
pandas.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=False,suffixes=('_x', '_y'),copy=True,indicator=False)
| 参数名称 | 说明 |
|---|---|
| left | 接收DataFrame或Series。表示要添加的新数据。无默认。 |
| right | 接收DataFrame或Series。表示要添加的新数据。无默认。。 |
| how | 接收inner,outer,left,right。表示数据的连接方式。默认为inner。 |
| on | 接收string或sequence。表示两个数据合并的主键(必须一致)。默认为None。 |
| left_on | 接收string或sequence。表示left参数接收数据用于合并的主键。默认为None。 |
| right_on | 接收string或sequence。表示right参数接收数据用于合并的主键。默认为None。 |
| suffixes | 接收接收tuple。表示用于追加到left和right参数接收数据重叠列名的尾缀默认为(‘_x’, ‘_y’)。 |
三、数据可视化Matplotlib
3.1 折线图
▲折线图用来描述随着时间某数值的变化。
用来观察数据的变化趋势。
单条数据记录大于2,同一个图上不要超过5条折线。
plt.plot
3.2 散点图
▲散点图用来查看数据分布,检测异常值。
用来推断变量间的相关性。
横轴纵轴:表示数据某方面的特征。
点:表示某个具体的样本或者数据在图中的位置坐标。
回归线:是数据分布的一条正常值的平均值的直线。
离群点:表示特殊情况或异常值。
plt.scatter
3.3 柱状图
▲柱状图用作离散类别的可视化。
用来对比分类数据的数值大小。
适合数据:一个分类数据字段,一个连续数据字段,不超过12条数据。
plt.bar
3.4 直方图
▲直方图可统计数据在不同区间的数据量。
横轴表示数据所属类别,纵轴表示数量或占比。
plt.hist
3.5 箱线图
▲箱线图可检测异常值,粗略的看数据是否有对称性、分布的分散程度。
利用最小值、下四分位数、中位数、上四分位数、最大值来描述数据。
plt.boxplot
3.6 饼图
▲饼图用来查看占比。
反映部分与部分、部分与整体之间的比例关系。
plt.pie
四、RapidMiner和sklearn
4.1 sklearn
sklearn(Scikit-Learn)支持分类、回归、聚类三大学习算法以及降维算法,还包含特征提取、数据处理和模型评估三大模块。
▲4.1.1 Scikit-Learn流程
收集数据:根据任务收集数据集
数据预处理:达到数据挖掘的使用标准
过滤数据:去重、去异常、空值处理;去除特殊符号等无关数据
选择特征:选择特征和标签
特征预处理:数据标准化、onehot编码
切分数据集:训练集、验证集、测试集——train_test_split
模型选取:根据任务、机器情况选择模型
模型训练:观察损失、数据拟合——fit
模型评估:确认效果、机器评估和人工评估
▲4.1.2 算法分类
有监督算法有分类和回归。
无监督算法有聚类、降维和关联分析。
4.2 RapidMiner
4.2.1 RapidMiner简介
RapidMiner是一个开源数据挖掘平台,可以无代码操作。
▲4.2.2 常用算子
Retrieve
Retrieve算子的功能是加载数据集。
Split Validation
Split Validation算子的功能是分割数据集。
Decision Tree
Decision Tree算子的功能是构建决策树。
Apply Model
Apply Model算子的功能是应用训练好的模型。
Performance
Performance算子的功能任务不同功能不同。在分类任务(如鸢尾花分类)中用来对模型进行性能评估。
五、关联分析
5.1 基本信息
5.1.1 关联分析介绍
▲关联分析是一种在大规模数据集中寻找有趣关系的非监督学习算法。
▲两种有趣关系:
频繁项集:经常出现一起的物品集合。
关联规则:两种物品之间可能存在很强的关系。
关联分析的一般过程:
1.找出所有频繁项集:通过最小支持度找出所有频繁项集或最大频繁项集。
2.从高频项中提取规则:利用频繁项集生成所需要的关联规则,利用最小可信度筛选出强关联规则。
▲5.1.2 各个度
支持度
一个项集的支持度为包含该项集的记录占总记录的比例,比例越高,代表该项集出现的频率越高。支持度就是为了找出频繁项集。

置信度
置信度也叫可信度,是针对**关联规则{X}=>{y}**定义的。
置信度(X=>Y)=支持度(XUY)支持度(X) 置信度(X=>Y)=\frac{支持度(XUY)}{支持度(X)} 置信度(X=>Y)=支持度(X)支持度(XUY)
A->B和B->A的置信度是不一样的,即关联规则反向不一定成立。
规则A=>B的支持度:同时包含A和B的比例;
规则A=>B的置信度:在出现项集A的前提下,出现B项集的比例。
提升度
提升度代表的是“商品X的出现,对商品Y的出现概率提升”的程度。
提升度(X=>Y)=置信度(X=>Y)支持度(Y) 提升度(X=>Y)=\frac{置信度(X=>Y)}{支持度(Y)} 提升度(X=>Y)=支持度(Y)置信度(X=>Y)
提升度>1代表有提升;
提升度=1代表没有提升也没有下降;
提升度<1代表有下降。
Lift()表示提升度。
5.1.3 频繁项集
▲定义一个最小支持度,支持度≥min_支持度的项集为频繁项集。
5.1.4 关联规则
▲满足最小支持度和最小置信度的规则,即置信度≥最小置信度的关联规则叫做强关联规则;
强关联规则又分为有效的强关联规则和无效的强关联规则。
▲若Lift(A->B)>1,则规则“A->B”是有效的强关联规则;
若Lift(A->B)<1,则规则“A->B”是无效的强关联规则;
若Lift(A->B)=1,则表示A和B相互独立。
5.2 Apriori算法
Apriori算法是一种高效的挖掘频繁项集和生成关联规则的算法。
5.2.1 Apriori算法性质
▲性质1:如果某项集是频繁的,那么它的所有子集都是频繁的;

▲性质2:如果一个集合不是频繁项集,则他的所有超集都不是频繁项集。

▲5.2.2 Apriori算法流程
1.设定最小支持度
2.根据数据集生成候选项,首先生成单项集;
C1 C_1 C1
3.过滤数据项集支持度<min_支持度的项集,构成频繁项集;
LK L_K LK
4.根据步骤3形成频繁项集结果,进行项集之间的组合形成新的项集组合;
CK+1 C_{K+1} CK+1
5.重复步骤3和4,直到没有新的项集满足最小支持度;
6.根据步骤5形成最终的频繁项集集合。
即
C1−L1−C2−L2…… C_1-L_1-C_2-L_2…… C1−L1−C2−L2……
5.2.3 强关联规则挖掘
原理
▲如果某规则是低可信度的,则以该后件为超集的规则都是低可信的;
▲如果012->3是一条低可信度规则,则所有其他以3为后件的规则都是低可信度,因为 支持度(012)≤支持度(01):
置信度(012=>3)=支持度(0123)支持度(012)≥置信度(01=>23)=支持度(0123)支持度(01) 置信度(012=>3)=\frac{支持度(0123)}{支持度(012)} ≥ 置信度(01=>23)=\frac{支持度(0123)}{支持度(01)} 置信度(012=>3)=支持度(012)支持度(0123)≥置信度(01=>23)=支持度(01)支持度(0123)
过程
1.在频繁项集的基础上挖掘
2.确定所有的关联规则
3.设置min_置信度
4.确定强关联规则
5.3 FP-Growth
5.3.1 FP-Growth算法简介
FP-Growth(Frequent Pattern Tree Growth),简称频繁模式树增长算法,采用分而治之的基本思想,将数据库中的频繁项集压缩到一颗频繁模式树中,同时保持项集之间的关联关系。
▲优点
需要两次扫描数据库;
不会产生候选项集。
▲5.3.2 FP-Growth算法流程
1.计算L1(即频繁1项集,计算1项集频率(支持度或支持数)按照降序排列,找出频繁1项集)
2.利用L1重写数据库
3.生成FP树(从树根到树叶,从上到下),增加项头表
4.生成每个项的条件模式基
5.生成每个项的条件FP树
6.产生频繁项集(从树叶到树根,从下到上)
六、推荐算法
推荐系统是一种信息过滤系统,旨在帮助用户在大量数据中快速定位到他们感兴趣的内容或服务。
| 算法 | 优点 | 缺点 |
|---|---|---|
| 基于流行度的推荐算法 | 简单、适合刚注册的用户 | 无法针对用户提供个性化的推荐 |
| 基于内容的推荐算法 | 易于实现,不需要用户数据 基于物品本身特性推荐,不存在过度推荐热门的问题 |
抽取的特征要保证准确性又要有实际意义 推荐的Item可能会重复 |
基于关联规则的推荐算法常见于电子商务系统中。
| 基于协同过滤的推荐算法 | 本质 |
|---|---|
| 基于用户的协同过滤推荐算法(UserCF) | 给用户推荐和他兴趣相似的其他用户喜欢的产品 |
| 基于物品的协同过滤推荐算法(ItemCF) | 给用户推荐和他之前喜欢的物品相似的物品 |
6.1 协同过滤
▲协同过滤算法是一个有监督学习算法。
6.1.1 基于用户的协同过滤推荐算法
基于用户的协同过滤推荐算法的原理是先找到相似用户,再找到他们喜欢的物品。
通过用户对不同内容的行为来评测用户之间的相似性,找到待推荐用户的“邻居”,基于“邻居”对物品的喜欢程度做出推荐。
▲算法流程
1.找到与目标用户兴趣相似的用户集合
2.预测目标用户对物品的评分,将他们推荐给目标用户
6.1.2 基于物品的协同过滤推荐算法
ItemCF介绍
▲算法流程
计算物品之间的相似度;
根据物品的相似度和用户的历史行为给用户生成推荐列表。
6.2 矩阵分解
奇异值分解(Singular Value Decomposition, SVD):任何一个M×N的矩阵A,可以被转换成三个矩阵的乘积:一个M×M的正交矩阵U,一个M×M的对角矩阵(奇异值矩阵),和一个M×N正交矩阵V的转置矩阵。
基于矩阵分解的推荐算法使用的是Funk-SVD算法。
▲矩阵分解算法的基本思想就是将这个系数的用户-物品矩阵分解为两个低秩矩阵的乘积,即用户矩阵和物品矩阵。使用户矩阵的每一行代表一个用户的潜在特征向量,物品矩阵的每一列代表一个物品的潜在特征向量。通过学习这些潜在特征向量,可以预测用户对为评分物品的评分从而实现推荐。
使用梯度下降法优化Funk-SVD这个损失函数。
6.3 衡量相似度
衡量相似度的常用方法有:余弦相似度、皮尔逊相关系数、杰卡德相似度、集合的余弦相似度。
▲6.3.1 余弦相似度
余弦相似度衡量用户向量i和j之间的夹角大小,夹角越小,说明相似度越大,两个用户越相似。公式如下:
similarity(A,B)=∑k=1n AkBk∑k=1n Ak2∑k=1n Bk2 \operatorname{similarity}(A, B)=\frac{\sum_{k=1}^{\mathrm{n}} \mathrm{~A}_{\mathrm{k}} B_{\mathrm{k}}}{\sqrt{\sum_{k=1}^{\mathrm{n}} \mathrm{~A}_{\mathrm{k}}^{2}} \sqrt{\sum_{k=1}^{\mathrm{n}} \mathrm{~B}_{\mathrm{k}}^{2}}} similarity(A,B)=∑k=1n Ak2∑k=1n Bk2∑k=1n AkBk
分子:两个向量的点乘
分母:每个向量平方和开根号再相乘
通过用户对不同内容的行为,来评测用户之间的相似性。
▲6.3.2 皮尔逊相关系数
皮尔逊相关系数通过使用用户平均分对每个独立评分进行修正,减少了用户评分偏置的影响,效果好于余弦相似度。Pearson把两个向量都减去他们的均值,然后再计算余弦相似度值。公式如下:
pearson(i,j)=∑p∈P(Ri,p−Rˉi)(Rj,p−Rˉj)∑p∈P(Ri,p−Rˉi)2∑p∈P(Rj,p−Rˉj)2 \text{pearson}(i,j) = \frac{\sum_{p \in P} \left( R_{i,p} - \bar{R}_i \right) \left( R_{j,p} - \bar{R}_j \right)}{\sqrt{\sum_{p \in P} \left( R_{i,p} - \bar{R}_i \right)^2} \sqrt{\sum_{p \in P} \left( R_{j,p} - \bar{R}_j \right)^2}} pearson(i,j)=∑p∈P(Ri,p−Rˉi)2∑p∈P(Rj,p−Rˉj)2∑p∈P(Ri,p−Rˉi)(Rj,p−Rˉj)
其中R_{i,p}代表用户i对物品p的评分,R^{-}代表用户i对所有物品的平均评分,P代表所有物品的集合,p表示某个物品。
6.3.3 集合的余弦相似度(扩展案例2)
基于余弦相似度计算集合相似度:
Cos(A,B)=∣A∩B∣∣A∣×∣B∣ \mathbf{Cos}(\mathbf{A}, \mathbf{B}) = \frac{|\mathbf{A} \cap \mathbf{B}|}{\sqrt{|\mathbf{A}| \times |\mathbf{B}|}} Cos(A,B)=∣A∣×∣B∣∣A∩B∣
Cos(A, B)等于A和B交际的个数除以根号下A集合个数乘B集合个数。
6.4 使用工具
6.4.1 Surprise介绍
▲Surprise(Simple Python Recommendation System Engine)是scikit系列的一个基于Python的构建和分析推荐系统的工具库。
数据处理步骤
1.加载数据集,借助surprise.Dataset和surprise.Reader;返回的类型是surprise.dataset.DatasetAutoFolds(不能直接查看)三种形式:从内置库加载、从df加载、从文件加载
2.数据转换(全部转换为训练集 或 拆分为训练集和测试集),训练集的类型是surprise.trainset.Trainset,测试集的类型是list
3.查看数据,可借助pd.DataFrame(List(trainset1.all_ratings())), pd.DataFrame(testset)
6.5 冷启动
冷启动问题是指再推荐系统的初期阶段,由于▲缺乏用户和物品的历史交互数据,导致无法准确推荐给新用户或新物品的问题。
新用户冷启动解决方案
启动页提供一个可供用户选择兴趣标签的功能,引导用户完成填写,用这些标签完成最初的个性化推荐。
七、时间序列
7.1 时间序列概述
时间序列是按照时间顺序取得一系列观测值。
时间序列分析就是对事件序列进行观察、研究、寻找变化发展规律,预测其将来走势的过程;时间序列分析的基本假设:历史数据中蕴含着可以预测未来模式的信息。
传统的时间序列被分为以下几个部分:
▲趋势性:数据在长期内呈现的持续向上或向下的运动方向;
▲季节性:在固定周期内,由于季节性因素引起的规律性波动;
▲周期性:非固定频率的波动,通常与经济周期相关(如繁荣、衰退、萧条、复苏),周期长度不固定;
▲残差:在剔除趋势、季节性和周期性之后,剩下的无法解释的随机波动。
加法模型:Yt=Trendt+Seasonalityt+Cyclet+Residualt乘法模型:Yt=Trendt×Seasonalityt×Cyclet×Residualt 加法模型:Y_t = Trend_t + Seasonality_t + Cycle_t + Residual_t\\ 乘法模型:Y_t = Trend_t \times Seasonality_t \times Cycle_t \times Residual_t 加法模型:Yt=Trendt+Seasonalityt+Cyclet+Residualt乘法模型:Yt=Trendt×Seasonalityt×Cyclet×Residualt
7.2 时间序列数据形式
▲7.2.1 等间隔
Pandas中提供了一个date_range()函数,主要用于生成一个具有固定频率的DatetimeIndex对象。
▲7.2.2 series存储
在pandas中,最基本的时间序列类型就是以时间戳为索引的series对象。
7.3 时间序列模型
7.3.1 时间序列模型分类
AR模型(自回归模型)、MA模型(移动平均模型)、ARMA模型(自回归移动平均模型)、ARIMA模型(差分自回归移动平均模型)、SARIMA模型(季节性差分自回归移动平均模型)
7.3.2 ARIMA模型
▲ARIMA模型流程
建模 – > 拟合 --> 预测
ARIMA模型组成
ARIMA(Autoregressive Integrated Moving Average)整合移动平均自回归模型是一种用于时间序列预测的常见统计模型。
▲ARIMA模型主要有AR、I和MA模型三个部分组成:
AR§模型:p–代表预测模型中采用的时序数据本身的滞后数,即自回归项数;
I(d)模型:d–代表时序数据需要进行几阶差分化,才是稳定的,即差分的阶数;
MA(q)模型:q–代表预测模型中采用的预测误差的滞后数,即滑动平均项数。
▲平稳性检验
时序图检验:时序图就是普通的时间序列图,即以时间为横轴,观察值为纵轴进行检验;
自相关图检验:时序图只能粗略判断一个时间序列是否为平稳序列,自相关图可以进一步检验;
统计量ADF检验:ADF法则是直接通过假设及纳言的方式来验证平稳性。
▲白噪声检验
白噪声是一个完全随机、无记忆、无模式的平稳序列。
是时间序列建模的终点,一个好模型的残差应该是白噪声;是统计检验的起点,白噪声序列无法建模。
通过Ljung-Box检验可以有效判断一个序列是否具有白噪声。
Ljung-Box是一个更严格的统计假设检验
查看检验的p-value,如果 p-value > 0.05,认为该序列是白噪声
如果 p-value ≤ 0.05,有足够证据表明该序列不是白噪声
八、线性回归
8.1 线性回归基本概念
回归是研究一组自变量和因变量之间关系的统计分析方法;回归方程是研究自变量和因变量的关系的数学方程。
线性回归是一种用于研究因变量(目标变量)与一个或多个自变量(特征)之的线性关系的分析方法。线性回归的目标是找到一个线性方程,该方程能够描述自变量与因变量之间的关系,并最小化预测误差。
▲线性回归算法是一个回归算法、有监督学习算法。
▲使用前提:假设特征和标签是线性关系。
提问(等到本章学完之后回来做)
1.线性回归算法:____ 样本特征和标签键的关系是线性的,可以构建线性回归函数拟合关系。
2.如果特征和标签之间的关系是非线性的,使用线性回归算法会导致____
3.一元线性回归需要计算____个θ
4.N元线性回归需要计算____个θ
答案
1.假设
2.欠拟合
3.2
4.N+1
8.1.1 线性回归分类
线性回归分为一元线性回归(一个特征)和多元线性回归(多个特征)。
一元线性回归定义
一元线性回归是研究一个自变量和一个因变量之间的线性关系的方法。
线性模型:
y=b+a×x y = b + a \times x y=b+a×x
目的:找到a和b,使得下述值最小
∑(yi−axi−b)2 \sum \left(y^{i} - a x^{i} - b\right)^2 ∑(yi−axi−b)2
基于均方误差最小化来进行模型求解的方法称为最小二乘法。
8.3 系数求解
▲8.3.1 正规方程法
正规方程法的特点是给定输入矩阵X,如果X的转置和X的乘积的逆存在并可以求得的话,可以用该方法求解。
缺点:矩阵逆运算可能不存在,对应的系数误解;如果样本数量大或特征数目大,计算量大,时间复杂度高。
8.3.2 梯度下降法
目标:通过迭代更新回归系数,使损失函数最小化。
原理:计算损失函数关于回归系数的梯度,沿梯度负方向更新回归系数。
更新公式:
βi=βi−α∗(∂MSE∂βi) \boldsymbol{\beta}_i = \boldsymbol{\beta}_i - \alpha \ast \left( \frac{\partial \text{MSE}}{\partial \boldsymbol{\beta}_i} \right) βi=βi−α∗(∂βi∂MSE)
其中α为学习率,i表示第i个回归系数。
梯度
梯度表示某一函数在该点处的方向导数,沿着该方向取得最大值,即函数在该点处沿着该方向变化最快,变化率最大。
梯度下降公式
θi=θi−α∗∂∂θiJ(θ) \theta_i = \theta_i - \alpha \ast \frac{\partial}{\partial \theta_i} J(\theta) θi=θi−α∗∂θi∂J(θ)
▲线性回归模型损失函数
L(θ)=L(θ0,θ1,...,θn)=12m∑i=1m(hθ(xi)−yi)2 L({\theta}) = L(\theta_0, \theta_1, ..., \theta_n) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_{{\theta}}(x^{i}) - y^{i} \right)^2 L(θ)=L(θ0,θ1,...,θn)=2m1i=1∑m(hθ(xi)−yi)2
▲梯度下降法的流程
1.随机初始化参数
θ0,θ1,θ2,...,θn θ_0,θ_1,θ_2,...,θ_n θ0,θ1,θ2,...,θn
2.根据初始化参数和特征值,计算预测值
y^=Xi∗θ \hat{y}={X}^{i} * {\theta} y^=Xi∗θ
3.利用损失函数计算真实值与预测值之间的误差
L(θ) L(\theta) L(θ)
4.计算误差关于参数的偏导
∂L∂θ0,∂L∂θ1,∂L∂θ2,…,∂L∂θn \frac{\partial L}{\partial \theta_0}, \frac{\partial L}{\partial \theta_1}, \frac{\partial L}{\partial \theta_2}, \dots, \frac{\partial L}{\partial \theta_n} ∂θ0∂L,∂θ1∂L,∂θ2∂L,…,∂θn∂L
5.沿着梯度负方向更新参数
θ0=θ0−lr∗∂L∂θ0θ1=θ1−lr∗∂L∂θ1θn=θn−lr∗∂L∂θn \theta_0=\theta_0 - lr*\frac{\partial{L}}{\partial{\theta_0}}\\\theta_1=\theta_1 - lr*\frac{\partial{L}}{\partial{\theta_1}}\\\theta_n=\theta_n - lr*\frac{\partial{L}}{\partial{\theta_n}} θ0=θ0−lr∗∂θ0∂Lθ1=θ1−lr∗∂θ1∂Lθn=θn−lr∗∂θn∂L
6.重复步骤2-5,直到损失值小于某个值或达到一定的迭代次数。
▲8.3.3 梯度下降与正规方程的对比
| 梯度下降 | 正规方程 |
|---|---|
| 需要选择学习率 | 不需要 |
| 需要迭代求解 | 一次算出 |
| 特征数量较大可以使用 | 需要计算方程,时间复杂度高O(n^3) |
| 相对最优解 | 绝对最优解,但可能不存在 |
8.4 过拟合和欠拟合
▲过拟合:在训练集上表现良好,在测试集上表现差;
▲欠拟合:在训练集和测试集上的误差都大。
▲解决方案:特征多项式处理、LASSO回归、岭回归。
8.4.1 欠拟合
▲欠拟合是指模型不能在训练集上获得足够低的误差。就是模型复杂度低,模型在训练集上表现很差。
| 原因 | 解决 |
|---|---|
| 模型太简单 | 更换复杂模型 |
| 特征数量不足 | 增加特征数量 |
| 数据质量不够 | 增加数据,数据清洗 |
线性回归中可使用多项式特征解决欠拟合问题;若特征和标签是非线性关系,对特征进行多项式处理,再使用线性回归。
8.4.2 过拟合
▲过拟合是指训练误差和测试误差之间的差距太大。就是模型复杂度高于实际问题。不具备普适性、泛化能力差。
| 原因 | 解决 |
|---|---|
| 模型过于复杂 | 正则化,更换简单模型 |
| 训练集样本单一、不足 | 提高样本数量和分布广度 |
| 训练集噪声过大 | 数据清洗 |
| 使用的特征过多 | 特征筛选 |
正则化
正则化通过在损失函数中加入正则项以控制模型复杂度,防止过拟合。
作用:减小模型复杂度;约束系数,降低特征之间的共线性影响。
L1正则化:在损失函数中加入▲参数的绝对值之和,产生稀疏解,实现特征选择;代表算法:LASSO Regression(套索回归)
L2正则化:在损失函数中加入▲参数的平方和,使参数接近0,降低模型复杂度。代表算法:Ridge Regression(岭回归)
▲L1正则化损失函数:
KaTeX parse error: Undefined control sequence: \part at position 8: \frac{\̲p̲a̲r̲t̲{C}}{\part{w}}=…
九、逻辑回归
9.1 逻辑回归概念
▲逻辑回归基于线性回归模型并使用sigmoid函数将线性回归输出转化为概率值;若概率大于某个值,为类1,否则为类0。
逻辑回归的输入就是一个线性回归的结果。
▲sigmoid函数(取值在0~1):
S(x)=11+e−x S(x)=\frac{1}{1+e^{-x}} S(x)=1+e−x1
▲逻辑回归是二分类算法、有监督学习算法。
逻辑回归的损失被称为对数自然损失。
▲对数自然损失函数(越小越好):
cost(hθ(x),y)=∑i=1m−yilog(hθ(x))−(1−yi)log(1−hθ(x)) \operatorname{cost}(h_\theta(x), y) = \sum_{i=1}^{m} -y_i \log(h_\theta(x)) - (1 - y_i) \log(1 - h_\theta(x)) cost(hθ(x),y)=i=1∑m−yilog(hθ(x))−(1−yi)log(1−hθ(x))
9.2 系数求解
9.2.1 梯度下降法
▲梯度下降法流程
1.随机初始化参数
θ0,θ1,θ2,...,θn θ_0,θ_1,θ_2,...,θ_n θ0,θ1,θ2,...,θn
2.根据初始化参数和特征值,计算预测值
g(θTx)=11+e−θTx g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}} g(θTx)=1+e−θTx1
3.利用损失函数计算真实值与预测值之间的误差
L(θ) L(\theta) L(θ)
4.计算误差关于参数的偏导
∂L∂θ0,∂L∂θ1,∂L∂θ2,…,∂L∂θn \frac{\partial L}{\partial \theta_0}, \frac{\partial L}{\partial \theta_1}, \frac{\partial L}{\partial \theta_2}, \dots, \frac{\partial L}{\partial \theta_n} ∂θ0∂L,∂θ1∂L,∂θ2∂L,…,∂θn∂L
5.沿着梯度负方向更新参数
θ0=θ0−lr∗∂L∂θ0θ1=θ1−lr∗∂L∂θ1θn=θn−lr∗∂L∂θn \theta_0=\theta_0 - lr*\frac{\partial{L}}{\partial{\theta_0}}\\\theta_1=\theta_1 - lr*\frac{\partial{L}}{\partial{\theta_1}}\\\theta_n=\theta_n - lr*\frac{\partial{L}}{\partial{\theta_n}} θ0=θ0−lr∗∂θ0∂Lθ1=θ1−lr∗∂θ1∂Lθn=θn−lr∗∂θn∂L
6.重复步骤2-5,直到损失值小于某个值或达到一定的迭代次数。
逻辑回归的梯度下降法与线性回归的不同之处在于步骤2计算的预测值。
十、神经网络
神经网络是一种模拟人类大脑神经网络行为的计算模型。
▲神经网络的三个层次分别是输入层、隐藏层、输出层。
▲每个神经元计算包括线性运算和非线性运算。激活函数实现非线性运算。
▲10.2 前向传播和反向传播
10.2.1 前向传播
数据从输入层流向输出层的过程,目的是计算预测值。
DNN前向传播算法:利用若干权重系数矩阵W,偏置向量b和输入值向量x进行一系列的线性运算和激活运算,从输入层开始,一层层向后计算,一直原酸到输出层,得到输出结果为止。
10.2.2 反向传播
根据损失函数的梯度,利用链式法则从输出层向输入层传播,更新网络参数的过程。
反向传播步骤
1.利用损失计算参数偏导
2.利用参数更新公式更新参数
KaTeX parse error: Undefined control sequence: \part at position 15: W=W-lr*\frac{\̲p̲a̲r̲t̲{Loss}}{\part{w…
十一、决策树
11.1 决策树简介
决策树的基本组成部分:决策节点、分支、叶子。
▲决策树算法是一种有监督学习算法,是一系列算法。
▲决策树算法的优点是可自动筛选出对目标没有贡献的特征。
父节点–整个决策树的开始
叶节点–代表一种可能的分类结果
内部节点–有父节点、子节点的节点
11.2 相关算法
11.2.1 ID3
ID3算法的基本思想是以信息熵为度量,用于决策树节点的属性选择,每次优先选取信息增益最多的属性。
ID3使用信息增益度进行分裂属性。
▲缺点:优先选择属性取值多的特征进行分裂。
▲熵
对于随机事件S,如果有N种取值情况,每种情况发生的概率为P,那么该事件熵就定义为:
H(S)=−∑I=1NPilog2Pi H(S)=-\sum_{I=1}^{N} P^{i}\log_2 P^{i} H(S)=−I=1∑NPilog2Pi
通常熵表示事物的混乱程度,熵越大表示越混乱。
信息增益
随机事件按照某个属性的不同取值划分的熵(即结果熵)减去按照某个属性的不同取值划分时的条件熵,即前后两次熵的差值,称为信息增益,表示在某一条件下信息不确定性降低的程度。
11.2.2 C4.5
C4.5算法是ID3算法的一种延伸和优化。
C4.5使用信息增益率进行分裂属性。
C4.5能处理离散性和连续性的属性类型;构建决策树之后能进行剪枝操作;能处理具有缺失属性值的训练数据。
▲通过属性A分裂之后样本集的信息增益:
Gain(S,A)=H(S)−HA(S) Gain(S, A) = H(S)-H_A(S) Gain(S,A)=H(S)−HA(S)
▲通过属性A分裂之后样本集的信息增益率:
GainRation(S,A)=Gain(S,A)H(A) GainRation(S, A)=\frac{Gain(S,A)}{H(A)} GainRation(S,A)=H(A)Gain(S,A)
▲其中H(A)为某个属性自身的熵值:
H(A)=−∑j=1m∣Sj∣Slog2∣Sj∣∣S∣ H(A) = -\sum_{j=1}^{m} \frac{|{S_j}|}{S}\log_{2}{\frac{\left|S_{j}\right|}{|S|}} H(A)=−j=1∑mS∣Sj∣log2∣S∣∣Sj∣
C4.5算法流程
1.计算样本集结果的信息熵H(A)
2.依据每个特征划分样本集D,并计算每个特征(划分样本集后)的条件熵
3.计算信息增益
4.计算特征自身熵值
5.计算信息增益率
11.2.3 cart
▲cart是Classification and Regression Tree的简称,分类和回归任务都可以用。
CART分类树使用▲基尼系数作为特征选择依据;
CART回归树使用▲平方误差作为特征选择依据。
分类树
分类树算法使用基尼系数选择特征。
基尼值
基尼值反映了从数据集中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,数据集的纯度越高,特征越好。
假设有K个类别,第k个类别的概率为p_k,对应的基尼表达式为:
Gini(p)=∑k=1Kpk(1−pk)=1−∑k=1Kpk2 Gini(p)=\sum_{k=1}^{K} p_k (1-p_k)=1-\sum_{k=1}^{K}p_k^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
▲对于二分类问题,第一个类别输出概率为p,对应信息的基尼表达式为:
Gini(p)=2p(1−p) Gini(p)=2p(1-p) Gini(p)=2p(1−p)
回归树
回归树的分支标准:▲平方误差((真实值 - 预测值)的平方和)。回归树使用平方误差衡量子集中元素的相近程度,越小表示越相近。
十二、集成学习
集成学习本身不是一个单独的机器学习算法,集成学习将多个较弱的个体学习器合并起来一起决策;个体学习器被称为弱学习器、基学习器;集成学习也成为多分类器系统、基于委员会的学习。
集成学习的组合结构分为级联结构和并行结构。
▲级联结构:个体学习器之间存在着很强的依赖关系,必须串行生成,代表的是Boosting。
▲并行结构:个体学习器之间不存在强的依赖关系,可以并行化生成,代表的是Bagging。
12.1 bagging
bagging:基于自助采样法的集成学习方法;代表算法:随机森林
▲12.1.1 随机森林
随机森林内包含多个不同的决策树,对于一个问题,森林内的不同决策树分别投票得到结果。
优点:降低过拟合风险,模型稳定性高;并行训练,提高训练速度。
局限性:对噪声数据敏感;森林中决策树过多时计算量大,训练和预测速度慢。

12.2 boosting
Boosting指每次训练的时候都对上一次的训练进行改进提升。
▲代表算法:AdaBoost、GBDT、xgboost
12.2.1 AdaBoost
▲AdaBoost通过调整样本权重和基学习器权重来实现自适应,通常使用简单的基学习器。
12.2.2 GBDT
▲GBDT通过使用损失函数的负梯度方向作为残差的近似值,来训练新的基学习器。
▲十三、评估
13.1 分类算法
13.1.1 混淆矩阵

TP+FN+FP+TN=样本总数
13.1.2 准确率
准确率(accuracy):预测正确的数量/总数
Accuracy=TP+TNTP+FN+FP+TN \mathbf{Accuracy}=\frac{TP+TN}{TP+FN+FP+TN} Accuracy=TP+FN+FP+TNTP+TN
13.1.3 精确率
精确率(precision):也称为查准率,预测正确的正例个数/全部预测个数
Precision=TPTP+FP \mathbf{Precision}=\frac{TP}{TP+FP} Precision=TP+FPTP
13.1.4 召回率
召回率(recall):也成为查全率,预测正确的正例个数/实际正例总数
Recall=TPTP+FN \mathbf{Recall}=\frac{TP}{TP+FN} Recall=TP+FNTP
13.1.5 f1-score
F1值:精确率与召回率的调和平均值
F1=2PRP+R \mathbf{F_1}=\frac{2PR}{P+R} F1=P+R2PR
13.2 回归
13.2.1 MSE
均方误差MSE(Mean Squared Error):
1m∑i=1m(ytesti−y^testi)2 \frac{1}{m}\sum_{i=1}^{m}(y_{test}^i-\hat{y}_{test}^i)^2 m1i=1∑m(ytesti−y^testi)2
13.2.2 MAE
平均绝对误差MAE(Mean Absolute Error):
1m∑i=1m∣ytesti−y^testi∣ \frac{1}{m}\sum_{i=1}^{m}|y_{test}^i-\hat{y}_{test}^i| m1i=1∑m∣ytesti−y^testi∣
13.2.3 RMSE
均方根误差RMSE(Root Mean Squared Error):
1m∑i=1m(ytesti−y^testi)2=MSEtest \sqrt{\frac{1}{m}\sum_{i=1}^{m}(y_{test}^i-\hat{y}_{test}^i)^2}=\sqrt{MSE_{test}} m1i=1∑m(ytesti−y^testi)2=MSEtest
13.2.4 R2
R2_score=1−∑i=1m(yi−y^i)2∑i=1m(yi−yˉ)2拟合的越好,结果越接近1 R2\_score=1-\frac{\sum_{i=1}^{m}(y^i-\hat{y}^i)^2}{\sum_{i=1}^{m}(y^i-\bar{y})^2}\\\\拟合的越好,结果越接近1 R2_score=1−∑i=1m(yi−yˉ)2∑i=1m(yi−y^i)2拟合的越好,结果越接近1
更多推荐
所有评论(0)