matlab30个案例分析案例15-SVM神经网络的信息粒化时序回归预测

合集下载

(最新整理)MATLAB智能算法30个案例分析

(最新整理)MATLAB智能算法30个案例分析

MATLAB智能算法30个案例分析编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(MATLAB智能算法30个案例分析)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为MATLAB智能算法30个案例分析的全部内容。

MATLAB 智能算法30个案例分析第 1 章1、案例背景遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。

遗传算法的做法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。

在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。

基因组成的串就是染色体,或者叫基因型个体( Individuals)。

一定数量的个体组成了群体(Population)。

群体中个体的数目称为群体大小(Population Size),也叫群体规模.而各个个体对环境的适应程度叫做适应度( Fitness) .2、案例目录:1.1 理论基础1.1。

1 遗传算法概述1. 编码2. 初始群体的生成3。

适应度评估4。

选择5。

交叉6. 变异1。

1.2 设菲尔德遗传算法工具箱1. 工具箱简介2。

工具箱添加1.2 案例背景1。

2.1 问题描述1. 简单一元函数优化2. 多元函数优化1。

2。

2 解决思路及步骤1。

3 MATLAB程序实现1.3.1 工具箱结构1.3。

2 遗传算法中常用函数1。

创建种群函数-crtbp2。

适应度计算函数—ranking 3. 选择函数—select4。

MATLAB-智能算法30个案例分析【精品文档】(完整版)

MATLAB-智能算法30个案例分析【精品文档】(完整版)

MATLAB 智能算法30个案例分析(终极版)1 基于遗传算法的TSP算法(王辉)2 基于遗传算法和非线性规划的函数寻优算法(史峰)3 基于遗传算法的BP神经网络优化算法(王辉)4 设菲尔德大学的MATLAB遗传算法工具箱(王辉)5 基于遗传算法的LQR控制优化算法(胡斐)6 遗传算法工具箱详解及应用(胡斐)7 多种群遗传算法的函数优化算法(王辉)8 基于量子遗传算法的函数寻优算法(王辉)9 多目标Pareto最优解搜索算法(胡斐)10 基于多目标Pareto的二维背包搜索算法(史峰)11 基于免疫算法的柔性车间调度算法(史峰)12 基于免疫算法的运输中心规划算法(史峰)13 基于粒子群算法的函数寻优算法(史峰)14 基于粒子群算法的PID控制优化算法(史峰)15 基于混合粒子群算法的TSP寻优算法(史峰)16 基于动态粒子群算法的动态环境寻优算法(史峰)17 粒子群算法工具箱(史峰)18 基于鱼群算法的函数寻优算法(王辉)19 基于模拟退火算法的TSP算法(王辉)20 基于遗传模拟退火算法的聚类算法(王辉)21 基于模拟退火算法的HEV能量管理策略参数优化(胡斐)22 蚁群算法的优化计算——旅行商问题(TSP)优化(郁磊)23 基于蚁群算法的二维路径规划算法(史峰)24 基于蚁群算法的三维路径规划算法(史峰)25 有导师学习神经网络的回归拟合——基于近红外光谱的汽油辛烷值预测(郁磊)26 有导师学习神经网络的分类——鸢尾花种类识别(郁磊)27 无导师学习神经网络的分类——矿井突水水源判别(郁磊)28 支持向量机的分类——基于乳腺组织电阻抗特性的乳腺癌诊断(郁磊)29 支持向量机的回归拟合——混凝土抗压强度预测(郁磊)30 极限学习机的回归拟合及分类——对比实验研究(郁磊)智能算法是我们在学习中经常遇到的算法,主要包括遗传算法,免疫算法,粒子群算法,神经网络等,智能算法对于很多人来说,既爱又恨,爱是因为熟练的掌握几种智能算法,能够很方便的解决我们的论坛问题,恨是因为智能算法感觉比较“玄乎”,很难理解,更难用它来解决问题。

SVM的信息粒化时序回归预测城市用水量

SVM的信息粒化时序回归预测城市用水量

SVM的信息粒化时序回归预测城市用水量张清周;黄源;赵明【摘要】利用基于信息粒化的支持向量机预测模型对某市11个月的时用水量数据进行模拟训练,对下一个月的每日最高时用水量进行预测.首先提取每日的最高时用水量,再将每7个数据变换为一个三角型模糊粒子,该模糊粒子中的三个参数Low、R和Up分别代表一周内最高时用水量变化的最小值、平均值和最大值,然后利用SVM对最高时用水量及Low、R和Up进行预测.针对SVM在预测时调整自身相关参数困难的问题,提出了运用网格法对模型中的参数进行优化选择.实例分析结果表明,该模型建模速度快,预测精度高,且实用性强.【期刊名称】《供水技术》【年(卷),期】2012(006)004【总页数】4页(P43-46)【关键词】信息粒化;支持向量机;网格算法;用水量预测;相对误差【作者】张清周;黄源;赵明【作者单位】哈尔滨工业大学市政环境工程学院,黑龙江哈尔滨150090;哈尔滨工业大学市政环境工程学院,黑龙江哈尔滨150090;哈尔滨工业大学市政环境工程学院,黑龙江哈尔滨150090【正文语种】中文【中图分类】TU991.31城市用水量预测的精度直接影响管网系统优化运行的实用性。

从模型的理论基础来看,可以将城市用水量预测模型划分为两个主要类别:一类是以统计学原理为基础的预测模型,如季节指数平滑法预测模型和ARIMA模型;另一类是以混沌理论、神经网络、支持向量机等理论为基础的预测模型,如最大Lyapunov指数预测模型、模糊神经网络预测模型和支持向量回归机模型[1-5]。

上述预测方法只能得到用水量的点预测,但在管网优化调度和运行管理中,还需要掌握一段时期内用水量的变化范围。

因此,笔者先将原始数据进行信息粒化,在此基础上构建支持向量机的预测模型,采用该模型预测日最高时用水量及其一段时期内的变化范围。

1 基于信息粒化的支持向量机预测方法1.1 信息粒化信息粒化就是把大量复杂的信息按各自的特征划分成若干较简单的块,每个块作为一个信息粒,这种处理信息的过程称为信息粒化。

matlab神经网络43个案例分析

matlab神经网络43个案例分析

MATLAB神经网络43个案例分析简介神经网络(Neural Network)是一种模拟人类神经元行为的计算模型,它通过对大量输入数据进行训练,学习到输入和输出之间的复杂关系。

MATLAB是一个强大的数学计算工具,具有丰富的神经网络函数和工具箱,可以用于神经网络的设计、训练和应用。

本文将介绍43个使用MATLAB进行神经网络分析的案例,主要包括神经网络的基本概念、神经网络模型的建立、参数的调整和优化等方面。

二级标题1: 基本概念在开始具体的案例分析之前,首先理解神经网络的基本概念是非常重要的。

三级标题1: 神经元神经网络的基本单元是神经元(Neuron),它模拟了生物神经元的工作原理。

神经元接收多个输入信号,并通过一个激活函数产生输出信号。

常用的激活函数包括Sigmoid函数、ReLU函数等。

三级标题2: 神经网络的结构神经网络由多层神经元组成,通常包括输入层、隐藏层和输出层。

输入层接收外部输入,隐藏层用于处理中间信息,输出层产生最终的输出。

三级标题3: 前向传播和反向传播神经网络的训练过程主要包括前向传播和反向传播两个步骤。

前向传播是通过输入数据按照网络结构进行计算,得到输出结果。

反向传播是根据输出结果与真实结果之间的误差,通过调整网络参数来提高模型性能。

二级标题2: 案例分析三级标题4: 案例1: 图像分类本案例通过使用神经网络和MATLAB工具箱,对手写数字图像进行分类。

首先,将图像数据转化为向量形式,并通过网络进行训练。

然后,将训练好的网络用于分类未知图像,并评估分类性能。

三级标题5: 案例2: 时序预测本案例使用神经网络来预测时间序列数据。

通过对历史数据进行训练,建立时序模型,并利用该模型来预测未来的数据。

通过调整网络结构和参数,提高预测准确性。

三级标题6: 案例3: 异常检测本案例利用神经网络进行异常检测。

通过对正常数据进行训练,建立正常模型,并使用该模型检测异常数据。

通过调整网络的灵敏度和阈值,提高异常检测的性能。

matlab智能算法30个案例分析

matlab智能算法30个案例分析

matlab智能算法30个案例分析Matlab智能算法30个案例分析。

Matlab作为一种强大的数学软件,拥有丰富的算法库和强大的编程能力,能够实现各种复杂的智能算法。

本文将针对Matlab智能算法进行30个案例分析,帮助读者深入了解Matlab在智能算法领域的应用和实践。

1. 遗传算法。

遗传算法是一种模拟自然选择和遗传机制的优化算法,能够有效解决复杂的优化问题。

在Matlab中,可以利用遗传算法工具箱快速实现各种优化问题的求解,例如函数最小化、参数优化等。

2. 神经网络。

神经网络是一种模拟人脑神经元网络的计算模型,能够实现复杂的非线性映射和模式识别。

Matlab提供了丰富的神经网络工具箱,可以用于神经网络的建模、训练和应用,例如分类、回归、聚类等任务。

3. 模糊逻辑。

模糊逻辑是一种处理不确定性和模糊信息的逻辑推理方法,能够有效处理模糊规则和模糊数据。

Matlab中的模糊逻辑工具箱提供了丰富的模糊推理方法和工具,可以用于模糊控制、模糊识别等领域。

4. 粒子群算法。

粒子群算法是一种模拟鸟群觅食行为的优化算法,能够有效处理多维优化问题。

在Matlab中,可以利用粒子群算法工具箱快速实现各种优化问题的求解,例如函数最小化、参数优化等。

5. 蚁群算法。

蚁群算法是一种模拟蚂蚁觅食行为的优化算法,能够有效处理离散优化问题和组合优化问题。

Matlab中的蚁群算法工具箱提供了丰富的蚁群优化方法和工具,可以用于解决各种组合优化问题。

6. 遗传规划算法。

遗传规划算法是一种结合遗传算法和规划算法的优化方法,能够有效处理复杂的规划问题。

在Matlab中,可以利用遗传规划算法工具箱快速实现各种规划问题的求解,例如路径规划、资源分配等。

7. 人工免疫算法。

人工免疫算法是一种模拟免疫系统的优化算法,能够有效处理多峰优化问题和动态优化问题。

在Matlab中,可以利用人工免疫算法工具箱快速实现各种复杂的优化问题的求解。

8. 蜂群算法。

matlab30个案例分析案例13-SVM神经网络中的参数优化

matlab30个案例分析案例13-SVM神经网络中的参数优化

