第21周:机器学习
目录
摘要
Abstract
一、ARIMA模型
1、时间序列模型
(1)时间序列的分析方法
(2)时间序列的预处理
(3)ARIMA模型的引入
2、AR模型
3、MA模型
4、小结
二、K-means聚类算法
三、实验
1、数据处理
2、平稳性检验
3、ARIMA模型拟合
总结
摘要
本周的学习内容主要围绕课程“机器学习”的课前汇报, 阅读了一篇关于ARIMA模型和K-means算法的论文,进行了模型基础理论的学习、代码复现及ppt汇报。周报主要对上述理论、数据处理、实验图分析做了一个总结。
Abstract
This week's study mainly centered on the pre-course presentation of the course “Machine Learning”, reading a paper on ARIMA model and K-means algorithm, learning the basic theory of the model, code reproduction and PowerPoint presentation. The weekly report mainly summarizes the above theory, data processing, and experimental graph analysis.
文献:Application of Time Serial Model in Water Quality Predicting
一、ARIMA模型
1、时间序列模型
时间序列:沿着时间的发展,记录下随机变量的数据,通过直观的数据比较或绘图观察,寻
找序列中蕴含的发展规律
(1)时间序列的分析方法
确定性因素分解法
确定性因素分析法:假定序列会受到以下四个因素中的全部或部分的影响,导致序列呈现出不同的波动特征。
随机性因素分解法
(随机性因素)频域分析法:它假定任何一种无趋势的时间序列都可以分解为若干不同频率的周期波动,借助傅里叶变换,用正弦、余弦之后来逼近某个函数。
时域分析方法
时域分析方法:是从序列自相关的角度揭示时间序列的发展规律。
(2)时间序列的预处理
时间序列的数据结构与传统的数据结构不同,它可以有多个随机变量X,但是每个变量只有1个观察值x。
平稳性检验
严平稳:只有当序列所有的统计性质都不会随着时间的推移而发生变化时,该序列才能被认为平稳。
下面是统计量:
方法1——时序图检验
原理:平稳时间序列具有常数均值和方差。这意味着平稳序列的时序图应该显示出该序列始终在一个常数值附近波动,而且波动的范围有界
上面两幅时序图都不是“平稳序列”,因为明显可以看出,左图是具有“趋势性”,右图具有“周期性”,这都是非平稳的特点。
方法2——自相关图检验
方法3——单位根检验
迪基-福勒检验(Dickey-Fuller test):是一种在统计学中用于检验时间序列是否存在单位根的统计检验方法。单位根的存在意味着时间序列具有随机游走的特性,从而是非平稳的。该检验的零假设(H0)是时间序列中存在单位根,即序列非平稳;备择假设(H1)是时间序列中不存在单位根,即序列平稳。
检验步骤:
step1 比较检验统计量Test Statistic与临界值Critical Value
step2 考虑p-value
纯随机性检验(白噪声检验)
随机性检验:是专门用来检验序列是否为纯随机序列的一种方法。理想状态下,它的序列值之间应该没有任何相关关系即自相关系数;现实状态下,自相关系数确实都非常小, 都在零值附近以一个很小的幅度随机波动。
Barlett定理:设定观察序列服从“期望为0,方差为1/n(n是滞后数)”正态分布
step1 构造假设性检验:
step2 设定统计量:
step3 假设性检验的判别:
其中统计量LB的值就是P
step4 得出结论
(3)ARIMA模型的引入
wold分解定理:对于任意一个离散平稳时间序列 , 它都可以分解为两个不相关的平稳序
列 之和, 其中一个为 确定性 的, 另一个为 随机性 的。
是确定性序列,它一般都能够等价表达为历史序列值的线性函数
是随机性序列,每个时期加入的新的随机信息。它们相互独立,不可预测(当前的序列值不由历史序列值决定)
2、AR模型
拖尾性
拖尾性:ACF图和PACF图中的自相关系数随着滞后阶数的增加而逐渐减小,但不会迅速降为零,而是以某种速率缓慢接近零
p阶截尾性
截尾性:PACF图在特定阶数后迅速降低到0
3、MA模型
4、小结
二、K-means聚类算法
K-Means聚类算法是一种经典的无监督学习算法,用于将数据集中的样本划分为K个聚类(clusters),使得簇内样本相似度高,簇间差异性大,其中每个样本只属于一个聚类。
其计算为欧几里得距离公式:
计算步骤:
step1 聚类类别个数设定
自定义
step2 初始聚类中心选择
随机选择1个或者k个初始点
step3 数据点分配
对于数据集中的每个数据点,计算其与每个聚类中心的距离;然后将每个数据点分配到最近的聚类中心,从而形成K个聚类。
step4 聚类中心更新
对于每个聚类,计算聚类中所有点的均值;然后将该均值设置为新的聚类中心。
step5 迭代直至收敛
重复步骤3和步骤4,直到满足以下条件:达到设定阈值,或者聚类内的总内平方和(SSE)不再显著下降。
三、实验
该论文基于时间序列模型的水质预测,文章中选取了总氮量TP作为水质预测的衡量指标,对一个水域进行ARIMA模型的时间序列分析和预测。文章给出了数据集的平台,所以本实验对数据进行了收集并应用与模型中去。
1、数据处理
from datetime import datetime
dateparse=lambda dates: datetime.strptime(dates,'%Y-%m-%d %H:%M:%S')
data=pd.read_csv('E:\pytorch学习\water_predict\my_new_data_dropped.csv',parse_dates=['时间'],index_col='时间',date_parser=dateparse)
data.head()
#查看数据的索引
print(data.index) #上面的数据处理就是把”时间“作为index
print(data)
需要单独对“时间”和指标“TP”进行数据提取和相关的缺失值处理等。
dateparse函数是一个匿名函数:定义时即被调用
pd.read_csv函数中的参数解读:
parse_dates:指定包含日期时间信息的列;index_col:在TS数据中使用pandas的关键是索引必须是日期等时间变量;date_parser:它指定了一个将输入字符串转换为datetime可变的函数
可以看出,将“时间”变成了新的索引
提取出"TP"值,并将它和时间索引合为一个序列再转换成数值,并且删除空值
obj=data['总磷mg/L']
ts = pd.Series(obj, index=data.index)
ts = pd.to_numeric(ts, errors='coerce')# 尝试将 timeseries 转换为数值类型,无法转换的值将被设置为 NaN
ts = ts.dropna() #删除含有 NaN 的行
print(ts)
可以看出,该表格只有“TP值”一列,索引是“时间” ,这样方便后续绘制时序图、自相关图等。
最终根据论文中只选取了四个月,本实验也选取了数据量较充足的4个月(2020.01——2020.05)
2、平稳性检验
法1 时序图检验:
无趋势性且无周期性,但是不同时间段的波动较大且波动不同,说明其均值和方差不是常数,初步分析为非平稳序列。
法2 自回归图检验:
ACF图:
显示了自相关系数随着滞后阶数的增加而逐渐衰减,这可能表明时间序列具有某种形式的依赖性,但不是立即明显的AR或MA模型特征。
PACF图:
在滞后1处有一个显著的峰值,然后迅速衰减,这可能表明时间序列适合AR(1)模型,即一阶自回归模型。
法3 单位根检验
step1 原定假设
零假设(H0),即存在单位根;备择假设是时间序列是平稳的
step2 比较统计量和临界值
检验统计量小于所有提供的临界值(1%,5%,和10%)
step3 比价p值和显著性水平
p-value(0.000414)非常小,远小于常用的显著性水平(如0.05或0.01)。这意味着在非常低的显著性水平下,我们可以拒绝零假设
综上所述,该序列是非平稳序列,需要进行差分将其转变为平稳序列。
3、ARIMA模型拟合
拟合图
ARIMA模型在某些时间段的拟合效果较好,预测值与实际值较为接近。
预测图
模型在测试数据的预测上存在一定的误差,尤其是在测试数据的末端,预测值与实际值之间有明显的偏差。
对TP值进行聚类分析,发现其数据都集中分布在一个类别中,分布不均匀,说明还有其他特征变量影响着水质预测的结果。最终将降水量和TP值进行相关性分析,发现二者呈现正相关,所以降水量也纳为自变量中。
最终该论文还进行了ARIMA模型和K-means聚类算法的结合。
总结
通过阅读文献,学习了AR模型、MA模型以及结合的ARIMA模型,以及K-means聚类算法。并且进行了代码实践以及结果分析。