文档库 最新最全的文档下载
当前位置:文档库 › 在Matlab中探索基因表达数据

在Matlab中探索基因表达数据

在Matlab中探索基因表达数据
在Matlab中探索基因表达数据

在Matlab中探索基因表达数据

本文利用Matlab及其生物信息学工具箱提供的函数识别差异表达基因并利用基因本体论确定差异表达基因的生物学功能。

引言

包含寡核苷酸或cDNA探针的微阵列可用来比较基因组尺度的基因表达谱,微阵列试验的重要目的在于确定不同条件下,如两种不同的肿瘤类型,是否存在统计显著的基因表达量的变化进而确定差异表达基因的生物学功能。

本文利用一个公共数据集来说明计算过程,这个数据集包括42个胚胎中枢神经系统肿瘤组织(CNS, Pomeroy et al. 2002),样本采用Affymetrix 公司出品的HuGeneFL基因芯片进行杂交。

这些CNS数据集(CEL文件)可在CNS实验网站获得,42个肿瘤样本包括10个10 个髓母细胞瘤, 10个横纹肌样脑膜瘤, 10个胶质瘤, 8个幕上原始神经外胚层肿瘤和4个正常人小脑,CNS原始数据集用鲁棒多芯片平均(RMA)和GC鲁棒多芯片平均(GCRMA)进行了预处理。可以采用t检验和假发现率(FDR)来检测不同肿瘤类型间差异表达的基因,还可以探索与显著上跳基因相关的基因本体论术语。

载入基因表达数据

用Load命令加载MAT文件cnsexpressiondata包含三个DataMatrix对象,expr_cns_rma, expr_cns_gcrma_mle, and expr_cns_gcrma_eb,分别储存用RMA和GCRMA(MLE和EB)预处理的基因表达值。

load cnsexpressiondata

在每个DataMatrix对象中,每行对应一个HuGeneFl芯片的探针集,每列对应于一个样本,行名是探针集的ID而列名为样本名,本文用expr_cns_gcrma_eb示例,当然也可以用其他对象。

调用get命令获取DataMatrix对象的特征。

get(expr_cns_gcrma_eb)

Name: 'CNS gene expression data'

RowNames: {7129x1 cell}

ColNames: {1x42 cell}

NRows: 7129

NCols: 42

NDims: 2

ElementClass: 'single'

确定DataMatrix对象expr_cns_gcrma_eb中的基因和样本的数目。

[nGenes, nSamples] = size(expr_cns_gcrma_eb)

nGenes =

7129

nSamples =

42

可以用基因符号来代替探针集的ID用于标记基因表达值,HuGeneFl芯片的基因符号在一个包含Java哈希表的MAT文件中。

load HuGeneFL_genesymbol_hashtable;

为hu6800genesymbol_hashtable变量创建一个基因表达值的基因符号的cell矩阵。

huGenes = cell(nGenes, 1);

for i =1:nGenes

huGenes{i} = hu6800genesymbol_hashtable.get(expr_cns_gcrma_eb.RowNames{i});

end

用DataMatrix的rownames方法将exprs_cns_gcrma_eb中的行名设成基因符号。

expr_cns_gcrma_eb = rownames(expr_cns_gcrma_eb, ':', huGenes);

基因表达数据的过滤

首先除去没有基因符号的表达数据,如标成'---'的空符号。

expr_cns_gcrma_eb('---', :) = [];

在这个研究中很多基因没有表达或在样本间变化很小,这些基因需要用非特异性过滤除去。用genelowvalfilter函数滤除绝对表达量值很低的基因。

[mask, expr_cns_gcrma_eb] = genelowvalfilter(expr_cns_gcrma_eb);

用genevarfilter函数滤除样本间方差很小的基因。

[mask, expr_cns_gcrma_eb] = genevarfilter(expr_cns_gcrma_eb);

确定过滤以后的基因数目。

nGenes = expr_cns_gcrma_eb.NRows

nGenes =

5758

识别差异基因表达

现在可以比较一下CNS髓母细胞瘤(MD)和非神经源恶性胶质瘤(Mglio)之间基因表达值的差异了。

从42个样本中提取10个MD和10个Mglio样本数据。

MDs = strncmp(expr_cns_gcrma_eb.ColNames,'Brain_MD', 8);

Mglios = strncmp(expr_cns_gcrma_eb.ColNames,'Brain_MGlio', 11);

MDData = expr_cns_gcrma_eb(:, MDs);

get(MDData)

Name: ''

RowNames: {5758x1 cell}

ColNames: {1x10 cell}

NRows: 5758

NCols: 10

NDims: 2

ElementClass: 'single'

MglioData = expr_cns_gcrma_eb(:, Mglios);

get(MglioData)

Name: ''

RowNames: {5758x1 cell}

ColNames: {1x10 cell}

NRows: 5758

NCols: 10

NDims: 2

ElementClass: 'single'

通常t检验是检测两组变量之间显著性差异的标准统计检验,对每个基因执行t检验以识别MD样本和Mglio样本基因表达值的显著性差异,可以通过t得分的正态分位图和t得分及p 值的直方图来研究检验结果。