%% SVM神经网络中的参数优化---如何更好的提升分类器的性能%% 清空环境变量function chapter13_GAclose all;clear;clc;format compact;%% 数据提取% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量load chapter13_wine.mat;% 画出测试数据的box可视化图figure;boxplot(wine,'orientation','horizontal','labels',categories);title('wine数据的box可视化图','FontSize',12);xlabel('属性值','FontSize',12);grid on;% 画出测试数据的分维可视化图figuresubplot(3,5,1);hold onfor run = 1:178plot(run,wine_labels(run),'*');endxlabel('样本','FontSize',10);ylabel('类别标签','FontSize',10);title('class','FontSize',10);for run = 2:14subplot(3,5,run);hold on;str = ['attrib ',num2str(run-1)];for i = 1:178plot(i,wine(i,run-1),'*');endxlabel('样本','FontSize',10);ylabel('属性值','FontSize',10);title(str,'FontSize',10);end% 选定训练集和测试集% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];% 相应的训练集的标签也要分离出来train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];% 相应的测试集的标签也要分离出来test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];%% 数据预处理% 数据预处理,将训练集和测试集归一化到[0,1]区间[mtrain,ntrain] = size(train_wine);[mtest,ntest] = size(test_wine);dataset = [train_wine;test_wine];% mapminmax为MATLAB自带的归一化函数[dataset_scale,ps] = mapminmax(dataset',0,1);dataset_scale = dataset_scale';train_wine = dataset_scale(1:mtrain,:);test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );%% 选择GA最佳的SVM参数c&g% GA的参数选项初始化ga_option.maxgen = 200;ga_option.sizepop = 20;ga_option.cbound = [0,100];ga_option.gbound = [0,100];ga_option.v = 5;ga_option.ggap = 0.9;[bestacc,bestc,bestg] = gaSVMcgForClass(train_wine_labels,train_wine,ga_option);% 打印选择结果disp('打印选择结果');str = sprintf( 'Best Cross Validation Accuracy = %g%% Best c = %g Best g = %g',bestacc,bestc,bestg);disp(str);%% 利用最佳的参数进行SVM网络训练cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];model = svmtrain(train_wine_labels,train_wine,cmd);%% SVM网络预测[predict_label,accuracy] = svmpredict(test_wine_labels,test_wine,model);% 打印测试集分类准确率total = length(test_wine_labels);right = sum(predict_label == test_wine_labels);disp('打印测试集分类准确率');str = sprintf( 'Accuracy = %g%% (%d/%d)',accuracy(1),right,total);disp(str);%% 结果分析% 测试集的实际分类和预测分类图figure;hold on;plot(test_wine_labels,'o');plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');title('测试集的实际分类和预测分类图','FontSize',12);grid on;snapnow;%% 子函数gaSVMcgForClass.mfunction [BestCVaccuracy,Bestc,Bestg,ga_option] = gaSVMcgForClass(train_label,train_data,ga_option)% gaSVMcgForClass%% by faruto%Email:patrick.lee@ QQ:516667408 /faruto BNU%last modified 2010.01.17%Super Moderator @ % 若转载请注明:% faruto and liyang , LIBSVM-farutoUltimateVersion% a toolbox with implements for support vector machines based on libsvm, 2009.% Software available at %% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for% support vector machines, 2001. Software available at% .tw/~cjlin/libsvm% 参数初始化if nargin == 2ga_option = struct('maxgen',200,'sizepop',20,'ggap',0.9,...'cbound',[0,100],'gbound',[0,1000],'v',5);end% maxgen:最大的进化代数,默认为200,一般取值范围为[100,500]% sizepop:种群最大数量,默认为20,一般取值范围为[20,100]% cbound = [cmin,cmax],参数c的变化范围,默认为(0,100]% gbound = [gmin,gmax],参数g的变化范围,默认为[0,1000]% v:SVM Cross Validation参数,默认为5%MAXGEN = ga_option.maxgen;NIND = ga_option.sizepop;NVAR = 2;PRECI = 20;GGAP = ga_option.ggap;trace = zeros(MAXGEN,2);FieldID = ...[rep([PRECI],[1,NVAR]);[ga_option.cbound(1),ga_option.gbound(1);ga_option.cbound(2),ga_opti on.gbound(2)]; ...[1,1;0,0;0,1;1,1]];Chrom = crtbp(NIND,NVAR*PRECI);gen = 1;v = ga_option.v;BestCVaccuracy = 0;Bestc = 0;Bestg = 0;%cg = bs2rv(Chrom,FieldID);for nind = 1:NINDcmd = ['-v ',num2str(v),' -c ',num2str(cg(nind,1)),' -g ',num2str(cg(nind,2))];ObjV(nind,1) = svmtrain(train_label,train_data,cmd);end[BestCVaccuracy,I] = max(ObjV);Bestc = cg(I,1);Bestg = cg(I,2);for gen = 1:MAXGENFitnV = ranking(-ObjV);SelCh = select('sus',Chrom,FitnV,GGAP);SelCh = recombin('xovsp',SelCh,0.7);SelCh = mut(SelCh);cg = bs2rv(SelCh,FieldID);for nind = 1:size(SelCh,1)cmd = ['-v ',num2str(v),' -c ',num2str(cg(nind,1)),' -g ',num2str(cg(nind,2))];ObjVSel(nind,1) = svmtrain(train_label,train_data,cmd);end[Chrom,ObjV] = reins(Chrom,SelCh,1,1,ObjV,ObjVSel);if max(ObjV) <= 50continue;end[NewBestCVaccuracy,I] = max(ObjV);cg_temp = bs2rv(Chrom,FieldID);temp_NewBestCVaccuracy = NewBestCVaccuracy;if NewBestCVaccuracy > BestCVaccuracyBestCVaccuracy = NewBestCVaccuracy;Bestc = cg_temp(I,1);Bestg = cg_temp(I,2);endif abs( NewBestCVaccuracy-BestCVaccuracy ) <= 10^(-2) && ...cg_temp(I,1) < BestcBestCVaccuracy = NewBestCVaccuracy;Bestc = cg_temp(I,1);Bestg = cg_temp(I,2);endtrace(gen,1) = max(ObjV);trace(gen,2) = sum(ObjV)/length(ObjV);end%figure;hold on;trace = round(trace*10000)/10000;plot(trace(1:gen,1),'r*-','LineWidth',1.5);plot(trace(1:gen,2),'o-','LineWidth',1.5);legend('最佳适应度','平均适应度',3);xlabel('进化代数','FontSize',12);ylabel('适应度','FontSize',12);axis([0 gen 0 100]);grid on;axis auto;line1 = '适应度曲线Accuracy[GAmethod]';line2 = ['(终止代数=', ...num2str(gen),',种群数量pop=', ...num2str(NIND),')'];line3 = ['Best c=',num2str(Bestc),' g=',num2str(Bestg), ...' CVAccuracy=',num2str(BestCVaccuracy),'%'];title({line1;line2;line3},'FontSize',12);。

MATLAB_智能算法30个案例分析

MATLAB_智能算法30个案例分析

MATLAB_智能算法30个案例分析1.线性回归:使用MATLAB的回归工具箱,对给定的数据集进行线性回归分析,获取拟合的直线方程。

2.逻辑回归:使用MATLAB的分类工具箱,对给定的数据集进行逻辑回归分析,建立分类模型。

3.K均值聚类:使用MATLAB的聚类工具箱,对给定的数据集进行K 均值聚类算法,将数据集分为多个簇。

4.支持向量机:使用MATLAB的SVM工具箱,对给定的数据集进行支持向量机算法,建立分类或回归模型。

5.决策树:使用MATLAB的分类工具箱,对给定的数据集进行决策树分析,建立决策模型。

6.随机森林:使用MATLAB的分类和回归工具箱,对给定的数据集进行随机森林算法,集成多个决策树模型。

7. AdaBoost:使用MATLAB的分类工具箱,对给定的数据集进行AdaBoost算法,提升分类性能。

8.遗传算法:使用MATLAB的全局优化工具箱,利用遗传算法进行优化问题的求解。

9.粒子群优化:使用MATLAB的全局优化工具箱,利用粒子群优化算法进行优化问题的求解。

10.模拟退火算法:使用MATLAB的全局优化工具箱,利用模拟退火算法进行优化问题的求解。

11.神经网络:使用MATLAB的神经网络工具箱,构建和训练多层感知机模型。

12.卷积神经网络:使用MATLAB的深度学习工具箱,构建和训练卷积神经网络模型。

13.循环神经网络:使用MATLAB的深度学习工具箱,构建和训练循环神经网络模型。

14.长短期记忆网络:使用MATLAB的深度学习工具箱,构建和训练长短期记忆网络模型。

15.GAN(生成对抗网络):使用MATLAB的深度学习工具箱,构建和训练生成对抗网络模型。

16.自编码器:使用MATLAB的深度学习工具箱,构建和训练自编码器模型。

17.强化学习:使用MATLAB的强化学习工具箱,构建和训练强化学习模型。

18.关联规则挖掘:使用MATLAB的数据挖掘工具箱,发现数据中的关联规则。

Matlab回归分析:详解+实例

Matlab回归分析:详解+实例
回归分析 —从姚明女儿的身高谈起
姚明女儿的身高
问 建立父母身高和女儿身高的模型 题 姚明2.26米,叶莉1.90米,预测姚明女儿身高
女孩身高y(cm) 156 172 162 158 164 166 160 155 174 165
父母平均身高 x(cm)
158.5
170.5
166
163.5
166
168.5 165.5
自变量X:用来解释Y的变量,通常有多个。
Y:薪资收入 X:学历、年龄、性别...
注意:(1)自变量可以是定量数据,也可以是定
性数据,它不决定回归模型的类型,决定回归模型 类型的是因变量;
(2)确定自变量的方法可以头脑风暴,但同时也 要看数据的可获得性,有时候可能头脑风暴想的很 好,但是没办法获取这个指标的数据也是不行的, 所以自变量的选取往往看一个数据的可获取性。
1 n
(x0 x)2 Lxx
小结
1.回归分析的任务 研究变量之间的相关关系
2.线性回归的步骤
(1) 推测回归函数; (3) 估计未知参数; (5) 预测.
(2) 建立回归模型; (4) 进行假设检验;
MATLAB中回归分析的实现
多元线性回归
1.确定回归系数的点估计值,用命令:
b=regress(Y,X)
女孩身高y(cm) 156 172 162 158 164 166 160 155 174 165
父母平均身高 x(cm)
158.5
170.5
166
163.5
166
168.5 165.5
159
180.5
169
基本模型
y 0 1x
y ~女孩身高
0, 1 ~回归系数

MATLAB_智能算法30个案例分析

MATLAB_智能算法30个案例分析

MATLAB_智能算法30个案例分析MATLAB是一种强大的数值计算和编程工具,教育和科研领域中广泛应用于数据分析、机器学习和智能算法的研究。

