clc
clear
close all
%%
a=load('walk1.txt')%读取数据 % xlsread(‘ ‘);读取execl文件
data=a(1:500,5)%样本数据和者闹测试数据
order=5%输入数据个数
snum=200%训练样本数
step=3%预测步数
input=data(1:snum)
output=data(1+order+step:snum+order+step)
delay=200%训练样本与测试样本间时延
input1=data(1+delay:snum+delay)
output1=date(1+order+delay+step:snum+order+delay+step)
input_train=zeros(snum,order)input_test=zeros(snum,order)
for i=1:snum
input_train(i,:)=data(i:i+order-1)
input_test(i,:)=data(i+delay:i+delay+order-1)
end
%% RBF神经网络预测
%% 网络建立和训练
net=newrb(input_train',output',0.001,100,300,25)
% net=newrbe(input_train',output',100)
% net=newgrnn(input_train',output'渗嫌没,10)
%% 网络验证
ty=sim(net,input_train')
errR=abs(output-ty')
ty1=sim(net,input_test')
errR1=abs(output1-ty1')
figure
plot(1:snum,output1,'r*-')
hold on
plot(1:snum,ty1','kx-')
title('丛纳三步RBF')
xlabel('数据序号')
ylabel('数据值')
legend('实际值','预测值')
figure
subplot(2,1,1)
stem(1:snum,errR1,'r*')
title('三步RBF')
xlabel('数据序号')
ylabel('绝对误差值')
rbfmean = mean(errR1)
subplot(2,1,2)
stem(1:snum,
abs(errR1./output1),'r*')
title('三步RBF')
xlabel('数据序号')
ylabel('绝对误差率')
rbfpmean = mean(abs(errR1./output1))*100%%
自己对着改一下。
clc
clearall
closeall
%%----BuildatrainingsetofasimilarversionofXOR
c_1=[00]
c_2=[11]
c_3=[01]
c_4=[10]
n_L1=20%numberoflabel1
n_L2=20%numberoflabel2
A=zeros(n_L1*2,3)
A(:,3)=1
B=zeros(n_L2*2,3)
B(:,3)=0
%createrandompoints
fori=1:n_L1
A(i,1:2)=c_1+rand(1,2)/2
A(i+n_L1,1:2)=c_2+rand(1,2)/2
end
fori=1:n_L2
B(i,1:2)=c_3+rand(1,2)/2
B(i+n_L2,1:2)=c_4+rand(1,2)/2
end
%showpoints
scatter(A(:,1),A(:,2),[],'r')
holdon
scatter(B(:,1),B(:,2),[],'g')
X=[AB]
data=X(:,1:2)
label=X(:,3)
%%Usingkmeanstofindcintervector
n_center_vec=10
rng(1)
[idx,C]=kmeans(data,n_center_vec)
holdon
scatter(C(:,1),C(:,2),'b','LineWidth',2)
%%Calulatesigma
n_data=size(X,1)
%calculateK
K=zeros(n_center_vec,1)
fori=1:n_center_vec
K(i)=numel(find(idx==i))
end
%UsingknnsearchtofindKnearestneighborpointsforeachcentervector
%thencalucatesigma
sigma=zeros(n_center_vec,1)
fori=1:n_center_vec
[n,d]=knnsearch(data,C(i,:),'k',K(i))
L2=(bsxfun(@minus,data(n,:),C(i,:)).^2)
L2=sum(L2(:))
sigma(i)=sqrt(1/K(i)*L2)
end
%%Calutateweights
%kernelmatrix
k_mat=zeros(n_data,n_center_vec)
fori=1:n_center_vec
r=bsxfun(@minus,data,C(i,:)).^2
r=sum(r,2)
k_mat(:,i)=exp((-r.^2)/(2*sigma(i)^2))
end
W=pinv(k_mat'*k_mat)*k_mat'*label
y=k_mat*W
%y(y>=0.5)=1
%y(y<0.5)=0
%%trainingfunctionandpredictfunction
[W1,sigma1,C1]=RBF_training(data,label,10)
y1=RBF_predict(data,W,sigma,C1)
[W2,sigma2,C2]=lazyRBF_training(data,label,2)
y2=RBF_predict(data,W2,sigma2,C2)
扩展资料
matlab的特点
1、具有完备的图形处理滚闷渣功能,实现罩伏计算结果和编程的可视化;
2、友好的用户界面及接近大悄数学表达式的自然化语言,使学者易于学习和掌握;
3、功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
参考资料来源:百度百科—MATLAB
给你个RBF预测的运橡程序,你根据程序自己改下就可以了clear all
x=[]
T=[]
x(1)=0.22
k=4
n=900
N=400
% 产生logistic序列,前100个去除
for i=1:n
x(i+1)=k*x(i)*(1-x(i))
end
X(1:800)=x(101:900)
% 用X的前400个数据训练RBF神经网络
for j=1:N
P(1:8,j)=X(j:j+7)'
end
T=X(9:408) % 目标数据
net1=newrb(P,T,0.001,1) % 训练RBF神经网络
N1=300
% 选取X的400—700个数据进行RBF神经网络检验
for j=1:N1
P1(1:8,j)=X(j+400:j+7+400)'
end
T1=X(409:708) % 目标数据
%仿真验证
a=sim(net1,P1) % 对检验数据的预测结果 %sim是仿真该网络的意思
e = T1-a % 一步预测误差
mse = sqrt(e*e')/size(e,2)% 均方误差 Mean Square Error
%画图描绘仿真结果
figure(2)
plot(X(1:200))
axis([1 200 -0.1 1.1])
title('logistic混沌序列')
xlabel('t')
ylabel('magnitude')
figure(3)
plot(1:300,T1,'b',1:300,a,'r*')
h = legend('混沌序列','RBF神经网络一步预测值')
axis([1 300 -0.5 1.5])
hold on
title('混沌序列与一步预测值')
xlabel('t')
ylabel('magnitude')
figure(4)
plot(e,'b-')
axis([1 300 -0.02 0.02])
title('预测误差e')
xlabel('t')
ylabel('magnitude')
至于你要K均值聚类的话:
%一个最基本的rbf算法,学习算猛悄锋法采用伪逆函数
%
%
%
%
%
%
%
%
%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
close all
clc
%定义用到的变量
r=1 %领域半径,人为设定
nodenum=0 %隐层节点数,由实际数据与r共同决定
inputdata=[]%输入矩阵
inputpath=' ' %存储原始输入数据的路径
nodeout=[] %隐层输入阵
netout=[] %网络输出阵
weight=[] %输出权值阵,也是唯一的权值
inputnum=0 %输入维数
outputnum=0 %输出维数
center=[] %聚类中心
numtrain=0 %学习样本的个枝晌数
row=0 %学习样本的个数
simrow=0%全部样本的个数
numtest=0 %泛化样本的个数
strength=1 %归一化处理时用到的范围,一般为1
yout=[] %输出的期望值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%变量的初始化
r=1
inputnum=9
inputpath='e:\yinjia\data\yearsun.dat'
outputnum=1
simrow=290
source=load(inputpath)
%保存一个source的副本,为反归一化做准备
copysource=source
%归一化处理
source=normalize(source,strength)
yout=source(inputnum+1:simrow+inputnum)
inputdata=phasespace(source,inputnum,simrow)
row=250
numtrain=row
numtest=simrow-row
%把第一人输入变量定为初始的中心
%中心的位置在初始化后,不会再变化
center=inputdata(1,:)'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%开始进行简单的聚类
%其基本思想是:给定一个固定的邻域半径,在中心点邻域半径内的点就算作
%是该邻域的点;半径外的点,取第一个不是半径内的点做为新的中心点
%设计一个函数iscenter,来计算一个点是否为中心点。
for step=2:row
if iscenter(inputdata(step,:)',center,r)
center=[center inputdata(step,:)']
nodenum=nodenum+1
end % this end for iscenter(inputdata(step,:))
end % this end for step=2:row
%聚类完成.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%准备进行神经网络的前向计算
[centerrow nodenum]=size(center)
%网络的初始化
nodeout=zeros(row,nodenum)
netout=zeros(row,outputnum)
weight=zeros(nodenum,outputnum)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%网络的计算
for step=1:row
for step1=1:nodenum
nodeout(step,step1)=GaussRadialBasisFunction(inputdata(step,:)',...
center(:,step1),r)
end % this end for step1=1:nodenum
end %this end for step=1:row
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%用伪逆来计算权值
weight=pinv(nodeout)*yout(1:250)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%进行仿真
for step=1:simrow
for step1=1:nodenum
nodeout(step,step1)=GaussRadialBasisFunction(inputdata(step,:)',...
center(:,step1),r)
end % this end for step1=1:nodenum
end %this end for step=1:simrow
mydata=nodeout*weight
%反归一化
mydata=unnomal(mydata,copysource,strength)
rldata=copysource(inputnum+1:inputnum+simrow)
plot(rldata)hold onplot(mydata,'r')
%计算一个评价函数
rmsetest=(norm(rldata(numtrain+1:simrow)-mydata(numtrain+1:simrow))...
^2/(numtest-1))^0.5
还有几段小程序,你应该可以自己编写出来的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)