[pvalues, tscores] = mattest(MDData, MglioData,...

'Showhist', true', 'Showplot', true);

在所有的检验情形下都存在两类误差,当一个非差异表达的基因被标记为差异表达的基因时产生假阳性,而一个差异表达基因未能识别出来时产生假阴性,进行多重假设检验时,即用基因表达数据对上千个基因同时检验员假设时,每个检验都存在其特殊的假阳性率,或加发现率(FDR),FDR定义为假阳性基因数与总阳性数的期望之比(Storey et al., 2003)。Storey-Tibshirani例程不仅计算FDR,还得出检验的q值,代表检验的最小FDR,因为FDR的估计依赖于多重检验的真实的空分布,这是未知的,通过交换基因表达数据矩阵的列的替换方法可用来估计真实的空分布(Storey et al., 2003, Dudoit et al., 2003),鉴于样本数量,考虑所有的替换是不可行的通常在大样本下只考虑一个随机子集,本文利用统计工具箱中的nchoosek函数找出所有可能的替换数。

all_possible_perms = nchoosek(1:MDData.NCols+MglioData.NCols, MDData.NCols);

size(all_possible_perms, 1)

ans =

184756

调用mattest的PERMUTE选项进行替换的t检验,通过对基因表达数据矩阵MDData和MglioData的列进行10,000次替换来算出p值。(Dudoit et al., 2003)

pvaluesCorr = mattest(MDData, MglioData, 'Permute', 10000);

以0.05为p值的阈值确定具有统计显著的差异表达的基因数目,由于替换检验结果不同可能会得到不同的基因数。

cutoff = 0.05;

sum(pvaluesCorr < cutoff)

ans =

2007

用mafdr对每个检验估计FDR和q值,pi0是研究中真的空假设的总的分数,可以通过

bootstrap或立方多项式拟合来估计模拟的空分布,也可以手动设置λ值来估计pi0。figure;

[pFDR, qvalues] = mafdr(pvaluesCorr, 'showplot', true);

确定q值低于设定阈值的基因数,同样,由于替换和bootstrap结果的不同可能得出不同的基因数。

sum(qvalues < cutoff)

ans =

1925

如果大量基因具有低的FDR表明两组样本具有生物学差异。

通过将mafdr函数的输入参数BHFDR设为真可以调用Benjamini-Hochberg (BH)例程(Benjamini et al, 1995)估计FDR调节p值。

pvaluesBH = mafdr(pvaluesCorr, 'BHFDR', true);

sum(pvaluesBH < cutoff)

ans =

1275

可以将检验结果包括t得分, p值, pFDRs, q值和BH FDR校正p-values存为DataMatrix对象。testResults = [tscores pvaluesCorr pFDR qvalues pvaluesBH];

可以用DataMatrix对象的colnames方法将列名更新为BH FDR校正的p值。

testResults = colnames(testResults, 5, {'FDR_BH'});

可以用sortrows方法对p-值pvaluesCorr进行排序。

testResults = sortrows(testResults, 2);

下面显示检验结果的前23个基因,注意,由于替换测验和bootstrap 结果的差异,最终结果可能和这里显示的有所不同。

testResults(1:23, :)

ans =

t-scores p-values FDR q-values

PAFAH1B3 10.211 8.1924e-009 1.8315e-005 1.8315e-005 RAB31 -13.702 2.8016e-008 3.1316e-005 3.1316e-005 LRP1 -9.0742 1.6453e-007 0.00012261 5.3953e-005 KIAA0367 -8.9398 1.7404e-007 9.7272e-005 5.3953e-005 ID2B -8.8966 1.7782e-007 7.9509e-005 5.3953e-005 FBL 8.8668 1.8071e-007 6.7333e-005 5.3953e-005 PLEC1 -8.7961 1.8858e-007 6.0228e-005 5.3953e-005 PEA15 -8.7637 1.9306e-007 5.3953e-005 5.3953e-005 HNRPA1 8.4532 2.6546e-007 6.5942e-005 6.1939e-005 ID2B -8.4194 2.7705e-007 6.1939e-005 6.1939e-005 ITGAV -8.265 3.5525e-007 7.2201e-005 6.4346e-005 KIR2DL1 -8.1355 3.8039e-007 7.0867e-005 6.4346e-005 SPARCL1 -8.1246 3.8603e-007 6.6387e-005 6.4346e-005 PTOV1 7.9738 5.5184e-007 8.8123e-005 6.4346e-005 RBMX 7.9186 6.0384e-007 8.9997e-005 6.4346e-005 H3F3A 7.8816 6.2271e-007 8.7009e-005 6.4346e-005 DHX9 7.8439 6.6235e-007 8.7103e-005 6.4346e-005 NAP1L1 7.8241 6.6698e-007 8.2839e-005 6.4346e-005 C5orf13 7.8037 6.6868e-007 7.868e-005 6.4346e-005 ZAP70 7.7977 6.6897e-007 7.4778e-005 6.4346e-005 MS4A1 -7.7607 6.7364e-007 7.1715e-005 6.4346e-005 GPM6B -7.7605 6.737e-007 6.8461e-005 6.4346e-005 RNF113A -7.7548 6.7548e-007 6.5658e-005 6.4346e-005

FDR_BH

PAFAH1B3 4.7172e-005

RAB31 8.0657e-005

LRP1 0.00013896

KIAA0367 0.00013896

ID2B 0.00013896

FBL 0.00013896

PLEC1 0.00013896

PEA15 0.00013896

HNRPA1 0.00015953

ID2B 0.00015953

ITGAV 0.00016573

KIR2DL1 0.00016573

SPARCL1 0.00016573

PTOV1 0.00016573

RBMX 0.00016573

H3F3A 0.00016573

DHX9 0.00016573

NAP1L1 0.00016573

C5orf13 0.00016573

ZAP70 0.00016573

MS4A1 0.00016573

GPM6B 0.00016573

RNF113A 0.00016573

一个基因被认定是在两组样本间差异表达的应该具有统计学和生物学意义,本文比较MD和Mglio肿瘤样本之间的基因表达值之比,因此上调基因表明在MD中高表达而下调基因在Mglio中高表达。

用p-值的–log10对生物学效应可以画成火山图,注意,通过火山图用户界面UI,可以交互式地改变p-值的阈值和变化倍数的限定并输出差异表达基因。

diffStruct = mavolcanoplot(MDData, MglioData, pvaluesCorr)

diffStruct =

Name: 'Differentially Expressed'

PVCutoff: 0.0500

FCThreshold: 2

GeneLabels: {116x1 cell}

PValues: [116x1 bioma.data.DataMatrix]

FoldChanges: [116x1 bioma.data.DataMatrix]

按下Ctrl键的同时点击基因列表中的基因名可以在图中找到基因,如火山图所见,小脑颗粒神经元细胞特异的基因ZIC和NEUROD上调,而星形和少突胶质细胞分化基因如SOX2, PEA15, 和ID2B,则下调。

确定差异表达基因数。

nDiffGenes = diffStruct.PValues.NRows

nDiffGenes =

116

获得上调基因列表。

up_geneidx = find(diffStruct.FoldChanges > 0);

up_genes = rownames(diffStruct.FoldChanges, up_geneidx);

nUpGenes = length(up_geneidx)

nUpGenes =

75

确定下调基因数。

nDownGenes = sum(diffStruct.FoldChanges < 0)

nDownGenes =

41

用基因本体论(GO)注释上调基因

可以通过基因本体论(GO)来注释差异表达基因,从上面的分析结果中查找上调基因,从Gene Ontology Current Annotations下载人类注释(gene_association.goa_human.gz),解压缩

并存入当前目录。

找出上调基因号用于GO分析。

huGenes = rownames(expr_cns_gcrma_eb);

for i = 1:nUpGenes

up_geneidx(i) = find(strncmpi(huGenes, up_genes{i}, length(up_genes{i})), 1);

end

用geneont函数加载GO数据库为MATLAB对象。

GO = geneont('live',true);

读人类注释文件,本文只看与分子功能相关的基因,故只需读Aspect域设为“F”的信息,基因符号和对应ID是我们感兴趣的域,在GO注释文件中分别为DB_Object_Symbol和GOid 域。

HGann = goannotread('gene_association.goa_human',...

'Aspect','F','Fields',{'DB_Object_Symbol','GOid'});

创建人类基因及相应GO术语的列表。

HGgenes = {HGann.DB_Object_Symbol}; % Homo sapiens gene list

HGgo = [HGann.GOid]; % associated GO terms

确定分子功能相关的人类注释基因数。

numel(HGgenes)

ans =

74298

并非所有的HuGeneFL芯片上的5758个基因都有注释,通过比较基因符号列表和GO中的基因符号列表可以看出其是否已被注释,可以跟踪注释基因数和每个GO术语关联的上调基因数。

m = GO.Terms(end).id; % gets the last term id

chipgenesCount = zeros(m,1); % a vector of GO term counts for the entire chip. upgenesCount = zeros(m,1); % a vector of GO term counts for up-regulated genes.

for i = 1:length(huGenes)

idx = strncmpi(HGgenes, huGenes{i}, length(huGenes{i})); % lookup genes

goid = HGgo(idx);

goid = getrelatives(GO,goid);

% Update the tally

chipgenesCount(goid) = chipgenesCount(goid) + 1;

if (any(i == up_geneidx))

upgenesCount(goid) = upgenesCount(goid) +1;

end

end

可以用超几何分布确定统计显著的GO术语,对于每一个GO术语,p-值表示关联的注释基因由于偶然性获得的概率。

gopvalues = hygepdf(upgenesCount,max(chipgenesCount),...

max(upgenesCount),chipgenesCount);

[dummy, idx] = sort(gopvalues);

report = sprintf('GO Term p-value counts definition\n');

for i = 1:10

term = idx(i);

report = sprintf('%s%s\t%-1.5f\t%3d / %3d\t%s...\n',...

report, char(num2goid(term)), gopvalues(term),...

upgenesCount(term), chipgenesCount(term),...

GO(term).Term.definition(2:min(50,end)));

end

disp(report);

GO Term p-value counts definition

GO:0030528 0.00044 8 / 489 Plays a role in regulating transcription; may bin...

GO:0003700 0.00090 8 / 538 The function of binding to a specific DNA sequenc... GO:0003677 0.00165 8 / 583 Interacting selectively with DNA (deoxyribonuclei... GO:0003705 0.00422 6 / 351 Functions to initiate or regulate RNA polymerase ... GO:0043169 0.00519 5 / 245 Interacting selectively with cations, charged ato...

GO:0015458 0.00559 1 / 1 ...

GO:0016249 0.00559 1 / 1 Functions to locate the position of ion channels ...

GO:0016974 0.00559 1 / 1 ...

GO:0005509 0.00968 7 / 564 Interacting selectively with calcium ions (Ca2+)....

GO:0030020 0.01069 2 / 30 A constituent of the extracellular matrix that en...

可以研究显著的GO术语并选择与具体的分子功能相关的术语来构建一颗包括其祖先的子本体论树,用biograph函数来可视化显示它,也可为节点着色,本文中红色的节点是最显著的,兰色的节点最不显著,由于人类基因注释文件的频繁更新可能返回不同的GO术语。fcnAncestors = GO(getancestors(GO,idx(1:4)))

[cm acc rels] = getmatrix(fcnAncestors);

BG = biograph(cm,get(fcnAncestors.Terms,'name'))

for i=1:numel(acc)

pval = gopvalues(acc(i));

color = [(1-pval).^(1) pval.^(1/8) pval.^(1/8)];

set(BG.Nodes(i),'Color',color);

end

view(BG)

Gene Ontology object with 8 Terms.

Biograph object with 8 nodes and 9 edges.

从代谢通路中发现差异表达基因

通过KEGG's SOAP Web Service或将基因符号列表发送到KEGG's Web query tool可以从KEGG 代谢途径数据库查询差异表达基因的代谢途径信息。

References

[1] Pomeroy, S.L., Tamayo, P., Gaasenbeek, M., Sturla, L.M., Angelo, M., McLaughlin, M.E., Kim, J.Y., Goumnerova, L.C., Black, P.M., Lau, C., Allen, J.C., Zagzag, D., Olson, J.M., Curran, T., Wetmore, C., Biegel, J.A., Poggio, T., Mukherjee, S., Rifkin, R., Califano, A., Stolovitzky, G., Louis, DN, Mesirov, J.P., Lander, E.S., and Golub, T.R. (2002). Prediction of central nervous system embryonal tumour outcome based on gene expression. Nature, 415(6870), 436-442.

[2] Storey, J.D., and Tibshirani, R. (2003). Statistical significance for genomewide studies. Proc.Nat.Acad.Sci., 100(16), 9440-9445.

[3] Dudoit, S., Shaffer, J.P., and Boldrick, J.C. (2003). Multiple hypothesis testing in microarray experiment. Statistical Science, 18, 71-103.

[4] Benjamini, Y., and Hochberg, Y. (1995). Controlling the false discovery rate: a practical and powerful approach to multiple testing. J. Royal Stat. Soc., B 57, 289-300.

matlab归一化处理数据

matlab 中归一化的几种方法及其各自的适用条件 关于神经网络(matlab)归一化的整理 关于神经网络归一化方法的整理 由于采集的各数据单位不一致,因而须对数据进行[-1,1]归一化处理,归一化方法主要有如下几种,供大家参考:(by james) 1、线性函数转换,表达式如下: y=(x-MinValue)/(MaxValue-MinValue) 说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。 2、对数函数转换,表达式如下: y=log10(x) 说明:以10为底的对数函数转换。 3、反余切函数转换,表达式如下: y=atan(x)*2/PI 归一化是为了加快训练网络的收敛性,可以不进行归一化处理 归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。归一化有同一、统一和合一的意思。无论是为了建模还是为了计算,首先基本度量单位要同一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测的,归一化是同一在0-1之间的统计概率分布; 当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。为了避免出现这种情况,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于0或与其均方差相比很小。 归一化是因为sigmoid函数的取值是0到1之间的,网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理。所以这样做分类的问题时用[0.9 0.1 0.1]就要比用[1 0 0]要好。 但是归一化处理并不总是合适的,根据输出值的分布情况,标准化等其它统计变换方法有时可能更好。 关于用premnmx语句进行归一化: premnmx语句的语法格式是:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T) 其中P,T分别为原始输入和输出数据,minp和maxp分别为P中的最小值和最大值。mint 和maxt分别为T的最小值和最大值。 premnmx函数用于将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在[-1,1]区间内。 我们在训练网络时如果所用的是经过归一化的样本数据,那么以后使用网络时所用的新数据也应该和样本数据接受相同的预处理,这就要用到tramnmx。 下面介绍tramnmx函数: [Pn]=tramnmx(P,minp,maxp) 其中P和Pn分别为变换前、后的输入数据,maxp和minp分别为premnmx函数找到的最大值和最小值。 (by terry2008) matlab中的归一化处理有三种方法 1. premnmx、postmnmx、tramnmx

matlab源代码实例

1.硬币模拟试验 源代码: clear; clc; head_count=0; p1_hist= [0]; p2_hist= [0]; n = 1000; p1 = 0.3; p2=0.03; head = figure(1); rand('seed',sum(100*clock)); fori = 1:n tmp = rand(1); if(tmp<= p1) head_count = head_count + 1; end p1_hist (i) = head_count /i; end figure(head); subplot(2,1,1); plot(p1_hist); grid on; hold on; xlabel('重复试验次数'); ylabel('正面向上的比率'); title('p=0.3试验次数N与正面向上比率的函数图'); head_count=0; fori = 1:n tmp = rand(1); if(tmp<= p2) head_count = head_count + 1; end p2_hist (i) = head_count /i; end figure(head); subplot(2,1,2); plot(p2_hist); grid on; hold on; xlabel('重复试验次数'); ylabel('正面向上的比率'); title('p=0.03试验次数N与正面向上比率的函数图'); 实验结果:

2.不同次数的随机试验均值方差比较 源代码: clear ; clc; close; rand('seed',sum(100*clock)); Titles = ['n=5时' 'n=20时' 'n=25时' 'n=50时' 'n=100时']; Titlestr = cellstr(Titles); X_n_bar=[0]; %the samples of the X_n_bar X_n=[0]; %the samples of X_n N=[5,10,25,50,100]; j=1; num_X_n = 100; num_X_n_bar = 100; h_X_n_bar = figure(1);

matlab数据类型及转换

Matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。 1、整型:(int8;uint8;int16;uint16;int32;uint32;int64;uint64)通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127; 2、浮点:(single;double) 浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值,REALMIN('double')和REALMIN ('single')分别返回双精度浮点和单精度浮点的最小值。 3、逻辑:(logical) Logical:下例是逻辑索引在矩阵操作中的应用,将5*5矩阵中大于0.5的元素设定为0: A = rand(5); A(A>0.5)=0; 4、字符:(char) Matlab中的输入字符需使用单引号。字符串存储为字符数组,每个元素占用一个ASCII字符。如日期字符:DateString=’9/16/2001’ 实际上是一个1行9列向量。构成矩阵或向量的行字符串长度必须相同。可以使用char函数构建字符数组,使用strcat函数连接字符。 例如,命令name = ['abc' ; 'abcd'] 将触发错误警告,因为两个字符串的长度不等,此时可以通过空字符凑齐如:name = ['abc ' ; 'abcd'],更简单的办法是使用char函数:char(‘abc’,’abcd’),Matlab自动填充空字符以使长度相等,因此字符串矩阵的列纬总是等于最长字符串的字符数. 例如size(char(‘abc’,’abcd’))返回结果[2,4],即字符串’abc’实际存在的是’abc ’,此时如需提取矩阵中的某一字符元素,需要使用deblank函数移除空格如name =char(‘abc’,’abcd’); deblank(name(1,:))。 此外,Matlab同时提供一种更灵活的单元格数组方法,使用函数cellstr可以将字符串数组转换为单元格数组: data= char(‘abc’,’abcd’) length(data(1,:)) ->? 4 cdata=cellstr(data) length(cdata{1}) ->?3 常用的字符操作函数 blanks(n) 返回n个空字符 deblank(s) 移除字符串尾部包含的空字符 (string) 将字符串作为命令执行 findstr(s1,s2) 搜索字符串 ischar(s) 判断是否字符串 isletter(s) 判断是否字母 lower(s) 转换小写 upper(s) 转换大写 strcmp(s1,s2) 比较字符串是否相同 strncmp(s1,s2,n) 比较字符串中的前n个字符是否相同 strrep(s1,s2,s3) 将s1中的字符s2替换为s3 5、日期和时间 Matlab提供三种日期格式:日期字符串如’1996-10-02’,日期序列数如729300(0000年1月1日为1)以及日期向量如1996 10 2 0 0 0,依次为年月日时分秒。 常用的日期操作函数

数据标准化.归一化处理

数据的标准化 在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。数据标准化的方法有很多种,常用的有“最小—最大标准化”、“Z-score标准化”

和“按小数定标标准化”等。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。 一、Min-max 标准化 min-max标准化方法是对原始数据进行线性变换。设minA和maxA分别为属性A的最小值和最大值,将A的一个原始值x通过min-max标准化映射成在区间[0,1]中的值x',其公式为: 新数据=(原数据-极小值)/(极大值-极小值) 二、z-score 标准化 这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。将A的原始值x使用z-score标准化到x'。z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。 新数据=(原数据-均值)/标准差 spss默认的标准化方法就是z-score标准化。用Excel进行z-score标准化的方法:在Excel中没有现成的函数,需要自己分步计算,其实标准化的公式很简单。步骤如下: 求出各变量(指标)的算术平均值(数学期望)xi和标准差si ; .进行标准化处理:zij=(xij-xi)/si,其中:zij为标准化后的变量值;xij为实际变量值。 将逆指标前的正负号对调。标准化后的变量值围绕0上下波动,

MATLAB统计分析与应用:40个案例分析

MATLAB统计分析与应用:40个案例分析 ISBN:9787512400849 分类号:C819 /115 出版社:北京航空航天大学出版社 【内容简介】 本书从实际应用的角度出发,以大量的案例详细介绍了MA TLAB环境下的统计分析与应用。 本书主要内容包括:利用MA TLAB制作统计报告或报表;从文件中读取数据到MA TLAB;从MA TLAB中导出数据到文件;数据的平滑处理、标准化变换和极差归一化变换;生成一元和多元分布随机数;蒙特卡洛方法;参数估计与假设检验;Copula理论及应用实例;方差分析;基于回归分析的数据拟合;聚类分析;判别分析;主成分分析;因子分析;图像处理中的统计应用等。 本书可以作为高等院校本科生、研究生的统计学相关课程的教材或教学参考书,也可作为从事数据分析与数据管理的研究人员的参考用书。 【目录】 第1章利用MA TLAB生成Word和Excel文档 1.1 组件对象模型(COM) 1.1.1 什么是CoM 1.1.2 CoM接口 1.2 MA TLAB中的ActiveX控件接口技术 1.2.1 actxcontrol函数 1.2.2 actxcontrollist函数 1.2.3 actxcontrolselect函数 1.2.4 actxserver函数 1.2.5 利用MA TLAB调用COM对象 1.2.6 调用actxserver函数创建组件服务器 1.3 案例1:利用MA TLAB生成Word文档 1.3.1 调用actxserver函数创建Microsoft Word服务器 1.3.2 建立Word文本文档 1.3.3 插入表格 1.3.4 插入图片 1.3.5 保存文档 1.3.6 完整代码 1.4 案例2:利用MA TLAB生成Excel文档 1.4.1 调用actxserver函数创建Microsoft Excel服务器 1.4.2 新建Excel工作簿 1.4.3 获取工作表对象句柄 1.4.4 插入、复制、删除、移动和重命名工作表 1.4.5 页面设置 1.4.6 选取工作表区域 1.4.7 设置行高和列宽 1.4.8 合并单元格 1.4.9 边框设置 1.4.10 设置单元格对齐方式

matlab经典编程例题

以下各题均要求编程实现,并将程序贴在题目下方。 1.从键盘输入任意个正整数,以0结束,输出那些正整数中的素数。 clc;clear; zzs(1)=input('请输入正整数:');k=1; n=0;%素数个数 while zzs(k)~=0 flag=0;%是否是素数,是则为1 for yz=2:sqrt(zzs(k))%因子从2至此数平方根 if mod(zzs(k),yz)==0 flag=1;break;%非素数跳出循环 end end if flag==0&zzs(k)>1%忽略0和1的素数 n=n+1;sus(n)=zzs(k); end k=k+1; zzs(k)=input('请输入正整数:'); end disp(['你共输入了' num2str(k-1) '个正整数。它们是:']) disp(zzs(1:k-1))%不显示最后一个数0 if n==0 disp('这些数中没有素数!')%无素数时显示 else disp('其中的素数是:') disp(sus) end 2.若某数等于其所有因子(不含这个数本身)的和,则称其为完全数。编程求10000以内所有的完全数。 clc;clear;

wq=[];%完全数赋空数组 for ii=2:10000 yz=[];%ii的因子赋空数组 for jj=2:ii/2 %从2到ii/2考察是否为ii的因子 if mod(ii,jj)==0 yz=[yz jj];%因子数组扩展,加上jj end end if ii==sum(yz)+1 wq=[wq ii];%完全数数组扩展,加上ii end end disp(['10000以内的完全数为:' num2str(wq)])%输出 3.下列这组数据是美国1900—2000年人口的近似值(单位:百万)。 (1)若. 2c + = y+ 与试编写程序计算出上式中的a、b、c; 的经验公式为 t at bt y (2)若.bt 的经验公式为 y= 与试编写程序计算出上式中的a、b; y ae t (3)在一个坐标系下,画出数表中的散点图(红色五角星),c + =2中 ax bx y+拟合曲线图(蓝色实心线),以及.bt y=(黑色点划线)。 ae (4)图形标注要求:无网格线,横标注“时间t”,纵标注“人口数(百万)”,图形标题“美国1900—2000年的人口数据”。 (5)程序中要有注释,将你的程序和作好的图粘贴到这里。 clf;clc;clear %清除图形窗、屏幕、工作空间 t=1900:10:2000; y=[76 92 106 123 132 151 179 203 227 250 281]; p1=polyfit(t,y,2);%二次多项式拟合

matlab图像数据类型转换

uint 8:无符号的8位(8bit)整型数据(unit 都是存储型) int :整型数据 1、在MATLAB中,数值一般都采用double型(64位)存储和运算. 2、为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称为8位型像。 3、函数image能够直接显示8位图像,但8位型数据和double型数据在image中意义不一样, 4、对于索引图像,数据矩阵中的值指定该像素的颜色种类在色图矩阵中的行数。当数据矩阵中的值为0时,表示用色图矩阵中第一行表示的颜色绘制;当数据矩阵中的值为1时,表示用色图矩阵中的第二行表示的颜色绘制该像素,数据与色图矩阵中的行数总是相差1。所以,索引图像double型和uint8型在显示方法上没有什么不同,只是8位数据矩阵的值和颜色种类之间有一个偏差1。调用格式均为image(x); colormap(map); 5、对于灰度图像,uint8表示范围[0,255],double型表示范围[0,1]。可见,double型和uint8型灰度图像不一样,二者转换格式为: I8=uint8 (round (I64*255)); !!double转换成uint 8 I64=double (I8)/255; !!!uint转换成double 反之,imread根据文件中的图像种类作不同的处理。当文件中的图像为灰度图像时,imread 把图像存入一个8位矩阵中,把色图矩阵转换为双精度矩阵,矩阵中每个元素值在[0,1]内;当为RGB图像时,imread把数据存入到一个8位RGB矩阵中。!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double 因此 I2=im2double(I1) :把图像数组I1转换成double精度类型; 如果不转换,在对uint8进行加减时会产生溢出 图像数据类型转换函数 默认情况下,matlab将图象中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。 im2double():将图象数组转换成double精度类型 im2uint8():将图象数组转换成unit8类型 im2uint16():将图象数组转换成unit16类型 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 默认情况下,matlab将图像中的数据存储为double型,即64位浮点数;matlab还支持无符号整型(uint8和uint16);uint型的优势在于节省空间,涉及运算时要转换成double型。 但是,问题的真正的解释其实应该是这样的。首先是在数据类型转换时候uint8和im2uint8的区别,uint的操作仅仅是将一个double类型的小数点后面的部分去掉;但是im2uint8是将输入中所有小于0的数设置为0,而将输入中所有大于1的数值设置为255,再将所有其他值乘以255。 图像数据在进行计算前要转化为double类型的,这样可以保证图像数据运算的精

基于Matlab的归一化二阶系统课程设计

Matlab 实训设计(一) 二阶系统变阻尼比的动态仿真系统的设计 一.设计一个二阶系统的变阻尼比的动态仿真系统 二.步骤 (1)程序功能描述 1. 典型二阶系统的传递函数为 ω ωωξ22 2 2)(n n n S s ++= Φ 2. 归一化二阶系统的单位阶跃响应 1、ζ=0(无阻尼)时,系统处于等幅振荡,超调量最大,为100%,并且系统发生不衰减的振荡,永远达不到稳态。 2、0<ζ<1(欠阻尼)时,系统为衰减振荡。为了获得满意的二阶系统的瞬态响应特性,通常阻尼比在0.4~0.8的范围内选择。这时系统在响应的快速性、稳定性等方面都较好。 3、在ζ=1(临界阻尼)及ζ>1(过阻尼)时,二阶系统的瞬态过程具有单调上升的特性,以ζ=1时瞬态过程最短。 (2)程序界面设计 图形界面中的grid on 、grid off 分别是网格和绘图框的打开和关闭按钮

(3)程序测试运行 在编辑框中+还可以输入如0:0.1:0.8的阻尼系数数组,这表示把0到0.8之间的长度以0.1为跨距等份,再以每点的数据得到响应曲线,上式就包含了 ze-ta=0、0.1、0.2···、0.8总共8个阻尼比下的响应曲线

三.控件属性设置 (1)String %显示在控件上的字符串 (2)Callback 回调函数 (3)enable 表示控件是否有效 (4)Tag 控件标记,用于标识控件 四.设计:实现如下功能的系统界面 (1)在编辑框中,可以输入表示阻尼比的标量成行数组、数值,并在按了Enter 键后,在轴上画出图形,坐标范围x[1,15],y[0,2]。 (2)在点击grid on或者grid off键时,在轴上显示或删除“网格线”。(3)在菜单[options]下,有两个下拉菜单[Box on]和[Box off],缺省值为off。(4)所设计界面和其上图形,都按比例缩放。 五.各个控件属性设置 (1)在图形窗中设置 Name 我的设计 Rize on %图窗可以缩放 Tag figure1 %生成handles. figure1 (2)在轴框中 Units normalizen Box off坐标轴不封闭 Tag axes1 XLim[0,15]%x范围 YLim[1,2]%y范围 (3)静态文件框1 fontsize 0.696 fritunits normalizen String“归一化二阶阶跃响应” Tag text1 Horizontalignment Center

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

MATLAB模块介绍$

MATLAB 模块介绍 -------- 数学 & 金融 u Curve Fitting Toolbox Curve Fitting Toolbox 扩展MATLAB 环境,集成数据管理,拟合,显示,检验和输入分析过程等功能。所有能通过GUI 使用的功能都可以通过命令行来进行。

u Database Toolbox ——与关系数据库交换数据 Database Toolbox提供了同任何支持ODBC/JDBC标准的数据库进行数据交换的能力。利用在工具箱中集成的Visual Query Builder工具,无需学习任何SQL语句就可以实现在数据库中查寻数据的功能。这样MATLAB就能够对存储在数据库中的数据进行各种各样的复杂分析。在MATLAB环境中,也可以使用SQL命令来进行如下操作: 对数据库数据进行读、写操作;应用简单或复杂的条件查询数据库中的内容。 特点: ?与支持ODBC/JDBC 数据库建立连接,包括Oracle 、Sybase SQL Server ,Sybase SQL Anywhere ,Microsoft SQL Sever ,Microsoft Access ,Informix Ingres 等。?支持SQL 语句,可以在MATLAB 环境下直接执行SQL 查询命令 ?动态数据调入:可以根据需要使用SQL 在MATLAB 中获取数据,本工具箱对某一种类型的数据库进行大量或小量的查询 ?数据类型保持:在MATLAB 中对数据的调入或调出操作都能保持原有的数据类型 ?多个对话能力,采用本工具箱可在MATLAB 中从一个数据库中调入数据,对那些数据进行分析,然后输出到另一个数据库中 ?处理大量数据的能力:采用本工具箱你可以一次或分几次处理大量的数据,这样能让你根据任务高效地进行数据处理 ?连续状态的数据库联接:一旦和某个数据库的联接建立起来后,数据库一直是打开的,除非你在MATLAB 中执行关闭语句。这提高了数据库的读取速度,减少了不必要的命令来调入、输出数据。 ?无需了解SQL 也能够对数据库数据进行查询。 功能: Database Toolbox 可以与流行的数据库交互数据,其中包括Oracle ,Sybase ,Microsoft SQL Server 及Informix 等。工具箱还允许在单个MATLAB 进程中对多个数据库进行操作,同时支持对大量数据处理。工具箱中包含的Visual Query Builder ,即使不知道SQL ,也能可视化地与数据库打交道。 u Financial Derivatives Toolbox Financial Derivatives Toolbox 用于分析金融衍生工具和投资。 特点 ?提供各种利息率模型 ?提供七种金融工具一系列计算的函数

图论算法及matlab程序的三个案例

图论实验三个案例 单源最短路径问题 Dijkstra 算法 Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个顶点集合S 并不断地作贪心选择来扩充这个集合。一个顶点属于集合S 当且仅当从源到该顶点的最短路径长度已知。设v 是图中的一个顶点,记()l v 为顶点v 到源点v 1的最短距离,,i j v v V ?∈,若 (,)i j v v E ?,记i v 到j v 的权ij w =∞。 Dijkstra 算法: ① 1{}S v =,1()0l v =;1{}v V v ??-,()l v =∞,1i =,1{}S V v =-; ② S φ=,停止,否则转③; ③ ()min{(),(,)} j l v l v d v v =, j v S ∈,v S ?∈; ④ 存在1 i v +,使 1()min{()} i l v l v +=,v S ∈; ⑤ 1{} i S S v +=U , 1{} i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果121n n v v v v -L 是从1v 到 n v 的最 短路径,则 121 n v v v -L 也必然是从1v 到 1 n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元素表 示顶点i v 到j v 的权ij w ,若i v 到j v 无边,则realmax ij w =,其中realmax 是MATLAB 常量,表示最大的实数+308)。 function re=Dijkstra(ma) %用Dijkstra 算法求单源最短路径 %输入参量ma 是距离矩阵 %输出参量是一个三行n 列矩阵,每列表示顶点号及顶点到源的最短距离和前顶点 n=size(ma,1);%得到距离矩阵的维数 s=ones(1,n);s(1)=0;%标记集合S 和S 的补 r=zeros(3,n);r(1,:)=1:n;r(2,2:end)=realmax;%初始化 for i=2:n;%控制循环次数 mm=realmax; for j=find(s==0);%集合S 中的顶点 for k=find(s==1);%集合S 补中的顶点

