Matlab灰色预测和统计分析

如何利用Matlab读取数据进行统计分析?

假设有我在D盘根目录下有5个txt文本,其文件格式如下:
data
我们需要如何读取这个这样中英文数字混编的数据进行统计分析呢?
假设我们的数据都是以ANSI编码,如果不是,需要进行另存为覆盖保存为这种编码格式。
接下来,老规矩,废话不多说,直接上代码。

  • 编写drop.m函数文件,功能是筛去校选修课数据(院选修课我没见过,故不能臆断)。
function s=drop(s,term_type)
[bool,inx]=ismember('校_任选课',term_type);
if bool
s(inx)=[];
end
  • 编写grade.m函数文件,以zzu绩点计算规则,计算每学期的平均绩点。
function grade=grade(term_credit,term_grade,term_type)
credit=drop(term_credit,term_type);
weight=credit/sum(credit);
grade=str2double(drop(term_grade,term_type));
grade=sum(weight.*grade);
end
  • 编写主函数,作图分析,分析包括简单灰色预测,预测准确性不做评判。
%% 初始化变量。
clc
clear
for i=1:5

str_i=num2str(i);   
filename = ['D:\第' str_i '学期.txt'];
delimiter = ',';

%% 每个文本行的格式字符串:
%   列1: 文本 (%s)
%   列2: 文本 (%s)
%   列3: 双精度值 (%f)
%   列4: 文本 (%s)
%   列5: 双精度值 (%f)
% 有关详细信息,请参阅 TEXTSCAN 文档。
formatSpec = '%s%s%f%s%s%[^\n\r]';

%% 打开文本文件。
fileID = fopen(filename,'r');

%% 根据格式字符串读取数据列。
% 如果其他文件出现错误,请尝试通过导入工具重新生成代码。
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter,  'ReturnOnError', false);

%% 关闭文本文件。
fclose(fileID);


%% 将导入的数组分配给列变量名称
eval(['term' str_i '_sub' '=' 'dataArray{:, 1}' ';']);
eval(['term',str_i,'_type' '=' 'dataArray{:, 2}' ';'] );
eval(['term',str_i,'_credit' '=' 'dataArray{:, 3}' ';']);
eval(['term',str_i,'_score' '=' 'dataArray{:, 4}' ';'] );
eval(['term',str_i,'_grade' '=' 'dataArray{:, 5}' ';'] );

%% 清除临时变量
clearvars filename delimiter formatSpec fileID dataArray ans;
end
grade_1=grade(term1_credit,term1_grade,term1_type);
grade_2=grade(term2_credit,term2_grade,term2_type);
grade_3=grade(term3_credit,term3_grade,term3_type);
grade_4=grade(term4_credit,term4_grade,term4_type);
grade_5=grade(term5_credit,term5_grade,term5_type);
grade=[grade_1,grade_2,grade_3,grade_4,grade_5]
term=1:5
ave_grade=(grade_1+grade_2+grade_3+grade_4+grade_5)/5;

% 创建 axes
axes1 = axes('Parent',figure,...
    'XTickLabel',{'第1学期','第2学期','第3学期','第4学期','第5学期'},...
    'XTick',[1 2 3 4 5]);
box(axes1,'on');
hold(axes1,'all');

% 创建 plot

plot(term,grade,'-mo',...
                'LineWidth',2,...
                'MarkerEdgeColor','k',...
                'MarkerFaceColor',[.49 1 .63],...
                'MarkerSize',12)%plot修饰命令
plot(1:0.01:5,ave_grade)
for i=1:5
text(term(i),grade(i)+0.1,num2str(grade(i)))
end


% 创建 xlabel
xlabel('学期');

% 创建 title
title(['学期绩点变化(平均值:' num2str(ave_grade) ')']);

% 创建 ylabel
ylabel({'绩点'});
hold off;
%% 
figure
credit2=drop(term2_credit,term2_type);
sub2=drop(term2_sub,term2_type);
explode=zeros(1,length(credit2));
explode(5)=1;
pie3(credit2,explode,sub2)
title('第二学期学科学分分布(学科重要性)');
%%

score1=str2double(drop(term1_score,term1_type))
sub1=drop(term1_sub,term1_type)

% 创建 figure
%figure;

% 创建 axes
axes1 = axes('Parent',figure,...
    'XTickLabel',sub1,...
    'XTick',[1 2 3 4 5 6 7 8],'FontSize',8);
box(axes1,'on');
hold(axes1,'all');

% 创建 title
title('第一学期各科成绩');

