文章目录

  • 1.实现移动平均
    • 代码
  • 2.实现指数平滑
    • 代码:
  • 3.数据集的检查
    • 代码:
  • 结果
    • 移动平均
    • 指数平滑

1.实现移动平均

a)一次移动平均,取多个n值,计算标准差;
b)二次移动平均,计算参数a,b,进行预测;

代码

# -*- coding=utf-8 -*-
# name: nan chen
# date: 2021/4/8 14:28import csv
import matplotlib.pyplot as plt# 读取数据文件
with open(r"D:\Downloads\train.csv", encoding="utf-8") as f:reader = csv.reader(f)header_row = next(reader)counts = []ids = []for row in reader:ids.append(int(row[0]))counts.append(int(row[2]))
plt.plot(ids, counts, color="blue", linewidth=1, linestyle=':', marker=',')length = len(counts)
singemovings = []
pos = 0
min = 1000000
# 一次移动平均
for n in range(2, 201):singemoving = []mse_sum = 0for i in range(n - 1, length):sum = 0for j in range(0, n):sum = sum + (counts[i - j])singemoving.append(int(sum / n))singemovings.append(singemoving)# 求解MSEfor x, y in zip(range(len(counts) - 1, n - 1, -1), range(len(singemoving) - 2, -1, -1)):mse_sum = mse_sum + ((counts[x] - singemoving[y]) ** 2)mse = mse_sum / (len(counts) - n)sq_mse = mse** 0.5if mse < min:min = msepos = nprint("n=%s 标准差=%s mse=%s" % (n, sq_mse, mse))# 打印结果print("n=%s 一次移动平均法的预测值为:%s" % (n, singemoving[len(singemoving) - 1]))
# plt.plot(ids[n - 1:], singemoving, color="red", linewidth=1, linestyle=':', marker=',', label='一次移动平均法')# 二次移动平均
# 选取mse最小的值计算二次移动平均
n = pos
singemoving = singemovings[n - 2]
twicemoving = []
for i in range(n - 1, len(singemoving)):sum = 0for j in range(0, n):sum = sum + singemoving[i - j]twicemoving.append(int(sum / n))# 二次移动平均预测值
a = singemoving[len(singemoving) - 1] * 2 - twicemoving[len(twicemoving) - 1]
b = (2 / (n - 1)) * (singemoving[len(singemoving) - 1] - twicemoving[len(twicemoving) - 1])
x = a + b
print("n=%s 二次移动平均法的预测值为:%s" % (n, x))

2.实现指数平滑

a)一次指数平滑,取多个a值;
b)二次指数平滑(可选);

代码:

# -*- coding=utf-8 -*-
# name: nan chen
# date: 2021/4/9 10:56import csv
import matplotlib.pyplot as plt# 读取数据文件
with open(r"D:\Downloads\train.csv", encoding="utf-8") as f:reader = csv.reader(f)header_row = next(reader)counts = []ids = []for row in reader:ids.append(int(row[0]))counts.append(int(row[2]))# 一次指数平滑法
s = []
list_a = [2 / (len(counts) + 1), 0.1, 0.2, 0.3, 0.4, 0.5, 0.8, 0.9]
# colors = ["brown", "green", "red", "gray", "yellow"]
# 取初始值为x0
for a in list_a:s1 = [counts[0]]for i in range(0, len(counts)):tmp = a * counts[i] + (1 - a) * s1[i]s1.append(tmp)s.append(s1)
for i in range(0, len(list_a)):s_i = s[i]print("a=%s 一次指数平滑法的预测值为:%s" % (list_a[i], s_i[len(s_i) - 1]))# plt.plot(ids, s_i[1:], label='a = %s' % a, color=colors[i], linewidth=1, linestyle=':', marker=',')# plt.show()# 二次指数平滑法
twice_s = []
j = 0
for a in list_a:s2 = [counts[0]]single_s = s[j]for i in range(1, len(counts)):tmp = a * single_s[i] + (1 - a) * s2[i - 1]s2.append(tmp)twice_s.append(s2)j = j + 1for i in range(0, len(list_a)):single = s[i]twice = twice_s[i]at = 2 * single[len(single) - 1] - twice[len(twice) - 1]bt = (list_a[i] / 1 - list_a[i]) / (single[len(single) - 1] - twice[len(twice) - 1])x = at + btprint("a=%s 二次指数平滑法的预测值为%s" % (list_a[i], x))

3.数据集的检查

代码:

# -*- coding=utf-8 -*-
# name: nan chen
# date: 2021/4/10 9:52
import pandas as pd
import matplotlib.pyplot as plt# 检查数据集是否存在空缺
data = pd.read_csv(r"D:\Downloads\train.csv")
total = data.isnull().sum().sort_values(ascending=False)
print(total)# 绘制散点图观察是否存在偏离值
var = 'ID'
data1 = pd.concat([data['Count'], data[var]], axis=1)
data1.plot.scatter(x=var, y='Count', ylim=(0, 4000), s=1)
plt.show()# 统计某一列中各个元素值出现的次数
c = data['Count'].value_counts()
print(c)# 列出数据的偏斜度
ske = data['Count'].skew()
print("Count列的偏斜度%s " % ske)# 计算count和id的相关系数
cor = data['Count'].corr(data['ID'])
print("Count列与ID列的相关系数为%s " % cor)