matlab程序设计实例

MATLAB 程序设计方法及若干程序实例 樊双喜 (河南大学数学与 信息科学学院开封475004) 摘要本文通过对 MATLAB 程序设计中的若干典型问题做简要的分析和总结,并在此基础上着重讨论了有关算法设计、程序的调试与测试、算法与程序的优化以及循环控制等方面的问题.还通过对一些程序实例做具体解析,来方便读者进行编程训练并掌握一些有关MATLAB 程序设计方面的基本概念、基本方法以及某些问题的处理技巧等.此外,在文章的最后还给出了几个常用数学方法的算法程序, 供读者参考使用.希望能对初学者进行 MATLAB 编程训练提供一些可供参考的材料,并起到一定的指导和激励作用,进而为MATLAB 编程入门打下好的基础. 关键字算法设计;程序调试与测试;程序优化;循环控制 1 算法与程序 1.1 算法与程序的关系算法被称为程序的灵魂,因此在介绍程序之前应先了 解什么是算法.所谓算 法就是对特定问题求解步骤的一种描述.对于一个较复杂的计算或是数据处理的问题,通常是先设计出在理论上可行的算法,即程序的操作步骤,然后再按照算法逐步翻译成相应的程序语言,即计算机可识别的语言. 所谓程序设计,就是使用在计算机上可执行的程序代码来有效的描述用于解决特定问题算法的过程.简单来说,程序就是指令的集合.结构化程序设计由于采用了模块分化与功能分解,自顶向下,即分而治之的方法,因而可将一个较复杂的问题分解为若干子问题,逐步求精.算法是操作的过程,而程序结构和程序流程则是算法的具体体现. 1.2MATLAB 语言的特点 MATLAB 语言简洁紧凑,使用方便灵活,库函数极其丰富,其语法规则与科技人员的思维和书写习惯相近,便于操作.MATLAB 程序书写形式自由,利用其丰富

