时间序列(一)

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
Python代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 13 11:20:10 2017

@author: DaiPuWei
"""

'''
    时间序列简单平移法:以预测12月份的销售收入为例
'''

import math

def Forecast(profit,N,month):
    '''
        预测函数:profit为销售收入数据
        N为预测周期,month为需要预测的月份
    '''
    result = []
    if month >=1 and month <= 12:
        #预测值
        forecast= 0
        for i in range(month-N-1,month-1):
            forecast += profit[i]
        forecast = forecast / 4
        result.append(forecast)

        #标准误差
        error = 0
        for i in range(N,len(profit)):
            tmp = forecast - profit[i]
            error = error + tmp * tmp
        error = error / (len(profit) - N)
        error = math.sqrt(error)
        result.append(error)
    else:
       print('月份不正确,请重新输入月份(1-12)')    
    return result

def run_main():
    '''
        这是组函数
    '''
    #销售收入
    profit = [553.8,574.6,606.9,649.8,705.1,772.0,816.4,892.7,963.9,1015.1,1102.7]

    #以4为预测周期的预测值
    forecast1 = Forecast(profit,4,12)

    #以4为预测周期的预测值
    forecast2 = Forecast(profit,5,12)

    if forecast1[1] < forecast2[1]:
        print('12月份的预测值为%g'%forecast1[0])
    else:
        print('12月份的预测值为%g'%forecast2[0])

if __name__ == '__main__':
    run_main()

这里写图片描述
这里写图片描述
Python代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 13 11:58:31 2017

@author: DaiPuWei
"""

'''
    时间序列加权移动平均法:以预测1989年原煤产量为例
'''

import pandas as pd

def Weighted_Forecast(data,weight,N):
    '''
        data是统计数据
        weight是权重
        N是预测周期
        index是要预测的下标
    '''

    #各个权重之和
    sum_weight = sum(weight)

    #预测值
    forecast  = 0
    length = len(data)

     #预测年份
    year = data.index[length-1]+1

    j = 0
    for i in range(length-N,length):
        forecast = forecast + weight[j] * data[data.columns[0]][data.index[i]]
        j = j + 1
    forecast = forecast / sum_weight
    print('%d年原煤产量未校对的预测值为:'%year)
    print(forecast)

    #data中数据的预测值
    forecast_data = []
    for i in range(N):
        forecast_data.append(data[data.columns[0]][data.index[i]])
    for i in range(N,length):
        tmp = 0
        k = 0
        for j in range(i-N,i):
            tmp = tmp + data[data.columns[0]][data.index[j]]*weight[k]
            k = k + 1
        forecast_data.append(tmp/sum_weight)
    print('所有的预测值为:')
    for i in range(length):
        print(data.index[i],forecast_data[i])

    #相对误差
    error_rate = []
    for i in range(length):
        error_rate.append(1-forecast_data[i]/data[data.columns[0]][data.index[i]])
    sum_error = sum(error_rate)
    sum_data = sum(data[data.columns[0]][data.index[N:]])
    avg_rate = 0

    #校正预测值
    forecast = forecast/(1-avg_rate)

    return forecast


def run_main():
    '''
        这是主函数
    '''

    #读取数据
    data = pd.read_excel('E:\\Program Files (x86)\\大学数学\\算法大全pdf\\第24章   时间序列模型\\原煤产量统计.xlsx')

    #周期数
    N = 3


    #权重
    weight = []
    for i in range(N):
        weight.append(i+1)

    forecast = Weighted_Forecast(data,weight,N)
    length = len(data)
    year = data.index[length-1]+1
    print('%d年的原煤产量预测值为:'%year)
    print(forecast)

if __name__ == '__main__':
    run_main()

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
Python代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 13 17:56:56 2017

