科学网

 找回密码
  注册

tag 标签: Vector

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

C++中的vector用法以及相关的说明
linqy 2017-4-19 10:28
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。 1 基本操作 (1)头文件#includevector. (2)创建vector对象,vectorint vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,coutvec endl;记住下标是从0开始的。 (5)使用迭代器访问元素. vectorint::iterator it; for(it=vec.begin();it!=vec.end();it++) cout*itendl; (6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a; (7)删除元素: vec.erase(vec.begin()+2);删除第3个元素 vec.erase(vec.begin()+i,vec.end()+j);删除区间 ;区间从0开始 (8)向量大小:vec.size(); (9)清空:vec.clear(); 2 vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。下面是一段简短的程序代码: #includestdio.h #includealgorithm #includevector #includeiostream using namespace std; typedef struct rect { int id; int length; int width;   //对于向量元素是结构体的,可在结构体内部定义比较函数,下面按照id,length,width升序排序。   bool operator (const rect a) const { if(id!=a.id) return ida.id; else { if(length!=a.length) return lengtha.length; else return widtha.width; } } }Rect; int main() { vectorRect vec; Rect rect; rect.id=1; rect.length=2; rect.width=3; vec.push_back(rect); vectorRect::iterator it=vec.begin(); cout(*it).id' '(*it).length' '(*it).widthendl; return 0; } 3 算法 (1) 使用reverse将元素翻转:需要头文件#includealgorithm reverse(vec.begin(),vec.end());将元素翻转(在vector中,如果一个函数中需要两个迭代器, 一般后一个都不包含.) (2)使用sort排序:需要头文件#includealgorithm, sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大). 可以通过重写排序比较函数按照降序比较,如下: 定义排序比较函数: bool Comp(const int a,const int b) { return ab; } 调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。 特别用法: 实际使用过程中可能会使用到双层vector的情况 比如:vectorvectorint Dailylevel ; 这样在调出其内部数值的时候,则为: coutDailylevel endl;
个人分类: C++|3544 次阅读|0 个评论
[转载]Influence of Recombinant Lentiviral Vector Encoding miR-15a/
ericmapes 2017-3-8 09:26
InfluenceofRecombinantLentiviralVectorEncoding miR-15a /16-1inBiologicalFeaturesofHumanNasopharyngealCarcinomaCNE-2ZCells http://blog.sciencenet.cn/home.php?mod=spaceuid=3243885do=blogid=1038178 作者: Zhang,CH (Zhang,Chunhong) ; Fang,XB (Fang,Xiaobi) ; Li,WF (Li,Wenfeng) ; Shi,QY (Shi,Qingyuan) ; Wu,LP (Wu,Liping) ; Chen,XY (Chen,Xiaoyun) ; Huang,ZX (Huang,Zhenxiao) ; Wu,P (Wu,Peng) ; Wang,ZZ (Wang,Zhenzhen) ; Liao,ZS (Liao,Zhisu) CANCERBIOTHERAPYANDRADIOPHARMACEUTICALS 卷: 29 期: 10 页: 422-427 DOI: 10.1089/cbr.2013.1596 出版年: DEC12014 查看期刊信息 CANCERBIOTHERAPYANDRADIOPHARMACEUTICALS 影响因子 1.715 1.6 2015 5年 JCR 类别 类别中的排序 JCR分区 MEDICINE,RESEARCHEXPERIMENTAL 83/124 Q3 ONCOLOGY 171/213 Q4 PHARMACOLOGYPHARMACY 173/255 Q3 RADIOLOGY,NUCLEARMEDICINEMEDICALIMAGING 72/124 Q3 数据来自第2015版 JournalCitationReports 出版商 MARYANNLIEBERT,INC,140HUGUENOTSTREET,3RDFL,NEWROCHELLE,NY10801USA ISSN: 1084-9785 eISSN: 1557-8852 研究领域 Oncology ResearchExperimentalMedicine PharmacologyPharmacy Radiology,NuclearMedicineMedicalImaging 摘要 MicroRNAscanfunctionastumorsuppressormiRNAs.Bcl-2isanantiapoptoticgeneoverexpressedinmanytumors,includingnasopharyngealcarcinoma(NPC).ItisreportedthatmicroRNA-15a( miR-15a )andmicroRNA-16-1( miR-16 -1)couldactasbcl-2inhibitors.ToinvestigatetheireffectsonNPC,theauthorsusedrecombinantlentiviralvectortoupregulatetheexpressionof miR-15a /16-1inNPCCNE-2Zcells.Theauthorsdividedcellsintothecontrolgroup,transfectiongroup,radiotherapygroup,andtransfection-radiotherapygroup.Inthisexperiment,reversetranscription-quantitativepolymerasechainreactionwasusedtodetecttheexpressionof miR-15a /16-1andbcl-2mRNA.CellproliferationwasanalyzedbyMTTassay.Flowcytometrywasusedtomeasurecellapoptosis.Radiosensitivitywasmeasuredusingcolony-formingexperiment.Theproteinexpressionofbcl-2wasmeasuredbywesternblot,theactivationlevelsofcaspaseweredetectedbyaspectrophotometricmethod.Aftertransfection,cellproliferationwasinhibited,whiletheapoptosisrateandradiosensitivitywereincreased.Inaddition,theactivationofcaspase-2andcaspase-3wasaggrandizedcorrespondingly.Althoughtheexpressionlevelsofbcl-2mRNAineachgrouphadnodifference,theproteinexpressionofbcl-2wasdownregulated.Theseresultssuggestedthat miR-15a /16-1couldinhibitcellproliferationandincreasetheapoptosisandradiosensitivityofCNE-2cells,byregulatingthebcl-2geneatpost-transcriptionallevelandbyincreasingtheactivationofcaspase-2andcaspase-3. 关键词 作者关键词: nasopharyngealcarcinoma ; radiosensitivity ; microRNAs ; apoptosis ; bcl-2 KeyWordsPlus: APOPTOSIS ; CANCER ; PROLIFERATION ; EXPRESSION ; RADIATION ; BCL2 作者信息 通讯作者地址: Liao,ZS(通讯作者) WenzhouMedCollege,DeptOtorhinolaryngol,AffiliatedHosp1,Wenzhou325000,Zhejiang,PeoplesRChina. 地址: WenzhouMedCollege,DeptOtorhinolaryngol,AffiliatedHosp1,Wenzhou325000,Zhejiang,PeoplesRChina WenzhouMedCollege;,DeptRadiotherapy,AffiliatedHosp1,Wenzhou325000,Zhejiang,PeoplesRChina 电子邮件地址: liaozhisu111@163.com 基金资助致谢 基金资助机构 授权号 ZhejiangProvincialScienceFoundation 2010C34005 查看基金资助信息 关闭基金资助信息 TheauthorsthanktheexperimentalcenterofWenzhouMedicalCollegeforcelllines.TheauthorsaregratefultotheeditorialboardofChineseJournalofOtorhinolaryngologyHeadandNeckSurgeryforthepermissionforsecondarypublication.ThisstudywassupportedbytheZhejiangProvincialScienceFoundation(2010C34005). 出版商 MARYANNLIEBERT,INC,140HUGUENOTSTREET,3RDFL,NEWROCHELLE,NY10801USA 类别/分类 研究方向: Oncology;ResearchExperimentalMedicine;PharmacologyPharmacy;Radiology,NuclearMedicineMedicalImaging WebofScience类别: Oncology;Medicine,ResearchExperimental;PharmacologyPharmacy;Radiology,NuclearMedicineMedicalImaging 文献信息 文献类型: Article 语种: English 入藏号: WOS:000345897900003 PubMedID: 25405832 ISSN: 1084-9785 eISSN: 1557-8852 期刊信息 ImpactFactor(影响因子): JournalCitationReports 数据来自第2015版 JournalCitationReports 其他信息 IDS号: AU9FT WebofScience核心合集中的引用的参考文献: 20 WebofScience核心合集中的被引频次: 6
个人分类: 社会热点时评|363 次阅读|0 个评论
[转载]sweep: Multiply rows of matrix by vector
chuangma2006 2013-4-5 00:42
Expample: mat - matrix ( rep ( 1 : 3 , each = 5 ), nrow = 3 , ncol = 5 , byrow = TRUE ) vec - 1 : 5 sweep ( mat , MARGIN = 2 , vec , `*` ) From: http://stackoverflow.com/questions/3643555/multiply-rows-of-matrix-by-vector
个人分类: R|1706 次阅读|0 个评论
距离不同单位表达转化(IDL程序)
deliangwang 2013-2-2 20:14
Function distance_converter,data_in,unit_in=unit_in,unit_out=unit_out ;+ ;NAME: ; distance_converter ;PURPOSE: ; converter distance between different unit ;CALLING SEQUENCE: ; result=distance_converter(data,unit_in=unit_in,unit_out=unit_out) ;INPUT: ; data_in --- input data, scalar or vector ;OPTIONAL KEYWORD INPUT: ; unit_in --- Unit of input data, string scalar ;OUTPUT: ; data_out --- output data, scalar or vector ;OPTIONAL KEYWORD OUTPUT: ; unit_out --- Unit of output data, string scalar ; ;EXAMPLE: ; IDL print,distance_converter(1.0,unit_in='pc',unit_out='cm') ; 3.0856100e+18 ; IDL print,distance_converter(1.0,unit_in='pc',unit_out='m') ; 3.0856100e+16 ; IDL distance_converter(1.0,unit_in='pc',unit_out='AU') ; 206260.26 ; IDL print,distance_converter(1.0,unit_in='ly',unit_out='AU') ; 63239.527 ; ;REVISION HISTORY: ; Original by DL.Wang,Aug-31-2007 ;- ;########################### ;#### Fundmental Unit Astronomical_unit = 1.49597892D+13 ;cm Parsec = 3.08561D+18 ;cm Light_year = 9.4605D+17 ;cm ;################################### ;####### Unit converter cm_cm = 1.0D+0 cm_au = 1.0D+0/Astronomical_unit cm_A = 1.0D+8 cm_m = 1.0D-2 cm_pc = 1.0D+0/Parsec cm_kpc = 1.0D-3/Parsec cm_mpc = 1.0D-6/Parsec cm_ly = 1.0D+0/Light_year au_cm = Astronomical_unit A_cm = 1.0D-8 m_cm = 1.0D+2 pc_cm = Parsec kpc_cm = 1.0D+3*Parsec mpc_cm = 1.0D+6*Parsec ly_cm = Light_year ;######################################## ;##### distance converter ####### ;######################################## ; ;converter input unit to cm ; case unit_in of 'cm':data_in=data_in*cm_cm 'm':data_in=data_in*m_cm 'A':data_in=data_in*A_cm 'AU':data_in=data_in*au_cm 'pc':data_in=data_in*pc_cm 'kpc':data_in=data_in*kpc_cm 'Mpc':data_in=data_in*mpc_cm 'ly':data_in=data_in*ly_cm endcase ; ;converter cm to out unit ; case unit_out of 'cm':data_out=data_in*cm_cm 'm':data_out=data_in*cm_m 'A':data_out=data_in*cm_A 'AU':data_out=data_in*cm_au 'pc':data_out=data_in*cm_pc 'kpc':data_out=data_in*cm_kpc 'Mpc':data_out=data_in*cm_mpc 'ly':data_out=data_in*cm_ly endcase return,data_out End
个人分类: 编程笔记|2986 次阅读|0 个评论
能量不同单位表达的转化(IDL程序)
deliangwang 2013-2-2 20:12
Function energy_converter,data_in,unit_in=unit_in,unit_out=unit_out ;+ ;NAME: ; energy_converter ;PURPOSE: ; converter energy between different unit ;CALLING SEQUENCE: ; result=energy_converter(data,unit_in=unit_in,unit_out=unit_out) ;INPUT: ; data_in --- input data, scalar or vector ;OPTIONAL KEYWORD INPUT: ; unit_in --- Unit of input data, string scalar ;OUTPUT: ; data_out --- output data, scalar or vector ;OPTIONAL KEYWORD OUTPUT: ; unit_out --- Unit of output data, string scalar ; ;EXAMPLE: ; IDL print,energy_converter(1.0,unit_in='keV',unit_out='Hz') ; 2.4179847e+17 ; ; IDL print,energy_converter(1.0,unit_in='keV',unit_out='A') ; 12.398443 ; ; IDL print,energy_converter(1.0,unit_in='keV',unit_out='ergs') ; 1.6021733e-09 ; ; IDL print,energy_converter(1.0,unit_in='keV',unit_out='T') ; 11604508. ; ;REVISION HISTORY: ; Original by DL.Wang,Aug-30-2007 ;- ;################################# ;##### Fundmental contstant light_speed=2.99792458D+18 ; A Hz plank_const=6.62606868D-27 ;erg / Hz l_k=1.16045077D+7 ; K / keV q=1.60217330D-9 ;keV / erg electron_mass=510.998899D+0 ;keV proton_mass=938271.991D+0 ;keV earth_mass=5.9736D+27 ; g sun_mass=1.989D+33 ; g ;################################# ;##### Unit converter kev_kev = 1.0D+0 ev_kev = 1.0D-3 hz_kev = plank_const/q ghz_kev = (plank_const/q)*1.0D+9 A_kev = plank_const*light_speed/q ergs_kev = 1.0D+0/q cm_kev = 1.0D+8*A_kev T_kev = 1.0D+0/l_k kev_ev = 1.0D+3 kev_hz = q/plank_const kev_ghz = kev_hz*1.0D-9 kev_A = plank_const*light_speed/q kev_cm = kev_A*1.0D-8 kev_ergs= q kev_T = l_k ;######################################## ;#### energy_converter #### ;######################################## ; ;converter input unit to keV ; case unit_in of 'keV':data_in=data_in*kev_kev 'eV':data_in=data_in*ev_kev 'Hz':data_in=data_in*hz_kev 'GHz':data_in=data_in*ghz_kev 'A':data_in=(1.0D0/data_in)*A_kev 'cm':data_in=(1.0D0/data_in)*cm_kev 'ergs':data_in=data_in*ergs_kev 'T':data_in=data_in*T_kev endcase ; ;converter keV to out unit ; case unit_out of 'keV':data_out=data_in*kev_kev 'eV':data_out=data_in*kev_ev 'Hz':data_out=data_in*kev_hz 'GHz':data_out=data_in*kev_ghz 'A':data_out=(1.0D0/data_in)*kev_A 'cm':data_out=(1.0D0/data_in)*kev_cm 'ergs':data_out=data_in*kev_ergs 'T':data_out=data_in*kev_T endcase return,data_out End
个人分类: 编程笔记|2866 次阅读|0 个评论
Matrix Norms vs. Vector Norms
zhenliangli 2013-1-13 16:12
The four vector norms that play signi cant roles in the compressedsensing framework arethe $\iota_0$ ,the$\iota _1$, $\iota_2$, and$\iota_\infty$norms, denoted by$\|x\|_0$,$\|x\|_1$,$\|x\|_2$and$\|x\|_\infty$respectively. Given a vector $x\in R^m$. $\|x\|_0$ is equal to the number of the non-zero elements in the vector $x$. $\|x\|_1=\sum_{i=1}^{m}|x_i|$. $\|x\|_2=\sqrt{x_1^2+x_2^2+...+x_m^2}$. $\|x\|_\infty=\max_i |x_i|$. The vector norm$\|x\|_p$for$p=1, 2, 3, ...$is defined as $\|x\|_p=(\sum_{i=1}^m |x_i|^p )^\frac{1}{p}.$ The$p$-norm of vector$x$is implemented asNorm , with the 2 -norm being returned byNorm . These norms have natural generalizations to matrices, inheriting many appealing properties from the vector case. In particular, there is a parallel duality structure. For two rectangular matrices $X\in R ^{m \times n}$, $X\in R ^{m \times n}$ . Define the inner product as $X,Y:= \sum_{i=1}^m \sum_{j=1}^n X_{ij}Y_{ij}= \sqrt{Tr(X^T Y)}.$ The norm associated with this inner product is called the Frobenius (or Hilbert-Schmidt) norm $\|X\|_F$ . The Frobenius norm is also equal to the Euclidean, or $\iota_2$, norm of the vector of singular values, i.e., $\|X\|_F:= \sqrt{X,X}=\sqrt{X^T X}=({\sum_{i=1}^r \delta_i^2})^{\frac{1}{2}}.$ The operator norm (or induced 2 -norm) of a matrix is equal to its largest singular value (i.e., the $\iota_1$ norm of the singular values): $\|X\|:= \delta_ 1(X).$ The nuclear norm of a matrix is equal to the sum of its singular values, i.e., $\|X\|_*:= \sum_{i=1}^r {\delta_i(X)}$, and is alternatively known by several other names including the Schatten 1 -norm, the Ky Fan r-norm, and the trace class norm. Since the singular values are all positive, the nuclear norm is equal to the $\iota_1$ norm of the vector of singular values. These three norms are related by the following inequalities which hold for any matrix $X$ of rank at most $r$: $\|X\| \leq \|X\|_F \leq \|X\|_{*} \leq \sqrt{r}\|X\|_F \leq r\|X\|.$ Table 1: A dictionary relating the concepts of cardinality and rank minimization . parsimony concept cardinality rank Hilbert Space norm Euclidean Frobenius sparsity inducing norm $\iota_1$ nuclear dual norm $\iota_{\infty}$ operator norm additivity disjoint support orthogonal row and column spaces convex optimization linear programming semide nite programming The rank of a matrix $X$ is equals to the number of the singular values, and the singular values are all non-zeros. The $\iota_0$ norm of a vector is the number of the non-zero elements in the vector. In compressed sensing (in sparse representation), the original objective function is: $\min \|x\|_0$ s.t. $Ax=b$. In low rank representation, the original objective function is: $\min rank(Z)$ s.t. $X=XZ$. I'm curious to the relation ship between sparse representation and low rank representation. References: Weisstein, Eric W. "Vector Norm." From MathWorld --A Wolfram Web Resource. http://mathworld.wolfram.com/VectorNorm.html . Recht, Benjamin, Maryam Fazel, and Pablo A. Parrilo. "Guaranteed minimum-rank solutions of linear matrix equations via nuclear norm minimization." SIAM review 52, no. 3 (2010): 471-501. Apendix: Matlab code: from http://www.mathworks.cn/cn/help/matlab/ref/norm.html Vector and matrix norms Syntax n = norm(X,2) n = norm(X) n = norm(X,1) n = norm(X,Inf) n = norm(X,'fro') n = norm(v,p) n = norm(v,Inf) n = norm(v,-Inf) Description Thenormfunction calculates several different types of matrix and vector norms. If the input is a vector or a matrix: n = norm(X,2) returns the 2-norm ofX. n = norm(X) is the same asn = norm(X,2). n = norm(X,1) returns the 1-norm ofX. n = norm(X,Inf) returns the infinity norm ofX. n = norm(X,'fro') returns the Frobenius norm ofX. In addition, when the input is a vectorv: n = norm(v,p) returns the p -norm ofv. The p -norm issum(abs(v).^p)^(1/p). n = norm(v,Inf) returns the largest element ofabs(v). n = norm(v,-Inf) returns the smallest element ofabs(v).
个人分类: Machine Intelligence|6177 次阅读|0 个评论
局部线性支持向量机——Local Linear Support Vector Machine
rockycxy 2012-6-12 09:10
ICML 2011 的文章,是对SVM的改进,主要是考虑性能与训练时间之间的平衡。实验部分,性能虽然和最好的方法有一定的差距,但是训练测试时间大大缩短。这篇文章的想法比较巧妙,值得一读。
2 次阅读|0 个评论
[转载]Vanpik:统计学习理论;支持向量机SVM
yiming123 2012-4-8 10:03
========================================================= 支持向量机SVM ( Support Vector Machines)是由Vanpik领导的ATTBell实验室研究小组 在1963年提出的一种新的非常有潜力的分类技术, SVM是一种基于统计学习理论的模式识别方法,主要应用于模式识别领域.由于当时这些研究尚不十分完善,在解决模式识别问题中往往趋于保守,且数学上比较艰涩,因此这些研究一直没有得到充的重视.直到90年代,一个较完善的理论体系—统计学习理论 ( StatisticalLearningTheory,简称SLT) 的实现和由于神经网络等较新兴的机器学习方法的研究遇到一些重要的困难,比如如何确定网络结构的问题、过学习与欠学习问题、局部极小点问题等,使得SVM迅速发展和完善,在解决小样本 、非线性及高维模式识别问题中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中.从此迅速的发展起来,现在已经在许多领域(生物信息学,文本和手写识别等)都取得了成功的应用。 SVM的关键在于核函数,这也是最喜人的地方。低维空间向量集通常难于划分,解决的方法是将它们映射到高维空间。但这个办法带来的困难就是计算复杂度的增加,而核函数正好巧妙地解决了这个问题。也就是说,只要选用适当的核函数,我们就可以得到高维空间的分类函数。在SVM理论中,采用不同的核函数将导致不同的SVM算法 它是一种以统计学理论为基础的,以结构风险最小化的学习机学习方法,要优于神经网络学习================================================统计学习原理(STL)通过结构风险最小化原则(SRM)来解释机器学习 期望风险 = 经验风险 + 置信范围 经验风险也就是对样本的分类精度,置信范围由学习机器的复杂度(VC维)决定。 过学习(overfitting),也叫过拟和 由于学习机器过于复杂,尽管保证了分类精度很高(经验风险很小),但由于VC维太大,所以期望风险仍然很高。 典型的过学习是多层前向网络的BP算法 欠学习(underfitting),也叫欠拟和 这类情况很多,由于学习机器过于简单,分类能力不够,造成对样本无法正确分类。此时经验风险较高,而VC维较小 推广性,准确的说法叫做学习机器的泛化能力(Generalization) 结构风险较小的学习机器,能适应更多类别的样本分类,泛化性就较高。 学习精度,一般没有这类说法,从字面理解大概是指经验风险,也就是学习机器对样本的分类能力。 ========================================== 支持向量机的特点与不足 SVM有如下主要几个特点: (1)非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射; (2)对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方法的核心; (3)支持向量是SVM的训练结果,在SVM分类决策中起决定作用的是支持向量。 (4)SVM 是一种有坚实理论基础的新颖的小样本学习方法。它基本上不涉及概率测度及大数定律等,因此不同于现有的统计方法。从本质上看,它避开了从归纳到演绎的传统过程,实现了高效的从训练样本到预报样本的“转导推理”,大大简化了通常的分类和回归等问题。 (5)SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。 (6)少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本、“剔除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。这种“鲁棒”性主要体现在: ①增、删非支持向量样本对模型没有影响; ②支持向量样本集具有一定的鲁棒性; ③有些成功的应用中,SVM 方法对核的选取不敏感 两个不足: (1) SVM算法对大规模训练样本难以实施 由于SVM是借助二次规划来求解支持向量,而求解二次规划将涉及m阶矩阵的计算(m为样本的个数),当m数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。针对以上问题的主要改进有有J.Platt的SMO算法、T.Joachims的SVM、C.J.C.Burges等的PCGC、张学工的CSVM以及O.L.Mangasarian等的SOR算法 (2) 用SVM解决多分类问题存在困难 经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。可以通过多个二类支持向量机的组合来解决。主要有一对多组合模式、一对一组合模式和SVM决策树;再就是通过构造多个分类器的组合来解决。主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。如:与粗集理论结合,形成一种优势互补的多类问题的组合分类器。 =========================================================== svm的一些理解(网上收集) 分类: svm研究 2009-07-27 16:55 1651人阅读 评论 (2) 收藏 举报 机器学习 (Machine Learning, ML) 的目的是根据给定的训练样本求对某系统输入输出之间依赖关系的估计 , 使它(这种关系)能够对未知输出做出尽可能准确地预测 。机器学习至今没有一个精确的公认的定义。作为人工智能 (Artificial Intelligence, AI) 的一个重要研究领域, ML 的研究工作主要围绕学习机理、学习方法和面向任务这三个基本方面进行研究。模式识别、函数逼近和概率密度估计是三类基本的 ML 问题。 从数学的角度来考虑,机器学习问题就是已知 n 个独立同分布的观测样本,在同一组预测函数中求一个最优的函数对依赖关系进行估计,使期望风险 R 最小。损失函数是评价预测准确程度的一种度量,它与预测函数 f(x) 密切相关。而 f(x) 的期望风险依赖于概率分布和损失函数,前者是客观存在的,后者是根据具体问题选定的,带有(主观的)人为的或偏好色彩。 期望风险 的大小直观上可以理解为 ,当我们用 f(x) 进行预测时,“平均”的损失程度,或“平均”犯错误的程度。 但是,只有样本却无法计算期望风险,因此,传统的学习方法用样本定义经验风险 Remp 作为对期望风险的估计,并设计学习算法使之最小化。即所谓的 经验风险最小化 (Empirical Risk Minimization, ERM) 归纳原则 。经验风险是用损失函数来计算的。对于模式识别问题的损失函数来说,经验风险就是训练样本错误率;对于函数逼近问题的损失函数来说,就是平方训练误差;而对于概率密度估计问题的损失函数来说, ERM 准则就等价于最大似然法。事实上,用 ERM 准则代替期望风险最小化并没有经过充分的理论论证,只是直观上合理的想当然做法。 也就是说,经验风险最小不一定意味着期望风险最小。其实,只有样本数目趋近于无穷大时,经验风险才有可能趋近于期望风险。 但是很多问题中样本数目离无穷大很远,那么在有限样本下 ERM 准则就不一定能使真实风险较小啦。 ERM 准则不成功的一个例子就是神经网络的过学习问题(某些情况下,训练误差过小反而导致推广能力下降,或者说是训练误差过小导致了预测错误率的增加,即真实风险的增加)。 统计学习理论 (Statistical Learning Theory, SLT) 和支持向量机 (Support Vector Machine, SVM) 建立了一套较好的有限训练样本下机器学习的理论框架和通用方法,既有严格的理论基础,又能较好地解决小样本、非线性、高维数和局部极小点等实际问题,其核心思想就是学习机器(又叫预测函数,或学习函数,或学习模型) F 要与有限的训练样本相适应。 在学习算法中需要选择恰当的 F ,这里的关键因素是 F 的大小,或者 F 的丰富程度,或者说 F 的“表达能力”, VC 维 (Vapnik-Chervonenkis Dimension) 就是对这种“表达能力”的一种描述。 VC 维的定义如下:对于一个指示函数集,如果存在 h 个样本能够被函数集中的函数按所有可能的 2 的 h 次幂种形式分开,则称函数集能够把 h 个样本都打散, h 的最大值就是函数集的 VC 维。 VC 维是 SLT 中的一个重要概念,它是函数集学习性能的重要指标。目前尚没有通用的关于任意函数集 VC 维计算的理论,只知道一些特殊的函数集的 VC 维。比如,在 n 维空间中线性分类器和线性实函数的 VC 维是 n+1 ,而 f(x,a) = sin(ax) 的 VC 维则为无穷大。对于给定的学习函数集,如何(用理论或实验的方法)计算其 VC 维是当前统计学习理论中有待研究的一个问题。 由上文可知, 在有限样本情况下,仅仅用 ERM 来近似期望风险是行不通的。 统计学习理论给出了期望风险 R 与经验风险 Remp 之间关系: R = ( Remp + e ) 。 其中 e = g(h/n) 为置信区间, e 是 VC 维 h 的增函数,也是样本数 n 的减函数。右端称为结构风险,它是期望风险 R 的一个上界。经验风险的最小依赖较大的 F (样本数较多的函数集)中某个 f 的选择,但是 F 较大,则 VC 维较大,就导致置信区间 e 变大,所以要想使期望风险 R 最小, 必须选择合适的 h 和 n 来使不等式右边的结构风险最小,这就是结构风险最小化 (Structural Risk Minimization, SRM) 归纳原则 。实现 SRM 的思路之一就是设计函数集的某种结构使每个子集中都能取得最小的经验风险(如使训练误差为 0 ),然后只需选择适当的子集使置信范围最小,则这个子集中使经验风险最小的函数就是最优函数。 SVM 方法实际上就是这种思想的具体实现。 SVM 是一种基于统计的学习方法,它是对 SRM 的近似。概括地说, SVM 就是首先通过用内积函数定义的非线性变换将输入空间变换到一个高维空间,然后再在这个空间中求(广义)最优分类面的分类方法。 名词解释 1 ——支持向量机:“机( machine ,机器)”实际上是一个算法。在机器学习领域,常把一些算法看作是一个机器(又叫学习机器,或预测函数,或学习函数)。“支持向量”则是指训练集中的某些训练点的输入 xi 。它是一种有监督(有导师)学习方法,即已知训练点的类别,求训练点和类别之间的对应关系,以便将训练集按照类别分开,或者是预测新的训练点所对应的类别。 名词解释 2 ——符号函数: sgn(a) = 1, a = 0;sgn(a) = -1, a 0. 一般地,考虑 n 维空间上的分类问题,它包含 n 个指标和 l 个样本点。记这 l 个样本点的集合为 T = {(x1,y1),...,(xl,yl)} ,其中 xi 是输入指标向量,或称输入,或称模式,其分量称为特征,或属性,或输入指标; yi 是输出指标向量,或称输出, i = 1,...,l 。 这 l 个样本点组成的集合称为训练集,所以我们也称样本点位训练点。 对于训练集来说,有线性可分、近似线性可分和线性不可分等三种情况,这就是分类问题的三种类型。其实,无论是哪类问题,都有对应的分类机,这将在以下的内容中进行详细阐述。那么,有人可能会问,什么叫线性可分?通俗地讲,就是可以用一条或几条直线把属于不同类别的样本点分开。实际上,求解分类问题,就是要求出这条或这几条直线!那么,问题是:怎么求?这里先以二维两类线性可分的分类问题为例,做个详细的说明,然后再过渡到多类分类问题。 首先,回忆一下平面(二维)坐标系中某条直线的方程。还记得直线的一般方程 Ax + By + C = 0 (公式一) 吧,我们引入向量的概念,则该方程可以写成 {x,y} 与 {A,B} 的内积加上 C 等于 0 ,即 {A,B} ·{x,y} + C = 0 你还记得法向量和方向向量的概念吗?其实 {A,B} 就是法向量,而 {B , -A} 就是方向向量了。那么我们可以把直线的一般方程简化成为 w · x + b = 0 (公式二) 的形式(因为这个式子是大家最常用的嘛)。注意:(公式二)中的 x 和(公式一)中的 x 不同,前者一个二维向量,后者是一个实数。 对于两类问题,如果将某一直线两侧的样本点分为正类和负类,则用符号函数的方式推断点 x 所对应的类别 y 的决策函数如下: y = f(x) = sgn((w · x) + b) (公式三) 根据符号函数的定义,很明显 y 的取值要么是 1 ,要么是 -1 ,也就是说样本点的类别只有 1 和 -1 两类。此时的分类问题是:对于任意给定的一个新的模式 x ,根据训练集推断它所对应的输出 y 是 1 还是 -1 。 这就是线性可分的分类问题,也是一个模式识别问题,我们要做的工作就是要求出 w 和 b 。 直接求这两个参数基本上不太可能,除了训练集我们又没有别的信息可以利用,这可如何是好?前辈们给出了一个绝妙的方法——就是所求得的预测函数 f(x) 对原有样本的分类错误率最小。那么,问题又出来了,这个错误率咋算?损失函数就是专门用来评价预测准确程度的一种度量,而且模式识别问题使用的正是“ 0-1 损失函数”。根据我的上一篇学习体会——《从机器学习到支持向量机》 http://axywestwind.bokee.com/viewdiary.14525093.html 中的阐述, 使(公式三)中的 f(x) 的预测误差最小的问题转化成期望误差最小、经验风险最小,最后在统计学习理论中又转化为结构风险最小 (Structural Risk Minimization, SRM) 。而实现 SRM 的思路之一就是设计预测函数集的某种结构使每个子集中都能取得最小的经验风险(如使训练误差为 0 ),然后只需选择适当的子集使置信范围最小,则这个子集中使经验风险最小的函数就是最优函数。 SVM 方法实际上就是这种思想的具体实现,它是对 SRM 的近似。说了半天,终于和上次的内容连接上了。但是, 为了求解 SRM 这个最小化问题,还得将它转化成数学形式。 SVM 方法是从线性可分情况下的最优分类面提出的,它是实现统计学习理论思想的方法。什么是最优分类面呢?这要从最优分类线说起。 所谓最优分类线就是要求分类线不但能将两类无错误地分开,而且要使两类的分类间隔最大。前者是保证经验风险最小(如使训练误差为 0 ),而使分类间隔最大实际上就是使推广性的界中的置信范围最小,从而使真实风险最小。 推广到高维空间,最优分类线就成为最优分类面。 那么如何构造这个最优分类面呢?方法有 2 个:平分最近点法和最大间隔法。有趣的是,这两个方法殊途同归,它们求解得到的是同一个超平面(由三个定理联合起来证明了这个结论)。由这三个定理可知,这两个方法与一个最优化问题求解方法等价,这个方法就称为“线性可分支持向量分类机”。其实, 这个分类机是将最大间隔法求解最优分类面的最优化问题转化为其对偶问题,从而通过求解相对简单的对偶问题来求解原分类问题的算法。随后引入松弛变量和惩罚因子来解决非线性分类问题,并且允许一定的分类错误(软间隔),最终得到非线性软间隔的标准的 C- 支持向量机 (C-SVC) 。其中的巧妙之处就在于把一个复杂的最优化问题的求解简化为对原有样本数据的内积运算。 我们要做的就是选择适当的核函数及其参数、惩罚因子就可以了。 概括地说, SVM 就是首先通过用内积函数定义的非线性变换将输入空间变换到一个高维空间,然后再在这个空间中求(广义)最优分类面的分类方法。 那么,如何通过计算机来求解这个内积运算呢?且听下回分解!下次会介绍选块算法、分解算法,并重点介绍由分解算法改进得到的最经典的 SMO 算法。 目录 1. 提出背景 2. 算法思想 3. 算法描述 a) Chunking 算法 b) Qsuna 算法 4. 算法优越性讨论 a) 人工神经网络 b) 支持向量机 c) ANN 的缺点 d) VM 的优点 5. 主要应用领域 1. 提出背景 支持向量机 SVM ( Support Vector Machines) 是由 Vanpik 领导的 ATTBell 实验室研究小组在 1963 年提出的一种新的非常有潜力的分类技术 , SVM 是一种基于统计学习理论的模式识别方法,主要应用于模式识别领域。 由于当时这些研究尚不十分完善 , 在解决模式识别问题中往往趋于保守 , 且数学上比较艰涩 , 因此这些研究一直没有得到充的重视。 直到 90 年代 , 一个较完善的理论体系—统计学习理论 ( StatisticalLearningTheory, 简称 SLT) 的实现和由于神经网络等较新兴的机器学习方法的研究遇到一些重要的困难 , 比如如何确定网络结构的问题、过学习与欠学习问题、局部极小点问题等 , 使得 SVM 迅速发展和完善 , 在解决小样本、非线性及高维模式识别问题中表现出许多特有的优势 , 并能够推广应用到函数拟合等其他机器学习问题中 , 从此迅速的发展起来。 2. 算法思想 支撑向量机主要采用了分解算法思想,它将 QP 问题分解为一系列规模较小的子问题,希望通过对子问题的迭代求解,得到 QP 问题的全局最优解 。这样解决了存储空间受限的问题,另一方面,要使算法可行,还必须解决诸如分解策略,迭代算法的收敛性,收敛条件,优化时间,以及如何利用解的稀疏性来优化加快速度等问题。 SVM 的关键在于核函数 ,这也是最喜人的地方。低维空间向量集通常难于划分,解决的方法是将它们映射到高维空间。但这个办法带来的困难就是计算复杂度的增加,而核函数正好巧妙地解决了这个问题。也就是说,只要选用适当的核函数,我们就可以得到高维空间的分类函数。在 SVM 理论中,采用不同的核函数将导致不同的 SVM 算法 3. 算法描述 3.1 Chunking 算法 Chunking 算法是 V.Va pnik 等人提出的一种求解 QP 问题的算法。它可看成是一种不完全的分解算法。算法将原先的 QP 问题分解成一系列待优化的子问题。任何一个子问题都维护一个与其相关的变量的子集,在优化过程中保持其他的变量值不变。子问题维护所有上一步优化后得到的非零变量,及其它违反 KKT 条件最严重的 M 个变量。这样经过反复迭代优化,最终将得到 QP 问题的全局最优解。 算法描述 1. 选择初始子问题,包括选择问题的规模 nl ,待优化的变量子集及每次添加进优化子集的违反 KKT 条件的变量数目 M 。 2. 采 用一种 QP 优化器求解上述子问题,得到一个分类器。 3. 用剩余训练样本测试上述分类器,采用 KKT 条件评价测试结果。如果所有变量都满足 KKT 条件,则结束训练 ; 否则,选择违反 KKT 条件最剧烈的 M 个变量,并与上一步优化得到的非零值变量构成待优化子问题,重复第 2 步。 3.2 Osuna 算法 199 7 年 , E dgarOs una 提出一个求解 SVM 中问题的分解算法,既是把一个大型 QP 问题分解成一个小型 QP 问题组成的序列,在上一步的 QP 子问题中至少加入一个违反 KKT 条件的点而构成下一步的 QP 子问题,每一步优化目标函数的值并始终保持满足约束条件,从而使这些 QP 子问题构成的序列收敛,直至最后所有的点都满足 KKT 条件,也即得到了原问题的解。 4. 算法优越性讨论 本部分主要讨论了支持向量机与目前非常流行的人工神经网络相比,具有的优越性,仅供参考。 4.1 人工神经网络 神经网络是基于传统统计学的基础上的 。传统统计学研究的内容是样本无穷大时的渐进理论,即当样本数据趋于无穷多时的统计性质 , 而实际问题中样本数据往往是有限的。因此,假设样本数据无穷多,并以此推导出的各种算法很难在样本数据有限时取得理想的应用效果。 4.2 支持向量机 支持向量机是基于统计学理论的基础上的 , 可以克服神经网络难以避免的问题。 通过支持向量机在逼近能力方面与 BP 网络仿真结果的比较表明 , 支持向量机具有较强的逼近能力和泛化能力。 4.3 人工神经网络存在的一些缺陷 人工神经网络是目前研究较多的交叉学科,由于通过选择适当的隐单元数和网络层次 , 前馈网络能以任意精度逼近非线性函数 (Funahashi,1989), 因此神经网络技术被广泛应用到工业过程的建模与控制中 , 并取得了巨大成功。尽管如此 , 神经网络仍存在一些缺陷 : (1) 网络结构需要事先指定或应用启发算法在训练过程中修正 , 这些启发算法难以保证网络结构的最优化; (2) 网络权系数的调整方法存在局限性; (3) 神经网络易陷入局部最优 , 有些甚至无法得到最优解; (4) 过分依赖学习样本 , 即模型性能的优劣过分依赖于模型训练过程中样本数据 , 而大多数情况下 , 样本数据是有限的。除次 , 许多实际问题中的输入空间是高维的 , 样本数据仅是输入空间中的稀疏分布 , 即使能得到高质量的训练数据 , 数据量必然很大。但是样本数要是很多的话 , 必然使训练时间大大增加; (5) 目前尚无一种理论能定量的分析神经网络的训练过程的收敛速度 , 及收敛速度的决定条件 , 并对其加以控制; (6) 神经网络的优化目标是基于经验的风险最小化 , 这就不能保证网络的泛化能力。 尽管存在以上问题 , 神经网络仍然取得了很多成功应用 , 其原因在于 , 神经网络的设计与设计者有很大的关系。 设计者若在网络设计过程中有效的利用了自己的经验知识和先验知识 , 可能会得到较理想的网络结构。因此 , 神经网络系统的优劣是因人而异的。 4.4 支持向量机的新特点 支持向量机是以统计学理论为基础的 , 因而具有严格的理论和数学基础 , 可以不象神经网络的结构设计需要依赖于设计者的经验知识和先验知识。支持向量机与神经网络的学习方法相比 , 支持向量机具有以下特点 : (1) 支持向量机是基于结构风险最小化 (SRM,structuralriskminimization) 原则 , 保证学习机器具有良好的泛化能力; (2) 解决了算法复杂度与输入向量密切相关的问题; (3) 通过引用核函数 , 将输入空间中的非线性问题映射到高维特征空间中在高维空间中构造线性函数判别; (4) 支持向量机是以统计学理论为基础的 , 与传统统计学习理论不同。 它主要是针对小样本情况 , 且最优解是基于有限的样本信息 , 而不是样本数趋于无穷大时的最优解; (5) 算法可最终转化为凸优化问题 , 因而可保证算法的全局最优性 , 避免了神经网络无法解决的局部最小问题; (6) 支持向量机有严格的理论和数学基础 , 避免了神经网络实现中的经验成分。 5. 主要应用领域 现在已经在许多领域,如:生物信息 学,文本和手写识别等,都取得了成功的应用。 Solu 兄要我写点什么,可实在知道的很少,只好写写自己看书看论文的经过。 所以这一切是从 SVM 开始的。我喜欢通过一些直观的东西理解,所以下面的讨论就集中在二类问题上( y=-1 or +1 ),并且样本数据是二维的( X=(x1,x2) )。平面上的点的二分类问 题。我们的目标是从一堆训练数据(比如 L 个 (xi,yi) 对 , 这里还要做限制,就是这些数据是 来自一个潜在分布,并且相互之间是独立的,这些限制对于 Vapnik 证明的那些界是必要的 )中学到一些什么,我们把目标再定低一点,希望学到给定样本数据 Xt, 如何推出它的类别 Yt 。 该如何处理这种问题呢? 一种简单的方法就是我们假定这些数据(或其背后的分布)来 自于(或者足够接近)某个候选模型集,这样问题就进一步简化了,变成了一个搜索问题 (如何在某个候选集中选一个模型使得其能够较好地解释训练数据) 。看来好像问题已经 简化得很厉害了,但这里还有两个问题,首先到底在一个什么样的模型集中搜索,其次什 么是“比较好的解释”, 前者是模型复杂度的问题,也就是正则化的问题,后者则是损失 函数的问题 。(当然这里还有很多很多的问题,如先验知识、数据中是否有噪声、样本数 据的各维中是否有冗余是否相关等等)。 我们先看看模型复杂度,无论是奥姆斯剃刀理论还是“杀鸡焉用宰牛刀”都告诉我们, 对于简单的问题不要用太复杂的方法。但标准是什么呢?如何分辨指甲刀和西瓜刀呢?通 常我们要看这把刀能干什么(并且是至多能做什么)。这里要解决的问题是分类,那么要 看的就是一个模型集的分类能力(给定某个样本数据 x ,给出其相应的类别,也就是说所谓 “分类”可以看作对样本数据的解释)。 VC 维就是描述这种能力的一种度量。一个模型集 是由很多模型组成的,每个模型可以对样本数据做出一种解释(也就是给定任意样本数据 使用该模型可以给出一个确定的类别),一个模型集的 VC 维是一个正整数,表示使用这个 模型集可以“至多”“任意”解释的样本数据的个数。 例如一个模型集的 VC 维是 3 ,就表示 这个模型集可以“至多”“任意”解释 3 个样本数据,所谓“任意解释”,就是给定 3 个样 本数据 (x1,x2,x3) ,我们可以在这个模型集中找到 2^3=8 个模型,每个模型分别 给出不同的类别给这 3 个样本数据(如,模型 f1 将 x1,x2,x3, 分类为 -1-1-1,f2 为 -1-1+1,.. .,f8 为 +1+1+1 ) , 所谓“至多”就是我们只能“找到”(也就是说不要求任意 3 个样本数据 可以被任意解释) 3 个样本数据被任意解释而无法找到 4 个。 VC 维的意义主要 是在概念上而非计算上,因为通常很多模型的 VC 维都是无法求得的。 但也有一些特殊的模型集的 VC 维是可以直接求得的,比如 n 维空间的所有“超平面”的 VC 维就是 n+1 。我们回到上面的问题设定,我们考虑 2 维平面上所有的直线组成的模型集( 易见每条直线都可以将整个平面分为两部分, +1 类 ,-1 类,线上的部分可以随便 算到 +1 类或 -1 类),我们发现我们可以很容易找到 3 个点(样本数据),只要这 3 个点不共 线,我们便可以找到 8 条直线给出这 3 个点的所有的类别可能。但 4 个点却无法找到,可以 证明 n 维空间的所有超平面的 VC 维就是 n+1 。 这样一来使用超平面就可以方便的控制模型的复杂度,但这里存在一个问题,那就是这 里的 VC 维是与样本数据的维数相关的,这为后面使用核方法就造成了困难。 所以考虑另一 种相近的模型集,这个模型集里的模型是一个个“超平板” -- 带有确定厚度的 超平面,每个“超平板”将空间分为两部分,自己再占一部分,自己占的这部分不做解释 (拒绝分类)(由于 VC 维是能够“找到”若干个样本,所以尽管不是对整个样本空间进行 解释,但并不影响 VC 维的计算。 那这样做影响了什么呢?这是个问题)。并且 Vapnik 证明了这个板的厚度是这个模型集的 VC 维的上界,从而控制模型集的复杂度可以通过控制 板的厚度来实现。这是一个重要的进步, 这个模型集的复杂度与样本数据的维数无关了, 也使得 SVM 使用 kernel trick 成为可能 。 为什么厚的板的 VC 维就小呢? Learing with kernels 里面有个很好的图。简单起见,我 们去掉超平面的那个常数项,考虑 2 维平面,也就是所有的超平板都过原点,假定样本数据 都分布在半径为 R 的以原点为圆心的圆内,可见随着板的厚度的增加,我们就没有办法再找 到 3 个点能够被任意解释了。也就是说尽管在一个很高维的空间我们仍旧可以通过控制板的 厚度,使得我们的模型集的复杂度不是很大。(但这里有对数据分布的限制,那个 R ,这会 造成什么问题呢? 这是个问题)。 这个板的厚度也就是通常提到的分类面的 margin ,对于这个 margin 还有很多其他的解释 ,如 margin 引入了 robust 啊等等,但我觉得对于 SVM 关键是维数无关。 前面提到一个分类器的训练包含两个问题 损失函数以及正则化 (很多监督学习算法的目 标函数也都是不同的损失函数与不同的正则化项的组合)。 前者是衡量当前候选分类器在 训练数据上的性能(对应贝叶斯方法中的似然函数) , 后者则是衡量当前学习器所来自的 模型集的复杂度(对应贝叶斯方法中的先验概率) 。 Vapnik 关于分类器的推广能力的界也 就是这两部分, 也就是说如果我们能在一个非常简单的模型集中找到一个分类器,使得其 能非常好地解释训练数据(具有很小的损失),那么这个分类器将会以很大的概率在未来 的数据上表现很好 。这也就引出了 Vapnik 的结构风险最小化, 所谓结构风险最小化也就是 首先确定一组嵌套的模型集( F1 包含于 F2 。。。 FN ) , 并且随着下标的增加模型集的 VC 维也 随之增加,也就是从模型集 F1 开始模型集变得越来越复杂。我们从每个模型集中选出一个 分类器( f1,f2,...,fN ),使得每个分类器均在各自的模型集中使得损失函数最小。这样 我们就同时获得上面两个问题(模型复杂度以及候选分类器在训练集上的损失)的答案。 利用 Vapnik 的界在模型复杂度与训练集上的表现进行折中,我们就可以找到一个最佳的分 类器了。 这个指导原则其实也可以从“奥姆斯剃刀理论(如无必要勿增实体)”来解释。 但要找到能够实现结构风险最小化的算法是很困难的, Vapnik 找了二十多年(我的估计 )。最后找到了 SVM ,并且 SVM 也成了最好的分类算法之一,但戏剧化的是: SVM 为什么会有 如此优异的性能却并不是前面的 margin theory 以及结构风险最小化所能解释的。 直到今天 这个问题似乎还不是很清楚,后面我还想稍微(我知道的非常有限)提一些这方面的工作 。 实现结构风险最小化存在两个困难 ,首先如前面提过的大多数的模型集的 VC 维是无法得 到的,其次便是这一组嵌套的模型集还应当足够的复杂(也就是有足够的能力去解释复杂 的数据)。 前面的一个问题使用线性模型集可以得到其相应的 VC 维,并且通过使用 margin ,我们还可以得到一个维数无关的对于模型集的 VC 维的估计。后面一个问题的答案则要由 核方法( kernel methods )来回答。 线性模型集无法处理线性不可分的情况,如当年的感知器无法处理异或问题,从而使得 神经网络沉寂多年。所谓异或问题,假设 4 个样本点, +1 类为点 (1,1) 和点 (-1,-1) , -1 类为 点点 (-1 , 1) 和点 (1 , -1) ,可见从所有 2 维平面上的直线中寻找,我们也无法找到一条直 线能够解决到这样的问题(使得两类样本分别在直线的两侧)。 为了能够处理线性不可分的情况,我们把样本数据映射到更高维的空间去( x-ph(x), 简单起见,我们假设 x 在 d 维欧氏空间, ph(x) 在 D 维欧氏空间, Dd , ph(x) 所在的空间常被 称之为“特征空间” ) ,这时有个 Cover's Theorem ,这个定理保证在维度越高数据越可能 是线性可分。 也就是我们将在这个高维空间寻找超平面,希望这个超平面能够分类训练数 据(使得两类样本分别在直线的两侧)。但空间的维数越高,所使用的超平面集的 VC 维就 越大。 但这时上面的 margin theory 就可以发挥作用了, 我们不使用超平面,而使用超平板 集,只要这些板的厚度足够,我们依旧可以控制模型集的 VC 维(复杂度)。 那么直接使用某个函数 ph(.) 进行映射,之后在 ph(.) 的空间中寻找最厚的并且能正确分 类训练数据的超平板,不就可以了吗?困难之处在于,由于往往我们需要将训练数据映射 到相当高维的空间(比如手写数字识别中使用 5 阶多项式就相当于将数据映射到了一个 10^ 10 的高维空间),从而使得计算具体的 ph(x) 变得非常困难。 无论“奥姆斯剃刀理论”或者“没有免费的午餐(凡事都要付出代价)”,都告诉我们 别做多余的事,仔细研究我们面临的问题(将数据映射到高维空间,寻找具有最大厚度的 超平面,使用这个超平面对将来的数据进行分类),我们其实不需要高维空间数据具体的 值(即我们不需要确切的 ph(x) ),我们只需要知道的是任意两个输入空间的数据 Xi 与 Xj 映 射到高维空间后他们之间的内积(也就是 ph(Xi), ph(Xj) ,内积是一个标量,可以看 作是两个向量, ph(Xi) 与 ph(Xj) ,之间的相似程度)。 并且我们发现数学中有一类双变元 函数就具有这样的特性 (k(Xi, Xj)= ph(Xi), ph(Xj)) , 这样一来我们就不需要去考虑 具体映射( ph(x) )的形式了,我们只需要知道通过使用核函数(前面的那个双变元函数) 就可以得到数据被映射到高维空间后的内积。 这样一来,只要一个学习算法只需要知道数据间的内积,那么他就可以通过使用核函数 从而被核化,从而就有了核 PCA ,核 LDA 等等一大批 kernel methods ,也成就了 Scholkopf , Smola 等人。 仍旧是“没有免费的午餐”,我们不去求具体的映射( ph(x) ),那么我们付出的代价 是什么呢?不知道具体的映射,仅知道任意向量间的内积, 使得我们无法知道向量与原点 的关系,但这一点对于我们寻找超平面划分数据是没有影响的 。 至此 SVM 产生所面临的困难全被扫除了。 有趣的是关于核函数的文章是 1990 发的, 92 年 Vapnik 提出了 SVM ,不知 kernel trick 是不是老瓦的最后障碍。 放假在家手边资料很少,所以很多都是信口开河,大家要有所警惕啊
8885 次阅读|6 个评论
[转载]Vector用法(C++ Primer中文版)
hailuo0112 2012-3-24 00:48
vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库负责管理存储元素的相关内存。我们把 vector称为 容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。我们将在第 9 章更详细地介绍容器。 使用 vector 之前,必须包含相应的头文件。本书给出的例子,都是假设已作了相应的 using 声明: #include vector using std::vector; vector 是一个 类模板 ( class template )。模板允许程序员编写单个类或函数定义,这个类和函数定义可用于不同的数据类型上。因此,我们可以定义保存 string 对象的 vector ,或保存 int 值的 vector ,又或是保存自定义的类类型对象(如 Sales_item 对象)的 vector 。将在第 16 章介绍如何定义程序员自己的类模板。幸运的是,使用类模板时只需要简单了解类模板是如何定义的就可以了。 声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。以 vector 为例,必须说明 vector 保存何种对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型: vectorint ivec; // ivec holds objects of type int vectorSales_item Sales_vec; // holds Sales_items 和其他变量定义一样,定义 vector 对象要指定类型和一个变量的列表。上面的第一个定义,类型是 vectorint ,该类型即是含有若干 int 类型对象的 vector ,变量名为 ivec 。第二个定义的变量名是 Sales_vec ,它所保存的元素是 Sales_item 类型的对象。 vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。 vector 类型的每一种都指定了其保存元素的类型。因此, vectorint 和 vector string 都是数据类型。 3.3.1 vector 对象的定义和初始化 vector 类定义了好几种构 造函数( 2. 3. 3 节) ,用来定义和初始化 vector 对象。表 3 - 4 列出了这些构造函数: 表 3-4 几种初始化 vector 对象的方式 vector T v1 ; vector 保存类型为 T 的对象。默认构造函数 v1 为空。 vector T v2 ( v1 ); v2 是 v1 的一个副本。 vector T v3 ( n , i ); v3 包含 n 个值为 i 的元素。 vector T v4 ( n ); v4 含有值初始化的元素的 n 个副本。 1. 创建确定个数的元素 若要创建非空的 vector 对象,必须给出初始化元素的值。当把一个 vector 对象复制到另一个 vector 对象时,新复制的 vector 中每一个元素都初始化为原 vector 中相应元素的副本。但这两个 vector 对象必须保存同一种元素类型 : vectorint ivec1; // ivec1 holds objects of type int vectorint ivec2(ivec1); // ok: copy elements of ivec1 into ivec2 vectorstring svec(ivec1); // error: svec holds strings, not ints 可以用元素个数和元素值对 vector 对象进行初始化。构造函数用元素个数来决定 vector 对象保存元素的个数,元素值指定每个元素的初始值: vectorint ivec4(10, -1); // 10 elements, each initialized to -1 vectorstring svec(10, "hi!"); // 10 strings, each initialized to "hi!" 关键概念: vector 对象动态增长 vector 对象(以及其他标准库容器对象)的重要属性就在于可以在运行时高效地添加元素。因为 vector 增长的效率高,在元素值已知的情况下,最好是动态地添加元素。 正如第 4 章将介绍的,这种增长方式不同于 C 语言中的内置数据类型,也不同于大多数其他编程语言的数据类型。特别地,如果读者习惯了 C 或 Java 的风格,由于 vector 元素连续存储,可能希望最好是预先分配合适的空间。但事实上,为了达到连续性, C ++ 的做法恰好相反,具体原因将在第 9 章探讨。 虽然可以对给定元素个数的 vector 对象预先分配内存,但更有效的方法是先初始化一个空 vector 对象,然后再动态地增加元素(我们随后将学习如何进行这样的操作)。 2. 值初始化 如果没有给出元素的初始化式,那么标准库将提供一个 值初始化的 ( value initialized )元素初始化式。这个由库生成的初始值用于初始化容器中的每个元素。而元素初始化式的值取决于存储在 vector 中元素的数据类型。 如果 vector 保存内置类型(如 int 类型) 的元素,那么标准库将用 0 值创建元素初始 化值: vectorstring fvec(10); // 10 elements, each initialized to 0 如果向量保存类类型(如 string )的元素,标准库将用该类型的默认构造函数 创建 元素初始值: vectorstring svec(10); // 10 elements, each an empty string 第 12 章将介绍一些有自定义构造函数但没有默认构造函数的类,在初始化这种类型的 Vector 对象时,程序员就不能仅提供元素个数,还需要提供元素初始值。 还有第三种可能性:元素类型可能是没有定义任何构造函数的类类型。这种情况下,标准库仍产生一个带初始值的对象,这个对象的每个成员进行了值初始化。 习题 习题 3.11 下面哪些 vector 定义不正确? ( a ) vector vector int ivec ; ( b ) vector string svec = ivec ; ( c ) vector string svec ( 10 ,” null ”); 习题 3.12 下列每个 vector 对象中元素个数是多少?各元素的值是什么? (a) vectorint ivec1; (b) vectorint ivec2(10); (c) vectorint ivec3(10,42); (d) vectorstring svec1; (e) vectorstring svec2(10); (f) vectorstring svec3(10,”hello”); 3.3.2 vector 的操作 vector 标准库提供许多类似于 string 对象的操作,表 3 - 5 列出了几种最重要的 vector 操作。 表 3-5 vector 操作 v. empty() 如果 v 为空,则返回 true, 否则返回 false 。 v . size () 返回 v 中元素的个数。 v . push _ back ( t ) 在 v 的末尾增加一个值为 t 的元素。 v 返回 v 中位置为 n 的元素。 v1 = v2 把 v1 的元素替换为 v2 中元素的副本。 v1 == v2 如果 v1 与 v2 相等,则返回 true 。 !=, , =, , = 保持这些操作符惯有的含义。 1. vector 对象的 size empty 和 size 操作类似于 string 类型的相关操作( 3 . 2 . 3 节)。成员函数 size 返回相应 vector 类定义的 size_type 的值。 使用 size_type 类型时,必须指出该类型是在哪里定义的。 vector 类型总是 包括 vector 的元素类型: vectorint::size_type // ok vector::size_type // error 2. 向 vector 添加元素 push_back() 操作接受一个元素值,并将它作为一个新的元素添加到 vector 对象的后面,也就是“ 插入 ( push )” 到 vector 对象的 “ 后面 ( back ) ” : // read words from the standard input and store them as elements in a vector string word; vectorstring text; // empty vector while (cin word) { text.push_back(word); // append word to text } 该循环 从标准输入读取一系列 string 对象,逐一追加到 vector 对象的后面。首先定义一个空的 vector 对象 text 。每循环一次就添加一个新元素到 vector 对象,并将从 输入 读取的 word 值赋予该元素。当循环结束时, text 就包含了所有读入的元素。 3. vector 的下标操作 vector 中的对象是没有命名的,可以按 vector 中对象的位置来访问它们。通常使用下标操作符来获取元素。 vector 的下标操作类似于 string 类型的下标操作 ( 3 .2 .3 节 ) 。 vector 的下标操作符接受一个值,并返回 vector 中该对应位置的元素。 vector 元素的位置从 0 开始。下例使用 for 循环把 vector 中的每个元素值都重置为 0 : // reset the elements in the vector to zero for (vectorint::size_type ix = 0; ix != ivec.size(); ++ix) ivec = 0; 和 string 类型的下标操作符一样, vector 下标操作的结果为左值,因此可以像循环体中所做的那样实现写入。另外,和 string 对象的下标操作类似,这里用 size_type 类型作为 vector 下标的类型。 在上例中,即使 ivec 为空, for 循环也会正确执行。 ivec 为空则调用 size 返回 0 ,并且 for 中的测试比较 ix 和 0 。第一次循环时,由于 ix 本身就是 0 ,则条件测试失败, for 循环体一次也不执行。 关键概念:安全的泛型编程 习惯于 C 或 Java 编程的 C ++ 程序员可能会觉得难以理解, for 循环的判断条件用 != 而不是用 来测试 vector 下标值是否越界。 C 程序员难以理解的还有,上例中没有在 for 循环之前就调用 size 成员函数并保存其返回的值,而是在 for 语句头中调用 size 成员函数。 C ++ 程序员习惯于优先选用 != 而不是 来编写循环判断条件。在上例中,选用或不用某种操作符并没有特别的取舍理由。学习完本书第二部分的泛型编程后,你将会明白这个习惯的合理性。 调用 size 成员函数而不保存它返回的值,在这个例子中同样不是必需的,但这反映了一个良好的编程习惯。在 C ++ 中,有些数据结构(如 vector )可以动态增长。上例中循环仅需要读取元素,而不需要增加新的元素。但是,循环可以容易地增加新元素,如果确实增加了新元素的话,那么测试已保存的 size 值作为循环的结束条件就会有问题,因为没有将新加入的元素计算在内。所以我们倾向于在每次循环中测试 size 的当前值,而不是在进入循环时,存储 size 值的副本。 我们将在第 7 章学习到, C ++ 中有些函数可以声明为内联( inline )函数。编译器遇到内联函数时就会直接扩展相应代码,而不是进行实际的函数调用。像 size 这样的小库函数几乎都定义为内联函数,所以每次循环过程中调用它的运行时代价是比较小的。 4. 下标操作不添加元素 初学 C ++ 的程序员可能会认为 vector 的下标操作可以添加元素,其实不然: vectorint ivec; // empty vector for (vectorint::size_type ix = 0; ix != 10; ++ix) ivec = ix; // disaster: ivec has no elements 上述程序试图在 ivec 中插入 10 个新元素,元素值依次为 0 到 9 的整数。但是,这里 ivec 是空的 vector 对象,而且下标只能用于获取已存在的元素。 这个循环的正确写法应该是: for (vectorint::size_type ix = 0; ix != 10; ++ix) ivec.push_back(ix); // ok: adds new element with value ix 必须是已存在的元素才能用下标操作符进行索引。通过下标操作进行赋值时,不会添加任何元素。 警告:仅能对确知已存在的元素进行下标操作 对于下标操作符 ( ; // Error: ivec has no elements! vectorint ivec2(10); // vector with 10 elements cout ivec ; // Error: ivec has elements 0...9 试图获取不存在的元素必然产生运行时错误。和大多数同类错误一样,不能确保执行过程可以捕捉到这类错误,运行程序的结果是不确定的。由于取不存在的元素的结果是未定义的,因而不同的实现会导致不同的结果,但程序运行时几乎肯定会以某种有趣的方式失败。 本警告适用于任何使用下标操作的时候,如 string 类型的下标操作,以及将要简要介绍的内置数组的下标操作。 不幸的是,试图对不存在的元素进行下标操作是程序设计过程中经常会犯的严重错误。所谓的“缓冲区溢出”错误就是对不存在的元素进行下标操作的结果。这样的缺陷往往导致 PC 机和其他应用中最常见的安全问题。 习题 习题 3.13 读一组整数到 vector 对象,计算并输出每对相邻元素的和。如果读入元素个数为奇数,则提示用户最后一个元素没有求和,并输出其值。然后修改程序:头尾元素两两配对(第一个和最后一个,第二个和倒数第二个,以此类推),计算每对元素的和,并输出。 习题 3.14 读入一段文本到 vector 对象,每个单词存储为 vector 中的一个元素。把 vector 对象中每个单词转化为大写字母。输出 vector 对象中转化后的元素,每八个单词为一行输出。 习题 3.15 下面程序合法吗?如果不合法,如何更正? vector int ivec ; ivec = 42 ; 习题 3.16 列出三种定义 vector 对象的方法,给定 10 个元素,每个元素值为 42 。指出是否还有更好的实现方法,并说明为什么。
个人分类: OpenCV|9294 次阅读|0 个评论
使用visio生成可被latex嵌入的vector figure流程
Princeton 2011-12-21 14:48
在使用latex做论文时,很多期刊要求使用eps格式或者pdf格式的矢量图形(vector figure),因为矢量图与位图(bitmap)相比,图形放大和缩小都不会失真。本文介绍下使用visio 2010简单制作pdf格式的一般示意图形的矢量图格式: Step One : 使用visio画出示意图,将visio文件的版面设置成适应图形区域,即:在“desgin”菜单中选择“size”,选择“Fit to Drawing”。 然后另存为后缀格式为“Scalable Vector Graphics”. Step Two : 使用visio打开保存好的“Scalable Vector Graphics”格式的文件,再另存为后缀为“PDF”格式。 Step Three : Latex源文件中将“PDF”格式的图形嵌入,方法如下: \usepackage{graphicx} %%%%%%%%near the top of the LaTeX file, just after the documentclass command. \includegraphics {myfig.pdf} (注意:这里latex中需要使用“pdflatex” or “TeXShop”来进行tex源文件编译!)
个人分类: Figure|10510 次阅读|0 个评论
[转载]常要用到的生物科研软件
hongri1130 2011-11-14 16:15
1.文献管理与分析: EndNote X1,文献管理软件,平时方便论文管理,写文章的时候插入文献也是相当的方便; RefViz 2.1,文献分析软件,与EndNote结合使用,分析文献,可以省掉大把自己看自己归纳的时间; ReferenceManager 似乎很久没有更新了,Thomoson看来以后可能只管EndNote了。 2.分子生物学综合软件: Vector NTI 10.3,分子生物学的综合软件,什么功能几乎都全了; BioEdit 7,杂七杂八的功能凑在一起的一个分子生物学软件,有些罕见的Vector NTI所没有的功能; DNAMAN 6,与Vector NTI类似的一个软件,但是图型化上做的很差,集成度和序列的管理功能比Vector NTI差的不是一点点,罕用,但有时候有些序列的格式非得要用它的样子排,没有办法; 3. 大分子二维/三维结构绘图软件: PyMol 0.99,有1.0,可惜要钱了,也没有P-J。蛋白质三维结构查看软件,神奇的就在于它可以编辑小范围内的结构; DeepViewer 3.7,PDB Viewer的换汤不换药升级版,在预测功能上有所突破,期待新版本的出现令其可与PyMol有的一拼,谁叫PyMol在Windows下开始收钱呢?为了一个PyMol装个Linux似乎还没有这样大的动力; RNADraw 1.1,RNA和DNA二级结构的分析软件,可以分析做PCR的时候的引物的二聚体,更直观一些; Accelery Insight II,Linux下的大型三维结构模拟软件,2.1 G!据称是非常强大。为了这个装个Linux似乎还说的过去。 4. 质粒绘图软件: Vector NTI和DNAMAN其实也可以画,但是不如下面这几个来的专业或方便: SimVector 4,与Primer Premier同一家公司的软件,画质粒的一个软件,效果还行,与VectorNTI画出来的风格不一样,有的杂志喜欢; WinPlas 2.7,很老的质粒绘图软件,很久没有升级了,画出来的质量非常差,可是小,比较快; Visual Cloning 3.2.4,一个界面豪华的质粒及克隆整个过程的画图软件,大而慢,选用。 5. 引物设计软件: Primer premier 5,引物设计软件,大家都用,我也用; Oligo 6.7包1,引物设计软件,大家都用,我还用,设计Fusion PCR和In-Fusion连接的引物的时候,比Primer premier直观一些; Allele ID 6.0/Beacon Designer 7.0,RT-PCR设计软件,与Primer Premier同一家公司的软件,软件界面非常相似,到现在也没有搞清楚两个有什么区别,不知道有什么意思,具体还需要试一下; 6. 办公软件: Microsoft WORD 2003,不说了; Microsoft Excel 2003,不说了; Microsoft PowerPoint 2003,不说了; Adobe Acrobat Professional 8.1,不说了; PDF2Office 2.0,把PDF转成WORD,中文支持大大的好,但页面格局往往破坏的一塌糊涂; Adult PDF Password Recovery 2.3,看名字就知道干什么的了,相当强大,加密的PDF往往不能取词不能打印; SolidPDFConverter 3.0,把PDF转成WORD,中文支持大大的不好; 7. 凝胶分析软件: QuantityOne 4.6.2,BioRad的凝胶成像仪自带的电泳图像软件,算很好上手的了; GelPro Analyzer 4.5,跑胶和杂交以及菌落的分析软件,已有6.0版,可惜我这里没有破解版; PDQuest 8.0.1 Advance,BioRad的二维电泳分析软件,算好用的,功能上没用过其它的,真的不好说; 代谢网络和信号传导分析软件 : CellNetAnalyzer 6.0,以前叫FluxAnalyzer,基于MatLab的代谢网络和信号传导网络分析模块,大部分论文中的代谢网络分析都是或明或暗的用这个分析的; PathwayStudio 5.0,蛋白质相互作用、细胞信号转导和代谢分析的软件; 8. 图片处理: 图片是用来表达思想最有力的工具了,所以在这里就多了一些。 Adobe Photoshop CS3 Extended,修改图片,可以做出以假乱真的效果,功能非常强大,但在画示意图上不是很方便,对线条和几何图形的支持尤为不便; Adobe Streamline 4,好久没有升级的一个软件,把位图转成矢量图的一个软件,很好用; Image-Pro Plus 6.0,对图象进行加工处理并得到数据的软件,专业,相当的专业,已有6.2版,可惜我这里没有破解版; Adobe Fireworks CS3/Illustrator CS3,矢量图和位图工具二合一,可以画一些复杂的图,像GENE,MCB上面的很多图都可以很轻松的用Fireworks/Illustrator画出 来,流程图,细胞结构,各种复杂的示意图等等都没有问题,矢量工具非常好用。Fireworks更适合入门。Illustrator是纯粹的矢量软件,新 手用起来可能会有点不适应,特别是从Photoshop转过来的新手; ChemSketch 10,画分子结构式的,几乎可以胜任所有的化学结构式的任务了; SnagIt 8.5,抓图软件,同类软件里面最好用的一个了,连续截屏和延迟截屏是最大特色; 9. 流程图软件: Microsoft Visio 2003,画流程图和一些复杂的示意图,与SmartDraw类似,但是在PPT里面的显示效果远胜SmartDraw,因为与PPT是一家的,兼容性更好,更方便; SmartDraw 7.7,画流程图和一些复杂的示意图; ConceptDraw 7.5 Professional,SmartDraw在接下来一段时间内的强有力的竞争对手,虽然SmartDraw 8 Professional进行了升级,但是却不再支持中文,相当让人失望,ConceptDraw这时候具有了天然的竞争优势了; 10. 数学统计软件: OriginPro 8.0 SP1,画各种各样的曲线图,兼做简单的数据处理; SigmaPlot 10.0,与Origin类似,画出来的图风格不大一样,OriginPro 8.0推出之后,SigmaPlot已经渐显颓势,期待新版本了; SigmaStat 3.5,分析为主的一个小统计软件,在SigmaPlot中可以调用它,如果不用SigmaPlot,个人感觉其没有任何意义; SPSS 16,大型的分析软件,几乎拥有所有的统计分析功能; MatLab 7.1,呵呵,这样说吧,数学里面的,几乎什么都可以; SAS JMP 7.0,SAS公司为了解决SAS难用而开发的一个软件,据一位专业级的统计分析人物推荐,觉得SPSS太不中用,还是SAS家的东西可靠些。 另外还有很多常见的分析软件如SAS 9.1,Statistica 7.0, SysStat 12.0等等,功能上都差不多,都很强大,但我们还是实验为主,能完成任务即可,实际上学精任何一个都足够用了。 其它: UltraEdit 13.10a,取代记事本的一个强大软件,很多时候会用到,比如把CNKI的数据导到EndNote,有些软件的16进制下的P-J; 这些软件目前而言,应该可以对付从科研到发文章的所有的事情了
个人分类: 科研笔记|4230 次阅读|0 个评论
梯度折射率介质内偏振光传输的矢量辐射传递方程
jmzhao 2011-10-24 13:36
On the Derivation of Vector Radiative Transfer Equation for Polarized Radiative Transport in Graded Index Media J.M. Zhao(jmzhao@hit.edu.cn), J.Y. Tan(tanjy.hit.edu.cn), L.H. Liu(lhliu@hit.edu.cn) ABSTRACT: Light transport in graded index media follows a curved trajectory determined by the Fermat’s principle. Besides the effect of variation of the refractive index on the transport of radiative intensity, the curved ray trajectory will induce geometrical effects on the transport of polarization ellipse. This paper presents a complete derivation of vector radiative transfer equation for polarized radiation transport in absorption, emission and scattering graded index media. The derivation is based on the analysis of the conserved quantities for polarized light transport along curved trajectory and a novel approach. The obtained transfer equation can be considered as a generalization of the classic vector radiative transfer equation that is only valid for uniform refractive index media. Several variant forms of the transport equation are also presented, which include the form for Stokes parameters defined with a fixed reference and the Eulerian forms in the ray coordinate and in several common orthogonal coordinate systems. This paper has been accepted by JQSRT. doi:10.1016/j.jqsrt.2011.11.002 The preprint can be download here or from the preprint server athttp://arxiv.org/abs/1110.5134 (or by click arXiv:1110.5134v1 )
个人分类: 科研论文|5279 次阅读|0 个评论
A vector identity
zjzhang 2011-10-11 12:23
For two vectors , we have the following identity:
个人分类: 数学|2586 次阅读|0 个评论
植被动态分析(演替趋势分析)简介 (英)
TUGJAYZHAB 2011-10-9 22:16
MDSM Communication Vol.2-No.12 Dec. 26, 1995 WHAT CAN WE DISCOVER FROM 1,2,3 TO 2,3,4? - An Introduction to vegetation dynamic analysis- Revised June 3, 1997 for home page Let’s consider a situation where the vegetation is recovering from a fire event, such as in Yellowstone National Park . The first year, say 1994, the data collected were 1, 2, 3, and the second year, 1995, were 2, 3, 4, respectively. These measurements represent the abundance of trees, shrubs, and grasses. The data will look like this: Tree Shrub Grass (Total) 1994 1 2 3 (6) 1995 2 3 4 (9) What can we discover from 1-2-3 to 2-3-4? 1). All of us can see that the vegetation changed from 1994 to 1995. 2). Most of us will agree that the vegetation has increased, but different species may increase at different speeds. This may be considered a temporal dynamic of vegetation. 3). Some of us would analyze the data and found out that: Trees increased 2/1=200%, Shrubs increased 3/2=150%, but Grasses increased 4/3=133%, and The Total increased 9/6=150%, respectively. The data will look like this: Tree Shrub Grass (Total) 1994 1 2 3 (6) 1995 2 3 4 (9) Increasing ratio 200% 150% 133% (150%) 4A). However, there may not be many of us who agree that the grasses are relatively decreasing, while all the figures appear to be increasing. To discover the instantaneous changing trends of the vegetation in 1995, we use the total increasing ratio to adjust each single increasing ratio and name this Trend Values, which is short for Multivariate Instantaneous Successional Trends for 1995(Bai, 1996) . The total increasing ratio is 9/6=150%. After using this Total ratio to adjust the ratio of each species, the Trend Values for each species are: T(t)=200%/150%=1.33, T(s)=150%/150%=1.0, and T(g)=133%/150%=0.89, respectively. The above analysis is expressed in the following table: Tree Shrub Grass 1994 1 2 3 (6) 1995 2 3 4 (9) Increasing rate 200% 150% 133% (150%) Trend Value 1.33 1.00 0.89 The Trend Value is the ratio of increment of species adjusted by that of the total. The Trend Value for each species can also be obtained by another means: 4B):The p ropor tions of the tree, shrub, and grass for 1994 were: 1/6=17%, 2/6=33%, and 3/6=50%, respectively. The p r o po rtions for 1995 were: 2/9=22%, 3/9=33%, and 4/9=44% respectively. The increasing ratio, named trends, for the three species are: T(t)=22/17=1.33 T(s)=33/33=1.00, and T(g)=44/50=0.89, respectively. The above trend analysis is shown in the following table: Tree Tree% Shrub Shrub% Grass Grass% Total 1994 1 17 2 33 3 50 6 1995 2 22 3 33 4 45 9 Trend Values 1.33 1 0.89 The percent is the ratio of the value of the species over total. And the Trend Value is the ratio of percent of 1995 over 1994. 5). We can sort the species by their Trend Values: Tree 1.33 Shrub 1.00 Grass 0.89 We see t he trend for trees is increasing, as the Trend Value of the trees is greater than one; while the trend for grasses is decreasing, as the Trend Value of grasses is smaller than one. 6). Without the concept of multivariate instantaneous trend, it is very difficult to convince people that in ten years this vegetation will be dominated by trees , 1.33^10=17 , and most of the grasses will be gone , 0.89^10=0.31 , provided the trend remains the same in the next ten years. The above trend analysis and prediction is shown in the following table: Tree Shrub Grass Total 1994 1 2 3 6 1995 2 3 4 9 Increasing rate 200% 150% 133% 150% Trend Value 1.33 1 0.89 ( T -Value) ^10 17.31 1 0.31 7). Conclusion: We can defin e the adjusted increasing percentage as an vegetation successional trend or instantaneous trend for species i at time k, in a simplified form: T(i,k)=Y'(i,k)/ . Y' is the relative abundance expressed in a percentage form: Y'(i)=Y(i)/{Total }, i=1,2,3. After the trend analysis we discovered that Trees are increasing the most, the Shrubs are stable, but Grasses are decreasing. Furthermore, we may make a best projection based on existing information that vegetation will be dominated by trees in ten years, instead of the present grass community. 8). Discussion: In vegetation dynamic analysis, we assume that the change of a species can only be discovered by comparison of the present over the past of the species, unless it is proved otherwise. In other words, it is our presumption that all species in vegetation are mathematically independent as every species is important and should be kept in the temporal dynamics (successiional trend)analysis. The instantaneous trend is different from the long term trend. It's value is a function of time, instead of a constan t . This makes the instantaneous trend analysis more flexible. The relation of the instantaneous trend and long-term trend will be discussed in another essay (MDSM Communication 4-2, 1997). 9). FURTHER DISCUSSION: First, w e apply our discussion to two-dimensional space (2-space) . Please recall two ancient great Mathematicians: Shang Gao (?) from China and Pythagoras (BC 500-580) from Greece. They discovered the relationship between the vector length and it's components in two dimensional space: 3^2+4^2=5^2. In other words, in 2-space, 3+4=5, instead of 7. While in 2-space, vector sum is interpreted as the vector length, the percentage is interpreted as cosine values: 3/5=0.6, and 4/5=0.8. The two cosine values determine the direction of the two-component-vector ( 2-vector ) . When the cosine values of 0.6 and 0.8 change, the 2-vector will change it's direction on the plane, and vise versa. This can further be extended to m ulti -dimensional space ( m-space ) : vector length of Y(i), L =sqrt{sum } , i=1,2,..m. In our case, 3-vector length of (1,2,3)=sqrt(14)=3.74, and 3-vector length of (2,3,4)=sqrt(29)=5.39. We can use these values to replace the one dimensional sum and begin our discussion all over again. This time, our discussion is in three dimensional space and the trees, shrubs, and grasses are represented by three axes. We can imagine the 3-vector representing the vegetation rotating in 3-space, from (1/3.74, 2/3.74, 3/3.74) of 1994 to (2/5.39, 3/5.39, 4/5.39) of 1995. This supplies a new tool that we may use to investigate the rotation of a n multi-component vector in multi-dimensional space and monitor the vegetation changes over time. SUMMARY OF 9) Using a vector sum instead of a scalar sum in m-space, the change in vegetation can be seen as the m- vector rotating in m-space. Thus, people can monitor the vegetation dynamics by tracing the movement of the m- vector on the unit hypersphere. This new method of performing Multivariate-Instantaneous-Trend analysis and system monitoring was named the Multi-Dimensional Sphere Model (MDSM). In the MDSM, an observation is expressed as a point or an m-vector in m-space. A community is the centroid m-vector of ' n ' observations, where the ' n ' is the observation number. The state of the vegetation is then a standardized (normalized) centroid m-vector, i.e., the center of the projections of ' n ' observations on the unit hypersphere. In the MDSM, the distance expresses the quantity while the direction expresses the quality. In other words, the distance of a vector relates to the production of vegetation, while direction of the vector contains the composition information of the vegetation. MDSM considers that vegetation a =(1,2,3) equals to vegetation a' =(10, 20, 30), as the two are in the same direction (coliner) . However, vegetation a =(1, 2, 3) is different from vegetation b =(3, 2, 1), although the two have the same vector length (norm). Furthermore, the trend may be paralleled as the slope of the trace, or the tangent vector onto the hypersphere, which indicates the reasons that have caused the changes. T. Jay Bai, Ph.D. MDSM Research P.O.Box 272628 Fort Collins, CO 80527 USA 970/495-9716, 970/581-0253 P.S. All the vectors should have been expressed in bolded case. The MDSM supposes the trend remains the same in neighborhood, and makes a prediction for next time interval: P(k+1)=Y(k)*T(k) and this presumption of exponential in neighborhood brings in prediction error. In the new development of MDSM, the prediction was adjusted and corrected with actually sampled data (D) from the next time interval (Jameson, 1986) and (Bai, 1996): E=P(1-alpha)+D*alpha, and R=sinE-P. Where, the E, P, D, and R are M-vectors of expectation, prediction, sampled data, and error, respectively. In the above example, as the 1995 data w as (2, 3, 4), and the trend was (1.33, 1, 0.89), so the prediction of 1996 based on the existing information is P96=(2.66, 3, 3.56). If the sampled data were 3, 4, 5 for 1996, then the expectation for the true value of 1996 would be E=P+D=(2.83, 3.5, 4.28), set alph=0.5, and the prediction error would be R=(0.17, 0.5, 0.72). This prediction error is less than the differences from the two observations: 96-95=(1, 1, 1). The entire procedure of vegetation dynamic analysis is shown in the following table: Tree Shrub Grass Total 1994 1 2 3 6 1995 2 3 4 9 Increasing Rate 200% 150% 133% 150% Trend Value-95 1.33 1.00 0.89 Projection-96 2.66 3 3.56 Observation-96 3 4 5 12 Expectation-96 2.83 3.5 4.28 Error 0.17 0.5 0.72 Interested readers please come to Aug. 14, 1996 session 155 of ESA meeting. -End- Dear friends, The above is a short essay discussing multivariate-instantaneous-trend analysis. Since it was posted on MDSM, SinoEco, and a local net last December, I received quite a few comments. Based on the se comments, I revised it and posted it here, hop ing to get more comments. T. Jay Bai If you are interested in MDSM research and discussion, please sign on: MDSM@gpsrv1.gpsr.colostate.edu or contact me at : JBAI@LAMAR.COLOSTATE.EDU , now should be updated: mdsm95bai@yahoo.com
个人分类: TIME SERIES|1966 次阅读|0 个评论
矢量绘图
xyxygood 2010-6-26 16:22
OK,在做的一个项目,有用到矢量绘图。查找资料。 Google下vectorgraphicsopensource 找到,http://www.inkscape.org/ AnOpenSourcevectorgraphicseditor,withcapabilitiessimilartoIllustrator,CorelDraw,orXaraX,usingtheW3CstandardScalableVectorGraphics(SVG)fileformat. 开源矢量图编辑器;ScalableVectorGraphics(SVG) InkscapesupportsmanyadvancedSVGfeatures(markers,clones,alphablending,etc.)andgreatcareistakenindesigningastreamlinedinterface.Itisveryeasytoeditnodes,performcomplexpathoperations,tracebitmapsandmuchmore.Wealsoaimtomaintainathriving(生机勃勃的)useranddevelopercommunitybyusingopen,community-orienteddevelopment(面向社区的开发?). 未完回来再续.... 回来了 正在打开http://sourceforge.net/projects/inkscape/files/inkscape/0.47/InkscapePortable_0.47.paf.exe/download 先下载个portable版的试试看,打开,不好弄啊
个人分类: 生活点滴|1559 次阅读|0 个评论
把vector的内容输出到jsp页面上
melodydream 2010-5-14 16:43
今天试着把vector的内容输出,结果保存在Bean里输出不了,于是搜索了一下,发现一个方法可以用,就是先把vector的内容放在session里,代码如下session.setAttribute(result, v);然后在jsp页面上取出来,代码是% Vector result = (Vector)session.getAttribute (result ); % %=result%。 大家有更好的办法的可以交流一下啊,还有那个为什么保存在bean里输不出呢?
个人分类: 未分类|4418 次阅读|0 个评论
vector field
guodanhuai 2010-3-24 16:31
In mathematics a Vector field is a construction in vector calculus which associated a vector to every point in a subset of Euclidean space. Vector fields are often used in pysics to model, for example, the speed and direction of a moving fluid thoughout space, or the strength and direction of some force, such as the magnitic or gravitational force, as it changes from point to point.
个人分类: Notes & Plan|3754 次阅读|0 个评论
Spectral Element Method for Vector Radiative Transfer Equation
jmzhao 2009-10-9 20:07
J.M. Zhao , L. H. Liu, P. -f. Hsu, J. Y. Tan . Spectral Element Method for Vector Radiative Transfer Equation. Journal of Quantitative Spectroscopy and Radiative Transfer . Feb. 2010, 111(3): 433-446. download Abstract: A spectral element method (SEM) is developed to solve polarized radiative transfer in multidimensional participating medium. The angular discretization is based on the discrete-ordinates approach, and the spatial discretization is conducted by spectral element approach. Chebyshev polynomial is used to build basis function on each element. Four various test problems are taken as examples to verify the performance of the SEM. The effectiveness of the SEM is demonstrated. The h and the p convergence characteristics of the SEM are studied. The convergence rate of p-refinement follows the exponential decay trend and is superior to that of h-refinement. The accuracy and efficiency of the higher order approximation in the SEM is well demonstrated for the solution of the VRTE. The predicted angular distribution of brightness temperature and Stokes vector by the SEM agree very well with the benchmark solutions in references. Numerical results show that the SEM is accurate, flexible and effective to solve multidimensional polarized radiative transfer problems.
个人分类: 科研论文|4720 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-2 13:46

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部