matlab图像处理归一化

matlab图像处理为什么要归一化和如何归一化 一、为什么归一化 1. 基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响。也就是转换成唯一的标准形式以抵抗仿射变换 图像归一化使得图像可以抵抗几何变换的攻击,它能够找出图像中的那些不变量,从而得知这些图像原本就是一样的或者一个系列的。 因为我们这次的图片有好多都是一个系列的,所以老师把这个也作为我研究的一个方向。 我们主要要通过归一化减小医学图片由于光线不均匀造成的干扰。 2.matlab里图像数据有时候必须是浮点型才能处理,而图像数据本身是0-255的UNIT型数据所以需要归一化,转换到0-1之间。 3.归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。目的是为了: (1).避免具有不同物理意义和量纲的输入变量不能平等使用 (2).bp中常采用sigmoid函数作为转移函数,归一化能够防止净输入绝对值过大引起的神经元输出饱和现象 (3).保证输出数据中数值小的不被吞食 3.神经网络中归一化的原因 归一化是为了加快训练网络的收敛性,可以不进行归一化处理 归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。归一化有同一、统一和合一的意思。无论是为了建模还是为了计算,首先基本度量单位要同一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测的,归一化是同一在0-1之间的统计概率分布;当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。为了避免出现这种情况,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于0或与其均方差相比很小。 归一化是因为sigmoid函数的取值是0到1之间的,网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理。所以这样做分类的问题时用[0.9 0.1 0.1]就要比用[1 0 0]要好。 但是归一化处理并不总是合适的,根据输出值的分布情况,标准化等其它统计变换方法有时可能更好。 二、如何归一化 matlab中的归一化处理有三种方法 1. premnmx、postmnmx、tramnmx 2. restd、poststd、trastd 3. 自己编程 (1)线性函数转换,表达式如下: y=(x-MinValue)/(MaxValue-MinValue) 说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。 (2)对数函数转换,表达式如下: y=log10(x)