在本文中,我们将介绍30个MATLAB智能算法的案例分析,并探讨其用途和优势。

分析的案例包括分类、回归、聚类、神经网络和遗传算法等不同类型的智能算法。

1. K均值聚类:利用MATLAB中的kmeans函数对一组数据进行聚类分析,得到不同的簇。

2. 随机森林:利用MATLAB中的TreeBagger函数构建一个随机森林分类器,并通过测试数据进行分类预测。

3. 人工神经网络:使用MATLAB中的feedforwardnet函数构建一个人工神经网络,并通过训练集进行预测。

4. 遗传算法:利用MATLAB中的ga函数对一个优化问题进行求解,找到最优解。

5. 支持向量机:使用MATLAB中的svmtrain和svmclassify函数构建一个支持向量机分类器,并进行分类预测。

6. 极限学习机:使用MATLAB中的elmtrain和elmpredict函数构建一个极限学习机分类器,并进行分类预测。

7. 逻辑回归:使用MATLAB中的mnrfit和mnrval函数构建一个逻辑回归模型,并进行预测。

8. 隐马尔可夫模型:使用MATLAB中的hmmtrain和hmmdecode函数构建一个隐马尔可夫模型,对一系列观测数据进行预测。

9. 神经进化算法:利用MATLAB中的ne_train函数构建一个基于神经进化算法的神经网络分类器,并进行分类预测。

10. 朴素贝叶斯分类器:使用MATLAB中的NaiveBayes对象构建一个朴素贝叶斯分类器,并进行分类预测。

11. 高斯过程回归:使用MATLAB中的fitrgp函数构建一个高斯过程回归模型,并进行回归预测。

12. 最小二乘支持向量机:使用MATLAB中的fitcsvm函数构建一个最小二乘支持向量机分类器,并进行分类预测。

13. 遗传网络:利用MATLAB中的ngenetic函数构建一个基于遗传算法和人工神经网络的分类器,并进行分类预测。

MATLAB智能算法30个案例分析

MATLAB智能算法30个案例分析

MATLAB智能算法30个案例分析1.线性回归:通过拟合数据,预测未知的连续变量。

2.逻辑回归:基于已知输入和输出数据,通过对数斯蒂格回归模型,进行二元分类。

3.决策树:通过对已知数据进行分类预测,构建一棵决策树模型。

4.随机森林:通过构建多个决策树模型,进行分类和回归分析。

5.支持向量机:通过找到一个最优超平面,对数据进行二元分类。

6.高斯混合模型:基于多个高斯分布,对数据进行聚类分析。

7.K均值聚类:通过对数据进行分组,找到数据的簇结构。

8.主成分分析:找到最具有代表性的主成分,实现数据的降维和可视化。

9.独立成分分析:在多变量数据中,找到相互独立的成分。

10.关联规则挖掘:通过分析大规模数据集,找到数据项之间的关联规则。

11.朴素贝叶斯分类器:基于贝叶斯理论,进行分类和预测。

12.遗传算法:通过模拟进化过程,找到最优解。

13.粒子群算法:通过模拟粒子在空间中的移动,优化问题的解。

14.蚁群算法:通过模拟蚂蚁在空间中的行为,解决优化问题。

15.神经网络:通过多层神经元之间的连接,进行模式识别和预测。

16.卷积神经网络:通过卷积层和池化层,进行图像分类和目标检测。

17.循环神经网络:通过循环连接,进行时间序列预测和自然语言处理。

18.支持张量分解的非负矩阵分解:通过分解张量,进行数据降维和特征提取。

19.马尔科夫链:通过状态转移概率,对随机过程进行建模和分析。

20.K最近邻算法:通过找到与未知样本最接近的训练样本,进行分类和回归分析。

21.高斯过程回归:利用高斯过程进行回归分析和置信区间估计。

22.隐马尔科夫模型:通过观测序列推断隐藏状态序列。

23.时序聚类:通过对时间序列数据进行聚类分析,找到相似的模式。

24.大规模机器学习:通过将数据划分为小批量,进行机器学习模型的训练。

25.非线性最小二乘:通过最小化非线性函数的残差平方和,拟合数据。

26.分类集成学习:通过结合多个分类器的预测结果,提高分类准确率。

基于信息粒化的SVM时序回归预测

基于信息粒化的SVM时序回归预测
Ti me S e r i e s Re g r e s s i o n a n d P r e d i c t i o n Ba s e d o n I n f o r ma t i o n Gr a n u l a t i o n a n d S VM
r e g r e s s i o n a n a l y s i s , w h i l e t a k e c r o s s v a l i d a t i o n t o s e l e c t t h e o p t ma i l c l a s s i i f e r a d j u s a t b l e p a r a m e t e r s , w h i c h c a l l r e d u c e
g o o d - p e r f o m a r nc e nd a ma k e t me i s e ie r s r e g r e s s i o n p r e d i c t i o n p r e c i s e l y  ̄
Ke y wo r d s : i n f o ma r t i o n g r a n u l a t i o n ; S VM; g e n e r a l i z a t i o n a b i l i y; t r e re g s s i o n p r e d i c i t o n
he t c o mp l e x i y t o f he t c l a s s i i f e r nd a mp i r o v e he t g e n e r a l za i t i o n c a p a b i l i y t o f t h e c l ss a i i f e r a 0 . d a v o i d Ov e r l e a r n i n g nd a

matlab30个案例分析案例13-SVM神经网络中的参数优化

matlab30个案例分析案例13-SVM神经网络中的参数优化

%% SVM神经网络中的参数优化---如何更好的提升分类器的性能%% 清空环境变量function chapter13_GAclose all;clear;clc;format compact;%% 数据提取% 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量load chapter13_wine.mat;% 画出测试数据的box可视化图figure;boxplot(wine,'orientation','horizontal','labels',categories);title('wine数据的box可视化图','FontSize',12);xlabel('属性值','FontSize',12);grid on;% 画出测试数据的分维可视化图figuresubplot(3,5,1);hold onfor run = 1:178plot(run,wine_labels(run),'*');endxlabel('样本','FontSize',10);ylabel('类别标签','FontSize',10);title('class','FontSize',10);for run = 2:14subplot(3,5,run);hold on;str = ['attrib ',num2str(run-1)];for i = 1:178plot(i,wine(i,run-1),'*');endxlabel('样本','FontSize',10);ylabel('属性值','FontSize',10);title(str,'FontSize',10);end% 选定训练集和测试集% 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)];% 相应的训练集的标签也要分离出来train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)];% 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)];% 相应的测试集的标签也要分离出来test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)];%% 数据预处理% 数据预处理,将训练集和测试集归一化到[0,1]区间[mtrain,ntrain] = size(train_wine);[mtest,ntest] = size(test_wine);dataset = [train_wine;test_wine];% mapminmax为MATLAB自带的归一化函数[dataset_scale,ps] = mapminmax(dataset',0,1);dataset_scale = dataset_scale';train_wine = dataset_scale(1:mtrain,:);test_wine = dataset_scale( (mtrain+1):(mtrain+mtest),: );%% 选择GA最佳的SVM参数c&g% GA的参数选项初始化ga_option.maxgen = 200;ga_option.sizepop = 20;ga_option.cbound = [0,100];ga_option.gbound = [0,100];ga_option.v = 5;ga_option.ggap = 0.9;[bestacc,bestc,bestg] = gaSVMcgForClass(train_wine_labels,train_wine,ga_option);% 打印选择结果disp('打印选择结果');str = sprintf( 'Best Cross Validation Accuracy = %g%% Best c = %g Best g = %g',bestacc,bestc,bestg);disp(str);%% 利用最佳的参数进行SVM网络训练cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg)];model = svmtrain(train_wine_labels,train_wine,cmd);%% SVM网络预测[predict_label,accuracy] = svmpredict(test_wine_labels,test_wine,model);% 打印测试集分类准确率total = length(test_wine_labels);right = sum(predict_label == test_wine_labels);disp('打印测试集分类准确率');str = sprintf( 'Accuracy = %g%% (%d/%d)',accuracy(1),right,total);disp(str);%% 结果分析% 测试集的实际分类和预测分类图figure;hold on;plot(test_wine_labels,'o');plot(predict_label,'r*');xlabel('测试集样本','FontSize',12);ylabel('类别标签','FontSize',12);legend('实际测试集分类','预测测试集分类');title('测试集的实际分类和预测分类图','FontSize',12);grid on;snapnow;%% 子函数gaSVMcgForClass.mfunction [BestCVaccuracy,Bestc,Bestg,ga_option] = gaSVMcgForClass(train_label,train_data,ga_option)% gaSVMcgForClass%% by faruto%Email:patrick.lee@ QQ:516667408 /faruto BNU%last modified 2010.01.17%Super Moderator @ % 若转载请注明:% faruto and liyang , LIBSVM-farutoUltimateVersion% a toolbox with implements for support vector machines based on libsvm, 2009.% Software available at %% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for% support vector machines, 2001. Software available at% .tw/~cjlin/libsvm% 参数初始化if nargin == 2ga_option = struct('maxgen',200,'sizepop',20,'ggap',0.9,...'cbound',[0,100],'gbound',[0,1000],'v',5);end% maxgen:最大的进化代数,默认为200,一般取值范围为[100,500]% sizepop:种群最大数量,默认为20,一般取值范围为[20,100]% cbound = [cmin,cmax],参数c的变化范围,默认为(0,100]% gbound = [gmin,gmax],参数g的变化范围,默认为[0,1000]% v:SVM Cross Validation参数,默认为5%MAXGEN = ga_option.maxgen;NIND = ga_option.sizepop;NVAR = 2;PRECI = 20;GGAP = ga_option.ggap;trace = zeros(MAXGEN,2);FieldID = ...[rep([PRECI],[1,NVAR]);[ga_option.cbound(1),ga_option.gbound(1);ga_option.cbound(2),ga_opti on.gbound(2)]; ...[1,1;0,0;0,1;1,1]];Chrom = crtbp(NIND,NVAR*PRECI);gen = 1;v = ga_option.v;BestCVaccuracy = 0;Bestc = 0;Bestg = 0;%cg = bs2rv(Chrom,FieldID);for nind = 1:NINDcmd = ['-v ',num2str(v),' -c ',num2str(cg(nind,1)),' -g ',num2str(cg(nind,2))];ObjV(nind,1) = svmtrain(train_label,train_data,cmd);end[BestCVaccuracy,I] = max(ObjV);Bestc = cg(I,1);Bestg = cg(I,2);for gen = 1:MAXGENFitnV = ranking(-ObjV);SelCh = select('sus',Chrom,FitnV,GGAP);SelCh = recombin('xovsp',SelCh,0.7);SelCh = mut(SelCh);cg = bs2rv(SelCh,FieldID);for nind = 1:size(SelCh,1)cmd = ['-v ',num2str(v),' -c ',num2str(cg(nind,1)),' -g ',num2str(cg(nind,2))];ObjVSel(nind,1) = svmtrain(train_label,train_data,cmd);end[Chrom,ObjV] = reins(Chrom,SelCh,1,1,ObjV,ObjVSel);if max(ObjV) <= 50continue;end[NewBestCVaccuracy,I] = max(ObjV);cg_temp = bs2rv(Chrom,FieldID);temp_NewBestCVaccuracy = NewBestCVaccuracy;if NewBestCVaccuracy > BestCVaccuracyBestCVaccuracy = NewBestCVaccuracy;Bestc = cg_temp(I,1);Bestg = cg_temp(I,2);endif abs( NewBestCVaccuracy-BestCVaccuracy ) <= 10^(-2) && ...cg_temp(I,1) < BestcBestCVaccuracy = NewBestCVaccuracy;Bestc = cg_temp(I,1);Bestg = cg_temp(I,2);endtrace(gen,1) = max(ObjV);trace(gen,2) = sum(ObjV)/length(ObjV);end%figure;hold on;trace = round(trace*10000)/10000;plot(trace(1:gen,1),'r*-','LineWidth',1.5);plot(trace(1:gen,2),'o-','LineWidth',1.5);legend('最佳适应度','平均适应度',3);xlabel('进化代数','FontSize',12);ylabel('适应度','FontSize',12);axis([0 gen 0 100]);grid on;axis auto;line1 = '适应度曲线Accuracy[GAmethod]';line2 = ['(终止代数=', ...num2str(gen),',种群数量pop=', ...num2str(NIND),')'];line3 = ['Best c=',num2str(Bestc),' g=',num2str(Bestg), ...' CVAccuracy=',num2str(BestCVaccuracy),'%'];title({line1;line2;line3},'FontSize',12);。

