栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

基于PSO

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于PSO

1、简介

   背景:针对均值-方差模型的局限性,利用启发式函数链神经网络预测得到的收益率替代历史数据。
   工作原理:构建PSO_FLNN预测模型,PSO算法用来优化FLNN中个体的权重参数,FLNN用来对输入的个体预测其对应的周收益值。

2、具体预测过程

(1)FLNN函数链神经网络
   它是单层神经网络,通过非线性函数(如切比雪夫函数)对特征进行拓展,输入后,经过加权求和,通过relu激活函数得到输出值。结构简单,计算负担小,效果好,比MLP计算复杂度更小。
(2)启发式FLNN股票周收益预测步骤
   预测周收益的步骤:样本特征拓展;训练模型,得到最优粒子;在测试集上进行验证。
   切比雪夫递归拓展特征:特征维度D为拓展为5D维。
   PSO优化FLNN的权重参数:种群中的粒子围绕搜索空间移动以寻找最佳位置。得到各个粒子对应的适应度值,即均方误差值,选择其中均方误差最小的粒子作为最佳粒子,下次迭代前,根据该最佳粒子对种群粒子速度和权重值(即位置)进行更新。经过k次迭代后,比较出得到最佳粒子。(粒子在PSO种群中的位置由5D个随机权重组成,每个随机权重值位于0和1之间)
   如何预测:最佳粒子就是该样本对应的权重参数向量。在测试集上进行测试。结果满意的话,便可以利用该模型预测该股票的周收益。预测哪周,则将该周的特征值求出后,与参数加权求和后输入relu函数max(0,wx+b),得到预测值。
(3)如何进行超参数调优
   哪些参数:
   惯性因子w(0.4-0.9之间,调整全局和局部搜索,为非负,大的话全局强,小局部强,一般采用动态w比如说线性递减权值,),
   学习因子c1,c2(0~4之间,通常为2,代表粒子向自身极值pbest和全局极值gbest推进的加速权值。),
   群体规模N(100或,200),
   最大迭代次数100-200,
   最大速度Vmax。
   调优方法
   交叉验证参数选择:各个参数确定变化的步长,然后使用网格法交叉验证参数选择。最后确定w=0.725,学习因子为2,最大速度Vmax决定粒子每一次的最大移动距离(一般为相应维搜索空间的10%~20%),群体规模为200,迭代次数为200。
   步长如何确定:可以使用最优化理论中的Wolf-Powell搜索、Amijo搜索选取步长。
   过Powell等方法为了找到最优的超参数,这些方法往往要尝试很多组值,每一次尝试都要重新做一次训练,时间成本很高,且并不总是可预测。很多时候我们并不需要挤干hyperparameters中的水分,这时候就随便选几个值,挑个不错的就好啦,当然这不是很严谨。

import pandas as pd
import os
from model import Model

file_dir = r'data100只股票三维特征数据集合'
def file_name(dir):
    for root, dirs, files in os.walk(dir):
        file_list_temp = files  # 当前路径下所有非目录子文件
    return file_list_temp
file_list = file_name(file_dir)
print(file_list)
security_code = []
for i in file_list:
    i = i[0:9]
    security_code.append(i)#这时140股票的代码集合
print(security_code)
#现仅用600345.SH进行测试,全测试可令stock = security_code
stock = ['600345.SH.csv']

for i in range(len(stock)):
    csv_file = r"data100只股票三维特征数据集合%s"%(stock[i])
    csv_data = pd.read_csv(csv_file)
    print(stock[i])
    dt = csv_data.drop(['Unnamed: 0','周数'],axis=1)
    train_idx = 140
    test_idx = 52
    model = Model(dt.values, train_idx, test_idx)  # .values把dataframe转化为矩阵
    pre_value = pd.Dataframe(model.train())
    pre_value.to_csv(r'data100只股票预测收益集合%s.csv'%(file_list[i][0:9]))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/326580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号