结果

移动平均


指数平滑

python-编码实现指数平滑法移动平均法相关推荐

  1. Python 二次指数平滑法 预测

    1.先上代码: import numpy as npdef secondaryExponentialSmoothingMethod(list,n_average,alpha,day): # 参数lis ...

  2. 一文速学数模-时序预测模型(四)二次指数平滑法和三次指数平滑法详解+Python代码实现

    目录 前言 二次指数平滑法(Holt's linear trend method) 1.定义 2.公式 二次指数平滑值: 二次指数平滑数学模型: 3.案例实现 三次指数平滑法(Holt-Winters ...

  3. python 时间序列预测 指数平滑_时间序列分析之指数平滑法(holt-winters及代码)...

    在做时序预测时,一个显然的思路是:认为离着预测点越近的点,作用越大.比如我这个月体重100斤,去年某个月120斤,显然对于预测下个月体重而言,这个月的数据影响力更大些.假设随着时间变化权重以指数方式下 ...

  4. 移动平均法 and 指数平滑法

    感谢:https://blog.csdn.net/tz_zs/article/details/78341306 一.移动平均法(Moving average , MA) 移动平均法又称滑动平均法.滑动 ...

  5. 有手就行的移动平均法、指数平滑法的Excel操作,用来时间序列预测

    数学建模比赛中的预测方法 前言 移动平均法 指数平滑 前言 大家好! φ(* ̄0 ̄) 2022年的比赛将在九月份进行,通常每个学校都会六月或七月给本校的学生发通知,并把那些对这个比赛感兴趣的同学进行培 ...

  6. 移动平均法 指数平滑法

    利用移动平均法预测成本模型为: 假设时间数列有t个时期的数值,本期为t期,要预测的下一个时期为t+1期,t期的实际数为Xt,下一期预测 t+1,并设 是时期权数,且Wt>Wt-1>Wt-2 ...

  7. 移动平均法 VS 指数平滑法

    指数平滑法 整洁版 ES 全期平均法.移动平均法.指数平滑法 多算例 移动平均法(Moving average,MA) 基本思想是:根据时间序列资料.逐项推移,依次计算包含一定项数的序时平均值,以反映 ...

  8. python时间序列指数平滑预测_时间序列分析预测实战之指数平滑法

    一.什么是时间序列分析? 在工作中,常常要对数据进行预测,确定业务未来的发展趋势,进而配置相关的营销策略.制定业务目标,由此引申出了一个重要的用数据预测未来的方法--时间序列分析,今天和大家分享就是实 ...

  9. Python 时间序列建模:用指数平滑法预测股价走势

    指数平滑方法适用于非平稳数据(即具有趋势和/或季节性的数据),其工作方式类似于指数移动平均线.预测是过去观察的加权平均值.这些模型更加强调最近的观察结果,因为权重随时间呈指数级变小.平滑方法很受欢迎, ...

最新文章

  1. 开发日记-20190808 随便聊聊
  2. 一个失败的操作系统MULTICS
  3. ES6的 super 关键字
  4. 安装ubuntu时将boot目录单独挂载的意义
  5. 【转】细数中国十大名校的IT牛人
  6. tar解压出错:gzip: stdin: unexpected end of file的解决
  7. 哈罗顺风车送到终点吗_没有了顺风车,滴滴“特惠拼车”来了!比拼车更低价,比顺风车更安全吗?...
  8. js保留两位小数的函数_使用率低但功能强大的6个Excel函数公式应用技巧解读!...
  9. 数十万应用结点全息监控,ARMS新上线的应用监控神器到底有多牛?
  10. mysql 事件计划_mysql 事件计划
  11. 昆明理工大学复试计算机试题,2012年昆明理工大学计算机考研复试试题(.PDF
  12. 发自虎扑android客户端,巴斯托尼要长留我纯啊
  13. 我用 Python 集齐了支付宝五福!
  14. 代码高亮_安卓集成代码高亮显示开源包
  15. 一用就会Cron表达式生成器
  16. 计算机网络中数据包的分布,计算机网络习题
  17. js获取从指定年份到当前年份的年份数据集合
  18. 用免疫算法解决TSP问题
  19. 定期定量采购_定量、定期订货法的比较
  20. 什么是Socket?Socket协议的形象描述

热门文章

  1. 354. 俄罗斯套娃信封问题
  2. get请求获取不到参数
  3. 在linux下使用rpm命令安装软件
  4. 【最全的大数据面试系列】Hadoop面试题大全(一)
  5. YTU OJ 2451: 股市风云
  6. 唯快不破:redis源码剖析04-sds动态字符串
  7. tcpmux TCP 端口服务多路复用
  8. oracle 表空间 Managing Tablespace Data Files
  9. Unity XR Interaction Toolkit研究
  10. Oracle主机变量锚定、游标变量