用MATLAB求解回归分析课件

用MATLAB求解回归分析课件
感谢观看
用Matlab求解 回归分析课件
目 录
• 回归分析简介 • Matlab基础操作 • 线性回归分析 • 非线性回归分析 • 多元回归分析 • Matlab在回归分析中的应用实例
01
CATALOGUE
回归分析简介
回归分析的定义
回归分析是一种统计学方法,用于研 究自变量和因变量之间的相关关系, 并建立数学模型来预测因变量的值。
显著性检验
对回归模型的显著性进行检验,如F 检验、t检验等。
预测精度评估
使用均方误差、均方根误差等指标评 估模型的预测精度。
可解释性
评估模型的解释性,即模型是否易于 理解,自变量对因变量的影响是否合 理。
06
CATALOGUE
Matlab在回归分析中的应用实例
用Matlab进行线性回归分析的实例
迭代法
对于一些复杂的回归模型,可能 需要使用迭代法进行求解,如梯 度下降法、牛顿法等。
Matlab函数
在Matlab中,可以使用内建的回 归分析函数来求解多元回归模型 ,如 `fitlm`、`fitlm2` 等。
多元回归模型的评估
残差分析
对回归模型的残差进行分析,检查残 差是否满足正态分布、同方差等假设 。
要点一
总结词
要点二
详细描述
多元回归分析是处理多个自变量和因变量之间关系的回归 分析方法,通过Matlab可以方便地进行多元回归分析。
在Matlab中,可以使用`fitlm`函数对一组数据进行多元回 归分析。首先需要准备数据,然后使用`fitlm`函数拟合多 元线性模型,最后通过模型进行预测和评估。
THANKS
使用预测值与实际值之间的误差评估模型的预测 能力,如均方误差、平均绝对误差等指标。

matlab神经网络43个案例分析

matlab神经网络43个案例分析

matlab神经网络43个案例分析MATLAB神经网络是一种广泛使用的机器学习工具,可以应用于多种问题的解决。

下面为大家介绍43个用MATLAB神经网络解决的案例分析。

1. 基于神经网络的股票市场预测通过分析历史数据,建立神经网络模型,预测未来股票市场走势。

2. 神经网络分类器建模分析通过建立分类模型,对不同类型数据进行分类处理。

3. 基于神经网络的信用评估模型通过收集客户的基本信息和信用历史,建立神经网络模型,对客户的信用进行评估。

4. 神经网络医学图像分析通过医学图像数据,建立神经网络模型,进行疾病诊断与分析。

5. 基于神经网络的机器人动作控制通过神经网络,训练机器人进行动作控制,提高机器人的智能化水平。

6. 神经网络预测库存需求通过分析历史销售数据,建立神经网络模型,预测未来库存需求,提高企业的运作效率。

7. 基于神经网络的人脸识别通过收集人脸数据,建立神经网络模型,实现人脸识别功能。

8. 神经网络垃圾邮件过滤通过建立神经网络模型,对邮件进行分类,筛选出垃圾邮件。

9. 基于神经网络的语音识别通过收集语音数据,建立神经网络模型,实现语音识别功能。

10. 神经网络飞机失速预测通过分析飞机数据和空气动力学知识,建立神经网络模型,预测飞机发生失速的概率。

11. 基于神经网络的目标识别通过收集目标数据,建立神经网络模型,实现目标识别功能。

12. 神经网络电力负荷预测通过历史电力数据,建立神经网络模型,预测未来电力负荷。

13. 基于神经网络的网络入侵检测通过建立神经网络模型,检测网络攻击行为。

14. 神经网络手写数字识别通过收集手写数字数据,建立神经网络模型,实现手写数字识别功能。

15. 基于神经网络的情感分析通过对情感文本数据进行分析,建立神经网络模型,实现情感分析功能。

16. 神经网络自然语言处理通过对自然语言文本数据进行处理和分析,建立神经网络模型,实现自然语言处理功能。

17. 基于神经网络的物体识别通过收集物体数据,建立神经网络模型,实现物体识别功能。

MATLAB智能算法30个案例分析

MATLAB智能算法30个案例分析

MATLAB智能算法30个案例分析以下是MATLAB智能算法30个案例的分析:1.遗传算法优化问题:利用遗传算法求解最佳解的问题。

可以用于求解复杂的优化问题,如旅行商问题等。

2.神经网络拟合问题:利用神经网络模型拟合给定的数据。

可以用于预测未知的数据或者进行模式分类等。

3.支持向量机分类问题:利用支持向量机模型进行分类任务。

可以用于医学图像处理、信号处理等领域。

4.贝叶斯网络学习问题:利用贝叶斯网络对大量数据进行学习和分析。

可以用于推断潜在关系、预测未来事件等。

5.粒子群算法逆向问题:利用粒子群算法解决逆向问题,如数据恢复、逆向工程等。

可以用于重建丢失的数据或者还原未知的模型参数。

6.模拟退火算法优化问题:利用模拟退火算法寻找最优解。

可以用于参数优化、组合优化等问题。

7.K均值聚类问题:利用K均值算法对数据进行聚类。

可以用于数据分析、图像处理等。

8.线性回归问题:利用线性回归模型预测目标变量。

可以用于价格预测、趋势分析等。

9.主成分分析问题:利用主成分分析模型对高维数据进行降维。

可以用于数据可视化和预处理。

10.深度学习图像分类问题:利用深度学习算法对图像进行分类。

可以用于图像识别和物体检测等。

11.强化学习问题:利用强化学习算法让智能体自主学习和改进策略。

可以用于自动驾驶、博弈等。

12.偏微分方程求解问题:利用数值方法求解偏微分方程。

可以用于模拟物理过程和工程问题。

13.隐马尔可夫模型序列分类问题:利用隐马尔可夫模型对序列进行分类。

可以用于语音识别、自然语言处理等。

14.遗传编程问题:利用遗传编程算法自动发现和改进算法。

可以用于算法设计和优化等。

15.高斯混合模型聚类问题:利用高斯混合模型对数据进行聚类。

可以用于人群分析和异常检测等。

16.马尔可夫链蒙特卡洛采样问题:利用马尔可夫链蒙特卡洛方法采样复杂分布。

可以用于概率推断和统计模拟等。

17.基因表达式数据分析问题:利用统计方法分析基因表达数据。

Matlab循环神经网络在时间序列预测中的应用

Matlab循环神经网络在时间序列预测中的应用

Matlab循环神经网络在时间序列预测中的应用引言随着人工智能和机器学习的快速发展,神经网络作为一种强大的模型表达能力工具,被广泛应用于各个领域。

其中,循环神经网络(RNN)因其能够处理序列数据的能力而备受关注。

在时间序列预测问题中,Matlab中的循环神经网络工具箱提供了一种高效且易于使用的方法,该方法在多个领域取得了重要的成功。

一、循环神经网络概述循环神经网络是一种特殊的神经网络结构,其能够处理序列数据并保留隐藏状态信息。

与传统的前馈神经网络相比,循环神经网络通过引入记忆单元(memory cell)实现对上下文信息的建模。

这使得循环神经网络在处理时间序列数据时具有明显的优势。

在Matlab中,循环神经网络可以通过循环神经网络工具箱(rnntool)来构建和训练。

该工具箱提供了多种类型的循环神经网络模型,包括简单循环神经网络(Simple RNN)、长短期记忆网络(Long Short-Term Memory, LSTM)和门控循环单元(Gated Recurrent Unit, GRU)等。

二、时间序列预测问题时间序列预测是指基于过去观测值来预测未来一段时间内的数值。

这是一个具有挑战性的问题,因为序列数据往往具有非线性、非平稳和高度依赖的特征。

循环神经网络在时间序列预测问题中具有广泛的应用,其能够捕捉到序列数据中的动态特征,从而提高预测准确度。

三、Matlab循环神经网络工具箱的应用1. 数据准备与预处理在使用Matlab进行时间序列预测前,我们需要首先准备和预处理数据。

通常包括数据加载、缺失值处理、归一化等步骤。

Matlab提供了丰富的数据处理函数和工具,使得数据的准备和预处理变得更加简单和高效。

2. 循环神经网络模型构建在准备好数据后,我们可以通过运行循环神经网络工具箱来构建模型。

根据具体的问题和数据特点,可以选择合适的循环神经网络结构,并设置模型的超参数。

循环神经网络工具箱还提供了交叉验证、正则化等功能,帮助我们选择最佳的网络结构和参数。

matlab30个案例分析案例15-SVM神经网络的信息粒化时序回归预测

matlab30个案例分析案例15-SVM神经网络的信息粒化时序回归预测