多目标优化实例和matlab程序

NSGA-II 算法实例 目前的多目标优化算法有很多,Kalyanmoy Deb 的带精英策略的快速非支配排序遗传算法(NSGA-II)无疑是其中应用最为广泛也是最为成功的一种。本文用的算法是MATLAB 自带的函数gamultiobj ,该函数是基于NSGA-II 改进的一种多目标优化算法。 一、数值例子 多目标优化问题 42422 11211122124224212212112 12min (,)10min (,)55..55 f x x x x x x x x x f x x x x x x x x x s t x =-++-=-++-≤≤??-≤≤?二、Matlab 文件 1.适应值函数m 文件: function y=f(x) y(1)=x(1)^4-10*x(1)^2+x(1)*x(2)+x(2)^4-x(1)^2*x(2)^2; y(2)=x(2)^4-x(1)^2*x(2)^2+x(1)^4+x(1)*x(2);2.调用gamultiobj 函数,及参数设置: clear clc fitnessfcn=@f; %适应度函数句柄nvars=2; %变量个数lb=[-5,-5]; %下限ub=[5,5]; %上限A=[];b=[];%线性不等式约束 Aeq=[];beq=[];%线性等式约束 options=gaoptimset('paretoFraction',0.3,'populationsize',100,'generations',200,'stallGenLimit',200,'TolFun',1e-100,'PlotFcns',@gaplotpareto); %最优个体系数paretoFraction 为0.3;种群大小populationsize 为100,最大进化代数generations 为200, %停止代数stallGenLimit 为200,适应度函数偏差TolFun 设为1e-100,函数gaplotpareto :绘制Pareto 前端 [x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,options)

