matlab坐标求函数表达式,Matlab---BP神经⽹络(获取数学表
达式)
前⾔
源代码
数据预处理分析
1 相关性分析
2 聚类分析
3 随机获取训练数据和预测数据集
4 对数据进⾏归⼀化
BP神经⽹络
1 BP神经⽹络结构本例
2 神经⽹络训练后权值和阈值查看
3 神经⽹络训练完输出与输⼊关系式
0 前⾔
训练数据下载:
data.mat
1. 源代码
【main.m】
%% 清空环境变量
clc
clear
%% 从Excel导⼊变量
load data;
%% 相关性分析
R = corrcoef(tempData);
figure;
ss = size(tempData,2);
%热图,将相关性可视化出来
imagesc(R);
set(gca,'xtick',1:ss);
matlab定义函数表达式set(gca,'ytick',1:ss);
set(gca,'xticklabel',variables);
set(gca,'yticklabel',variables);
axis([0 ss+1 0 ss+1]);
grid;
colorbar;
%% 获取BP神经⽹络训练数据
%通过聚类分析得到训练数据
allData = tempKmean(tempData,variables);
[m0,n0] = size(allData)
input = allData(:,1:(end-1));
output = allData(:,end)'; %% 随机选取s组训练数据,以及t组预测数据(s+t < 25000) s = m0-(m0/20); t = (m0)/20; k =
rand(1,s+t); %重新得到向量k的有序(从⼩到⼤排列)向量m,并得到对应的下标向量n [m,n]=sort(k); input_train = input(n(1:s),:)'; output_train = output(n(1:s));
input_test = input(n(s+1:s+t),:)'; output_test = output(n(s+1:s+t)); %% 训练数据归⼀化 [inputn,inputps] =
mapminmax(input_train); [outputn,outputps] = mapminmax(output_train); %% BP⽹络训练 %初始化⽹络结构
net=newff(inputn,outputn,6); ainParam.epochs=1000; ainParam.lr=0.1; al=0.00004; %⽹络训练net=train(net,inputn,outputn); %% ⽤训练好的BP神经⽹络预测函数输出 %预测数据归⼀化
inputn_test=mapminmax('apply',input_test,inputps);
%预测输⼊预测
Y = sim(net,inputn_test);
figure;
plot(Y);
title('BP神经⽹络预测输出','FontName','Times New Roman','FontWeight','Bold','FontSize',16)
%% 输出结果反归⼀化
BPoutput = mapminmax('reverse',Y',outputps)'; figure; plot(BPoutput); title('输出结果反归⼀化','FontName','Times New
Roman','FontWeight','Bold','FontSize',16);
%% ⽹络预测函数
% tansig数学表达式:a = tansig(n) = 2./(1+exp(-2*n))-1
% purlin数学表达式:a = purelin(n) = n
%获取权值和阈值
w1 = net.iw{1,1} %输⼊层到隐层的权值
b1 = net.b{1,1} %输⼊层到隐层的阈值
w2 = net.lw{2,1} %隐层到输出层的权值
b2 = net.b{2,1} %隐层到输出层的阈值
%预测输出 temp为两⾏四列临时变量如393 5.6 0.39 111.4
in = [393 5.6 0.39 111.4]
temp = [0 0;0 0;0 0;0 0]
temp(:,2) = in';
temp1 = mapminmax('apply',temp,inputps);
inputData = temp1(:,2);
%计算预测值
%隐含层的值
hidden = tansig(w1*inputData + b1)
%输出层的值
out = purelin(w2*hidden + b2);
%反归⼀化得到预测值
out = mapminmax('reverse',out,outputps)
【tempKmean.m】
function allData = tempKmean(tempData,variables)
%%
%KMeans算法的基本思想是初始随机给定K个簇中⼼,按照最邻近原则把待分类样本点分到各个簇。
%然后按平均法重新计算各个簇的质⼼,从⽽确定新的簇⼼。⼀直迭代,直到簇⼼的移动距离⼩于某个给定的值。%% 获取聚类原始数据
X = tempData(:,(end-1):end);
%% 聚类分析,蓝⾊为BP神经⽹络训练数据
opts = statset('Display','final');
%调⽤Kmeans函数
%X N*P的数据矩阵
%Idx N*1的向量,存储的是每个点的聚类标号
%Ctrs K*P的矩阵,存储的是K个聚类质⼼位置
%SumD 1*K的和向量,存储的是类间所有点与该类质⼼点距离之和
%D N*K的矩阵,存储的是每个点与所有质⼼的距离;
%Replicates ,聚类的重复次数
%15 为聚类重复次数
[Idx,Ctrs,SumD,D] = kmeans(X,2,'Replicates',15,'Options',opts);
%打印Ctrs SumD的值
Ctrs
SumD
%% 获取神经⽹络训练数据
test1Data = tempData(Idx==1,:);
test2Data = tempData(Idx==2,:);
[m1,n1] = size(test1Data)
[m2,n2] = size(test2Data)
I = find(test1Data(:,end-1) >= 600);
N = length(I)
if(N >= 12)
if(m1 < 100)
allData = test2Data;
%画出聚类为1的点。X(Idx==1,1),为第⼀类的样本的第⼀个坐标;X(Idx==1,2)为第⼆类的样本的第⼆个坐标plot(X(Idx==1,1),X(Idx==1,2),'b.','MarkerSize',12);
hold on;
plot(X(Idx==2,1),X(Idx==2,2),'r.','MarkerSize',12);
hold on;
xlabel(variables(end-1),'FontName','Times New Roman','FontSize',14)
ylabel(variables(end),'FontName','Times New Roman','FontSize',14)
%绘出聚类中⼼点,kx表⽰是圆形
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',12,'LineWidth',4)
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',12,'LineWidth',4)
legend('*⾮经济航速训练数据*','*经济航速训练数据*','质⼼(Centroids)','Location','NW');
title('聚类分析','FontName','Times New Roman','FontWeight','Bold','FontSize',10);
box off;
else
%训练数据太多了,也包含了⾮常⼤的油耗量
allData = test1Data;
%画出聚类为1的点。X(Idx==1,1),为第⼀类的样本的第⼀个坐标;X(Idx==1,2)为第⼆类的样本的第⼆个坐标plot(X(Idx==1,1),X(Idx==1,2),'r.','MarkerSize',12);
hold on;
plot(X(Idx==2,1),X(Idx==2,2),'b.','MarkerSize',12);
hold on;
xlabel(variables(end-1),'FontName','Times New Roman','FontSize',14)
ylabel(variables(end),'FontName','Times New Roman','FontSize',14)
%绘出聚类中⼼点,kx表⽰是圆形
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',12,'LineWidth',4)
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',12,'LineWidth',4)
legend('$经济航速训练数据$','$⾮经济航速训练数据$','质⼼(Centroids)','Location','NW');
title('聚类分析','FontName','Times New Roman','FontWeight','Bold','FontSize',10);
box off;
end
else
allData = test1Data;
%画出聚类为1的点。X(Idx==1,1),为第⼀类的样本的第⼀个坐标;X(Idx==1,2)为第⼆类的样本的第⼆个坐标plot(X(Idx==1,1),X(Idx==1,2),'r.','MarkerSize',12);
hold on;
plot(X(Idx==2,1),X(Idx==2,2),'b.','MarkerSize',12);
hold on;
xlabel(variables(end-1),'FontName','Times New Roman','FontSize',14)
ylabel(variables(end),'FontName','Times New Roman','FontSize',14)
%绘出聚类中⼼点,kx表⽰是圆形
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',12,'LineWidth',4)
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',12,'LineWidth',4)
legend('#经济航速训练数据#','#⾮经济航速训练数据#','质⼼(Centroids)','Location','NW');
title('聚类分析','FontName','Times New Roman','FontWeight','Bold','FontSize',10);
box off;
end
2. 数据预处理分析
2.1 相关性分析
2.2 聚类分析
为bp神经⽹络训练进⾏数据聚类,出航速⾼,油耗低的数据,作为神经⽹络的训练数据。
2.3 随机获取训练数据和预测数据集
s = m0-(m0/20);
t = (m0)/20;
k = rand(1,s+t);
%重新得到向量k的有序(从⼩到⼤排列)向量m,并得到对应的下标向量n
[m,n]=sort(k);
input_train = input(n(1:s),:)'; output_train = output(n(1:s)); input_test = input(n(s+1:s+t),:)';
output_test = output(n(s+1:s+t));
2.4 对数据进⾏归⼀化
%% 训练数据归⼀化
[inputn,inputps] = mapminmax(input_train);
[outputn,outputps] = mapminmax(output_train);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论