%% SVM神经网络的信息粒化时序回归预测----上证指数开盘指数变化趋势和变化空间预测%% 清空环境变量function chapter15tic;close all;clear;clc;format compact;%% 原始数据的提取% 载入测试数据上证指数(1990.12.19-2009.08.19)% 数据是一个4579*6的double型的矩阵,每一行表示每一天的上证指数% 6列分别表示当天上证指数的开盘指数,指数最高值,指数最低值,收盘指数,当日交易量,当日交易额.load chapter15_sh.mat;% 提取数据ts = sh_open;time = length(ts);% 画出原始上证指数的每日开盘数figure;plot(ts,'LineWidth',2);title('上证指数的每日开盘数(1990.12.20-2009.08.19)','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('开盘数','FontSize',12);grid on;print -dtiff -r600 original;snapnow;%% 对原始数据进行模糊信息粒化win_num = floor(time/5);tsx = 1:win_num;tsx = tsx';[Low,R,Up]=FIG_D(ts','triangle',win_num);% 模糊信息粒化可视化图figure;hold on;plot(Low,'b+');plot(R,'r*');plot(Up,'gx');hold off;legend('Low','R','Up',2);title('模糊信息粒化可视化图','FontSize',12);xlabel('粒化窗口数目','FontSize',12);ylabel('粒化值','FontSize',12);grid on;print -dtiff -r600 FIGpic;snapnow;%% 利用SVM对Low进行回归预测% 数据预处理,将Low进行归一化处理% mapminmax为matlab自带的映射函数[low,low_ps] = mapminmax(Low);low_ps.ymin = 100;low_ps.ymax = 500;% 对Low进行归一化[low,low_ps] = mapminmax(Low,low_ps);% 画出Low归一化后的图像figure;plot(low,'b+');title('Low归一化后的图像','FontSize',12);xlabel('粒化窗口数目','FontSize',12);ylabel('归一化后的粒化值','FontSize',12);grid on;print -dtiff -r600 lowscale;% 对low进行转置,以符合libsvm工具箱的数据格式要求low = low';snapnow;% 选择回归预测分析中最佳的SVM参数c&g% 首先进行粗略选择[bestmse,bestc,bestg] = SVMcgForRegress(low,tsx,-10,10,-10,10,3,1,1,0.1,1);% 打印粗略选择结果disp('打印粗略选择结果');str = sprintf( 'SVM parameters for Low:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 根据粗略选择的结果图再进行精细选择[bestmse,bestc,bestg] = SVMcgForRegress(low,tsx,-4,8,-10,10,3,0.5,0.5,0.05,1);% 打印精细选择结果disp('打印精细选择结果');str = sprintf( 'SVM parameters for Low:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 训练SVMcmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.1'];low_model = svmtrain(low, tsx, cmd);% 预测[low_predict,low_mse] = svmpredict(low,tsx,low_model);low_predict = mapminmax('reverse',low_predict,low_ps);predict_low = svmpredict(1,win_num+1,low_model);predict_low = mapminmax('reverse',predict_low,low_ps);predict_low%% 对于Low的回归预测结果分析figure;hold on;plot(Low,'b+');plot(low_predict,'r*');legend('original low','predict low',2);title('original vs predict','FontSize',12);xlabel('粒化窗口数目','FontSize',12);ylabel('粒化值','FontSize',12);grid on;print -dtiff -r600 lowresult;figure;error = low_predict - Low';plot(error,'ro');title('误差(predicted data-original data)','FontSize',12);xlabel('粒化窗口数目','FontSize',12);ylabel('误差量','FontSize',12);grid on;print -dtiff -r600 lowresulterror;snapnow;%% 利用SVM对R进行回归预测% 数据预处理,将R进行归一化处理% mapminmax为matlab自带的映射函数[r,r_ps] = mapminmax(R);r_ps.ymin = 100;r_ps.ymax = 500;% 对R进行归一化[r,r_ps] = mapminmax(R,r_ps);% 画出R归一化后的图像figure;plot(r,'r*');title('r归一化后的图像','FontSize',12);grid on;% 对R进行转置,以符合libsvm工具箱的数据格式要求r = r';snapnow;% 选择回归预测分析中最佳的SVM参数c&g% 首先进行粗略选择[bestmse,bestc,bestg] = SVMcgForRegress(r,tsx,-10,10,-10,10,3,1,1,0.1);% 打印粗略选择结果disp('打印粗略选择结果');str = sprintf( 'SVM parameters for R:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 根据粗略选择的结果图再进行精细选择[bestmse,bestc,bestg] = SVMcgForRegress(r,tsx,-4,8,-10,10,3,0.5,0.5,0.05);% 打印精细选择结果disp('打印精细选择结果');str = sprintf( 'SVM parameters for R:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 训练SVMcmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.1'];r_model = svmtrain(r, tsx, cmd);% 预测[r_predict,r_mse] = svmpredict(r,tsx,low_model);r_predict = mapminmax('reverse',r_predict,r_ps);predict_r = svmpredict(1,win_num+1,r_model);predict_r = mapminmax('reverse',predict_r,r_ps);predict_r%% 对于R的回归预测结果分析figure;hold on;plot(R,'b+');plot(r_predict,'r*');legend('original r','predict r',2);title('original vs predict','FontSize',12);grid on;figure;error = r_predict - R';plot(error,'ro');title('误差(predicted data-original data)','FontSize',12);grid on;snapnow;%% 利用SVM对Up进行回归预测% 数据预处理,将up进行归一化处理% mapminmax为matlab自带的映射函数[up,up_ps] = mapminmax(Up);up_ps.ymin = 100;up_ps.ymax = 500;% 对Up进行归一化[up,up_ps] = mapminmax(Up,up_ps);% 画出Up归一化后的图像figure;plot(up,'gx');title('Up归一化后的图像','FontSize',12);grid on;% 对up进行转置,以符合libsvm工具箱的数据格式要求up = up';snapnow;% 选择回归预测分析中最佳的SVM参数c&g% 首先进行粗略选择[bestmse,bestc,bestg] = SVMcgForRegress(up,tsx,-10,10,-10,10,3,1,1,0.5);% 打印粗略选择结果disp('打印粗略选择结果');str = sprintf( 'SVM parameters for Up:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 根据粗略选择的结果图再进行精细选择[bestmse,bestc,bestg] = SVMcgForRegress(up,tsx,-4,8,-10,10,3,0.5,0.5,0.2);% 打印精细选择结果disp('打印精细选择结果');str = sprintf( 'SVM parameters for Up:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 训练SVMcmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.1'];up_model = svmtrain(up, tsx, cmd);% 预测[up_predict,up_mse] = svmpredict(up,tsx,up_model);up_predict = mapminmax('reverse',up_predict,up_ps);predict_up = svmpredict(1,win_num+1,up_model);predict_up = mapminmax('reverse',predict_up,up_ps);predict_up%% 对于Up的回归预测结果分析figure;hold on;plot(Up,'b+');plot(up_predict,'r*');legend('original up','predict up',2);title('original vs predict','FontSize',12);grid on;figure;error = up_predict - Up';plot(error,'ro');title('误差(predicted data-original data)','FontSize',12);grid on;toc;snapnow;%% 子函数SVMcgForRegress.mfunction [mse,bestc,bestg] = SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep,flag)% SVMcgForClass% 输入:% train_label:训练集标签.要求与libsvm工具箱中要求一致.% train:训练集.要求与libsvm工具箱中要求一致.% cmin:惩罚参数c的变化范围的最小值(取以2为底的对数后),即c_min = 2^(cmin).默认为-5 % cmax:惩罚参数c的变化范围的最大值(取以2为底的对数后),即c_max = 2^(cmax).默认为5% gmin:参数g的变化范围的最小值(取以2为底的对数后),即g_min = 2^(gmin).默认为-5 % gmax:参数g的变化范围的最小值(取以2为底的对数后),即g_min = 2^(gmax).默认为5 % v:cross validation的参数,即给测试集分为几部分进行cross validation.默认为3% cstep:参数c步进的大小.默认为1% gstep:参数g步进的大小.默认为1% msestep:最后显示MSE图时的步进大小.默认为20% 输出:% bestacc:Cross Validation 过程中的最高分类准确率% bestc:最佳的参数c% bestg:最佳的参数g% about the parameters of SVMcgForRegressif nargin < 11flag = 0;endif nargin < 10msestep = 0.1;endif nargin < 7msestep = 0.1;v = 3;cstep = 1;gstep = 1;endif nargin < 6msestep = 0.1;v = 3;cstep = 1;gstep = 1;gmax = 5;endif nargin < 5msestep = 0.1;v = 3;cstep = 1;gstep = 1;gmax = 5;gmin = -5;endif nargin < 4msestep = 0.1;v = 3;cstep = 1;gstep = 1;gmax = 5;gmin = -5;cmax = 5;endif nargin < 3msestep = 0.1;v = 3;cstep = 1;gstep = 1;gmax = 5;gmin = -5;cmax = 5;cmin = -5;end% X:c Y:g cg:mse[X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);[m,n] = size(X);cg = zeros(m,n);% record accuracy with different c & g,and find the best mse with the smallest cbestc = 0;bestg = 0;mse = 10^10;basenum = 2;for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -c ',num2str( basenum^X(i,j) ),' -g ',num2str( basenum^Y(i,j) ),' -s 3'];cg(i,j) = svmtrain(train_label, train, cmd);if cg(i,j) < msemse = cg(i,j);bestc = basenum^X(i,j);bestg = basenum^Y(i,j);endif ( cg(i,j) == mse && bestc > basenum^X(i,j) )mse = cg(i,j);bestc = basenum^X(i,j);bestg = basenum^Y(i,j);endendend% draw the accuracy with different c & g[cg,ps] = mapminmax(cg,0,1);figure;subplot(1,2,1);[C,h] = contour(X,Y,cg,0:msestep:0.5);clabel(C,h,'FontSize',10,'Color','r');xlabel('log2c','FontSize',12);ylabel('log2g','FontSize',12);title('参数选择结果图(等高线图)','FontSize',12);grid on;subplot(1,2,2);meshc(X,Y,cg);% mesh(X,Y,cg);% surf(X,Y,cg);axis([cmin,cmax,gmin,gmax,0,1]);xlabel('log2c','FontSize',12);ylabel('log2g','FontSize',12);zlabel('MSE','FontSize',12);title('参数选择结果图(3D视图)','FontSize',12);filename = ['c',num2str(bestc),'g',num2str(bestg),num2str(msestep),'.tif']; if flag == 1;print('-dtiff','-r600',filename);end其中,function [low,R,up]=FIG_D(XX,MFkind,win_num)%byLiYangBNUMATH05Email:************************:516667408 % last modified 2009.2.25%modified IG based on Pedry by Keqiang Dong%output%low:low bounds%R:representatives%up:up bounds%input%X:times series waited to be IG%MFkind:the kind of membership function%triangle trapezoid asygauss asyparabola%win_num:number of windows%%if nargin < 3win_num = 10;endif nargin < 2MFkind = 'trapezoid';end[d1,d2] = size(XX);X = sort(XX);switch MFkind% trapezoidcase('trapezoid')if win_num == 1if mod(d2,2) ~= 0m = X( (d2+1)/2 );n = X( (d2+1)/2 );mflag = (d2+1)/2;nflag = (d2+1)/2;elsem = X( d2/2 );n = X( (d2+2)/2 );mflag = d2/2;nflag = (d2+2)/2;endR(1,1) = m;R(2,1) = n;k1 = mflag;k2 = d2 - nflag+1;c1 = ( sum(X(1:k1)) )/k1;c2 = ( sum(X(nflag:d2)) )/k2;low = 2*c1 - m;up = 2*c2 - n;elselow = [];R = [];up = [];k = floor(d2/win_num);for i = 1:(win_num-1)[l,r,u]=FIG_D(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1);low = [low,l];R = [R,r];end[l,r,u] = FIG_D(XX( (1+(win_num-1)*k):d2 ),MFkind,1);low =[low,l];R = [R,r];up = [up,u];end%% trianglecase('triangle')if win_num == 1R = median(X);m = median(X);n = median(X);mflag = floor(d2/2);nflag = ceil(d2/2);k1 = mflag;k2 = d2-nflag+1;c1 = ( sum(X(1:k1)) )/k1;c2 = ( sum(X(nflag:d2)) )/k2;low = 2*c1 - m;up = 2*c2 - n;elselow = [];R = [];up = [];k = floor(d2/win_num);for i = 1:(win_num-1)[l,r,u]=FIG_D(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1);low = [low,l];R = [R,r];up = [up,u];end[l,r,u] = FIG_D(XX( (1+(win_num-1)*k):d2 ),MFkind,1);low =[low,l];R = [R,r];up = [up,u];end%% asygausscase('asygauss') %这个与基于Pedrycz的是一样的,因为高斯型的核函数无法修改if win_num == 1m = median(X);n = median(X);mflag = floor(d2/2);nflag = ceil(d2/2);a_final = 0;Qa_final = 0;for index = 1:( mflag-1 )a = X(index);Qa=0;x = X( 1:(mflag-1) );y = (x<=m).*(exp(-(x-m).^2/a^2) );Qa = sum(y);Qa = Qa/(m-a);if Qa>=Qa_finalQa_final = Qa;a_final = a;endendlow = a_final;b_final = 0;Qb_final = 0;for index = ( nflag+1 ):d2b = X(index);Qb = 0;x = X( (nflag+1):d2 );y = (x>=m).*(exp(-(x-m).^2/b^2) );Qb = sum(y);Qb = Qb/(b-n);if Qb>=Qb_finalQb_final = Qb;b_final = b;endendup = b_final;elselow = [];R = [];up = [];k = floor(d2/win_num);for i = 1:(win_num-1)[l,r,u]=FIG_P(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1);low = [low,l];R = [R,r];up = [up,u];end[l,r,u] = FIG_P(XX( (1+(win_num-1)*k):d2 ),MFkind,1);low =[low,l];R = [R,r];up = [up,u];end%% asyparabolacase('asyparabola')if win_num == 1R = median(X);m = median(X);n = median(X);mflag = floor(d2/2);nflag = ceil(d2/2);a_final = 0;Qa_final = 0;for index = 1:( mflag-1 )a = X(index);Qa=0;x = X( 1:( mflag-1) );y=(x<=m).*(1-(m-x).^2/(m-a)^2);Qa = sum(y);Qa = Qa/(m-a);if Qa>=Qa_finalQa_final = Qa;a_final = a;endendlow = a_final;b_final = 0;Qb_final = 0;for index = ( nflag+1 ):d2b = X(index);Qb = 0;x = X( (nflag+1):d2 );y=(x>=m).*(1-(m-x).^2/(m-b)^2);Qb = sum(y);Qb = Qb/(b-n);if Qb>=Qb_finalQb_final = Qb;b_final = b;endendup = b_final;elselow = [];R = [];up = [];k = floor(d2/win_num);for i = 1:(win_num-1)[l,r,u]=FIG_P(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1);low = [low,l];R = [R,r];up = [up,u];end[l,r,u] = FIG_P(XX( (1+(win_num-1)*k):d2 ),MFkind,1);low =[low,l];R = [R,r];up = [up,u];endend。

基于信息粒化的SVM时序回归预测

基于信息粒化的SVM时序回归预测

基于信息粒化的SVM时序回归预测彭勇;陈俞强【摘要】为了提高SVM的学习效率和泛化能力,首先利用一种信息粒化算法对原始数据进行预处理,该算法能将样本空间划分为多个粒(子空间),降低样本规模,节省时间复杂度.然后将模糊粒化后的信息利用SVM进行回归分析,同时利用交叉验证选出最优的分类器调节参数,可降低分类器的复杂性和提高分类器的泛化能力,避免出现过学习和欠学习.最后通过预测上证指数的实验验证了该算法具有优越的特性,能够较为准确的进行时序回归预测.%In order to improve learning efficiency and generalization ability of SVM,firstly,the raw data is preprocessed by using an information granulation algorithm.This algorithm can divide sample space into multiple particles (subspace),reduce the sample size and save the time complexity.And then,the granulated information take SVM to carry on the regression analysis,while take cross validation to select the optimal classifier adjustable parameters,which can reduce the complexity of the classifier and improve the generalization capability of the classifier and avoid Over learning and less learning.Finally,the test results on forecasting the Shanghai Composite Index have proved that the system has a good-performance and make time series regression prediction precisely.【期刊名称】《计算机系统应用》【年(卷),期】2013(022)005【总页数】6页(P163-167,206)【关键词】信息粒化;支持向量机;泛化能力;回归预测【作者】彭勇;陈俞强【作者单位】东莞职业技术学院计算机工程系,东莞523808;东莞职业技术学院计算机工程系,东莞523808;广东工业大学自动化学院,广州510006【正文语种】中文支持向量机 (SVM )是由 Vapnik于 20世纪 90年代初提出的一种新的机器学习方法. SVM 算法利用凸二次规划(quadratic programming, QP )、Mercer核、稀疏解和松弛向量等多项技术, 具有结构简单、训练误差低和泛化能力好等优点, 因而被广泛地应用于分类学习问题中. 但是当样本规模较大时, SVM算法在二次寻优过程中需要存储核矩阵和进行大量矩阵运算, 使得运算时间过长.信息粒化(IG, Information Granulation)最早有LotfiA. Zadeh教授提出的, 就是将一个整体分解成一个个的部分进行研究, 每一部分为一个信息粒[1]. Zadeh教授指出: 信息粒就是一些元素的集合, 这些元素由于难以识别、或相似、或接近或某种功能结合在一起. 在这样的理论背景下, 将信息粒化思想引入SVM中, 不仅可以丰富SVM理论, 而且可以推广SVM的应用领域, 本文主要是通过常用的粒划分方法构建粒空间获得一系列信息粒, 然后在每个信息粒上进行学习, 最后通过聚合信息粒上的信息获得最终的SVM决策函数.模糊信息粒就是以模糊集形式表示的信息粒. 用模糊集方法对时间序列进行模糊粒化, 主要分为两个步骤: 划分窗口和模糊化. 划分窗口就是将时间序列分割成若干小子序列, 作为操作窗口; 模糊化则是将产生的每一个窗口进行模糊化, 生成一个个模糊集, 也就是模糊信息粒. 这两种广义模式结合在一起就是模糊信息粒化, 称为f—粒化. 在f—粒化中, 最为关键的是模糊化的过程, 也就是在所给的窗口上建立一个合理地模糊集, 使其能够取代原来窗口中的数据, 表示相关的人们所关心的信息[4]. 将模糊信息粒化方法运用到原始数据预处理中, 在原空间上进行粒度划分, 进而在各个粒上进行 SV 训练, 可以将一个线性不可分问题转化为一系列线性可分问题, 从而获得多个决策函数; 同时, 这一学习机制也使得数据的泛化性能增强, 即可在SVM 的训练中得到间隔更宽的超平面. 也就是说将一个大规模QP问题, 通过粒度划分, 分解为一系列小的QP问题; 同时, 最后实现对原问题的求解.对于给定的时间序列, 考虑单窗口问题, 即把整个时序X看成是一个窗口进行模糊化, 模糊化的任务是在X上建立一个模糊粒子P, 既一个能够合理描述X的模糊概念G(以X为论域的模糊集合), 确定了G也就确定了模糊粒子P:所以模糊化过程的本质就是确定一个函数A的过程, A是模糊概念G的隶属函数, 既. 通常粒化时首先确定模糊概念的基本形式, 然后确定具体的隶属函数A.一般情况下, 模糊粒子P可以代替模糊概念G, 既P可简单描述为:常用的模糊粒子有以下几种基本形式[5]: 三角形, 高斯型, 抛物型. 本文选用三角型模糊粒子, 其隶属函数如下:建立模糊粒子的基本思想主要有: ①模糊粒子能够合理地代表原始数据; ②模糊粒子要有一定的特殊性. 既无论使用那种形式的模糊集来建立模糊粒子, 都要满足上面建立模糊粒子的基本思想. 为了满足上述的两个要求, 找到两者之间的最佳平衡, 可以考虑建立如下关于A的一个函数:其中, MA满足建立模糊粒子的基本思想①, NA满足建立模糊粒子的基本思想②. 当取、时则为满足模糊粒子的基本思想, 只需QA越大越好. MA是模糊集合A的能量值, 表示隶属函数的泛化性; NA表示模糊集合A的语义性度量, supp(A)是模糊集合的支持集.通过最大化指标Q确定细粒度的初始隶属函数参数a,m,b值.由于不同的特征对分类的重要度不同, 所以下一步需要结合分类性能对每个特征的粒化结果分别进行优化处理.设特征模糊粒化后的结果为, mi表示第i个特征包含的隶属函数个数, 并将该结果作为SVM的训练集样本.支持向量机的回归拟合基本思想是寻找一个最优分类面使得所有训练样本离该最优分类面的误差最小[6].不是一般性的, 设含有l个训练样本的训练集样本对为, 其中, 是第i个训练样本的输入列向量, 为对应的输出值.设在高维特征空间中建立的线性回归函数为:其中为非线性映射函数.定义线性不敏感损失函数其中f(x)为回归函数返回的预测值; y为对应的真实值.回归拟合的过程就是解出w, b的过程, 既其中为松弛变量, C为惩罚因子, C越大表示对训练误差大于的样本惩罚越大, 规定了回归函数的误差要求, 越小表示回归函数的误差越小.求解式(8), 并转换为对偶形式:其中, 为核函数.设求式(9)得到的最优解为, 则有其中, Nnsv为支持向量个数.于是, 回归函数为:其中, 只有部分参数不为0, 其对应的样本即为问题中的支持向量.其基本结构如图2所示, 输出是中间节点的线性组合, 每个中间节点对应一个支持向量[7].从上述模型可以看出SVM分类器通过求解式(9)来获得最优分类超平面, 如随着数据规模增大, SVM学习效率迅速下降, 在特定空间泛化能力受到限制. 通过模糊信息粒化方法模型提前对特征空间进行划分, 使其成为为一系列子空间, 求解目标转向为子空间构造SVM分类器. 由此直观上就可降低样本规模, 节省时间复杂度, 更重要的是可降低分类器的复杂性.传统的SVM分类器将整个特征空间用一个连续的分类超平面划分, 而粒度SVM机制将整个特征空间划分为一系列子空间, 目标转向为子空间构造SVM分类器. 如此就可降低样本规模, 节省时间复杂度, 更重要的是可降低分类器的复杂性, 却保证了分类精度, 而且不会发生过学习现象并且提升了分类器的泛化能力. 同时这种学习方法本质上可以并行实现, 从而获得更高的学习效率[8,9]. 其算法流程如下:从算法流程可以看出, 模糊信息粒化主要是对SVM的原始数据进行预处理, 关键在于粒化后的特征空间有效地简化了模糊特征和类别之间的关系, 粒化结果能达到最好的分类性, 从而提高SVM的学习效率.为了验证上述算法的效果本文采取该算法预测上证开盘指数, 首先收集从1991年1月11日到2009年9月12日这段期间的上证指数[10](如图4所示), 预测下5个交易日的变化趋势和变化空间.首先利用模糊粒化模型对原始数据进行信息粒化, 结果如图5所示 . 这里min, M, max分别为模糊粒子的三个参数, 对应的是原始数据变化的最小值、大体平均水平和最大值.由于对min, M, max三个模糊粒子进行回归预测的过程类似, 这里只给出模糊粒子M的运行结果 , 首先将M进行归一化处理, 结果如图6.为了得到比较理想的回归预测效果, 本文采取交叉验证的方法来寻找回归的最佳参数, 交叉验证是用来验证分类器性能的一种统计分析方法, 基本思想是在某种意义下将原始数据进行分组, 一部分作为训练集, 另一部分作为验证集. 其方法是首先用训练集对分类器进行训练, 再利用验证集测试得到的模型, 以得到的分类准确率作为评价分类器的性能指标. 交叉验证首先进行粗略的寻找, 实验结果见图7, 观察粗略寻找结构后再进行精细选择, 实验结果见图8.得到最佳参数C=256, g=0.02209.利用上述参数进行进行训练和预测, 可以得拟合效果图9和误差可视化图10.为了进一步验证基于信息粒化的SVM模型的优势, 我们同时采取传统SVM模型同样对上证开盘指数进行预测, 但是由于训练样本较大,从而导致训练时间过长和效果不佳, 具体实验结果见图11和图12, 从图12可以看出, 传统SVM在大样本情况下, 训练效果不佳.对max和min也进行回归预测, 得到的结果如下表1:本文将粒度计算思想引入SVM中, 用以改进传统SVM分类器的训练速度极大地受到训练集规模的影响、在特定的空间中泛化能力受到限制、应用领域有待于进一步拓展等缺陷, 对上证指数进行了预测. 通过表1可以看出, 5天内上证指数都在我们的预测范围内, 这说明基于信息粒化的支持向量机回归预测方法有较好的预测效果, 该研究成果不仅可以丰富SVM的理论和方法研究, 同时SVM在非平衡数据处理的成功应用也有望进一步拓展SVM的应用领域.1 郎丛妍,须德,李兵.一种基于模糊信息粒化的视频时空显著单元提取方法.电子学报,2007,35(10):2023-2028.2 Zadeh LA. Toward a theory of fuzzy information granula- tion and its centrality in human reasoning and fuzzy logic. Fuzzy Sets and Systems,1997,90(2):111-127.3 Skowron A. Toward intelligent systems: calculi of infor- mation granules. Proc. of International Workshop on Rough Set Theory and Granular Computing (RSTGC-2001), Bulletin of International Rough SetSociety.Japan:[s.n.], 2001.4 修保新,刘忠,张维明,阳东升.基于信息粒化理论的主体间任务分配方法.国防科技大学学报,2007,29(3):71-75.5 侯方国,胡圣武.模糊信息粒化理论在空间信息系统地位的探讨.测绘与空间地理信息,2004,27(3):14-16.6 Chapelle O, Vapnik V, Bousquet O, Mukherjee S. Choosing multiple parameters for support vector machines.Machine Learning,2002,46(1-3).7 Vladimir C, Ma YQ. Practical selection of SVM parameters and noise estimation for SVM regression.Neural Networks, 2004,17(1):113-126.8 Keerthi SS, Lin CJ. Asymptotic behaviors of support vector machines with gaussian kernel. Neural Computation,2003,15 (7):1667-1689.9 Lin HT, Lin CHJ. A study on sigmoid kernels for SVM and the training of non-PSD kernels by SMO-type methods. Taipei: Department of Computer Science and Information Engineering National Tai wan University, 2005. 10 严晓明.基于优化GA属性约简的上证指数预测.福建师范大学学报(自然科学版),2011,27(5):29-33.。

MATLAB 神经网络初始SVM分类与回归

MATLAB 神经网络初始SVM分类与回归
-1.2100 Mean squared error = 0.0102555 (regression) Squared correlation coefficient = -1.#IND (regression) 预测数据 ptesty =
-1.1087
Record Time
toc; Elapsed time is 0.751164 seconds.
[ptesty,tmse] = svmpredict(testy,testx,model);
display( '预测数据' ); r = 9.52768e-05 (regression) Squared correlation coefficient = 0.999184 (regression) 真实数据 testy =
% % 下面再使用 libsvm 工具箱本身带的测试数据 heart_scale 来进行一下测试% 首先载入数据 load heart_scale; data = heart_scale_inst; label = heart_scale_label; % 选取前 200 个数据作为训练集合,后 70 个数据作为测试集合 ind = 200; traindata = data(1:ind,:); trainlabel = label(1:ind,:); testdata = data(ind+1:end,:); testlabel = label(ind+1:end,:); % 利用训练集合建立分类模型 model = svmtrain(trainlabel,traindata,'-s 0 -t 2 -c 1.2 -g 2.8'); % 利用建立的模型看其在训练集合上的分类效果 [ptrain,acctrain] = svmpredict(trainlabel,traindata,model); % 预测测试集合标签 [ptest,acctest] = svmpredict(testlabel,testdata,model);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%% SVM神经网络的信息粒化时序回归预测----上证指数开盘指数变化趋势和变化空间预测%% 清空环境变量function chapter15tic;close all;clear;clc;format compact;%% 原始数据的提取% 载入测试数据上证指数(1990.12.19-2009.08.19)% 数据是一个4579*6的double型的矩阵,每一行表示每一天的上证指数% 6列分别表示当天上证指数的开盘指数,指数最高值,指数最低值,收盘指数,当日交易量,当日交易额.load chapter15_sh.mat;% 提取数据ts = sh_open;time = length(ts);% 画出原始上证指数的每日开盘数figure;plot(ts,'LineWidth',2);title('上证指数的每日开盘数(1990.12.20-2009.08.19)','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('开盘数','FontSize',12);grid on;print -dtiff -r600 original;snapnow;%% 对原始数据进行模糊信息粒化win_num = floor(time/5);tsx = 1:win_num;tsx = tsx';[Low,R,Up]=FIG_D(ts','triangle',win_num);% 模糊信息粒化可视化图figure;hold on;plot(Low,'b+');plot(R,'r*');plot(Up,'gx');hold off;legend('Low','R','Up',2);title('模糊信息粒化可视化图','FontSize',12);xlabel('粒化窗口数目','FontSize',12);ylabel('粒化值','FontSize',12);grid on;print -dtiff -r600 FIGpic;snapnow;%% 利用SVM对Low进行回归预测% 数据预处理,将Low进行归一化处理% mapminmax为matlab自带的映射函数[low,low_ps] = mapminmax(Low);low_ps.ymin = 100;low_ps.ymax = 500;% 对Low进行归一化[low,low_ps] = mapminmax(Low,low_ps);% 画出Low归一化后的图像figure;plot(low,'b+');title('Low归一化后的图像','FontSize',12);xlabel('粒化窗口数目','FontSize',12);ylabel('归一化后的粒化值','FontSize',12);grid on;print -dtiff -r600 lowscale;% 对low进行转置,以符合libsvm工具箱的数据格式要求low = low';snapnow;% 选择回归预测分析中最佳的SVM参数c&g% 首先进行粗略选择[bestmse,bestc,bestg] = SVMcgForRegress(low,tsx,-10,10,-10,10,3,1,1,0.1,1);% 打印粗略选择结果disp('打印粗略选择结果');str = sprintf( 'SVM parameters for Low:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 根据粗略选择的结果图再进行精细选择[bestmse,bestc,bestg] = SVMcgForRegress(low,tsx,-4,8,-10,10,3,0.5,0.5,0.05,1);% 打印精细选择结果disp('打印精细选择结果');str = sprintf( 'SVM parameters for Low:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 训练SVMcmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.1'];low_model = svmtrain(low, tsx, cmd);% 预测[low_predict,low_mse] = svmpredict(low,tsx,low_model);low_predict = mapminmax('reverse',low_predict,low_ps);predict_low = svmpredict(1,win_num+1,low_model);predict_low = mapminmax('reverse',predict_low,low_ps);predict_low%% 对于Low的回归预测结果分析figure;hold on;plot(Low,'b+');plot(low_predict,'r*');legend('original low','predict low',2);title('original vs predict','FontSize',12);xlabel('粒化窗口数目','FontSize',12);ylabel('粒化值','FontSize',12);grid on;print -dtiff -r600 lowresult;figure;error = low_predict - Low';plot(error,'ro');title('误差(predicted data-original data)','FontSize',12);xlabel('粒化窗口数目','FontSize',12);ylabel('误差量','FontSize',12);grid on;print -dtiff -r600 lowresulterror;snapnow;%% 利用SVM对R进行回归预测% 数据预处理,将R进行归一化处理% mapminmax为matlab自带的映射函数[r,r_ps] = mapminmax(R);r_ps.ymin = 100;r_ps.ymax = 500;% 对R进行归一化[r,r_ps] = mapminmax(R,r_ps);% 画出R归一化后的图像figure;plot(r,'r*');title('r归一化后的图像','FontSize',12);grid on;% 对R进行转置,以符合libsvm工具箱的数据格式要求r = r';snapnow;% 选择回归预测分析中最佳的SVM参数c&g% 首先进行粗略选择[bestmse,bestc,bestg] = SVMcgForRegress(r,tsx,-10,10,-10,10,3,1,1,0.1);% 打印粗略选择结果disp('打印粗略选择结果');str = sprintf( 'SVM parameters for R:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 根据粗略选择的结果图再进行精细选择[bestmse,bestc,bestg] = SVMcgForRegress(r,tsx,-4,8,-10,10,3,0.5,0.5,0.05);% 打印精细选择结果disp('打印精细选择结果');str = sprintf( 'SVM parameters for R:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 训练SVMcmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.1'];r_model = svmtrain(r, tsx, cmd);% 预测[r_predict,r_mse] = svmpredict(r,tsx,low_model);r_predict = mapminmax('reverse',r_predict,r_ps);predict_r = svmpredict(1,win_num+1,r_model);predict_r = mapminmax('reverse',predict_r,r_ps);predict_r%% 对于R的回归预测结果分析figure;hold on;plot(R,'b+');plot(r_predict,'r*');legend('original r','predict r',2);title('original vs predict','FontSize',12);grid on;figure;error = r_predict - R';plot(error,'ro');title('误差(predicted data-original data)','FontSize',12);grid on;snapnow;%% 利用SVM对Up进行回归预测% 数据预处理,将up进行归一化处理% mapminmax为matlab自带的映射函数[up,up_ps] = mapminmax(Up);up_ps.ymin = 100;up_ps.ymax = 500;% 对Up进行归一化[up,up_ps] = mapminmax(Up,up_ps);% 画出Up归一化后的图像figure;plot(up,'gx');title('Up归一化后的图像','FontSize',12);grid on;% 对up进行转置,以符合libsvm工具箱的数据格式要求up = up';snapnow;% 选择回归预测分析中最佳的SVM参数c&g% 首先进行粗略选择[bestmse,bestc,bestg] = SVMcgForRegress(up,tsx,-10,10,-10,10,3,1,1,0.5);% 打印粗略选择结果disp('打印粗略选择结果');str = sprintf( 'SVM parameters for Up:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 根据粗略选择的结果图再进行精细选择[bestmse,bestc,bestg] = SVMcgForRegress(up,tsx,-4,8,-10,10,3,0.5,0.5,0.2);% 打印精细选择结果disp('打印精细选择结果');str = sprintf( 'SVM parameters for Up:Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);disp(str);% 训练SVMcmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.1'];up_model = svmtrain(up, tsx, cmd);% 预测[up_predict,up_mse] = svmpredict(up,tsx,up_model);up_predict = mapminmax('reverse',up_predict,up_ps);predict_up = svmpredict(1,win_num+1,up_model);predict_up = mapminmax('reverse',predict_up,up_ps);predict_up%% 对于Up的回归预测结果分析figure;hold on;plot(Up,'b+');plot(up_predict,'r*');legend('original up','predict up',2);title('original vs predict','FontSize',12);grid on;figure;error = up_predict - Up';plot(error,'ro');title('误差(predicted data-original data)','FontSize',12);grid on;toc;snapnow;%% 子函数SVMcgForRegress.mfunction [mse,bestc,bestg] = SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep,flag)% SVMcgForClass% 输入:% train_label:训练集标签.要求与libsvm工具箱中要求一致.% train:训练集.要求与libsvm工具箱中要求一致.% cmin:惩罚参数c的变化范围的最小值(取以2为底的对数后),即c_min = 2^(cmin).默认为-5 % cmax:惩罚参数c的变化范围的最大值(取以2为底的对数后),即c_max = 2^(cmax).默认为5% gmin:参数g的变化范围的最小值(取以2为底的对数后),即g_min = 2^(gmin).默认为-5 % gmax:参数g的变化范围的最小值(取以2为底的对数后),即g_min = 2^(gmax).默认为5 % v:cross validation的参数,即给测试集分为几部分进行cross validation.默认为3% cstep:参数c步进的大小.默认为1% gstep:参数g步进的大小.默认为1% msestep:最后显示MSE图时的步进大小.默认为20% 输出:% bestacc:Cross Validation 过程中的最高分类准确率% bestc:最佳的参数c% bestg:最佳的参数g% about the parameters of SVMcgForRegressif nargin < 11flag = 0;endif nargin < 10msestep = 0.1;endif nargin < 7msestep = 0.1;v = 3;cstep = 1;gstep = 1;endif nargin < 6msestep = 0.1;v = 3;cstep = 1;gstep = 1;gmax = 5;endif nargin < 5msestep = 0.1;v = 3;cstep = 1;gstep = 1;gmax = 5;gmin = -5;endif nargin < 4msestep = 0.1;v = 3;cstep = 1;gstep = 1;gmax = 5;gmin = -5;cmax = 5;endif nargin < 3msestep = 0.1;v = 3;cstep = 1;gstep = 1;gmax = 5;gmin = -5;cmax = 5;cmin = -5;end% X:c Y:g cg:mse[X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);[m,n] = size(X);cg = zeros(m,n);% record accuracy with different c & g,and find the best mse with the smallest cbestc = 0;bestg = 0;mse = 10^10;basenum = 2;for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -c ',num2str( basenum^X(i,j) ),' -g ',num2str( basenum^Y(i,j) ),' -s 3'];cg(i,j) = svmtrain(train_label, train, cmd);if cg(i,j) < msemse = cg(i,j);bestc = basenum^X(i,j);bestg = basenum^Y(i,j);endif ( cg(i,j) == mse && bestc > basenum^X(i,j) )mse = cg(i,j);bestc = basenum^X(i,j);bestg = basenum^Y(i,j);endendend% draw the accuracy with different c & g[cg,ps] = mapminmax(cg,0,1);figure;subplot(1,2,1);[C,h] = contour(X,Y,cg,0:msestep:0.5);clabel(C,h,'FontSize',10,'Color','r');xlabel('log2c','FontSize',12);ylabel('log2g','FontSize',12);title('参数选择结果图(等高线图)','FontSize',12);grid on;subplot(1,2,2);meshc(X,Y,cg);% mesh(X,Y,cg);% surf(X,Y,cg);axis([cmin,cmax,gmin,gmax,0,1]);xlabel('log2c','FontSize',12);ylabel('log2g','FontSize',12);zlabel('MSE','FontSize',12);title('参数选择结果图(3D视图)','FontSize',12);filename = ['c',num2str(bestc),'g',num2str(bestg),num2str(msestep),'.tif']; if flag == 1;print('-dtiff','-r600',filename);end其中,function [low,R,up]=FIG_D(XX,MFkind,win_num)%byLiYangBNUMATH05Email:************************:516667408 % last modified 2009.2.25%modified IG based on Pedry by Keqiang Dong%output%low:low bounds%R:representatives%up:up bounds%input%X:times series waited to be IG%MFkind:the kind of membership function%triangle trapezoid asygauss asyparabola%win_num:number of windows%%if nargin < 3win_num = 10;endif nargin < 2MFkind = 'trapezoid';end[d1,d2] = size(XX);X = sort(XX);switch MFkind% trapezoidcase('trapezoid')if win_num == 1if mod(d2,2) ~= 0m = X( (d2+1)/2 );n = X( (d2+1)/2 );mflag = (d2+1)/2;nflag = (d2+1)/2;elsem = X( d2/2 );n = X( (d2+2)/2 );mflag = d2/2;nflag = (d2+2)/2;endR(1,1) = m;R(2,1) = n;k1 = mflag;k2 = d2 - nflag+1;c1 = ( sum(X(1:k1)) )/k1;c2 = ( sum(X(nflag:d2)) )/k2;low = 2*c1 - m;up = 2*c2 - n;elselow = [];R = [];up = [];k = floor(d2/win_num);for i = 1:(win_num-1)[l,r,u]=FIG_D(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1);low = [low,l];R = [R,r];end[l,r,u] = FIG_D(XX( (1+(win_num-1)*k):d2 ),MFkind,1);low =[low,l];R = [R,r];up = [up,u];end%% trianglecase('triangle')if win_num == 1R = median(X);m = median(X);n = median(X);mflag = floor(d2/2);nflag = ceil(d2/2);k1 = mflag;k2 = d2-nflag+1;c1 = ( sum(X(1:k1)) )/k1;c2 = ( sum(X(nflag:d2)) )/k2;low = 2*c1 - m;up = 2*c2 - n;elselow = [];R = [];up = [];k = floor(d2/win_num);for i = 1:(win_num-1)[l,r,u]=FIG_D(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1);low = [low,l];R = [R,r];up = [up,u];end[l,r,u] = FIG_D(XX( (1+(win_num-1)*k):d2 ),MFkind,1);low =[low,l];R = [R,r];up = [up,u];end%% asygausscase('asygauss') %这个与基于Pedrycz的是一样的,因为高斯型的核函数无法修改if win_num == 1m = median(X);n = median(X);mflag = floor(d2/2);nflag = ceil(d2/2);a_final = 0;Qa_final = 0;for index = 1:( mflag-1 )a = X(index);Qa=0;x = X( 1:(mflag-1) );y = (x<=m).*(exp(-(x-m).^2/a^2) );Qa = sum(y);Qa = Qa/(m-a);if Qa>=Qa_finalQa_final = Qa;a_final = a;endendlow = a_final;b_final = 0;Qb_final = 0;for index = ( nflag+1 ):d2b = X(index);Qb = 0;x = X( (nflag+1):d2 );y = (x>=m).*(exp(-(x-m).^2/b^2) );Qb = sum(y);Qb = Qb/(b-n);if Qb>=Qb_finalQb_final = Qb;b_final = b;endendup = b_final;elselow = [];R = [];up = [];k = floor(d2/win_num);for i = 1:(win_num-1)[l,r,u]=FIG_P(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1);low = [low,l];R = [R,r];up = [up,u];end[l,r,u] = FIG_P(XX( (1+(win_num-1)*k):d2 ),MFkind,1);low =[low,l];R = [R,r];up = [up,u];end%% asyparabolacase('asyparabola')if win_num == 1R = median(X);m = median(X);n = median(X);mflag = floor(d2/2);nflag = ceil(d2/2);a_final = 0;Qa_final = 0;for index = 1:( mflag-1 )a = X(index);Qa=0;x = X( 1:( mflag-1) );y=(x<=m).*(1-(m-x).^2/(m-a)^2);Qa = sum(y);Qa = Qa/(m-a);if Qa>=Qa_finalQa_final = Qa;a_final = a;endendlow = a_final;b_final = 0;Qb_final = 0;for index = ( nflag+1 ):d2b = X(index);Qb = 0;x = X( (nflag+1):d2 );y=(x>=m).*(1-(m-x).^2/(m-b)^2);Qb = sum(y);Qb = Qb/(b-n);if Qb>=Qb_finalQb_final = Qb;b_final = b;endendup = b_final;elselow = [];R = [];up = [];k = floor(d2/win_num);for i = 1:(win_num-1)[l,r,u]=FIG_P(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1);low = [low,l];R = [R,r];up = [up,u];end[l,r,u] = FIG_P(XX( (1+(win_num-1)*k):d2 ),MFkind,1);low =[low,l];R = [R,r];up = [up,u];endend。

相关文档
最新文档