% 创建 xlabel
xlabel('科目');

% 创建 ylabel
ylabel('成绩');
for i=1:length(score1)
text(i,score1(i)+1,num2str(score1(i)))
end
% 创建 bar
bar(score1,'FaceColor',[0 0 0.5625],'BaseValue',60);
%% 灰色预测
figure
x0=grade;
m=1;
n=length(x0);%求x0的长度
x1=zeros(1,n);%生成与x0等长度的零向量
x1(1)=x0(1);%将x0首位赋值给x1
for i=2:n        %计算累加序列 x1    
    x1(i)=x1(i-1)+x0(i); %x1为x0的累加序列
end
i=2:n;     %对原始数列平行移位并赋给y 
y(i-1)=x0(i);
y=y' %将 y 变成列向量 
i=1:n-1;   %计算数据矩阵 B 的第一列数据
c(i)=-0.5*(x1(i)+x1(i+1));  %两个数平均值取负数,总感觉饶了一大圈
B=[c' ones(n-1,1)];%构造矩阵 B ,转置后找个1伴随
au=inv(B'*B)*B'*y;%计算参数 au 矩阵 
i=1:n+1+m;       %计算预测累加数列的值 
ago(i)=(x0(1)-au(2)/au(1))*exp(-au(1)*(i-1))+ au(2)/au(1); 
yc(1)=ago(1);
i=1:n-1;         %还原数列的值 
yc(i+1)=ago(i+1)-ago(i); 
i=2:n;
error(i)=yc(i)-x0(i);  %计算残差值 yc(1)=ago(1);
i=1:n-1+m;           %修正的还原数列的值 ,我怎么感觉没修正的样子
yc(i+1)=ago(i+1)-ago(i);
c=std(error)/std(x0);  %计算后验差比,也就是残差标准差和原数值标准差的比值
p=0; 
for i=2:n  
    if(abs(error(i)-mean(error))<0.6745*std(x0))      
        p=p+1; 
    end
end%看残差中有几个数值和残差均值的相差不大
p=p/(n-1);%p分配到每个参与的残差上,即为小误差概率的值
w1=min(abs(error)); 
w2=max(abs(error)); %计算残差的最大最小位
i=1:n;                %计算关联度 w
w(i)=(w1+0.5*w2)./(abs(error(i))+0.5*w2);
w=sum(w)/(n-1);

au             %输出参数 a,u 的值
x0            %输出原始序列值
ago   %输出累加数列 ago 的值          
yc              %输出预测的值 
error            %输出残差的值
c     %输出后验差比的值
p    %输出小误差概率的值
w    %输出关联度 w



plot(1:n,x0,'-.r+',1:m+n,yc,'--k*'); 
xlabel('学期');
ylabel('绩点');
title(['学期绩点灰色预测(预测得下一学期绩点为' num2str(yc(6)) ')']);              
legend(' 实测值','预测值'); 

  • 结果如下:
    绩点变化
    第一学期各科成绩
    第二学期学分分布
    学期绩点灰色预测图

也没有其他要说的,强调一下eval函数的妙用,可以自动命名变量并进行赋值。另外,除了学分是纯的数字以外,其他列的数据或多或少都掺杂着两种以上的数据类型,因此都当做字符串的格式读入。之后再根据需要进行转化处理。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Matlab关于人工神经网络在预测中的应用的论文二-人工神经网络模型在研究生招生数量预测中的应用.pdf 四、灰色人工神经网络人口总量预测模型及应用 摘要:针对单一指标进行人口总量预测精度不高的问题,基于灰色系统理论和人工神经网络理论,用1990 年至2004 年中国人口总量序列建立并训练一个多指标的灰色人工神经网络人口总量预测模型。对2005 年至2007 年的人口总量进行检验性预测,结果表明灰色人工神经网络模型大大提高了预测精度。 关键词:人口总量;灰色系统;BP 人工神经网络;灰色人工神经网络模型 引言: 本文从影响人口增长的诸多因素中筛选出6 个主要因素,结合灰色系统思想与神经网络的优点建立了一个灰色人工神经网络(Grey Artificial Neural Network,GANN)预测模型,对每一个指标分别用GM(1,1)模型选择最佳的维数进行预测,再利用神经网络非线性映射的特性把这6 个指标进行非线性组合得到人口总量的预测结果。该模型充分利用灰色系统弱化数据的随机性及其动态性和神经网络非线性映射的特性,发挥两者的优势,从而进一步提高预测精度。 中间内容省略~ 结语: 由于传统遗传算法聚类算法本身的优点:在解决聚类问题上速度快、准确率高,加上免疫网络分类算法可以进行非监督学习,确定聚类数及聚类点,在实际聚类应用中有更广阔的适用性;在这种独特的聚类算法的基础上,结合粗糙集理论构建了一种图像分割算法;同时,通过实验证明该方法不但比传统的FCM 算法聚类速度快,分割效果好,而且比文献[2]的分割准确度还要高。由于该方法有在聚类上的无教师监督的独特优点,并且通过对人脑MR 图聚类和分割的两个实验,证明了该分割算法比以往分割算法在具体应用上都有一定的提高。 灰色人工神经网络人口总量预测模型及应用.pdf 五、人工神经网络模型在研究生招生数量预测中的应用 摘要:研究生招生数量的确定涉国家政策、社会就业、人才需求、专业分布与需求等诸多因素,这些影响因素往往无法量化,而且各个影响因素之间关系错综复杂,简单的线性模型预测未来招生数量往往难以实现。尝试采用人工神经网络模型,针对历年招生数量原始数据信息零散、隐含影响因素过多、诸多影响因素难以确定性描述等问题,通过对黑龙江省历年研究生招生数量进行系统分析,建立了人工神经网络预测模型,并对未来3年的招生数量进行了预测预测结果较好,为该方面研究提供了新的研究思路与研究方法。 关键词:黑龙江省;研究生招生;预测;人工神经网络模型 引言: 关于研究生招生数量的确定,涉及诸多因素,例如国家政策、社会就业、人才需求、专业分布与需求等等。这些影响因素往往无法量化,很难找出定量化的因素来进行分析,而这些因素又确确实实在很大程度上影响着研究生招生的数量及其分布。以往分析预测方法主要是确定性数学模型和随机统计方法,例如有限单元法、有限差分法、灰色理论建模、回归分析、谐波分析、时间序列分析、概率统计法等。这些方法多以线性理论为基础,考虑问题偏于简单化,导致预测精度不高。 本论文结合黑龙江省1981年—2004年的研究生招生规模,针对历年招生数量原始数据信息零散、隐含影响因素过多、诸多影响因素难以确定性描述等问题,探讨应用一种改进的BP网络模型对未来3年黑龙江省研究生招生规模进行预测,为该方面研究提供新的研究思路与研究模式,并渴望为用人单位、科研院校提供制定长远发展与建设规划提供参考。 中间内容省略~ 结语: 采用人工神经网络模型可以有效的处理黑龙江省研究生数量中涉及的人为、政策等随机因素、难以量化等因素的干扰,拟合精度非常高,预测精度也相对较高,为未来研究生招生规模提供科学理论依据,为该方面研究提供新的研究方法与研究思路。 人工神经网络模型在研究生招生数量预测中的应用.pdf 六、基于RBF人工神经网络模型预测棉花耗水量 摘要:利用MATLAB工具箱,以平均气温、日照时数、平均风速为输入变量,建立了新疆石河子地区棉花耗水量的RBF人工神经网络预测系统,通过2008年实测数据的检验表明,此预测系统网络模型的绝对误差最大为0.0967mm/d、最小为0.0025mm/d、平均为0.0419mm/d,相对误差最大为2.6491%、最小为0.0341%、平均为0.8780%。可见,网络模型预测的准确度较高,较以往的线性模型更合理,并且此网络训练花费的时间仅需0.0780s,具有一定的实用价值。 关键词:预测;人工神经网络;径向基函数;棉花耗水量 引言: 计算机人工神经网络是20世纪80年代兴起的非线性科学,其在人工智能、自动控制和模式识别等领域取得了令人瞩目的成果。将神经网络应用于非线性系统的建模和预测,可以有效地描述问题本身具有的不确定.多输入等复杂非线性特性[5]。笔者以新疆石河子棉区为例,建立了基于RBF人工神经网络的作物耗水量预测模型,并通过田间实测资料对模型进行了检验。 中间内容省略~ 结语: (1)神经网络模型是用一系列的线性模型组合来逼近某一非线性关系,因此较以往的线性模型更合理。此网络模型参数是在一定自然条件和农田管理水平下试验获得的,所以有一定的适用范围。神经网络模型中的参数没有具体的物理意义,不能反映出任何物理关系,这是此类模型的主要局限性。 基于RBF人工神经网络模型预测棉花耗水量.pdf

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陆嵩

有打赏才有动力,你懂的。

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

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

打赏作者

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

抵扣说明:

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

余额充值