关于神经网络(matlab)归一化的整理

关于神经网络(matlab)归一化的整理 关于神经网络归一化方法的整理 由于采集的各数据单位不一致,因而须对数据进行[-1,1]归一化处理,归一化方法主要有如下几种,供大家参考:(by james) 1、线性函数转换,表达式如下: y=(x-MinValue)/(MaxValue-MinValue) 说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。 2、对数函数转换,表达式如下: y=log10(x) 说明:以10为底的对数函数转换。 3、反余切函数转换,表达式如下: y=atan(x)*2/PI 归一化是为了加快训练网络的收敛性,可以不进行归一化处理 归一化的具体作用是归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。归一化有同一、统一和合一的意思。无论是为了建模还是为了计算,首先基本度量单位要同一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测的,归一化是同一在0-1之间的统计概率分布; 当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。为了避免出现这种情况,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于0或与其均方差相比很小。 归一化是因为sigmoid函数的取值是0到1之间的,网络最后一个节点的输出也是如此,所以经常要对样本的输出归一化处理。所以这样做分类的问题时用[0.9 0.1 0.1]就要比用[1 0 0]要好。 但是归一化处理并不总是合适的,根据输出值的分布情况,标准化等其它统计变换方法有时可能更好。 关于用premnmx语句进行归一化: premnmx语句的语法格式是:[Pn,minp,maxp,Tn,mint,maxt]=premnmx(P,T) 其中P,T分别为原始输入和输出数据,minp和maxp分别为P中的最小值和最大值。mint 和maxt分别为T的最小值和最大值。 premnmx函数用于将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在[-1,1]区间内。 我们在训练网络时如果所用的是经过归一化的样本数据,那么以后使用网络时所用的新数据也应该和样本数据接受相同的预处理,这就要用到tramnmx。 下面介绍tramnmx函数: [Pn]=tramnmx(P,minp,maxp) 其中P和Pn分别为变换前、后的输入数据,maxp和minp分别为premnmx函数找到的最大值和最小值。 (by terry2008) matlab中的归一化处理有三种方法 1. premnmx、postmnmx、tramnmx 2. restd、poststd、trastd 3. 自己编程 具体用那种方法就和你的具体问题有关了