@author: DaiPuWei
"""

'''
    时间序列趋势移动平均法,以1965-1985年发电总量为数据集合预测1986年与1987年
    的发电总量
'''

import pandas as pd

def Forecast(data,N):
    '''
        预测函数:data为销售收入数据
        N为预测周期,
    '''
    forecast_data = [] 
    length = len(data)
    for i in range(N,length):
        tmp = 0
        for j in range(i-N,i):
            tmp = tmp + data[j]
        tmp = tmp / N
        forecast_data.append(tmp)
    result = forecast_data[len(forecast_data)-1]

    return result,forecast_data

def Model(data,N,year,init):
    '''
        模型为:y(t+T) = a + b * T
        a = 2 * M1 - M2
        b = 2* (M1 - M2) / (N - 2)
    '''

    #一次移动平均的预测值以及预测数据
    M1,first_forecast = Forecast(data,N)

    #二次移动平均的预测值以及预测数据
    M2,Second_forecast = Forecast(first_forecast,N)

    #趋势移动平均模型参数a,b
    a = 2 * M1 - M2
    b = 2 *(M1 - M2) / (N - 2)
    print('预测模型为:y(T) = ',a,'+',b,'*(T-',init,')')

    #预测值
    forecast = a + b * (year -init)

    return forecast

def run_main():
    '''
        这是主函数
    '''

    #读取数据集
    sample = pd.read_excel('E:\\Program Files (x86)\\大学数学\\算法大全pdf\\第24章   时间序列模型\\1965-1985年发电总量统计.xlsx')
    data = sample['发电总量']

    #预测周期
    N = 6

    #初始年份
    init = sample['年份'][len(sample)-1]

    #1986年预测值
    forecast_1986 = Model(data,N,1986,init)
    print('1986年发电总量的预测值为:%f'%forecast_1986)

    #1987年预测值
    forecast_1987 = Model(data,N,1987,init)
    print('1987年发电总量的预测值为:%f'%forecast_1987)

if __name__ == '__main__':
    run_main()

这里写图片描述

### 回答1: 时间序列一维卷积分类是指对于一个给定的时间序列,通过对其进行卷积操作,将其转化为一个新的序列,并对该序列进行分类。在Matlab2022中,可以通过使用conv函数来实现时间序列的一维卷积操作。该函数的使用方法如下: y = conv(x,h) 其中,x为原始时间序列,h为卷积核(也称为滤波器),而y为卷积操作后得到的新序列。在进行卷积操作时,需要注意卷积核的选择,因为不同的卷积核会产生不同的结果。通常情况下,可以选择使用高斯滤波器或者平均滤波器等基本滤波器来进行卷积操作,以消除噪声和平滑数据。 对于使用卷积操作后得到的新序列,可以通过使用机器学习算法进行分类。常见的机器学习算法包括SVM、KNN、Random Forest等,在Matlab2022中,可以使用fitcecoc、fitcknn、fitctree等函数进行分类。这些函数可以根据给定的数据集和标签,学习出模型,并对新样本进行分类。在进行分类时,还需要对数据进行预处理,如归一化、平衡化等操作,以提高分类效果。 综上所述,时间序列一维卷积分类是对时间序列进行卷积操作,并通过使用机器学习算法对新序列进行分类的过程,而在Matlab2022中,可以使用conv函数进行卷积操作,并使用fitcecoc、fitcknn、fitctree等函数进行分类。 ### 回答2: 时间序列一维卷积是信号处理中常用的方法,用于提取时间序列中的特征并进行分类。MATLAB是一个功能强大的数值计算和数据分析软件,其中包括了很多用于信号处理和机器学习的工具箱,可以方便地进行时间序列一维卷积分类。 首先,需要将时间序列数据导入MATLAB中,并将其转化为一维向量形式。然后,在MATLAB的信号处理工具箱中,可以使用conv函数进行一维卷积操作,以提取时间序列中的特征。卷积核的选择可以根据具体情况进行调整,例如可以选择高斯滤波等方式进行平滑处理,或者使用Sobel、Gabor等算子进行特征提取。 完成特征提取后,可以使用MATLAB的统计和机器学习工具箱中的分类算法进行分类。常用的分类算法有支持向量机(SVM)、k最近邻算法(KNN)等,这些算法都在MATLAB中有很好的实现。可以通过选择合适的参数和特征向量来提高分类精度。 总的来说,使用MATLAB进行时间序列一维卷积分类是非常实用和便捷的。通过合理的特征提取和分类算法选择,能够有效地区分和分类不同的时间序列数据,并为实际应用提供便利和支持。 ### 回答3: 时间序列一维卷积分类是应用深度学习进行时间序列分类的一种方法,可以使用Matlab 2022进行实现。 首先,需要准备好时间序列的数据集,并针对不同类别进行标签标注。 其次,通过Matlab的深度学习工具箱,可以利用一些预定义的卷积神经网络模型,如AlexNet、VGGNet等,搭建时间序列分类模型。也可以根据实际需求构建自定义的卷积神经网络模型。 在模型搭建完成后,可以利用Matlab提供的卷积函数,对时间序列数据进行卷积操作,生成特征序列。在特征序列生成后,需要进行池化操作,将特征序列的维度降低,同时保留重要的特征信息。 最后,将池化后的特征序列输入到全连接层进行分类,通过softmax激活函数输出分类结果。 需要注意的是,时间序列一维卷积分类的效果不仅仅取决于模型的搭建,还与数据的预处理相关。在使用前需要对数据进行归一化、降噪等操作,以提高分类器的准确度和稳定性。 总之,利用Matlab 2022实现时间序列一维卷积分类是一种高效的时间序列分类方法,可以应用于不同的实际应用场景中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daipuweiai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值