时序预测之三_傅立叶和小波变换
时序预测之三 _
傅立叶和小波变换
1. 说明
用傅立叶变换预测时序数据,原理是把时域数据转换到频域,再转换回来.python
的 numpy 和 scipy 里面都有现成的转换工具 fft() 和
ifft(),但使用时会遇到一个问题:比如 25 天的数据转到频域再转回时域,还是
25
天,虽然拟合了数据,但没法直接预测未来,本篇介绍用它实现预测的方法.
2. 傅立叶变换
(1) 相关知识
之前写过关于傅立叶变换原理的文档,这次就不再重复了,具体请见:https://www.jianshu.com/p/9e786be6dccb
本篇只从程序的角度看如何使用它.经过 FFT
转换的数据和转换前长度一致,每个数据分为实部和虚部两部分,假设时序时数长度为
N(N最好是 2 的整数次幂,这样算起来更快),用 fft() 转换后:下标为 0 和
N /2 的两个复数的虚数部分为 0,下标为 i 和 N - i
的两个复数共辄,也就是其虚部数值相同、符号相反。再用 ifft()
从频域转回时域之后,出现了由误差引起的很小的虚部,用 np.real()
取其实部即可. 由于一半是另 ...
时序预测之二_ARIMA
时序预测之二 _ARIMA
1. 说明
ARMA 回归滑动平均模型 (Autoregressive Moving Average Model,简记
ARIMA),是研究时间序列的重要方法,由自回归模型(简称 AR
模型)与滑动平均模型(简称 MA
模型)为基础“混合”构成。常用于具有季节变动特征的销售量、市场规模的预测等。ARIMA
模型相对 ARMA 模型,仅多了差分操作。
2. 相关概念
(1) 自回归模型(AR)
自回归模型 autoregressive model,简称
AR.在时序分析中,描述时间序列{yt}自身某一时刻和前 p
个时刻之间相互关系的模型称自回归模型,其形式为:
其中Φ1, Φ2,…, Φp 是模型参数,εt
是白噪声序列,它反映了所有其它随机因素的干扰.其中 p 为模型阶次,即 yt
由前 p 个值决定.
(2) 滑动平均模型(MA)
滑动平均模型 moving average
model,也称移动平均模型,它将时间序列{yt}看成白噪声序列的线性组合,为什么误差能描述模型呢?假设某个值可通过之间前
N
个值的平均值预测,稍作变化,即实际值可 ...
时序预测之一_概述
时序预测之一 _ 概述
1. 说明
前一段参加了天池的“盐城汽车上牌量预测“比赛。第一次面对大规模的时序问题,从比赛的过程,到赛后各位大佬的算法分享,收获很多。也将解决该类问题的套路在此总结一下。
本篇是总述,其中提到的具体算法,如:加窗,ARIMA,傅里叶/小波变换,LSTM
等等将在本系列的后续文章中一一详述。
2. 问题描述
上牌量预测是一个典型的时序问题,且数据简单清晰,以复赛A榜数据为例,它提供了前
3 年的 10
种品牌汽车每天的上牌量,预测未来半年中每天的各品牌的上牌量。
提供的信息只有之前的上牌量,日期数据和星期几,是一个单变量的预测问题(暂不计各品牌间的相互影响),比较困难的是:它不是预测一天,而是预测几百天,有些时序模型无法使用。
3. 步骤
对比一下自己和大家的解决方案,基本都可以拆解成以下步骤
(1) 还原日期
比赛数据对日期进行了脱敏处理,没给具体年月日,但提供了周几的信息,其中有些节假日上牌量为
0
的也没有给出对应记录。第一步大家都补全了日期,加入了真实日期,和节假日信息。
这里介绍两个相关阴历的时间转换库:
chinese_c ...
PythonNotebook介绍
Python Notebook (Jupyter
Notebook) 介绍
1. 介绍
前一段跑别人的 python 代码,扩展名是 ipynb,不能直接用 python
命令执行,于是只好安装了 Jupyter notebook
软件,然后发现它是一个非常好用的程序写作工具。
对我来说,它最大的好处就是文档和程序可以写在一起了。在写程序的时候往往会有一些思路,解释,分析,运行结果等等,需要记下来,比较长的就不太适合在程序里面注释,记在其它地方又容易忘掉。Notebook
完美地解决了这个问题。当然它还有很多其它优点,下面简单介绍一下。
2. Jupyter Notebook
IPYNB 是 ipython notebook 的缩写,它开始只支持
python,后来又支持了其它 40 多种编辑语言,就改名叫 Jupyter
notebook。
Notebook 存储 python 程序的文件是 ipynb,ipynb 一种文本文件,可以用
vi 直接打开,文件中除了程序和说明还有一些结构信息,不能直接用 python
执行,但在 notebook 界面中可以被导出成.py ...
实战天池精准医疗大赛——复赛总结
实战天池精准医疗大赛——复赛总结
#算法实战
1. 说明
精准医疗复赛结束,最终排名在 20
左右。第一名的大神相当厉害,尤其是换数据之后,那分数简直是甩出其他人好几条街,非常想学习一下他的解决方案,可惜答辩定在七月,而且不一定公开,估计到时候都忘了。
我在复赛中用的是个中规中矩的方案,也在这里记录和分享一下,写得比较随性,各位就别当纯技术文档看了。
2. 特征工程
(1) 特征去噪
噪声数据是在最后一天才发现的,原因是训练集加入A榜答案之后,线下分数反而下降了,于是怀疑
A
榜数据是不是有什么问题?在检查过程中,阴错阳差地发现,有一些特殊值高出正常值几十倍,比如说有个
BUN(血尿素氮)为 2055,另外 ApoA1 和 ApoB1
存在数据单位不一致的问题,然后对它们进行了修正。
在本问题中,噪音数据比较容易发现,一方面是特征不多,可以人工过滤,别一方面体验指标有可参考范围,容易界定是否为异常值。如果数据多或者经过了脱敏处理,就需要一些更精确的算法,比如离群点检测等等。
(2) 特征分类
在本问题中,把特征分成两类:基因数据和其它数据。基因数据是以 SNP
开 ...
实战天池精准医疗大赛——复赛之妊娠糖尿病与基因数据分析
实战天池精准医疗大赛——复赛之妊娠糖尿病与基因数据分析
1. 说明
初赛提供的是血常规,肝功能,肾功能,生化的检验结果,预测血糖的具体值。复赛加入了
SNP
的五十多个位点数据,预测被试者是否为妊娠糖尿病,是个二分类问题。下面做了一些简单的数据分析和相关资料采集。
2. 糖尿病相关的 SNP
数据重要性排序
SNP 数据取值为 1,2,3,为枚举值,没有大小关系,因此做 onehot
编码,转换为形如:SNP1_3,表示 SNP1 取值为 3
作为单一特征.相关性排序描述的是单个特征与结果的相关性,决策重要性描述的是单个特征与其它特征组合后与结果的相关性.下面均为重要性前十的特征,数字为重要性评分.
1) 相关性排序(负号为负相关):
2)
决策重要性排序(五次交叉验证模型评分累加):
3) 总结
SNP34,SNP37 在两种排序中均占前 4
位,可以说是重要性最高的特征,SNP21, SNP53,SNP40
在前十中同时出现,也有较高优先级.
3. 糖尿病相关的其它信息
表中表出重要性前十位的特征,数字为重要性评分
1) 相关性排序:
2)
决策重要性排序(五次交 ...
实战天池精准医疗大赛之一_数据分析
实战天池精准医疗大赛之一 _
数据分析
#算法实战
1. 赛题说明
天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测,这是明天即将开始的天池大数据比赛。赛题名字看起来很高深,其实是根据年龄,性别,肝功,血常规等体验指标,预测血糖值。数据挺少的,特征
40 个左右,训练集 5000 多个实例,测试集 1000
个实例。任何机器都能很快跑完。比赛地址:
https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100066.0.0.57e6e8dfMg8Z8V&raceId=231638
2. 预处理
(1) 缺失数据
有大量的缺失值,特征分四类,分别是乙肝、血常规、肝功能、肾功能,一般的缺失值都是缺失整个类别数据(由于患者未做某项检查)。除血常规以外,其余三项都有大量的缺失值,尤其是乙肝类检查,多一半都是空值。如果去掉这些数据,将会损失
3/4
的数据量。假设:医生不要求做该项检查,说明他认为该项指标基本正常,则在指标的正常范围内取随机值填充。
(2) 其它操作
替换去掉其中中文字符
3. 数据 ...
实战天池精准医疗大赛之三_分类回归与排序
实战天池精准医疗大赛之三
_ 分类回归与排序
#算法实战
1. 说明
开赛第一周挣扎在前 100 的边缘,第二周挣扎在前 20
的边缘,第三周懒得弄了,坐等换数据。初赛的前 100 名可进复赛,所以在前
100
中排名前后也没啥意义,开始的时候觉得自己分数蒙的成份很高,换了数据就完蛋,然后不断改进,坐实;后来就有点瞎叫劲了。又傲娇又胆小,也没结交到队友,至今还是孤军作战。记录一下本周收获,也不知这些都公开之后会不会被打出排行榜
[哭脸]。
2. 分类与回归
所有回归都可以抽象成分类,比如训练集有 100
个数,最差的情况下就是分成 100 个类,或者处理成 99
次二分类。而对于具体数值的回归,可通过其所属类别中的元素计算,比如:中值,均值,期望值,评估函数最佳值等等。
细数参与过的几个比赛:医疗大赛是切分正常和糖尿病,微博互动是切分正常和巨量互动,淘宝穿搭是切分普通组合和常见的组合,人品预测是切分普通和人品不好的,股票是切分普通和大涨的。基本都是从正常中寻找反常数据,几乎都可以当成不均衡的分类问题处理,而且它们有个共同的特点,就是越特殊的值权重越大,比如说预测对一个高血糖 ...
实战天池精准医疗大赛之二_再接再厉
实战天池精准医疗大赛之二 _
再接再厉
#算法实战
1. 说明
之前参加的都是往期赛,新人赛,这是第一人参加正式比赛,先谈谈感受。天池精准医疗已开赛一周,排行搒上大家整体的误差从
0.9 提升到 0.8,也就是说一开始 0.88
分还名列前茅,一周之后,这个分数早已榜上无名了。比想象中激烈,我也是反复出榜(榜单仅列出前一百名),偶尔侥幸进入前十,时刻准备着再次被踢出排行榜,
也算是体验了一把逆水行舟的乐趣。很多时候反复实验仍然提高不了成绩,感觉完全没有方向,大家都在摸索,和一边做一边对照正确答案,确实不一样。也有一些算法,我知道它,却不知道什么时候用它。在此也记录一下经验教训。
2. 特征工程
开始的时候做了一些特征工程,包括填充缺失值,为 SVM
计算排序特征,还找到化验单各项指标的正常的范围值,根据各项指标正常与否做离散特征,根据指标的合格数量计算统计特征等等。但相对于简单地判断中值,均值,效果都没有明显地提高。后来做了标准化,效果挺明显的,而且转换后缺失值就可以直接填
0
了。也分析了一下,为什么正常范围没起到作用,化验之后不都是看这个吗?后来在肉眼观察血糖各个档位特征统 ...
实战天池精准医疗大赛之四_初赛总结
实战天池精准医疗大赛之四 _
初赛总结
#算法实战
1. 说明
这两天因为改赛制,改评测方法,钉钉群里说什么的都有,我也跟着焦虑,做了小一个月,虽然对自己的算法有点信心,但是强人也很多,不知能不能进复赛.复赛数据和目标都不一样,相当于一场新的比赛.
在赛前,比赛的第一周结束,第二周结束,各发过一篇:
《实战天池精准医疗大赛之一 _ 数据分析》
《实战天池精准医疗大赛之二 _ 再接再厉》
《实战天池精准医疗大赛之三 _ 分类回归与排序》
本文是初赛的最后一篇,总结一下:最后阶段的算法集成;最终模型用到的所有具体算法;以及常见的坑.
2. 集成算法
数据从 3 到 38
不均衡分布,使用分类的情况下,不能确定边界划在哪里,最终使用多个边界,生成多个分类器,问题的难点在于,每个分类器的参数不同,比如:血糖小于
5 的,和血糖大于 15 的,比例差别很大,使用 GBDT
时,树的深度,节点权重需要分别调整,这里我使用了 8
个二分类器,做了一个自动调参的程序,调参的思想类似折半查找,以节省算力.
二分类器的目标都是切分"正常"与"异常",比如视 15
以上的为异常,15 ...