遗传算法的MATLAB程序实例讲解学习

遗传算法的M A T L A B 程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

Matlab实现Zoutendijk编程例子

22 212312132312min f (x)x 2x 3x x x 2x x x x 4x 6x =+++-+-- . 123123x 2x x 4 x ,x ,x 0++≤≥ 取初始点(1)T x (0,0,0)=,通过Matlab 编程实现求解过程。 公用函数如下: 1、function [f,x]=func %设置目标函数 syms x1 x2 x3; f=x1^2+2*x2^2+3*x3^2+x1*x2-2*x1*x3+x2*x3-4*x1-6*x2; x=[x1,x2,x3]; end 2、function f_val=fval(x0) %求目标函数值 x0=transpose(x0); [f,x]=func; f_val=subs(f,x,x0); end 3、function s=diff_val(x0) %求目标函数梯度 [f,x]=func; grad=jacobian(f,x); s=subs(grad,x,x0); end 4、function h=fmin(x0,d0,vmax) %求函数最小值 [f,x]=func; syms h ; a=x0+h*d0; f_val=inline(subs(f,x,a)); if vmax==inf min_h=fminbnd(f_val,0,10000); else min_h=fminbnd(f_val,0,vmax); end h=min_h; end Zoutendijk 方法主函数 function [X0,f_val]=zoutendijk(A,b,x0,Aeq,beq) %自定义函数diff_val(x0)作用是求所给函数在x0出的偏导数

相关文档