﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-与心灵对话-随笔分类-“智能”方向</title><link>http://www.blogjava.net/dongwq/category/32442.html</link><description>过去理解的，现在未必理解。
过去懂得的，重温必有新意。
整理过去，整理现在。成就现在，成就未来。</description><language>zh-cn</language><lastBuildDate>Sun, 13 Dec 2009 16:55:12 GMT</lastBuildDate><pubDate>Sun, 13 Dec 2009 16:55:12 GMT</pubDate><ttl>60</ttl><item><title>漫谈高数</title><link>http://www.blogjava.net/dongwq/archive/2009/12/14/305826.html</link><dc:creator>小强摩羯座</dc:creator><author>小强摩羯座</author><pubDate>Sun, 13 Dec 2009 16:17:00 GMT</pubDate><guid>http://www.blogjava.net/dongwq/archive/2009/12/14/305826.html</guid><wfw:comment>http://www.blogjava.net/dongwq/comments/305826.html</wfw:comment><comments>http://www.blogjava.net/dongwq/archive/2009/12/14/305826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dongwq/comments/commentRss/305826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dongwq/services/trackbacks/305826.html</trackback:ping><description><![CDATA[<font style="font-size: 14pt" color="#02368d"><strong>很不错的文章：<br />
漫谈高数</strong></font><strong><font color="#02368d"><a href="http://blog.chinaunix.net/u2/88035/showart.php?id=1929192">http://blog.chinaunix.net/u2/88035/showart.php?id=1929192</a></font></strong><img src ="http://www.blogjava.net/dongwq/aggbug/305826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dongwq/" target="_blank">小强摩羯座</a> 2009-12-14 00:17 <a href="http://www.blogjava.net/dongwq/archive/2009/12/14/305826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zz20世纪十大算法</title><link>http://www.blogjava.net/dongwq/archive/2008/11/13/240361.html</link><dc:creator>小强摩羯座</dc:creator><author>小强摩羯座</author><pubDate>Thu, 13 Nov 2008 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/dongwq/archive/2008/11/13/240361.html</guid><wfw:comment>http://www.blogjava.net/dongwq/comments/240361.html</wfw:comment><comments>http://www.blogjava.net/dongwq/archive/2008/11/13/240361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dongwq/comments/commentRss/240361.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dongwq/services/trackbacks/240361.html</trackback:ping><description><![CDATA[<div class="tit">[转帖] 二十世纪十大算法</div>
<div class="date">2008-10-12 11:03</div>
<p>
<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <div class="entry-body">
            <p>二十世纪七大算法：<br />
            1946年　蒙特卡洛方法；<br />
            1951年　矩阵计算的分解方法；<br />
            1959~1961年　计算矩阵特征值的QR算法；<br />
            1962年　快速排序算法；<br />
            1965年　快速傅利叶变换算法；<br />
            1977年　整数关系探测算法；<br />
            1987年　快速多极算法。</p>
            <p>下面是二十世纪最好的十大算法：</p>
            <p>20世纪最好的算法，计算机时代的挑选标准是对科学和工程的研究和实践影响最大。下面就是按年代次序排列的20世纪最好的10个算法。</p>
            <p>1. Monte Carlo方法<br />
            1946年，在洛斯阿拉莫斯科学实验室工作的John von Neumann，Stan Ulam和Nick Metropolis编制了Metropolis算法，也称为Monte Carlo方法。Metropolis算法旨在通过模仿随机过程，来得到具有难以控制的大量的自由度的数值问题和具有阶乘规模的组合问题的近似解法。数字计算机是确定性问题的计算的强有力工具，但是对于随机性（不确定性）问题如何当时并不知晓，Metropolis算法可以说是最早的用来生成随机数，解决不确定性问题的算法之一。</p>
            <p>2. 线性规划的单纯形方法<br />
            1947年，兰德公司的Grorge Dantzig创造了线性规划的单纯形方法。就其广泛的应用而言，Dantzig算法一直是最成功的算法之一。线性规划对于那些要想在经济上站住脚，同时又有赖于是否具有在预算和其他约束条件下达到最优化的能力的工业界，有着决定性的影响(当然，工业中的&#8220;实际&#8221;问题往往是非线性的；使用线性规划有时候是由于估计的预算，从而简化了模型而促成的)。单纯形法是一种能达到最优解的精细的方法。尽管理论上讲其效果是指数衰减的，但在实践中该算法是高度有效的——它本身说明了有关计算的本质的一些有趣的事情。</p>
            <p>3. Krylov子空间叠代法<br />
            1950年，来自美国国家标准局的数值分析研究所的Magnus Hestenes, Eduard Stiefel和Cornelius Lanczos开创了Krylov子空间叠代法的研制。这些算法处理看似简单的求解形为Ax=b的方程的问题。当然隐藏的困难在于A是一个巨型的n*n 矩阵，致使代数解x=b/A是不容易计算的(确实，矩阵的&#8220;相除&#8221;不是一个实际上有用的概念)。叠代法——诸如求解形为Kx(k+1)=Kx(k)+b-Ax(k)的方程，其中K 是一个理想地&#8220;接近&#8221;A 的较为简单的矩阵——导致了Krylov子空间的研究。以俄罗斯数学家Nikolai Krylov命名的Krylov子空间由作用在初始&#8220;余量&#8221;向量 r(0)=b-Ax(0)上的矩阵幂张成的。当 A是对称矩阵时，Lanczos找到了一种生成这种子空间的正交基的极好的方法。对于对称正定的方程组，Hestenes 和Stiefel提出了称为共轭梯度法的甚至更妙的方法。过去的50年中，许多研究人员改进并扩展了这些算法。当前的一套方法包括非对称方程组的求解技巧，像字首缩拼词为GMRES和Bi-CGSTAB那样的算法。(GMRES和Bi-CGSTAB分别首次出现于1986和1992 SIAM journal on Scientific and Statistical computing(美国工业与应用数学学会的科学和统计计算杂志)。</p>
            <p>4. 矩阵计算的分解方法<br />
            1951年，橡树岭国家实验室的A1ston Householder系统阐述了矩阵计算的分解方法。研究证明能把矩阵因子分解为三角、对角、正交和其他特殊形式的矩阵是极其有用的。这种分解方法使软件研究人员能生产出灵活有效的矩阵软件包。这也促进了数值线性代数中反复出现的大问题之一的舍入误差分析问题。 (1961年伦敦国家物理实验室的James Wilkinson基于把矩阵分解为下和上三角矩阵因子的积的LU分解，在美国计算机协会(ACM)的杂志上发表了一篇题为&#8220;矩阵逆的直接方法的误差分析&#8221;的重要文章。)</p>
            <p>5. Fortran最优编译程序</p>
            <p>1957年，John Backus在IBM领导一个小组研制Fortran最优编译程序。Fortran的创造可能是计算机编程历史上独一无二的最重要的事件：科学家(和其他人)终于可以无需依靠像地狱那样可怕的机器代码，就可告诉计算机他们想要做什么。虽然现代编译程序的标准并不过分――Fortran I只包含23，500条汇编语言指令――早期的编译程序仍然能完成令人吃惊的复杂计算。就像Backus本人在1998年在IEEE annals of the History of computing 发表的有关Fortran I，II, III的近代历史的文章中回忆道：编译程序&#8220;所产生的如此有效的代码，使得其输出令研究它的编程人员都感到吓了一跳。&#8221;</p>
            <p>6. 矩阵本征值计算的QR算法<br />
            1959—61年，伦敦Ferranti Ltd.的J.G. F. Francis找到了一种称为QR算法的计算本征值的稳定的方法。本征值大概是和矩阵相连在—起的最重要的数了，而且计算它们可能是最需要技巧的。把—个方阵变换为一个&#8220;几乎是&#8221;上三角的矩阵――意即在紧挨着矩阵主对角线下面的一斜列上可能有非零元素――是相对容易的，但要想不产生大量的误差就把这些非零元素消去，就不是平凡的事了。QR 算法正好是能达到这一目的的方法，基于QR 分解， A可以写成正交矩阵Q 和一个三角矩阵R 的乘积，这种方法叠代地把 A=Q(k)R(k) 变成 A(k+1)==Q(k)R(k) 就加速收敛到上三角矩阵而言多少有点不能指望。20世纪60年代中期QR 算法把一度难以对付的本征值问题变成了例行程序的计算。</p>
            <p>7. 快速分类法<br />
            1962：伦敦Elliott Brothers, Ltd.的Tony Hoare提出了快速(按大小)分类法.把n个事物按数或字母的次序排列起来，在心智上是不会有什么触动的单调平凡的事。智力的挑战在于发明一种快速完成排序的方法。Hoare的算法利用了古老的分割开和控制的递归策略来解决问题：挑一个元素作为&#8220;主元&#8221;、把其余的元素分成&#8220;大的&#8221;和&#8220;小的&#8221;两堆(当和主元比较时)、再在每一堆中重复这一过程。尽管可能要做受到严厉责备的做完全部N(N-1)/2 次的比较(特别是，如果你把主元作为早已按大小分类好的表列的第一个元素的话！)，快速分类法运行的平均次数具有O(Nlog(N)) 的有效性，其优美的简洁性使之成为计算复杂性的著名的例子。</p>
            <p>8. 快速Fourier变换<br />
            1965年，IBM的T. J. Watson研究中心的James Cooley以及普林斯顿大学和AT＆T贝尔实验室的John Tukey向公众透露了快速Fourier变换(方法)(FFT)。应用数学中意义最深远的算法，无疑是使信号处理实现突破性进展的FFT。其基本思想要追溯到Gauss(他需要计算小行星的轨道)，但是Cooley—Tukey的论文弄清楚了Fourier变换计算起来有多容易。就像快速分类法一样，FFT有赖于用分割开和控制的策略，把表面上令人讨厌的O(N*N) 降到令人满意的O(Nlog(N)) 。但是不像快速分类法，其执行(初一看)是非直观的而且不那么直接。其本身就给计算机科学一种推动力去研究计算问题和算法的固有复杂性。</p>
            <p>9. 整数关系侦查算法<br />
            1977年，BrighamYoung大学的Helaman Ferguson 和Rodney Forcade提出了整数关系侦查算法。这是一个古老的问题：给定—组实数，例如说x(1),x(2),&#8230;,x(n) ，是否存在整数a(1),a(2),..,a(n) （不全为零），使得<br />
            a(1)x(1)+a(2)x(2)+&#8230;+a(n)x(n)=0<br />
            对于n=2 ，历史悠久的欧几里得算法能做这项工作、计算x(1)/x(2) 的连分数展开中的各项。如果x(1)/x(2) 是有理数，展开会终止，在适当展开后就给出了&#8220;最小的&#8221;整数a(1)和a(2) 。欧几里得算法不终止——或者如果你只是简单地由于厌倦计算——那么展开的过程至少提供了最小整数关系的大小的下界。Ferguson和Forcade的推广更有威力，尽管这种推广更难于执行(和理解)。例如，他们的侦查算法被用来求得逻辑斯谛(logistic)映射的第三和第四个分歧点，b(3)=3.544090 和 b(4)=3.564407所满足的多项式的精确系数。(后者是120 阶的多项式；它的最大的系数是257^30 。)已证明该算法在简化量子场论中的Feynman图的计算中是有用的。</p>
            <p>10. 快速多极算法<br />
            1987年，耶鲁大学的Leslie Greengard 和Vladimir Rokhlin发明了快速多极算法。该算法克服了N体模拟中最令人头疼的困难之一：经由引力或静电力相互作用的N个粒子运动的精确计算(想象一下银河系中的星体，或者蛋白质中的原于)看来需要O(N*N) 的计算量——比较每一对质点需要一次计算。该算法利用多极展开(净电荷或质量、偶极矩、四矩，等等)来近似遥远的一组质点对当地一组质点的影响。空间的层次分解用来确定当距离增大时，比以往任何时候都更大的质点组。快速多极算法的一个明显优点是具有严格的误差估计，这是许多算法所缺少的性质。</p>
            <p>三、结束语<br />
            2l世纪将会带来什么样的新的洞察和算法？对于又一个一百年完整的回答显然是不知道的。然而，有一点似乎是肯定的。正如20世纪能够产生最好的l0个算法一样，新世纪对我们来说既不会是很宁静的，也不会是弱智的。</p>
            </div>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
[转]http://alpswy.spaces.live.com/<br />
By Barry A. Cipra <br />
<br />
Algos is the Greek word for pain. Algor is Latin, to be cold. Neither is the root for algorithm, which stems instead from al-Khwarizmi, the name of the ninth-century Arab scholar whose book al-jabrwa&#8217;l muqabalah devolved into today&#8217;s high school algebra textbooks. Al-Khwarizmi stressed the importance of methodical procedures for solving problems. Were he around today, he&#8217;d no doubt be impressed by the advances in his eponymous approach. <br />
Some of the very best algorithms of the computer age are highlighted in the January/February 2000 issue of Computing in Science &amp; Engineering, a joint publication of the American Institute of Physics and the IEEE Computer Society. Guest editors Jack Don-garra of the University of Tennessee and Oak Ridge National Laboratory and Fran-cis Sullivan of the Center for Comput-ing Sciences at the Institute for Defense Analyses put togeth-er a list they call the &#8220;Top Ten Algorithms of the Century.&#8221; <br />
&#8220;We tried to assemble the 10 al-gorithms with the greatest influence on the development and practice of science and engineering in the 20th century,&#8221; Dongarra and Sullivan write. As with any top-10 list, their selections—and non-selections—are bound to be controversial, they acknowledge. When it comes to picking the algorithmic best, there seems to be no best algorithm. Without further ado, here&#8217;s the CiSE top-10 list, in chronological order. (Dates and names associated with the algorithms should be read as first-order approximations. Most algorithms take shape over time, with many contributors.) <br />
<br />
1.蒙特卡洛算法<br />
1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte Carlo method. The Metropolis algorithm aims to obtain approximate solutions to numerical problems with unmanageably many degrees of freedom and to combinatorial problems of factorial size, by mimicking a random process. Given the digital computer&#8217;s reputation for deterministic calculation, it&#8217;s fitting that one of its earliest applications was the generation of random numbers. <br />
<br />
2.单纯形法<br />
1947: George Dantzig, at the RAND Corporation, creates the simplex method for linear programming. In terms of widespread application, Dantzig&#8217;s algorithm is one of the most successful of all time: Linear programming dominates the world of industry, where economic survival depends on the ability to optimize within budgetary and other constraints. (Of course, the &#8220;real&#8221; problems of industry are often nonlinear; the use of linear programming is sometimes dictated by the computational budget.) The simplex method is an elegant way of arriving at optimal answers. Although theoretically susceptible to exponential delays, the algorithm in practice is highly efficient—which in itself says something interesting about the nature of computation. In terms of widespread use, George Dantzig&#8217;s simplex method is among the most successful algorithms of all time. <br />
<br />
3.Krylov子空间迭代法 <br />
1950: Magnus Hestenes, Eduard Stiefel, and Cornelius Lanczos, all from the Institute for Numerical Analysis at the National Bureau of Standards, initiate the development of Krylov subspace iteration methods. These algorithms address the seemingly simple task of solving equations of the form Ax = b. The catch, of course, is that A is a huge n x n matrix, so that the algebraic answer x = b/A is not so easy to compute. (Indeed, matrix &#8220;division&#8221; is not a particularly useful concept.) Iterative methods—such as solving equations of the form Kxi + 1 = Kxi + b &#8211; Axi with a simpler matrix K that&#8217;s ideally &#8220;close&#8221; to A—lead to the study of Krylov subspaces. Named for the Russian mathematician Nikolai Krylov, Krylov subspaces are spanned by powers of a matrix applied to an initial&#8220;remainder&#8221; vector r0 = b &#8211; Ax0. Lanczos found a nifty way to generate an orthogonal basis for such a subspace when the matrix is symmetric. Hestenes and Stiefel proposed an even niftier method, known as the conjugate gradient method, for systems that are both symmetric and positive definite. Over the last 50 years, numerous researchers have improved and extended these algorithms. The current suite includes techniques for non-symmetric systems, with acronyms like GMRES and Bi-CGSTAB. (GMRES and Bi-CGSTAB premiered in SIAM Journal on Scientific and Statistical Computing, in 1986 and 1992, respectively.) <br />
<br />
4.矩阵计算的分解方法 <br />
1951: Alston Householder of Oak Ridge National Laboratory formalizes the decompositional approach to matrix computations. The ability to factor matrices into triangular, diagonal, orthogonal, and other special forms has turned <br />
out to be extremely useful. The decompositional approach has enabled software developers to produce flexible and efficient matrix packages. It also facilitates the analysis of rounding errors, one of the big bugbears of numerical linear algebra. (In 1961, James Wilkinson of the National Physical Laboratory in London published a seminal paper in the Journal of the ACM, titled &#8220; Error Analysis of Direct Methods of Matrix Inversion,&#8221; based on the LU decomposition of a matrix as a product of lower and upper triangular factors.) <br />
<br />
5.优化的Fortan编译器 <br />
1957: John Backus leads a team at IBM in developing the Fortran optimizing compiler. The creation of Fortran may rank as the single most important event in the history of computer programming: Finally, scientists (and others) could tell the computer what they wanted it to do, without having to descend into the netherworld of machine code. Although modest by modern compiler standards—Fortran I consisted of a mere 23,500 assembly-language instructions—the early compiler was nonetheless capable of surprisingly sophisticated computations. As Backus himself recalls in a recent history of Fortran I, II, and III, published in 1998 in the IEEE Annals of the History of Computing, the compiler &#8220;produced code of such efficiency that its output would startle the programmers who studied it.&#8221; <br />
<br />
6.计算矩阵特征值的QR算法 <br />
1959&#8211;61: J.G.F. Francis of Ferranti Ltd., London, finds a stable method for computing eigenvalues, known as the QR algorithm. Eigenvalues are arguably the most important numbers associated with matrices—and they can be the trickiest to compute. It&#8217;s relatively easy to transform a square matrix into a matrix that&#8217;s &#8220; almost&#8221; upper triangular, meaning one with a single extra set of nonzero entries just below the main diagonal. But chipping away those final nonzeros, without launching an avalanche of error, is nontrivial. The QR algorithm is just the ticket. Based on the QR decomposition, which writes A as the product of an orthogonal matrix Q and an upper triangular matrix R, this approach iteratively changes Ai = QR into Ai + 1 = RQ, with a few bells and whistles for accelerating convergence to upper triangular form. By the mid-1960s, the QR algorithm had turned once-formidable eigenvalue problems into routine calculations. <br />
<br />
7.快速排序算法<br />
1962: Tony Hoare of Elliott Brothers, Ltd., London, presents Quicksort. Putting N things in numerical or alphabetical order is mind-numbingly mundane. The intellectual challenge lies in devising ways of doing so quickly. Hoare&#8217;s algorithm uses the age-old recursive strategy of divide and conquer to solve the problem: Pick one element as a &#8220;pivot, &#8221; separate the rest into piles of &#8220;big&#8221; and &#8220;small&#8221; elements (as compared with the pivot), and then repeat this procedure on each pile. Although it&#8217;s possible to get stuck doing all N(N &#8211; 1)/2 comparisons (especially if you use as your pivot the first item on a list that&#8217;s already sorted!), Quicksort runs on average with O(N log N) efficiency. Its elegant simplicity has made Quicksort the pos-terchild of computational complexity. <br />
<br />
8.快速傅立叶变换 <br />
1965: James Cooley of the IBM T.J. Watson Research Center and John Tukey of Princeton University and AT&amp;T Bell Laboratories unveil the fast Fourier transform. Easily the most far-reaching algo-rithm in applied mathematics, the <br />
FFT revolutionized signal processing. The underlying idea goes back to Gauss (who needed to calculate orbits of asteroids), but it was the Cooley&#8211;Tukey paper that made it clear how easily Fourier transforms can be computed. Like Quicksort, the FFT relies on a divide-and-conquer strategy to reduce an ostensibly O(N2) chore to an O(N log N) frolic. But unlike Quick- sort, the implementation is (at first sight) nonintuitive and less than straightforward. This in itself gave computer science an impetus to investigate the inherent complexity of computational problems and algorithms. <br />
<br />
9.整数关系探测算法 <br />
1977: Helaman Ferguson and Rodney Forcade of Brigham Young University advance an integer relation detection algorithm. The problem is an old one: Given a bunch of real numbers, say x1, x2, . . . , xn, are there integers a1, a2, . . . , an (not all 0) for which a1x1 + a2x2 + . . . + anxn = 0? For n = 2, the venerable Euclidean algorithm does the job, computing terms in the continued-fraction expansion of x1/x2. If x1/x2 is rational, the expansion terminates and, with proper unraveling, gives the &#8220;smallest&#8221; integers a1 and a2. If the Euclidean algorithm doesn&#8217;t terminate—or if you simply get tired of computing it—then the unraveling procedure at least provides lower bounds on the size of the smallest integer relation. Ferguson and Forcade&#8217;s generalization, although much more difficult to implement (and to understand), is also more powerful. Their detection algorithm, for example, has been used to find the precise coefficients of the polynomials satisfied by the third and fourth bifurcation points, B3 = 3.544090 and B4 = 3.564407, of the logistic map. (The latter polynomial is of degree 120; its largest coefficient is 25730.) It has also proved useful in simplifying calculations with Feynman diagrams in quantum field theory. <br />
<br />
10.快速多极算法 <br />
1987: Leslie Greengard and Vladimir Rokhlin of Yale University invent the fast multipole algorithm. This algorithm overcomes one of the biggest headaches of N-body simulations: the fact that accurate calculations of the motions of N particles interacting via gravitational or electrostatic forces (think stars in a galaxy, or atoms in a protein) would seem to require O(N2) computations—one for each pair of particles. The fast multipole algorithm gets by with O(N) computations. It does so by using multipole expansions (net charge or mass, dipole moment, quadrupole, and so forth) to approximate the effects of a distant group of particles on a local group. A hierarchical decomposition of space is used to define ever-larger groups as distances increase. One of the distinct advantages of the fast multipole algorithm is that it comes equipped with rigorous error estimates, a feature that many methods lack.<br />
<br />
</p>
<h2>20世纪10大算法</h2>
<div class="t_msgfont" id="postmessage_1641918"><font size="4">1、蒙特卡罗算法。1946: John von Neumann, Stan Ulam, and Nick Metropolis<br />
2、单纯形方法。1947: George Dantzig,学过运筹学的人都知道：）<br />
3、Krylov 子空间迭代算法。1950: Magnus Hestenes, Eduard Stiefel, and Cornelius Lanczos。在联想实习的期间看过/Krylov subspace:span{S,A*S,A^2*S,...,A^(k-1)*S}.<br />
4、矩阵分解算法。1951: Alston Householder。<br />
5、Fotran 最优化编译器。1957: John Backus。不知道这个为什么也算作算法里面。Fotran在科学计算中的确是具有里程碑性质的。<br />
6、QR算法。1959&#8211;61: J.G.F. Francis<br />
7、快速排序算法。1962: Tony Hoare。看了关于计算机排序的研究还不是很早。<br />
8、FFT算法。1965: James Cooley<br />
9、整数关系确定算法（Integer Relation Detecting Algorithms）。1977: Helaman Ferguson and Rodney Forcade。一个曾让我辗转反测的算法。<br />
10、快速多极算法(Fast Multipole Algorithms )。1987: Leslie Greengard and Vladimir Rokhlin。N体问题仿真的，不太清楚。</font></div><img src ="http://www.blogjava.net/dongwq/aggbug/240361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dongwq/" target="_blank">小强摩羯座</a> 2008-11-13 17:36 <a href="http://www.blogjava.net/dongwq/archive/2008/11/13/240361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zz:SVM相关理论</title><link>http://www.blogjava.net/dongwq/archive/2008/06/21/209634.html</link><dc:creator>小强摩羯座</dc:creator><author>小强摩羯座</author><pubDate>Fri, 20 Jun 2008 17:12:00 GMT</pubDate><guid>http://www.blogjava.net/dongwq/archive/2008/06/21/209634.html</guid><wfw:comment>http://www.blogjava.net/dongwq/comments/209634.html</wfw:comment><comments>http://www.blogjava.net/dongwq/archive/2008/06/21/209634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dongwq/comments/commentRss/209634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dongwq/services/trackbacks/209634.html</trackback:ping><description><![CDATA[<div class="tit">SVM相关理论</div>
<div class="date">2007-11-30 12:35</div>
<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p>基于数据的机器学习是现代智能技术中的重要方面，研究从观测数据（样本）出发寻找规律，利用这些规律对未来数据或无法观测的数据进行预测。迄今为止，关于机器学习还没有一种被共同接受的理论框架，关于其实现方法大致可以分为三种[3]：</p>
            <p>第一种是<span style="color: #ff0000">经典的（参数）统计估计方法</span>。包括模式识别、神经网络等在内，现有机器学习方法共同的重要理论基础之一是统计学。参数方法正是基于传统统计学的，在这种方法中，参数的相关形式是已知的，训练样本用来估计参数的值。这种方法有很大的局限性.<br />
            首先，它需要已知样本分布形式，这需要花费很大代价，还有，传统统计学研究的是样本数目趋于无穷大时的渐近理论，现有学习方法也多是基于此假设。但在实际问题中，样本数往往是有限的，因此一些理论上很优秀的学习方法实际中表现却可能不尽人意。</p>
            <p>第二种方法是<span style="color: #ff0000">经验非线性方法</span>，如人工神经网络（ANN）。这种方法利用已知样本建立非线性模型，克服了传统参数估计方法的困难。但是，这种方法缺乏一种统一的数学理论。与传统统计学相比，统计学习理论（Statistical Learning Theory或SLT）是一种专门研究小样本情况下机器学习规律的理论。该理论针对小样本统计问题建立了一套新的理论体系，在这种体系下的统计推理规则不仅考虑了对渐近性能的要求，而且追求在现有有限信息的条件下得到最优结果。V. Vapnik等人从六、七十年代开始致力于此方面研究，到九十年代中期，随着其理论的不断发展和成熟，也由于神经网络等学习方法在理论上缺乏实质性进展，统计学习理论开始受到越来越广泛的重视。<br />
            统计学习理论的一个核心概念就是VC维(VC Dimension)概念，它是描述函数集或学习机器的复杂性或者说是学习能力(Capacity of the machine)的一个重要指标，在此概念基础上发展出了一系列关于统计学习的一致性(Consistency)、收敛速度、推广性能(Generalization Performance)等的重要结论。<br />
            统计学习理论是建立在一套较坚实的理论基础之上的，为解决有限样本学习问题提供了一个统一的框架。它能将很多现有方法纳入其中，有望帮助解决许多原来难以解决的问题（比如神经网络结构选择问题、局部极小点问题等）；<br />
            同时，这一理论基础上发展了一种新的通用学习方法──<span style="color: #ff0000">支持向量机</span>（Support Vector Machine或SVM），已初步表现出很多优于已有方法的性能。一些学者认为，SLT和SVM正在成为继神经网络研究之后新的研究热点，并将推动机器学习理论和技术有重大的发展。</p>
            <p><span style="color: #ff0000">支持向量机方法</span>是建立在统计学习理论的VC维理论和结构风险最小原理基础上的，根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度，Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷，以期获得最好的推广能力(Generalizatin Ability)。支持向量机方法的几个主要优点有：<br />
            1. 它是专门针对有限样本情况的，其目标是得到现有信息下的最优解而不仅仅是样本数趋于无穷大时的最优值；<br />
            2. 算法最终将转化成为一个二次型寻优问题，从理论上说，得到的将是全局最优点，解决了在神经网络方法中无法避免的局部极值问题；<br />
            3. 算法将实际问题通过非线性变换转换到高维的特征空间(Feature Space)，在高维空间中构造线性判别函数来实现原空间中的非线性判别函数，特殊性质能保证机器有较好的推广能力，同时它巧妙地解决了维数问题，其算法复杂度与样本维数无关；</p>
            <p>在SVM方法中，只要定义不同的内积函数，就可以实现多项式逼近、贝叶斯分类器、径向基函数(Radial Basic Function或RBF)方法、多层感知器网络等许多现有学习算法。<br />
            统计学习理论从七十年代末诞生，到九十年代之前都处在初级研究和理论准备阶段，近几年才逐渐得到重视，其本身也趋向完善，并产生了支持向量机这一将这种理论付诸实现的有效的机器学习方法。<br />
            目前，SVM算法在模式识别、回归估计、概率密度函数估计等方面都有应用。<br />
            例如，在模式识别方面，对于手写数字识别、语音识别、人脸图像识别、文章分类等问题，SVM算法在精度上已经超过传统的学习算法或与之不相上下。<br />
            目前，国际上对这一理论的讨论和进一步研究逐渐广泛，而我国国内尚未在此领域开展研究，因此我们需要及时学习掌握有关理论，开展有效的研究工作，使我们在这一有着重要意义的领域中能够尽快赶上国际先进水平。由于SLT理论和SVM方法尚处在发展阶段，很多方面尚不完善，比如：许多理论目前还只有理论上的意义，尚不能在实际算法中实现；而有关SVM算法某些理论解释也并非完美（J.C.Burges在[2]中就曾提到结构风险最小原理并不能严格证明SVM为什么有好的推广能力）；此外，对于一个实际的学习机器的VC维的分析尚没有通用的方法；SVM方法中如何根据具体问题选择适当的内积函数也没有理论依据。因此，在这方面我们可做的事情是很多的。</p>
            <p>上文引自 水母bbs AI版</p>
            <p>相关资源</p>
            <p>SVM的英文主站，<br />
            <a href="http://www.kernel-machines.org/"><font color="#ff9900">http://www.kernel-machines.org/</font></a></p>
            <p>Support Vector Machine 作者的站点<br />
            <a href="http://www.support-vector.net/"><font color="#ff9900">http://www.support-vector.net</font></a></p>
            <p>piaip 的 (lib)SVM 簡易入門<br />
            <a href="http://ntu.csie.org/~piaip/svm/svm_tutorial.html"><font color="#ff9900">http://ntu.csie.org/~piaip/svm/svm_tutorial.html</font></a></p>
            <p>林智仁(cjlin)老師的 <strong><span style="color: #ff0000"><strong>libsvm</strong></span></strong> for <span style="color: #ff0000"><strong>matlab</strong></span><br />
            LIBSVM — A Library for Support Vector Machines<br />
            Chih-Chung Chang and Chih-Jen Lin<br />
            <a href="http://www.csie.ntu.edu.tw/~cjlin/libsvm/"><font color="#ff9900">http://www.csie.ntu.edu.tw/~cjlin/libsvm/</font></a></p>
            </div>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.blogjava.net/dongwq/aggbug/209634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dongwq/" target="_blank">小强摩羯座</a> 2008-06-21 01:12 <a href="http://www.blogjava.net/dongwq/archive/2008/06/21/209634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zz:SVM学习之四——从机器学习到支持向量机</title><link>http://www.blogjava.net/dongwq/archive/2008/06/21/209633.html</link><dc:creator>小强摩羯座</dc:creator><author>小强摩羯座</author><pubDate>Fri, 20 Jun 2008 17:01:00 GMT</pubDate><guid>http://www.blogjava.net/dongwq/archive/2008/06/21/209633.html</guid><wfw:comment>http://www.blogjava.net/dongwq/comments/209633.html</wfw:comment><comments>http://www.blogjava.net/dongwq/archive/2008/06/21/209633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dongwq/comments/commentRss/209633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dongwq/services/trackbacks/209633.html</trackback:ping><description><![CDATA[<h1 class="xspace-title">SVM学习之四——从机器学习到支持向量机</h1>
<p class="xspace-smalltxt"><a href="http://www.langtech.org.cn/batch.common.php?action=viewspace&amp;op=up&amp;itemid=444&amp;uid=507">上一篇</a> / <a href="http://www.langtech.org.cn/batch.common.php?action=viewspace&amp;op=next&amp;itemid=444&amp;uid=507">下一篇</a> &nbsp;2007-09-27 10:41:06 / 个人分类：<a href="http://www.langtech.org.cn/index.php/uid-507-action-spacelist-type-blog-itemtypeid-30">svm</a> </p>
<div class="xspace-itemdata"><a href="http://www.langtech.org.cn/index.php/uid-507-action-viewspace-itemid-444#xspace-tracks">查看( 319 )</a> / <a href="http://www.langtech.org.cn/index.php/uid-507-action-viewspace-itemid-444#xspace-itemreply">评论( 7 )</a> / <a href="http://www.langtech.org.cn/index.php/uid-507-action-viewspace-itemid-444#xspace-itemform">评分( <span class="xspace-rategood" title="好评">13</span> / <span class="xspace-ratebad" title="差评">0</span> )</a> </div>
<div class="xspace-itemmessage" id="xspace-showmessage">
<div class="entry-body nerr">
<p><font size="6"><strong>机</strong></font>器学习(Machine Learning, ML)的目的是根据给定的训练样本求对某系统输入输出之间依赖<a onclick="javascript:tagshow(event, '%B9%D8%CF%B5');" href="javascript:;" target="_self"><u><strong>关系</strong></u></a>的估计，使它（这种关系）能够对未知输出做出尽可能准确地预测。机器学习至今没有一个精确的公认的<a onclick="javascript:tagshow(event, '%B6%A8%D2%E5');" href="javascript:;" target="_self"><u><strong>定义</strong></u></a>。作为人工智能(Artificial Intelligence, AI)的一个重要<a onclick="javascript:tagshow(event, '%D1%D0%BE%BF');" href="javascript:;" target="_self"><u><strong>研究</strong></u></a>领域，ML的研究工作主要围绕学习机理、学习方法和面向任务这三个基本方面进行研究。<strong>模式识别、函数逼近和概率密度估计是三类基本的ML问题。</strong></p>
<p>&nbsp;</p>
<p>从数学的角度来考虑，<strong>机器学习问题就是已知n个独立同分布的观测样本，在同一组预测函数中求一个最优的函数对依赖关系进行估计，使期望风险R[f]最小。<font color="#ff0000">损失函数</font></strong>是评价预测准确程度的一种度量，它与预测函数f(x)密切相关。而f(x)的期望风险依赖于概率分布和损失函数，前者是客观存在的，后者是根据具体问题选定的，带有（主观的）人为的或偏好色彩。<strong><font color="#ff0000">期望风险的大小</font></strong>直观上可以理解为，当我们用f(x)进行预测时，&#8220;平均&#8221;的损失程度，或&#8220;平均&#8221;犯错误的程度。</p>
<p>&nbsp;</p>
<p>但是，<strong>只有样本却无法计算期望风险</strong>，因此，<strong>传统的学习方法用样本定义<font color="#ff0000">经验风险Remp[f]</font>作为对期望风险的估计，并设计学习算法使之最小化。</strong>即所谓的<strong><font color="#ff0000">经验风险最小化</font></strong>(Empirical Risk Minimization, ERM)归纳原则。<strong>经验风险是用损失函数来计算的。</strong>对于模式识别问题的损失函数来说，经验风险就是训练样本错误率；对于函数逼近问题的损失函数来说，就是平方训练误差；而对于概率密度估计问题的损失函数来说，ERM准则就等价于最大似然法。事实上，用ERM准则代替期望风险最小化并没有经过充分的理论论证，只是直观上合理的想当然做法。也就是说，<strong>经验风险最小不一定意味着期望风险最小。</strong>其实，只有样本数目趋近于无穷大时，经验风险才有可能趋近于期望风险。但是很多问题中样本数目离无穷大很远，那么在有限样本下ERM准则就不一定能使真实风险较小啦。ERM准则不成功的一个例子就是神经网络的<strong><font color="#ff0000">过学习问题</font></strong>（某些情况下，训练误差过小反而导致推广能力下降，或者说是训练误差过小导致了预测错误率的增加，即真实风险的增加）。</p>
<p>&nbsp;</p>
<p>统计学习理论(Statistical Learning Theory, SLT)和支持向量机(Support Vector Machine, SVM)建立了一套较好的有限训练样本下机器学习的理论框架和通用方法，既有严格的理论基础，又能较好地解决小样本、非线性、高维数和局部极小点等实际问题，其<strong>核心思想就是学习机器（又叫预测函数，或学习函数，或学习模型）F要与有限的训练样本相适应。</strong>在学习算法中需要选择恰当的F，这里的关键因素是F的大小，或者F的丰富程度，或者说F的&#8220;表达能力&#8221;，VC维(Vapnik-Chervonenkis Dimension)就是对这种&#8220;表达能力&#8221;的一种描述。</p>
<p>&nbsp;</p>
<p>VC维的定义如下：对于一个指示函数集，如果存在h个样本能够被函数集中的函数按所有可能的2的h次幂种形式分开，则称函数集能够把h个样本都打散，h的最大值就是函数集的VC维。VC维是SLT中的一个重要概念，它是函数集学习性能的重要指标。<strong>目前尚没有通用的关于任意函数集VC维计算的理论，只知道一些特殊的函数集的VC维。</strong>比如，在n维空间中线性分类器和线性实函数的VC维是 n+1，而 f(x,a) = sin(ax) 的VC维则为无穷大。<strong>对于给定的学习函数集，如何（用理论或实验的方法）计算其VC维是当前统计学习理论中有待研究的一个问题。</strong></p>
<p>&nbsp;</p>
<p>由上文可知，在有限样本情况下，仅仅用ERM来近似期望风险是行不通的。统计学习理论给出了期望风险 R[f] 与经验风险 Remp[f] 之间关系：R[f] &lt;= ( Remp[f] + e )。其中 e = g(h/n) 为置信区间，e 是VC维 h 的增函数，也是样本数n的减函数。右端称为<strong><font color="#ff0000">结构风险</font></strong>，它是期望风险 R[f] 的一个上界。<strong>经验风险的最小依赖较大的 F （样本数较多的函数集）中某个 f 的选择，但是 F 较大，则VC维较大，就导致置信区间 e 变大，所以要想使期望风险 R[f] 最小，必须选择合适的 h 和 n 来使不等式右边的结构风险最小，这就是<font color="#ff0000">结构风险最小化</font>(Structural Risk Minimization, SRM)归纳原则。</strong>实现SRM的思路之一就是设计函数集的某种结构使每个子集中都能取得最小的经验风险（如使训练误差为0），然后只需选择适当的子集使置信范围最小，则这个子集中使经验风险最小的函数就是最优函数。SVM方法实际上就是这种思想的具体实现。</p>
<p>&nbsp;</p>
<p>SVM是一种基于统计的学习方法，它是对SRM的近似。概括地说，<strong>SVM就是首先通过用内积函数定义的非线性变换将输入空间变换到一个高维空间，然后再在这个空间中求（广义）最优分类面的分类方法。</strong></p>
</div>
</div><img src ="http://www.blogjava.net/dongwq/aggbug/209633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dongwq/" target="_blank">小强摩羯座</a> 2008-06-21 01:01 <a href="http://www.blogjava.net/dongwq/archive/2008/06/21/209633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zz:机器学习</title><link>http://www.blogjava.net/dongwq/archive/2008/06/21/209630.html</link><dc:creator>小强摩羯座</dc:creator><author>小强摩羯座</author><pubDate>Fri, 20 Jun 2008 16:55:00 GMT</pubDate><guid>http://www.blogjava.net/dongwq/archive/2008/06/21/209630.html</guid><wfw:comment>http://www.blogjava.net/dongwq/comments/209630.html</wfw:comment><comments>http://www.blogjava.net/dongwq/archive/2008/06/21/209630.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dongwq/comments/commentRss/209630.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dongwq/services/trackbacks/209630.html</trackback:ping><description><![CDATA[<div class="date">2008-06-17 21:22</div>
<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 忙于项目，看了一些理论书籍，总感觉雾里看花，为了能有点动力，我准备写一些总结。<img style="width: 21px; height: 22px" height="22" src="http://img.baidu.com/hi/face/i_f01.gif" width="17"  alt="" /><br />
            <font color="#0000ff">1 机器学习问题表示<br />
            </font>变量y与输入x之间存在一定的关系，即存在二维联合概率密度F（x，y）<br />
            机器学习根据m个独立，同分布观测样本求出一个最优函数y=f（x，a），使预测的<font color="#ff0000">期望风险最小</font><br />
            R（a）= |Q（y，f（x，a））dF（x，y），其中Q（y，f（x，a））是f（x，a）与y之间的损失函数<br />
            <br />
            <font color="#0000ff">2 经验风险最小化</font><br />
            由于并不知道F（x，y），所以无法利用期望风险来求f（x，a），但根据大数定理的思想，可以用算术平均代替数学期望&nbsp;&nbsp;&nbsp;&nbsp; Remp（a）= 1/m（Q（yi，f（xi，a））+......），使样本均值最小求出f（x，a）中参数a<br />
            <br />
            <font color="#0000ff">3 最小均值方法</font><br />
            求经验风险最小可以看做是最佳拟合问题，E = （yi-f（xi，a））**2+ ..........<br />
            在调整权值时需要这样一个算法：在有了新的训练样本时可以在原来的基础上进一步精化权值。对于每一个训练样例，它把权值向减少误差的方向略为调整。这个算法可以看做对可能的假设权值空间进行随机的梯度下降搜索。权值w更新方式为：w&lt;--w+l（yi - f（xi，a））xi</p>
            <p><font color="#0000ff">4函数集的vc维</font><br />
            函数集Q（z，a）vc维等于能够用该函数集以所有可能的2**k种方式分成不同两类的向量z1，z2....最大数目。越复杂的函数vc维越高。<br />
            期望风险R（a ）== 经验风险Remp（a）+sqr（h/m），可见vc维增加会导致期望风险增加。</p>
            <p><font color="#0000ff">5结构风险最小化</font><br />
            min（经验风险Remp（a）+sqr（h/m））<br />
            <br />
            <font color="#0000ff">6支持向量机</font><br />
            svm的基本思想是通过事先选择的线性或非线性的映射将输入向量映射到高维特征空间中，在这个空间中利用了最优化理论和泛化性理论，同时引入了超平面的概念（减少vc维），来构造最优决策函数，并巧妙地利用核函数来代替高维特征空间的点积运算，从而避免了复杂的计算。</p>
            <p><font color="#0000ff">7贝叶斯决策</font><br />
            设要识别的对象有d中特征测量值x1，x2.....xd，每种特征都是一个随机变量。<br />
            设<font color="#ff0000">gi（x）为对应i类的风险函数，利用先验概率</font>，相应的分类规则为：<br />
            如果gi（x）&gt;gj（x），i，j = 1，2，...c， j!= i，则x属于第i类，决策面方程为 gi（x）= gj（x）</p>
            <p><font color="#0000ff">8分类与聚类</font><br />
            分类：样本已知所属类别，求出分类函数，对新的样本进行识别<br />
            聚类：样本无类别，根据其分布距离进行分类</p>
            <p><font color="#0000ff">9线性分类器</font><br />
            定义一个<font color="#ff0000">准则函数</font>J（w，x），w是分类器参数，它的<font color="#ff0000">最小值</font>对应着最优解。得到梯度法迭代公式：<br />
            w（k+1）= w（k）-p（△J）<br />
            因为判别函数g（x）满足：<br />
            g(x)&gt;0 x&#8712;w<br />
            g(x)&lt;0 x!&#8712;w</p>
            <p>准则函数有最小平方误差，最小错分类等。</p>
            <p><font color="#0000ff">10聚类</font><br />
            相似性测度：欧式距离，马氏距离，明氏距离，夹角余弦<br />
            散布准则：类内散布，类间散布，总散布<br />
            求解过程是聚类中心点迭代</p>
            <p><font color="#0000ff">11特征抽取和选择</font><br />
            选择：选取要使用的特征<br />
            抽取：利用选择出来的特征进行降维变换<br />
            抽取方法有线性变换，主成分分析的最佳矩阵变换，</p>
            </div>
            </td>
        </tr>
    </tbody>
</table><img src ="http://www.blogjava.net/dongwq/aggbug/209630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dongwq/" target="_blank">小强摩羯座</a> 2008-06-21 00:55 <a href="http://www.blogjava.net/dongwq/archive/2008/06/21/209630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zz:MIT一牛人对数学在机器学习中的作用给的评述</title><link>http://www.blogjava.net/dongwq/archive/2008/06/21/209628.html</link><dc:creator>小强摩羯座</dc:creator><author>小强摩羯座</author><pubDate>Fri, 20 Jun 2008 16:53:00 GMT</pubDate><guid>http://www.blogjava.net/dongwq/archive/2008/06/21/209628.html</guid><wfw:comment>http://www.blogjava.net/dongwq/comments/209628.html</wfw:comment><comments>http://www.blogjava.net/dongwq/archive/2008/06/21/209628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dongwq/comments/commentRss/209628.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dongwq/services/trackbacks/209628.html</trackback:ping><description><![CDATA[<p>感觉数学似乎总是不够的。这些日子为了解决research中的一些问题，又在图书馆捧起了数学的教科书。</p>
<p>从 大学到现在，课堂上学的和自学的数学其实不算少了，可是在研究的过程中总是发现需要补充新的数学知识。Learning和Vision都是很多种数学的交 汇场。看着不同的理论体系的交汇，对于一个researcher来说，往往是非常exciting的enjoyable的事情。不过，这也代表着要充分了 解这个领域并且取得有意义的进展是很艰苦的。</p>
<p>记得在两年前的一次blog里面，提到过和learning有关的数学。今天看来，我对于数学在这个领域的作用有了新的思考。</p>
<p>对于Learning的研究，</p>
<p>Linear Algebra (线性代数) 和 Statistics (统计学) 是最重要和不可缺少的。这代表了Machine Learning中最主流的两大类方法的基础。一种是以研究函数和变换为重点的代数方法，比如Dimension reduction，feature extraction，Kernel等，一种是以研究统计模型和样本分布为重点的统计方法，比如Graphical model, Information theoretical models等。它们侧重虽有不同，但是常常是共同使用的，对于代数方法，往往需要统计上的解释，对于统计模型，其具体计算则需要代数的帮助。</p>
<p>以代数和统计为出发点，继续往深处走，我们会发现需要更多的数学。</p>
<p>Calculus (微积分)，只是数学分析体系的基础。其基础性作用不言而喻。Learning研究的大部分问题是在连续的度量空间进行的，无论代数还是统计，在研究优化 问题的时候，对一个映射的微分或者梯度的分析总是不可避免。而在统计学中，Marginalization和积分更是密不可分——不过，以解析形式把积分 导出来的情况则不多见。</p>
<p>Partial Differential Equation （偏微分方程)，这主要用于描述动态过程，或者仿动态过程。这个学科在Vision中用得比Learning多，主要用于描述连续场的运动或者扩散过程。 比如Level set, Optical flow都是这方面的典型例子。</p>
<p>Functional Analysis (泛函分析)， 通俗地，可以理解为微积分从有限维空间到无限维空间的拓展——当然了，它实际上远不止于此。在这个地方，函数以及其所作用的对象之间存在的对偶关系扮演了 非常重要的角色。Learning发展至今，也在向无限维延伸——从研究有限维向量的问题到以无限维的函数为研究对象。Kernel Learning 和 Gaussian Process 是其中典型的例子——其中的核心概念都是Kernel。很多做Learning的人把Kernel简单理解为Kernel trick的运用，这就把kernel的意义严重弱化了。在泛函里面，Kernel (Inner Product) 是建立整个博大的代数体系的根本，从metric, transform到spectrum都根源于此。</p>
<p>Measure Theory (测度理论)，这是和实分析关系非常密切的学科。但是测度理论并不限于此。从某种意义上说，Real Analysis可以从Lebesgue Measure（勒贝格测度）推演，不过其实还有很多别的测度体系——概率本身就是一种测度。测度理论对于Learning的意义是根本的，现代统计学整 个就是建立在测度理论的基础之上——虽然初级的概率论教科书一般不这样引入。在看一些统计方面的文章的时候，你可能会发现，它们会把统计的公式改用测度来 表达，这样做有两个好处：所有的推导和结论不用分别给连续分布和离散分布各自写一遍了，这两种东西都可以用同一的测度形式表达：连续分布的积分基于 Lebesgue测度，离散分布的求和基于计数测度，而且还能推广到那种既不连续又不离散的分布中去（这种东西不是数学家的游戏，而是已经在实用的东西， 在Dirchlet Process或者Pitman-Yor Process里面会经常看到)。而且，即使是连续积分，如果不是在欧氏空间进行，而是在更一般的拓扑空间（比如微分流形或者变换群），那么传统的黎曼积 分（就是大学一年级在微积分课学的那种）就不work了，你可能需要它们的一些推广，比如Haar Measure或者Lebesgue-Stieltjes积分。</p>
<p>Topology（拓扑学)，这是学术中很基础的学科。它一般不直接提 供方法，但是它的很多概念和定理是其它数学分支的基石。看很多别的数学的时候，你会经常接触这样一些概念：Open set / Closed set，set basis，Hausdauf, continuous function，metric space, Cauchy sequence, neighborhood, compactness, connectivity。很多这些也许在大学一年级就学习过一些，当时是基于极限的概念获得的。如果，看过拓扑学之后，对这些概念的认识会有根本性的拓 展。比如，连续函数，当时是由epison法定义的，就是无论取多小的正数epsilon，都存在xxx，使得xxx。这是需要一种metric去度量距 离的，在general topology里面，对于连续函数的定义连坐标和距离都不需要——如果一个映射使得开集的原像是开集，它就是连续的——至于开集是基于集合论定义的，不 是通常的开区间的意思。这只是最简单的例子。当然，我们研究learning也许不需要深究这些数学概念背后的公理体系，但是，打破原来定义的概念的局限 在很多问题上是必须的——尤其是当你研究的东西它不是在欧氏空间里面的时候——正交矩阵，变换群，流形，概率分布的空间，都属于此。</p>
<p>Differential Manifold (微分流形)， 通俗地说它研究的是平滑的曲面。一个直接的印象是它是不是可以用来fitting一个surface什么的——当然这算是一种应用，但是这是非常初步的。 本质上说，微分流形研究的是平滑的拓扑结构。一个空间构成微分流形的基本要素是局部平滑：从拓扑学来理解，就是它的任意局部都同胚于欧氏空间，从解析的角 度来看，就是相容的局部坐标系统。当然，在全局上，它不要求和欧氏空间同胚。它除了可以用于刻画集合上的平滑曲面外，更重要的意义在于，它可以用于研究很 多重要的集合。一个n-维线性空间的全部k-维子空间(k &lt; n)就构成了一个微分流形——著名的Grassman Manifold。所有的标准正交阵也构成一个流形。一个变换群作用于一个空间形成的轨迹(Orbit) 也是通常会形成流形。在流形上，各种的分析方法，比如映射，微分，积分都被移植过来了。前一两年在Learning里面火了好长时间的Manifold Learning其实只是研究了这个分支的其中一个概念的应用: embedding。其实，它还有很多可以发掘的空间。</p>
<p>Lie Group Theory (李群论)，一般意义的群论在Learning中被运用的不是很多，群论在Learning中用得较多的是它的一个重要方向Lie group。定义在平滑流行上的群，并且其群运算是平滑的话，那么这就叫李群。因为Learning和编码不同，更多关注的是连续空间，因为Lie group在各种群中对于Learning特别重要。各种子空间，线性变换，非奇异矩阵都基于通常意义的矩阵乘法构成李群。在李群中的映射，变换，度量， 划分等等都对于Learning中代数方法的研究有重要指导意义。</p>
<p>Graph Theory（图论)，图，由于它在表述各种关系的强大能力以及优雅的理论，高效的算法，越来越受到Learning领域的欢迎。经典图论，在 Learning中的一个最重要应用就是graphical models了，它被成功运用于分析统计网络的结构和规划统计推断的流程。Graphical model所取得的成功，图论可谓功不可没。在Vision里面，maxflow (graphcut)算法在图像分割，Stereo还有各种能量优化中也广受应用。另外一个重要的图论分支就是Algebraic graph theory (代数图论)，主要运用于图的谱分析，著名的应用包括Normalized Cut和Spectral Clustering。近年来在semi-supervised learning中受到特别关注。</p><img src ="http://www.blogjava.net/dongwq/aggbug/209628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dongwq/" target="_blank">小强摩羯座</a> 2008-06-21 00:53 <a href="http://www.blogjava.net/dongwq/archive/2008/06/21/209628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>