COMPUTER SCIENCE

 

JAVA

 

R

 

XML

 

LINUX

 

OTHERS

 

BIOINFORMATICS

 

BIOJAVA

 

 

BIOSQL

 

 

MICROARRAY

 

 

MOTIF FINDING

 

 

REGULATION NETWORK

 

OTHERS

 

LIFE SCIENCE

 

 

我如何对一个自定义的成分表创建一个N阶分布(order N distribution)?

这个例子创建了用户自定义的含有七个标志的字母表。用户自定义的标志和字母表能够用来创建标志链,序列,分布等等。当字母表管理器创建交叉产物字母表(CrossProductAlphabet)时,它将推断调节前的字母表(Conditioning alphabet)的阶为-1,调节好了的字母表(Conditioned alphabet)的阶为1.


本文由Russell Smithies 贡献。

import java.io.*;
import java.util.*;

import org.biojava.bio.*;
import org.biojava.bio.dist.*;
import org.bioajva.bio.symbol.*;
import org.biojava.utils.*;

public class DistTest {
public static void main(String[] args) throws Exception {

// 创建一个“侏儒“ 字母表 (白雪公主和七个小矮人的故事 -- 译者注)
String[] dNames = {
"Grumpy","Sleepy","Dopey","Doc","Happy","Sneezy","Bashful"
};
Symbol[] dwarfs = new Symbol[7];
// 设置字母表的名字
SimpleAlphabet.setName("Dwarf");
for (int i = 1; i<=7; i++) {
try {
dwarfs[i-1] = AlphabetManager.createSymbol((char)('0'+i), "" + dNames[i-1], Annotation.EMPTY_ANNOTATION);
// 将新创建的标志添加到字母表中
dwarfAlphabet.addSymbol(dwarfs[dwarfs[i-1]);
}
catch(Exception e){
throw new NestedError(e,"Can't create symbols to represent dwarf");
}
// 通常将新建的字母表注册到字母表管理器中
AlphabetManager.registerAlphabet(dwarfAlphabet.getName(), dwarfAlphabet);
}

使用新创建的"侏儒"字母表来创建一个N阶分布

// 分布的阶数
int order = 3;

// 创建交叉产物字母表
Alphabet a = AlphabetManager.getCrossProductAlphabet(Collections.nCopies(order,dwarfAlphabet));

// 使用n阶分布工厂类创建分布
OrderNDistribution ond = (OrderNDistribution)OrderNDistributionFactory.DEFAULT.createDistribution(a);

//创建分布训练器
DistributionTrainerContext dtc = new SimpleDistributionTrainerContext();

//将分布注册到训练器
dtc.registerDistribution(ond);

我们能用"侏儒"字母表创建一条序列来检测我们创建的n阶分布.我们使用同一分布(能够随机化样本)将标志
添加到链表中.然后用这个链表构建标志链.

//从"侏儒"字母表中随机创建一条标志链
UniformDistribution udist = new UniformDistribution((FiniteAlphabet)dwarfAlphabet);

int size = 100;
List list = new ArrayList();

for (int i = 0; i < size; i++) {
list.add(udist.sampleSymbol());
}

//创建一条标志链来检测分布
SymbolList symbl = new SimpleSymbolList(dwarfAlphabet, list);

这个标志链被转化成一条n阶标志链从而能应用n阶分布.

//转化成一条n阶标志链
symbl = SymbolListViews.orderNSymbolList(symbl, order);

//或者使用窗口标志链(WindowedSymbolList)
//symbl = SymbolListViews.windowedSymbolList(symbl, order);

//将计数添加到分布中
for (Iterator i = symbl.iterator(); i.hasNext(); ) {
try {
dtc.addCount(ond, (Symbol) i.next(), 1.0);
}
catch (IllegalSymbolException ex) {
//标志非法
ex.printstacktrace()}
}

// 不要忘记训练,否则没有权重会添加到分布中
dtc.train();

//将分布写入XML文件中
XMLDistributionWriter writer = new XMLDistributionWriter();

writer.writeDistribution(ond, new FileOutputStream("dwarf.xml"));
}
}



--BACK TO TOP

 

Maintainted by Wu Xin, CBI, Peking University, China, 2003