网络资源的拷贝粘贴 备份参考之用


31 March 2008

阿兰・德波顿访谈

要简单,不要平庸――阿兰・德波顿访谈

南方周末    2004-05-27 16:32:19

  爱情
  记者:你的第一次写作好像和爱情有关?
  德波顿:我觉得爱情是很艰难的事情,第一次写作对我来说有疗伤的功效。我的灵感是从日记里得来的。倒也不是说哪次特别的失恋,而是我总是处于一种单相思的状态,我经常会在图书馆中对某个女孩陷入爱恋中。你知道读书是非常枯燥的,我在图书馆看书,有时候看到一个漂亮的女孩子就会暗恋上人家,但常常是没有结果的。所以就开始写些东西抒发心情。那时我已经拿到了学士学位,但又从政府那里拿到一笔钱,用来资助我完成博士学位,我就用它来写小说,从来也没拿到过博士学位。实际上是政府资助我写了第一本小说,但他们当时不知道。
  记者:你写了很多爱情故事,是否自己经历了很多爱情?
  德波顿:我的爱情经验跟别人相比并不会多到哪里去,事实上,经历不在于数量,而在于你能从中得到什么。有许多人经历很丰富,他们经历过战争动乱,但他们写出来的东西很乏味。有些人一辈子只离开过他所在村子一次但是他观察十分仔细,写得又认真,他的书就会很有趣。
  记者:在书中谈情说爱游刃有余,是否会失去生活中爱的能力?
  德波顿:无论是普鲁斯特还是别的作家,作为人的话,每个作家都有强烈的对爱情的渴求。我觉得孤独对一个作家来说是非常重要。我们写作是因为没有人听我们说话,或者是听几句话,在吃晚饭的时候,我会和别人谈论我书中的内容,但不超过五句,别人就会打断我说,我们点饮料吧。写作是种疾病,是种失调,如果你是个正常人的话,是不会成为作家的。如果我有个孩子,对我最大的慰藉就是他想要成为一个工程师什么的,那我就觉得这个父亲当得够成功了。
  记者:那你现在怎么看待爱情?
  德波顿:爱情有两方面,第一方面是你对另一个人有很强烈的热情和共鸣,你对她有好奇心,你有强烈的欲望,心甘情愿地花很多时间去跟随她、了解她的事情,哪怕是很平凡无奇的事情。这种力量和热情是建立在你认为她是好的、是有趣的这样一种同情和理解上面。我讨论的是罗曼蒂克的爱情,不是家庭之爱。另一方面是你对她生理上面喜欢,比如说她的眼睛、她的皮肤、她的手,你会有种本能的喜欢和冲动。我觉得爱情就是由这两部分组成。实际上有时候有个人你很喜欢去爱她,但是你就是不能爱她,或者你觉得不爱她会更好,可是你就是爱她。很奇妙!
  记者:你找到你的真爱了吗?
  德波顿:我找到了,一年半之前我结婚了,经过很多年的寻找终于找到了。但是结婚之后并不是可以一直很开心。恋爱的关系是永远充满了挑战,即使你和你爱的人一起,也会有很多困难,也不会像童话里说的王子公主从此过着幸福快乐的生活。恋爱的过程对我来说就是让我不断破灭对爱情不切实际的幻想的过程。比如我以前觉得你如果真的爱一个人的话,你会永远快乐,但即便是最好的关系也充满了起伏。

  写作  
  记者:你写作谁对你影响大?身边的人吗?
  德波顿:我希望说这话不会显得我没有感激心,但实际上我身边的人并不是最能影响我写作的人。但可能他们的经历他们的故事使我的写作成为可能,但他们的影响并不直接,实际上影响我写作的人早就已经死了,比如说普鲁斯特。我喜欢这些作家,是因为他们可以把日常体验和对一些体验的哲学化的思索结合起来。从生活中的短暂片断,思索生活的本质,这也是我追求的写作风格。
  记者:那你最喜欢哪个作家呢?
  德波顿:普鲁斯特,这是我最喜欢的小说家,他的观察非常细微,对生活小节十分敏感,比如他写他如何入睡就写了30页,有些人估计只能写一句我睡着了。
  记者:但过于关注这些细节,会不会流于繁琐、肤浅?
  德波顿:在日常生活里面,很多深刻的含义孕育在很平常的事情中,像宇宙也属于日常生活的一部分,但它是很深刻的一样东西。比如两个人在房间谈话会是很深刻的事情,并不要非常戏剧化非常波澜起伏的事情,日常生活中就蕴涵很多东西。
  记者:坦率地讲,你讲的故事并不吸引我,小说里最精彩的部分显然是分析和描写,而非故事情节。你采取这样的写法,是出于什么缘故?
  德波顿:小说有不同的种类,有的小说作者是为了紧张、戏剧性,在他的小说里的第一页,某个人死了;在第300页的时候他又发现是谁杀了他。还有一种小说,它使得我们很容易爱上小说里的女主人公,然后想象享受这种爱的感觉。同时,还有另外一种小说,它让你懂得自己和这个世界,我写的小说就是这样的,你通过阅读和理解得到了愉悦。
  如果你要是想兴奋,现在这样的爱情小说实在太多了。那么,我的小说还是重在思考、分析。正如很多人不喜欢普鲁斯特,在他小说《追忆逝水年华》里用30来页的篇幅写了一个吻,那么,也许那些现在的读者会说,普鲁斯特为什么会这样写呢?他为什么不直接写脱衣服上床呢?我想我们的小说不是给这样的读者看的。
  记者:有人说你的书太急于取悦读者了,离经典还很远,你对这种评价如何看待?
  德波顿:我觉得写作有两种极端,一种是太复杂了,一种则是太简单了。现在有一些哲学家写得太复杂了。我不想直接去回应那些评论者,因为每个人都有自己的想法。其实生活中有很多很重大的问题,可以用很简单的意思表达出来。但我觉得在简单和平庸之间是有不同的。我希望我写的是简单,而不是平庸。我想一个简单的真理包括,"一个好读者知道什么时候应该停止阅读",而一条很平庸的陈词滥调是"生活里既有好事也有坏事",前面这句我把它看成简单但有意思的表述,而后面则是一个平庸的语句。17世纪法国有个哲学家拉罗什富科就喜欢写一些简洁但非常隽永的句子,比如"一个人如果没有听到别人说世上有样事情叫爱情的话,他们是不会陷入爱河的",还有他说"一个人如果说我从来没有调情,这句话本身就在调情","当不幸的事情事不关已的时候,人们就有足够的力量去承受",等等。我比较喜欢这种简单又隽永的句子。
  记者:你今后的目标是什么呢?
  德波顿:我的长远计划是,希望能对人类生活的所有问题进行简单阐述,我想写一本关于每日生活哲学这样一本书。我有个梦想可能不太实际,我想建立一个"生活大学",里面教的课程不是工程、化学之类的,而是关于笑、婚姻、死亡、与父母的关系等等。很多人觉得哲学文学等课程对生活是没有实际意义的,但我觉得这些文学对生活还是有意义的,我写《拥抱逝水年华》就是想告诉人们,文学对生活有实际意义。
  记者:那你觉得文学对生活的意义何在?
  德波顿:这就多了,我觉得文学可以改变生活。不知道我写普鲁斯特的这本书,在中国的书名是什么。我在美国出版的时候,本来题目定为《普鲁斯特可以改变你的生活》,但是一个编辑对我说,美国法律中规定,在卖东西的时候,如果广告中有不实之处人们可以控告你。如果有人读了我的书,觉得他的生活一点都没改变,那他就可以告我,我得赔偿一大笔钱。所以我不得不把书名改为《普鲁斯特将会改变你的生活》。事实上,文学有很大的力量,它能帮助我们从孤独中拯救出来,读书能够让你得到某种共鸣,文学能够帮助我们认清自己,提醒自己有多么古怪,它能使我们对一些生活中司空见惯的事情重新思考,它还可以让我们正确地表达自己。

  哲学
  记者:这是一个快速的时代,人们没有耐心去读那些厚厚的原著,而《哲学的慰藉》这样的速成书非常受今天的读者欢迎。因为,人们渴望更简单、更直接了解知识。
  德波顿:在很早以前,我们的书都非常薄,比如中国的孔子、老子的著作,寥寥几行,但意义深远,他们也是很短的书,但是包括了大量的信息和内容,真理也是很简单的。他们的时代和我们目前身处麦当劳时代相差很长的历史,所以我认为那种简洁的风格的书并不是一种很新的风格。
  单单简洁本身,并不足以构成畅销的因素,因为还是要取决于内容本身,我也知道有很多畅销书都是非常厚的,比如《魔戒》、《冷山》等。而且简洁的书也有好的书和很多糟糕的书,所以不能以书的薄与厚来说读者就会喜欢哪些书,关键是内容好不好,有没有意思。
  记者:你曾经上过BBC,在一个电视节目里谈论哲学,哲学能够如此简单吗?上电视主持节目往往被一些学者和文化人所不齿、嘲笑,你怎么看这个现象?
  德波顿:如果说知识分子已经遗忘了面对公众的使命的话,那他们应该感到愧疚。普通人没有时间也没有精力去读那些很高深的东西,就是希望有人用平常的话把高深的东西让他们理解,这是知识分子的责任和任务。
  如果所有的知识分子都不上电视的话,不在公众面前说话,不表达他们的观点,那电视上将完全是好莱坞的电影和各种娱乐。
  所以,无论是什么样的报纸、广播电台、电视台,如果有机会,我都会去讲哲学、文学,知识分子不应该害怕这样面对公众,也不应该拒绝这样的平台。如果在这样的场合你把哲学、文学讲得生动、有趣,它完全是很有成就的一件事情。
  我认为那些讨厌电视的知识分子,实际上是因为电视台不愿意请他们。如果电视台来邀请他们,他们马上就会改变主意的。
  记者:对普通人来说,哲学往往意味着艰深难懂,对他们来说,哲学有什么用呢?
  德波顿:其实中国的古典哲学和欧洲的古典哲学,它们最初的使命都是为了帮助人们生活得更好,它们出现的目的比较单纯,形式和文体也很简单。但是,在经过漫长的时间和时代的变化以后,这种使命失落了。在今天的大学里,把哲学搞得非常复杂,你如果告诉他们哲学只是为了让自己变得更加聪明一些,所有的人都认为你不大认真,是在开玩笑。我对大学里的那些学院派和那些附庸风雅故作高深的东西实在不喜欢,我希望重新找回最初的哲学使命。
  记者:既然哲学是为人所用的,那你的这本书跟那些"心灵鸡汤"类的书有什么区别呢?
  德波顿:其实心灵自助类的书在市场上有很多,大部分是美国人写的,而且封面是粉红色的、紫色的、黄色的,《5分钟如何让你生活更加美满?》、《做一个强大的人》,我看过一些这类书,我觉得这些美国人写的书实在有点傻。但有一个好处是,这些书的目的在于让人生活更美好,这是惟一可取的。
  我自己写这本书的时候,在某种程度上,也借鉴了他们这个目的,在书的形式上故意对这些书有一些戏仿。我认为很多自助类的书有一点问题―――世界一切都很美好,你的妻子会更爱你。他们在书里总是这样告诉你:一切都会好起来的。这反而会让人非常难受。另外一些书会告诉你,生活本来就是不完美的,一切事情都会有缺憾,这样告诉你反而会让你好受点。
  记者:在大学里,哲学往往被理解为应该与人类、民族、革命、生与死相关,像你追求的讲道理类的哲学往往被人轻视。
  德波顿:是的,这正是我们面临的现状,那些艰深的哲学被尊重,那些看起来容易懂的东西被轻视。
  我喜欢的哲学,还是用那些平实朴素的话去描述那些平实朴素的事情。书的想法和写的方法是不同的两件事情。我举个例子,康德的思想是很有趣味的,但是,他的写作方法是很难懂的。就作家这个层面来说,他并不是那么理想的一个作家。就像你说的,关注那些人类命运和重大政治问题、生与死的哲学是很有意思的,这种思想方法我有兴趣看,但是,我相信,即使是这样的主题,我们也并不一定要用高深的、技术化的语言才能表达。如果你写的是核反应堆这样的问题,那用看不懂的语言去写是可以接受的,因为这个问题本来就很专业。
  但是,你涉及的是人类命运那样的话题,你应该使用一种普通人都能够懂的语言来写作。

我和《丁丁历险记》[转载]

我和《丁丁历险记》

2006-01-11 22:32:14   来自: 和菜头

黑岛的评论   *****


  我关于丁丁的所有记忆都与雨季和饥饿有关。
  
  人这一辈子,注定要遇见一些什么人什么事,然后他的人生就彻底改变了。《一千零一夜》里有个故事,说是某甲被预言注定要于某年某月杀掉某乙。某甲是个善良的人,于是他就逃到一个很偏僻的地方去,挖了个地洞藏起来。可是,某乙还是在预言中那天的落日时分一头撞进洞来。故事的结尾是某甲切西瓜,一时手滑,误杀了某乙。
  
  1984年的时候,地摊上有成百本小人书,而我和我的朋友一眼就看中了《丁丁历险记》。一本书是一角钱,我们每人每天的早餐费是五分。在那个夏天,我们省下早点钱,我们穿着雨衣,打着雨伞每天去买一本《丁丁历险记》来看。
  
  很多年以后,他妈妈一提起这事都会落泪。我知道,那是因为他初中一年级就离开昆明去了香港的缘故。我一直到大学才离开昆明,我从来没有告诉我妈我没吃早点。他们不大关注我带了什么书回家看,即使问到,我当时很可能回答说是问朋友借的。我很小就会撒谎了,因为很多事解释起来很麻烦。不解释,那就可以一个人呆着看书,这事比道德要重要。道德让你和很多你其实不用打交道的人整天在一起,很浪费时间。
  
  我所有的日子,只是因为我在那些日子里,因为我完全拥有那些日子,所以那些日子在记忆里闪闪发光。20年过去了,我很少与别人谈起丁丁。因为适合谈丁丁的人已经去了香港好多年,没有什么人可以谈。我想也许存在什么人,和他一起谈丁丁大家会有共鸣。我们的眼睛闪烁着兴奋的光芒,点着头,涨红着点,唾沫星子飞溅着,一叠声说对对对对对对对,是那样的是那样的是那样的。
  
  其实不对,一点都不对。真有一天和什么人这么激动万分地共鸣了,那是因为礼貌或者寂寞。前者是因为说"不"在传统上很失仪。后者是因为我实在没有什么事做,找个能点燃对方的话题。我总能做到礼貌,我也总能找到合适的话题,无论是哪一样,都相当浪费时间和表情。
  
  美国女作家海伦是个又盲又聋的人,她的老师为了教她什么是WATER,就把她的手放在水龙头下,然后再在她的掌心写下WATER。海伦说,就在那一瞬间,她突然明白了这两样事物的联系,她知道了WATER就是流过她掌心的那东西。
  
  丁丁是不可以言说的,可以一起谈丁丁的人一定绝口不谈丁丁。因为丁丁就是流过海伦掌心的水,真正的丁丁迷不需要语言和文字,就能把他内心关于丁丁的所有感受滴水不漏地交给另一个丁丁迷。而那种感受避免了语言文字的干扰,一丝一毫也不至于在这种沉默的交流中丧失掉。
  
  如果有一天,我能和我的朋友重逢,那么我们中的任何一个想起了丁丁,那么另外一个肯定能在同一时间感觉到。20年的时光仿佛从来没有流逝过,雨季就立即降落在我们身边,我们又冷又饿,站在小人书摊前,像是两条面对猎物疯狂摇着尾巴的狗。
  
  小孩子的思想极为单纯,因为单纯而有惊人的力量。没有睁开眼睛的小婴儿无意识地抓住伸来的手指,一握之力相当大。而等它睁开眼睛,这巨大的力量就减弱了。我们极度热望地站在小人书摊前,我们的思虑极为精纯。当我们终于得到一本,那时我们不是在看,而是在吃。这种事在以后很难再发生,人长大了,就难以如此集中全部心念在一件事上。都不能,甚至是爱情和死亡都不能聚集起如此强烈的心念。
  
  《丁丁历险记》也是一套很怪异的书,四个男人和一条公狗整天在一起,没有爱情,没有婚姻,没有美女。有时候,我很难分清楚,我究竟是喜欢丁丁还是丁丁的生活。在所有关于丁丁的记忆里,他都在跑,在美洲、在非洲、在欧洲,在世界上每个角落不断跑着。我于是猜想,喜欢丁丁的人可能是爱上了这种生活。如果计算对人物的喜爱,我可能喜欢阿斯泰波波罗斯,他一次次从丁丁手里逃脱,于是丁丁跟着他满世界到处跑。
  
  丁丁是白雪,阿斯泰波波罗斯是白雪的尾巴,丁丁历险记讲的是一条叫白雪的狗发了狂一般想抓住自己的尾巴。在这种疯狂的兜圈子游戏里,白雪产生了无数幻觉。我们也刚好能看见这种幻觉,因此对这个不知疲倦的游戏充满了兴趣。
  
  一个男孩子的梦想还没有熄灭前,他会爱上丁丁。一个男人的梦想熄灭成灰烬了,他会怀念丁丁。生活漫长而折磨人,一天一丁点,像是丁丁每落一脚鞋底上沾上的泥。《丁丁历险记》始终是一套写给男孩子看的书,在这书里不惜篇幅赞颂了男性之间友谊和信任的伟大。它是一把超大口径的枪,瞄准杜拉丝和拉尔芙这样的女性作家和她们笔下那种超级复杂而细腻的事物和情感,一枪打得粉碎。
  
  看丁丁的男孩的理想只会是去当海盗,在海上游荡,升起骷髅旗。世间只有一个NEVERLAND,只有一个彼得潘。当有很多彼得潘聚集在一起,他们选择看《丁丁历险记》,然后在梦里变成海盗,过一种"有劲"的生活。在那种生活里,即使是阿道克船长的暴躁和卡尔库鲁斯的自闭都是值得赞美的。这书里有一股汗水味道。
  
  我的朋友最终没有成为海盗,他成了个记者,和丁丁一样,满世界跑。我成了个海盗,终日在比特海上航行,像是世界没有终点一样。我说过的,很多事情是注定的,比如说我们在1984年看了《丁丁历险记》,然后一切都被改变,一切都不能重来。

2006-01-12 00:03:50 wxpwp

  写的太好了,有心灵底处的共鸣。"人这一辈子,注定要遇见一些什么人什么事,然后他的人生就彻底改变了。"......

2006-01-12 00:36:19 冷杉

  你说的不是书而是你的历史。所以我认为这篇文章发到豆瓣有点亏,不过也好,作为一道风景,陈设在这里吧。

2006-01-12 07:31:58 暖鱼

  豆瓣还有一个专门的丁丁小组:http://www.douban.com/group/tintin/

2006-01-12 09:00:45 和菜头

  读书史就是个人史,书和人我觉得是密不可分的。说到底,读书是一种个人体验,所以我觉得书评可以分为两种,一种是评论,一种是感想。前者介绍和启发,后者诉诸于感觉,引起共鸣。

2006-01-12 10:24:13 其安

  写得太好了!有些我认识的人,什么爱好也没有。 能在一个雨季和一样喜欢的东西,书,人相遇, 并陪伴一生,这也真算是件幸事了

2006-01-12 10:29:05 草莓

  丁丁是梦想,丁丁是怀念。你正好在那个做梦的年龄遇见了丁丁。
  你最后一句的比喻很丁丁:"我成了个海盗,终日在比特海上航行,像是世界没有终点一样。"还好,你还没有失去梦想。

2006-01-12 10:38:26 Sirenfairy平生峥嵘意

  :)

2006-01-12 11:23:09 dilly

  又想起小时候,还是上学前的时候,每当一本新的丁丁出来后,就从新华书店买回来,坐在门前小板凳上,一口气读完。
  
  怀念那时候的小人书版本,虽然是黑白的,但就是喜欢。

2006-01-12 11:23:53 想变成熊猫

  "我从来没有告诉我妈我没吃早点。他们不大关注我带了什么书回家看,即使问到,我当时很可能回答说是问朋友借的。我很小就会撒谎了,因为很多事解释起来很麻烦。不解释,那就可以一个人呆着看书,这事比道德要重要。"
  觉得很有共鸣!
  "我所有的日子,只是因为我在那些日子里,因为我完全拥有那些日子,所以那些日子在记忆里闪闪发光。"
  是啊,我完全拥有得那些日子让我一直怀念!如金子般可贵!

2006-01-12 12:02:48 Tippi

  写的真好嘿
  我的那本是红海鲨鱼与丁丁,里面的狗名字叫雪球

2006-01-12 12:14:44 飞鱼

  原来一直很纳闷
  为什么自己老是不能安静下来
  不能老老实实地
  呆在一个地方
  不能像其他童年好友一样
  找个所谓固定工作
  娶妻生子
  安个家
  今天看到这篇文章
  豁然开朗
  原来从小就喜欢的丁丁
  竟然给了我这么大的影响
  原来我骨子里的不安分
  是丁丁带给我的
  原来放着家里安排的办公室不坐
  硬要跑去当记者满世界跑
  是丁丁指引的
  原来和女友谈上10年的马拉松恋爱
  还不结婚
  是丁丁做的榜样
  原来我天生就是一个像丁丁一样
  喜欢到处流浪的"飞鱼"

2006-01-12 12:29:43 Noel

  比特海的海盗,写一系列《和和历险记》吧
  
  赞一把!

2006-01-12 13:00:43 elf136

  我们又冷又饿,站在小人书摊前,像是两条面对猎物疯狂摇着尾巴的狗。。。。。。
  好文章!

2006-01-12 13:01:00 chocobo

  哭了

2006-01-12 13:09:23 忆江水

  没有看过丁丁,但是此刻我被感动了!!!

2006-01-12 13:12:16 王二

  原来是你
  谢谢你俄
  看了你的博克
  我才来的
  文字写得真好
  谢谢
  

2006-01-12 13:55:37 江南阡陌

  丁丁,……就是小时候坐在小人书摊的小板凳上聚精会神的日子。
  去年,买了一套丁丁,给老哥寄去了。不知道老哥收到丁丁的时候是什么感觉。

2006-01-12 14:11:48 八哥

  不错,做个标记

2006-01-12 14:52:44 dupang

  敢情

2006-01-12 14:52:58 伊凡果果

  嘿,菜头兄。一直关注你的BLOG,没想到在豆瓣里也找到你了。最近刚买了一套法语原版的丁丁DVD,准备有时间再重温一下。

2006-01-12 15:25:39 会唱歌的鲸鱼

  在我小的时候,一次家里进了小偷,钱没丢多少,可是我的丁丁却被偷了,后来小偷被抓住了,是一个十三四岁的少年,我的丁丁不见了,可是现在我想起来却觉得那个小偷到也是个爱丁丁的人呢.

2006-01-12 16:39:31 漫不经心的跑

   丁丁。想想真是……舒坦。
   2001年在"中青在线"经常看到菜头的帖子。一晃几年,前段时间偶然又看到菜头写的东西,老菜沧桑了。

2006-01-12 17:24:41 左耳波波

  真好...

2006-01-12 17:26:34 小猪舒米

  也许吧,丁丁是儿时心中珍藏的东西,长大了,说不清楚为什么还是喜欢,不仅将小人书版细细收藏,还在法国收集到整整一套法文版的漫画书。今年去了丁丁的故乡,在布鲁塞尔街头,一眼看到楼房侧面画着丁丁、船长和白雪,竟跳跃着叫嚷着指给同行的人看,弄得人家一头雾水。其实,很久没有再翻看丁丁了,在布里塞尔丁丁专卖店里,看到每一件东西,都会有一个故事鲜活地出现在心里,真是真是可惜当时没有一个能和我相视会心一笑的同伴~~~
  
  对了,我在布尔塞尔机场买到了传说中的丁丁在苏联(法文),只是还没舍得拆开封面,不知道到底是什么故事。

2006-01-12 18:40:49 紫外线

  不对,也是女孩子的书,因为我就很喜欢,至今在床脚的木箱里仍然保存着,每年会翻出来晒太阳,于是又看上一遍.再做一回周游全球的梦,哈哈哈...

2006-01-12 21:37:06 穿靴子的猫

  感动啊~~~丁丁是我美好的回忆啊~~~~: )

2006-01-12 21:39:48 穿靴子的猫

  那只小狗好象叫白雪吧哈哈~~~

2006-01-12 22:17:18 郁闷的书生

  很怀念读小学时,和4,5个同学挤在一起看丁丁的乐趣!

2006-01-12 22:33:10 jinying

  鼓掌!

2006-01-13 06:00:49 小车

  不知道怎么描述现在的心情

2006-01-13 07:55:01 央草

  终于理解男朋友为什么那么喜欢丁丁,那么坚持要找回当年的黑白版本了。原来是一段过往,一个梦想,一丝回忆,一份心情。。。

2006-01-13 08:09:05 jolene

  其实觉得说什么,都会因为不那么了解而有点侮辱到你对丁丁的感情。

2006-01-13 08:50:33 nofor

  评论这东西,原本就是与个人环境相关的。
  
  喜欢真诚的文字。

2006-01-13 10:27:25 sbilly

  美好

2006-01-13 13:36:25 sue

  没看过这套书,只是听说过。
  有些伤神的散淡,我很喜欢。

2006-01-13 17:18:36 馒头也有感情

   一直珍藏着仅有的那几本《丁丁》,就像珍藏着我年少的梦。而现在,我试着用自己的全部身心,去实现力所能及的冒险、突破、不安于现状和对未知世界的探索,永远乐观、永不停息。谢谢丁丁带给我的那颗不安分的充满活力的心灵

2006-01-13 20:09:32 球球

  这不是locke吗

2006-01-13 22:54:52 sparky

  童年的很多事情,都象烙在心底的烙印,即使你用力的想把它擦去,也不可能,无论是美好的或则悲伤的回忆.往事也许就象电影一样,你只能一幕一幕的去表演,去欣赏,却永远没有机会重来.是的,很多事情就像流过海伦掌心的水,不需要语言和文字,就能把你内心的某些感受滴水不漏地交给另一个人,语言和文字在这个时候,会让它失色。

2006-01-14 05:46:14 IRIS-36335330

  啊
  确实写的好
  
  很久没这样说了
  被别人的记忆的文字所打动
  
  获取了别人的经历的感动
  并以此中的共鸣混淆我的记忆
  
  

2006-01-14 10:35:08 彤咪

  我的儿子三岁了现在每天抱着丁丁睡觉,希望他能像丁丁一样,正直勇敢,有理想的人或者说有梦想的人虽然看上去是孤单的,但内心生活在另一个美好世界里,却最是幸福,总是一味付出,因为什么也不需要,总向往那永恒的完美和陶醉于宁静的深邃,最惨淡时总看见真理的微笑。

2006-01-14 10:39:13 阿呀蕾

  每次在网上偶遇菜头的文字,这家伙总不会让人失望。
  这篇文字的精彩已不单单是对一本书的回忆了,字里行间透露出的智慧让人微笑、叹息、若有所思。

2006-01-14 13:46:25 蟹黄客

  我很小就会撒谎了,因为很多事解释起来很麻烦。不解释,那就可以一个人呆着看书,这事比道德要重要。
  
  
  精辟!

2006-01-14 14:23:05 Nuts

  真好!
  羡慕菜头可以把自己的感受用语言表达得那么淋漓尽致。

2006-01-14 20:38:50 freedo

  想找一部头的

2006-01-14 22:24:59 水在瓶

  再也回不去了

2006-01-15 07:56:09 imaginer

  十几年前看完丁丁后就有了一个梦想,要买一整套丁丁。后来好友说他家有,还请他回国时带来。可是隔了多年再看,竟然没有了当年的感觉。去年回国时还是买了,也只看了一遍。不知是不是有了孩子的原因,一起买的《父与子》现在倒是经常看着发笑……

2006-01-15 11:00:37 水木丁

  很多人问我水木丁的名字的来历,其实我原来起的名字叫水木丁丁,南方的朋友习惯叫水水,北方的朋友习惯叫丁丁。而后者与我的本意更贴近些,这么多年来,只有一个人曾经猜到后面的丁丁两个字是和那个丁丁有关,那也是个心怀梦想的胖子。

2006-01-15 22:48:47 ChiefHYK

  好

2006-02-14 21:00:38 话不糙理糙

  煽情啊。
  
  

2006-02-22 23:42:55 安*春逝

  我有丁丁的汗衫.

2006-03-17 20:06:02 林千月

  看了一遍又一遍的丁丁和白雪

2006-03-24 13:44:44 云在

  《丁丁历险记》始终是一套写给男孩子看的书,在这书里不惜篇幅赞颂了男性之间友谊和信任的伟大。
  
  喜欢达到某种程度,应该就是这个样子吧,觉得这个东西是特别的,是为自己的特别而特别着的。
  
  我也喜欢丁丁,这是我曾经唯一主动搜集期望完整的图书,今天才发现它的男性意识。我还真麻木。难道我一直都把自己当男的来着?

2006-03-26 17:41:01 可怜

  一个男孩子的梦想还没有熄灭前,他会爱上丁丁。一个男人的梦想熄灭成灰烬了,他会怀念丁丁。
  
  女孩也会。

2006-11-10 23:42:13 freeward

  想起了没有课的星期三下午,在小人书摊前的长坐。爱上了后就买着看了。每个月两元零花钱,当时的丁丁,每集分上下两册,每册4角左右,前期还有过更便宜的。有一次书店到了一批,象过节一样,还偷过家里的粮票换成钱再换成书。在离家很远的郊区书店发现过一次批量的丁丁,没带够钱,掂量了无数次,挑了最想看的买下,之后筹了足够的钱,一次买了n本,豪举。
  离开家上学去了之后,妹妹把丁丁借了出去,从此我的丁丁在人海了漂着。妹妹有几年的时间根本不敢再看我的私藏。
  现在已经有了完整漂亮的丁丁,但永远想念老丁丁
  偶尔也会在需要的时候提起丁丁,来压榨妹妹的内疚。

  

30 March 2008

汉语词性对照表 [北大标准/中科院标准]

词性编码

词性名称

注 解

Ag

形语素

形容词性语素。形容词代码为 a,语素代码g前面置以A

a

形容词

取英语形容词 adjective的第1个字母。

ad

副形词

直接作状语的形容词。形容词代码 a和副词代码d并在一起。

an

名形词

具有名词功能的形容词。形容词代码 a和名词代码n并在一起。

b

区别词

取汉字"别"的声母。

c

连词

取英语连词 conjunction的第1个字母。

dg

副语素

副词性语素。副词代码为 d,语素代码g前面置以D

d

副词

adverb的第2个字母,因其第1个字母已用于形容词。

e

叹词

取英语叹词 exclamation的第1个字母。

f

方位词

取汉字"方"

g

语素

绝大多数语素都能作为合成词的"词根",取汉字"根"的声母。

h

前接成分

取英语 head的第1个字母。

i

成语

取英语成语 idiom的第1个字母。

j

简称略语

取汉字"简"的声母。

k

后接成分

 

l

习用语

习用语尚未成为成语,有点"临时性",取"临"的声母。

m

数词

取英语 numeral的第3个字母,nu已有他用。

Ng

名语素

名词性语素。名词代码为 n,语素代码g前面置以N

n

名词

取英语名词 noun的第1个字母。

nr

人名

名词代码 n和"人(ren)"的声母并在一起。

ns

地名

名词代码 n和处所词代码s并在一起。

nt

机构团体

"团"的声母为 t,名词代码nt并在一起。

nz

其他专名

"专"的声母的第 1个字母为z,名词代码nz并在一起。

o

拟声词

取英语拟声词 onomatopoeia的第1个字母。

p

介词

取英语介词 prepositional的第1个字母。

q

量词

取英语 quantity的第1个字母。

r

代词

取英语代词 pronoun的第2个字母,p已用于介词。

s

处所词

取英语 space的第1个字母。

tg

时语素

时间词性语素。时间词代码为 t,在语素的代码g前面置以T

t

时间词

取英语 time的第1个字母。

u

助词

取英语助词 auxiliary

vg

动语素

动词性语素。动词代码为 v。在语素的代码g前面置以V

v

动词

取英语动词 verb的第一个字母。

vd

副动词

直接作状语的动词。动词和副词的代码并在一起。

vn

名动词

指具有名词功能的动词。动词和名词的代码并在一起。

w

标点符号

 

x

非语素字

非语素字只是一个符号,字母 x通常用于代表未知数、符号。

y

语气词

取汉字"语"的声母。

z

状态词

取汉字"状"的声母的前一个字母。

un

未知词

不可识别词及用户自定义词组。取英文Unkonwn首两个字母。(非北大标准,CSW分词中定义)
 
 

8 March 2008

libsvm和svm-light比较 【zz】

 发信人: CnF (帮我开机器-程序跑起来没有?), 信区: AI       
标  题: Re: 有没有大侠比较过libsvm和svm-light?
发信站: BBS 水木清华站 (Mon May 12 01:04:12 2003), 转信

    不会吧? 我以为libSVM是目前最快的SVM训练软件呢. SVM-light2.0是98年出来的,
挺土的,因为那时候还刚开始探索decomposition algorithm.它的算法详见
Joachims, T. (1998). Making large-scale SVM learning practical. In B. Scholk
opf, C. J. C. Burges, and A. J. Smola (Eds.), Advances in Kernel Methods - S
upport Vector Learning, Cambridge, MA. MIT Press.
    同年出现的还有Platt的SMO算法. SVM-light还没有用上SMO的二维二次规划问题的
解析解法(虽然它也用的两个样本的working set). 但是可能由于它的其他得力机制,如
shrinking和Kernel Cache,在比较中才比SMO快的.(SVMlight用了80M内存,SMO没有用,光
这一点就不平等,我怀疑Joachims的算法实际上没有SMO快的.)
    LibSVM2.3是2001年才出来的,其算法详见
Chang, C.-C. and C.-J. Lin (2001c). LIBSVM: a Library for Support Vector Mac
hines (Version 2.3). http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf (Ju
ne 2001)
    它综合了SVM-light和SMO的算法,而且还是被Keerthy改正过的SMO, 在很多地方比J
oachims的算法考虑得精细得多(比如shrinking机制,确实想得够妙了), 当然Joachims提
出了这些机制的思想,虽然实现得比较粗糙,但对于后来算法的发展有重要意义.
    我觉得LibSVM不太可能比SVMlight慢吧,不过我只是这么一想,没做过试验. 你比的
是它们的什么版本? LibSVM出来2.4了,不过核心算法还是2.32的没变. SVMlight我不知
道后来又出新版本没有. 要试验比较的话, 注意让它们在同等条件下比较,包括解同样的
问题(这个其实不用说了,数据集,样本数,C值,核函数参数都要一样), 同样的Kernel Ca
che大小(也就是内存使用),同样的终止条件(这里注意LibSVM默认用的双边KKT违反tole
rance=0.001的终止条件,而SVMlight用的单边tolerance,默认大概也是0.001,也就是比
LibSVM松了一倍.) 后面二者对速度影响会很大的. 另外还有它们用的浮点数类型是否一
样, LibSVM默认用float而不是double型存放核函数矩阵的元素, 等于可用内存大了一倍
, 但结果的有效位数会下降.
    至于分类效果好坏, 应该跟用哪种解二次规划的算法没什么关系吧. 只要它们用一
样的终止条件卡着, 结果应该都是精确的. 但是支持向量个数及alpha值,b值都会差一点
,这个不奇怪,就是吧样本顺序重排一遍再算结果也会有少许区别的. 如果试验中两个算
法用的一样的终止条件, 分类效果总是一个明显比另一个好,那就实在太奇怪了, 只能说
明我的理解不对了.

【 在 alamarik (走向成熟) 的大作中提到: 】
: 最近弄了一阵子svm,发现libsvm和svm-light两个工具
: 听不错的。其中,libsvm似乎是从svm-light基础上发展起来的
: 但是在解二次规划的方法上,没有完全沿用svm-light的方法。
: 我做了些简单的实验,发现普遍来说,svm-light比libsvm快,而且效果
: 好一些。不知道有没有大侠对他们有研究,比较一些如何?
: 不过,libsvm很容易使用,很容易被集成在自己的cpp工程中,svm-light
: 似乎很麻烦吧,呵呵。
: 期待大家的回复。。。。。。


--
主楼不关门,是我永远的梦想
实验室不断电,是我最大的愿望
每天早上帮我按一下Power,是我唯一的请求

有没有办法来电自动开机呢?如果知道请给我写信,谢谢!


※ 修改:・CnF 于 May 12 01:08:20 修改本文・[FROM:  166.111.151.78]
※ 来源:・BBS 水木清华站 smth.org・[FROM: 166.111.151.78]

7 March 2008

libsvm 简易指南 [zz]


为什么写这个指南
我一直觉得 SVM 是个很有趣的东西,不过一直�办法去听林智仁老� 的 Data mining与SVM的课,后来看了一些Internet上的文件,后来听 kcwu 讲了一下 libsvm 的用法后,就想整理一下,算是对于并不需要知道完整 SVM 理论的人提供使用 libsvm 的入门。 原始 libsvm 的README跟FAQ也是很好的文件, 不过你可能要先对 svm 跟流程有点了解后才看得懂 (我在看时有这样的感觉); 这篇入门就是为了从零开始的人而写的。
不过请记得底下可能有些说法不一定对,但是对于只是想用 SVM 的人来说我觉得这样说明会比较易懂。这篇入门原则上是给会写基本程序的人看的,也是给我自己一个备忘, 不用太多数学底子,也不用对 SVM 有任何预备知识。
SVM:什么是SVM,它能为我们做什么?
SVM, Support Vector Machine , 简而言之它是个起源与人工神经网络有点像的东西,�今最常拿来就是做分类。也就是说,如果我有一堆已经分好类的东西(可是分类的依据是未知的),那当收到新的东西时,SVM可以�测新的数据要分到哪一堆去。听起来是很神奇的事(如果你觉得不神奇,请重想一想这句话代表什么:分类的依据是未知的!,还是不神奇的话就请你写个程序,解解上面的问�),不过 SVM 基于统计学习理论的,可以在合理的时间�漂亮的解决这个问�。
以图形化的例子来说明,假定我在空间中标了一堆用�色分类的点, 点的�色就是它的类�, 位置就是它的数据, 那 SVM 就可以找出区隔这些点的程序, 依此就可以分出一个个的区域; 拿到新的点(数据) 时, 只要对照该位置在哪一区就可以找出它应该是哪一�色(类�)了。当然 SVM 不是真的只有分区那么简单, 不过看上面的例子应该可以了解 SVM 大概在作什么. 要对 SVM 再多懂一点点,可以参考 cjlin 在 data mining 课的 slides: pdf 或 ps 。我们可以把 SVM 当个黑盒子, 数据�进去让他处理然后我们再来用就好了.
哪里得到SVM?
libsvm 当然是最完美的工具.下�处: libsvm.zip 或者 libsvm.tar.gz
.zip 跟 .tar.gz 基本上是一样的, 只是看你的操作系统; 习惯上 Windows 用 .zip 比较方便 (因为有WinZIP, 也有WinRAR), UNIX 则是用 .tar.gz
编译libsvm
解开来后, 假定是UNIX 系统, 直接打 make 就可以了; 编不出来的话请详读说明和运用常识. 因为这是指南, 所以我不花时间细谈, 而且编不出来的情形真是少之又少, 通常一定是你的系统有问�。 其他的子目录可以不管, 只要 svm-train, svm-scale, svm-predict 三个执行文件有就可以了. Windows 的用�要自己重编当然也是可以, 不过已经有编好的执行文件在里面了: 请检查 windows 子目录, 应该会有 svmtrain.exe, svmscale.exe, svmpredict.exe, svmtoy.exe.
SVM的使用
libsvm 有很多种用法, 这篇指南只打算讲简单的部分.
程序
svmtrain
训练数据. 跑SVM被戏称为 "开火�" 也是由于这个程序名而来. train会接受特定格式的输入, 产生一个 "Model" 文件. 这个 model 你可以想像成SVM的�部数据,因为预测要model才能预测, 不能直接吃原始数据.想想也很合理,假定 train 本身是很耗时的动作, 而 train可以以某种形式存起�部数据,那下次要预测时直接把那些�部数据载入就快多了.
svmpredict
依照已经训练好的 model, 再加上给定的输入(新值), 输出�测新值所对应的类�.
svmscale
扫描数据. 因为原始数据可能范围过大或过小, svmscale 可以先将数据重新 scale (�放) 到适当范围使训练与预测速度更快。
文件格式
文件格式要先交代一下. 你可以参考 libsvm 里面附的 "heart_scale": 这是SVM 的输入文件格式.
[label] [index1]:[value1] [index2]:[value2] ...
[label] [index1]:[value1] [index2]:[value2] ...
一行一条记录数据,如:
+1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1
label
或说是class, 就是你要分类的种类,通常是一些整数。
index
是有�序的索引,通常是连续的整数。
value
就是用来 train 的数据,通常是一堆实数。
每一行都是如上的�构, 意思就是: 我有一排数据, 分�是 value1, value2, .... value, (而且它们的�序已由 index 分�指定),这排数据的分类�果就是label。
或�你会不太懂,为什么会是 value1,value2,.... 这样一排呢? 这牵涉到 SVM 的原理。 你可以这样想(我�说这是正确的), 它的名字就叫 Support "Vector" Machine, 所以输入的训练数据是 "Vector"(向量), 也就是一排的 x1, x2, x3, ... 这些值就是 value,而 x[n] 的n就是由index 指定。 这些东西又称为 "(属性)attribute"。
真实的情况是,大部份时候我们给定的数据可能有很多 "特征(feature)" 或说 "属性(attribute)",所以输入会是一组的。 举例来说,以前面点分区的例子 来说,我们不是每个点都有 X 跟 Y 的坐标吗? 所以它就有两种属性。 假定我有两个点: (0,3) 跟 (5,8) 分�在 label(class) 1 跟 2 ,那就会写成
1 1:0 2:3
2 1:5 2:8
同理,空间中的三�坐标就等于有三组属性。这种文件格式最大的好处就是可以使用稀疏矩阵(sparse matrix), 或说有些 数据的属性可以有缺失。
运行libsvm
下来解释一下libsvm 的程序怎么用。 你可以先拿 libsvm 附的heart_scale 来做输入,底下也以它为例:
看到这里你应该也了解,使用 SVM 的流程大概就是:
1. 准备数据并做成指定格式 (有必要时需 svmscale)
2. 用svmtrain 来训练成 model
3. 对新的输入,使用 svmpredic来预测新数据的类别.
svmtrain
svmtrain 的语法大致就是:
svmtrain [options] training_set_file [model_file]
training_set_file 就是之前的格式,而 model_file 如果不给就会 叫 [training_set_file].model。 options 可以先不要给。
下列程序执行�果会产生 heart_scale.model 文件:(�幕输出不是很重要,�有错�就好了)
./svmtrain heart_scale
optimization finished, #iter = 219
nu = 0.431030
obj = -100.877286, rho = 0.424632
nSV = 132, nBSV = 107
Total nSV = 132
svmpredict
svmpredict 的语法是 :
svmpredict  test_file   model_file   output_file
test_file 就是我们要预测的数据。它的格式跟 svmtrain 的输入,也就是 training_set_file 是一样的, 不过每行最前面的 label 可以省略 (因为预测就是要预测那个 label)。 但如果 test_file 有 label 的值的话, predict 完会�便拿 predict 出来的值跟 test_file 里面写的值去做比对,这代表: test_file 写的label是真正的分类�果,拿来跟我们预测的�果比对就可以知道预测的效果。所以,我们可以拿原 training set 当做 test_file再�给 svmpredict 去预测(因为格式一样),看看正确率有多高,方便后面调参数。其它参数就很好理解了: model_file就是 svmtrain 出来的文件, output_file是存输出�果的文件案。 输出的格式很简单,每行一个 label,对应到你的 test_file 里面的各行。下列程序执行�果会产生 heart_scale.out:
./svm-predict heart_scale heart_scale.model heart_scale.out
Accuracy = 86.6667% (234/270) (classification)
Mean squared error = 0.533333 (regression)
Squared correlation coefficient = 0.532639(regression)
我们把原输入�回去 predict, 第一行的 Accuracy 就是�测的正确率了。如果输入�有label 的话,那就是真的预测了。看到这里,基本上你应该已经可以利用 svm 来作事了: 你只要写程序输出正确格式的数据,交给 svm 去 train, 后来再 predict 并读入�果即可。
Advanced Topics
后面可以说是一些稍微进阶的部份,我可能不会讲的很清楚,因为我的重点是想表达一些观念和解释一些你看相关文件时很容易碰到的名�。
Scaling
svm-scale 目前不太好用,不过它有其必要性。因为适当的扫描有助于参数的选择,还有解svm的速度。svmscale 会对每个属性做扫描。 范围用 -l, -u 指定,通常是[0,1]或是[-1,1]。 输出在 stdout。另外要注意的(常常会忘记)是 testing data 和 training data要一起扫描。而 svm-scale 最难用的地方就是�办法指定 testing data/training data(不同文件) 然后一起扫描。
Arguments
前面提到,在train的时候可以使用一些参数。(直接执行 svm-train 不指定输入文件与参数会列出所有参数及语法说明) 这些参数对应到原始 SVM 公式的一些参数,所以会影响预测的正确与否。
举例来说,改个 c=10:
./svm-train -c 10 heart_scale
再来预测 ,正确率�上变成 92.2% (249/270)。
Cross Validation
一般而言, SVM 使用的方式(在决定参数时)常是这样:
1. 先有已分好类的一堆数据
2. 随机拆成好几组训练集
3. 用某组参数去训练并预测�组,看正确率
4. 正确率不够的话,换参数再重复训练/预测
等找到一组不错的参数后,就拿这组参数来建model并用来做最后对未知数据的预测。 这整个过程叫cross validation , 也就是交叉比对。 在我们找参数的过程中,可以利用 svmtrain 的�建交叉比对功能来帮忙:
-v n: n-fold cross validation
n 就是要拆成几组,像 n=3 就会拆成三组,然后先拿 1跟2来训练并预测 3 以得到正确率; 再来拿 2跟 3 训练并预测1,最后 1,3 训练并预测2。其它以此类推。如果�有交叉比对的话,很容易找到只在特定输入时好的参数。像前面我们 c=10 得到 92.2%,不过拿 -v 5 来看看:
 ./svm-train -v 5 -c 10 heart_scale
Cross Validation Accuracy = 80.3704%
平均之后才只有 80.37%,比一开始的 86 还差。
What arguments rules?
通常而言,比较重要的参数是 gamma (-g) 跟 cost (-c) 。而交叉比对 (-v) 的参数常用 5。cost �设值是 1, gamma �设值是 1/k ,k 等于输入数据条数。 那我们怎么知道要用多少来当参数呢?
 TRY就是尝试找比较好的参数值。 Try 参数的过程是用指数增长的方式来增加与�少参数的数值,也就是 2^n (2 的 n 次方)。因为有两组参数,所以等于要尝试 n*n=n^2 次。 这个过程是不连续的成长,所以可以想象成我们在一个 X-Y 平面上指定的范围�找一群格子点 (grid,如果你不太明白,想成方格�或我们把平面上所有整数交点都打个点,就是那样),每个格子点的 X 跟 Y 经过换算 (如 2^x, 2^y) 就拿去当 cost 跟 gamma 的值来交叉比对。所以�在你应该懂得 libsvm 的 python 子目录下面有个 grid.py 是做啥的了: 它把上面的过程自动化, 在你给定的范围�呼叫svm-train去尝试所有的参数值。grid.py 还会把�果绘制出来,方便你�找参数。 libsvm 有很多跟 python �合的部份,由此可� python 是�大方便的工具。很多神奇的功能,像自动登入多台机器去平行跑 grid等等都是python帮忙的。不过 SVM 本身可以完全不需要python,只是会比较方便。跑 grid (基本上用 grid.py 跑当然是最方便,不过如果你不懂python而且觉得很难搞,那你要自己产生参数来跑也是可以的)通常好的范围是 [c,g]=[2^-10,2^10]*[2^-10,2^10]另外其实 grid 用 [-8,8] 也很够了。
Regression(衰减)
另一个值得一提的是regression(衰减)。 简单来说,前面都是拿 SVM 来做分类,所以label的值都是离散的数据、或说已知的固定值。而 regression 则是求连续的值、或说未知的值。你也可以说,一般是二分类问题, 而 regression是可以�测一个实数。
比如说我知道股市指数受到某些因素影响, 然后我想�测股市。股市的指数就是我们的 label, 那些因素量化以后变成属性。 以后收集那些属性给 SVM 它就会 �测出指数(可能是�出�过的数字),这就要用 regression。那对于开奖的号码呢?因为都是固定已知的数字,很明显我们应该用一般SVM的分类来预测 。 (�这是真实的例子 --llwang就写过这样的东西) 所以说 label 也要扫描, 用 svm-scale -y lower upper但是比较糟糕的情况是grid.py不支持regression,而且较差对比对 regression 也常常不是很有效。
 总而言之,regression 是非常有趣的东西,不过也是比较高级的用法。 在这里我们不细谈了,有兴趣的人请再参考SVM与libsvm的其它文件。
尾声
到此我已经简单的说明了 libsvm 的使用方式, 更完整的用法请参考 libsvm 的说明跟 cjlin 的网站、。对于 SVM 的新手来说, libsvmtools 有很多好东西。像 SVM for dummies 就是很方便观察 libsvm 流程的东西。

 

libsvm 简易实用指南


为什么写这个指南
我一直觉得 SVM 是个很有趣的东西,不过一直�办法去听林智仁老� 的 Data mining与SVM的课,后来看了一些Internet上的文件,后来听 kcwu 讲了一下 libsvm 的用法后,就想整理一下,算是对于并不需要知道完整 SVM 理论的人提供使用 libsvm 的入门。 原始 libsvm 的README跟FAQ也是很好的文件, 不过你可能要先对 svm 跟流程有点了解后才看得懂 (我在看时有这样的感觉); 这篇入门就是为了从零开始的人而写的。
不过请记得底下可能有些说法不一定对,但是对于只是想用 SVM 的人来说我觉得这样说明会比较易懂。这篇入门原则上是给会写基本程序的人看的,也是给我自己一个备忘, 不用太多数学底子,也不用对 SVM 有任何预备知识。
SVM:什么是SVM,它能为我们做什么?
SVM, Support Vector Machine , 简而言之它是个起源与人工神经网络有点像的东西,�今最常拿来就是做分类。也就是说,如果我有一堆已经分好类的东西(可是分类的依据是未知的),那当收到新的东西时,SVM可以�测新的数据要分到哪一堆去。听起来是很神奇的事(如果你觉得不神奇,请重想一想这句话代表什么:分类的依据是未知的!,还是不神奇的话就请你写个程序,解解上面的问�),不过 SVM 基于统计学习理论的,可以在合理的时间�漂亮的解决这个问�。
以图形化的例子来说明,假定我在空间中标了一堆用�色分类的点, 点的�色就是它的类�, 位置就是它的数据, 那 SVM 就可以找出区隔这些点的程序, 依此就可以分出一个个的区域; 拿到新的点(数据) 时, 只要对照该位置在哪一区就可以找出它应该是哪一�色(类�)了。当然 SVM 不是真的只有分区那么简单, 不过看上面的例子应该可以了解 SVM 大概在作什么. 要对 SVM 再多懂一点点,可以参考 cjlin 在 data mining 课的 slides: pdf 或 ps 。我们可以把 SVM 当个黑盒子, 数据�进去让他处理然后我们再来用就好了.
哪里得到SVM?
libsvm 当然是最完美的工具.下�处: libsvm.zip 或者 libsvm.tar.gz
.zip 跟 .tar.gz 基本上是一样的, 只是看你的操作系统; 习惯上 Windows 用 .zip 比较方便 (因为有WinZIP, 也有WinRAR), UNIX 则是用 .tar.gz
编译libsvm
解开来后, 假定是UNIX 系统, 直接打 make 就可以了; 编不出来的话请详读说明和运用常识. 因为这是指南, 所以我不花时间细谈, 而且编不出来的情形真是少之又少, 通常一定是你的系统有问�。 其他的子目录可以不管, 只要 svm-train, svm-scale, svm-predict 三个执行文件有就可以了. Windows 的用�要自己重编当然也是可以, 不过已经有编好的执行文件在里面了: 请检查 windows 子目录, 应该会有 svmtrain.exe, svmscale.exe, svmpredict.exe, svmtoy.exe.
SVM的使用
libsvm 有很多种用法, 这篇指南只打算讲简单的部分.
程序
svmtrain
训练数据. 跑SVM被戏称为 "开火�" 也是由于这个程序名而来. train会接受特定格式的输入, 产生一个 "Model" 文件. 这个 model 你可以想像成SVM的�部数据,因为预测要model才能预测, 不能直接吃原始数据.想想也很合理,假定 train 本身是很耗时的动作, 而 train可以以某种形式存起�部数据,那下次要预测时直接把那些�部数据载入就快多了.
svmpredict
依照已经训练好的 model, 再加上给定的输入(新值), 输出�测新值所对应的类�.
svmscale
扫描数据. 因为原始数据可能范围过大或过小, svmscale 可以先将数据重新 scale (�放) 到适当范围使训练与预测速度更快。
文件格式
文件格式要先交代一下. 你可以参考 libsvm 里面附的 "heart_scale": 这是SVM 的输入文件格式.
[label] [index1]:[value1] [index2]:[value2] ...
[label] [index1]:[value1] [index2]:[value2] ...
一行一条记录数据,如:
+1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1
label
或说是class, 就是你要分类的种类,通常是一些整数。
index
是有�序的索引,通常是连续的整数。
value
就是用来 train 的数据,通常是一堆实数。
每一行都是如上的�构, 意思就是: 我有一排数据, 分�是 value1, value2, .... value, (而且它们的�序已由 index 分�指定),这排数据的分类�果就是label。
或�你会不太懂,为什么会是 value1,value2,.... 这样一排呢? 这牵涉到 SVM 的原理。 你可以这样想(我�说这是正确的), 它的名字就叫 Support "Vector" Machine, 所以输入的训练数据是 "Vector"(向量), 也就是一排的 x1, x2, x3, ... 这些值就是 value,而 x[n] 的n就是由index 指定。 这些东西又称为 "(属性)attribute"。
真实的情况是,大部份时候我们给定的数据可能有很多 "特征(feature)" 或说 "属性(attribute)",所以输入会是一组的。 举例来说,以前面点分区的例子 来说,我们不是每个点都有 X 跟 Y 的坐标吗? 所以它就有两种属性。 假定我有两个点: (0,3) 跟 (5,8) 分�在 label(class) 1 跟 2 ,那就会写成
1 1:0 2:3
2 1:5 2:8
同理,空间中的三�坐标就等于有三组属性。这种文件格式最大的好处就是可以使用稀疏矩阵(sparse matrix), 或说有些 数据的属性可以有缺失。
运行libsvm
下来解释一下libsvm 的程序怎么用。 你可以先拿 libsvm 附的heart_scale 来做输入,底下也以它为例:
看到这里你应该也了解,使用 SVM 的流程大概就是:
1. 准备数据并做成指定格式 (有必要时需 svmscale)
2. 用svmtrain 来训练成 model
3. 对新的输入,使用 svmpredic来预测新数据的类别.
svmtrain
svmtrain 的语法大致就是:
svmtrain [options] training_set_file [model_file]
training_set_file 就是之前的格式,而 model_file 如果不给就会 叫 [training_set_file].model。 options 可以先不要给。
下列程序执行�果会产生 heart_scale.model 文件:(�幕输出不是很重要,�有错�就好了)
./svmtrain heart_scale
optimization finished, #iter = 219
nu = 0.431030
obj = -100.877286, rho = 0.424632
nSV = 132, nBSV = 107
Total nSV = 132
svmpredict
svmpredict 的语法是 :
svmpredict  test_file   model_file   output_file
test_file 就是我们要预测的数据。它的格式跟 svmtrain 的输入,也就是 training_set_file 是一样的, 不过每行最前面的 label 可以省略 (因为预测就是要预测那个 label)。 但如果 test_file 有 label 的值的话, predict 完会�便拿 predict 出来的值跟 test_file 里面写的值去做比对,这代表: test_file 写的label是真正的分类�果,拿来跟我们预测的�果比对就可以知道预测的效果。所以,我们可以拿原 training set 当做 test_file再�给 svmpredict 去预测(因为格式一样),看看正确率有多高,方便后面调参数。其它参数就很好理解了: model_file就是 svmtrain 出来的文件, output_file是存输出�果的文件案。 输出的格式很简单,每行一个 label,对应到你的 test_file 里面的各行。下列程序执行�果会产生 heart_scale.out:
./svm-predict heart_scale heart_scale.model heart_scale.out
Accuracy = 86.6667% (234/270) (classification)
Mean squared error = 0.533333 (regression)
Squared correlation coefficient = 0.532639(regression)
我们把原输入�回去 predict, 第一行的 Accuracy 就是�测的正确率了。如果输入�有label 的话,那就是真的预测了。看到这里,基本上你应该已经可以利用 svm 来作事了: 你只要写程序输出正确格式的数据,交给 svm 去 train, 后来再 predict 并读入�果即可。
Advanced Topics
后面可以说是一些稍微进阶的部份,我可能不会讲的很清楚,因为我的重点是想表达一些观念和解释一些你看相关文件时很容易碰到的名�。
Scaling
svm-scale 目前不太好用,不过它有其必要性。因为适当的扫描有助于参数的选择,还有解svm的速度。svmscale 会对每个属性做扫描。 范围用 -l, -u 指定,通常是[0,1]或是[-1,1]。 输出在 stdout。另外要注意的(常常会忘记)是 testing data 和 training data要一起扫描。而 svm-scale 最难用的地方就是�办法指定 testing data/training data(不同文件) 然后一起扫描。
Arguments
前面提到,在train的时候可以使用一些参数。(直接执行 svm-train 不指定输入文件与参数会列出所有参数及语法说明) 这些参数对应到原始 SVM 公式的一些参数,所以会影响预测的正确与否。
举例来说,改个 c=10:
./svm-train -c 10 heart_scale
再来预测 ,正确率�上变成 92.2% (249/270)。
Cross Validation
一般而言, SVM 使用的方式(在决定参数时)常是这样:
1. 先有已分好类的一堆数据
2. 随机拆成好几组训练集
3. 用某组参数去训练并预测�组,看正确率
4. 正确率不够的话,换参数再重复训练/预测
等找到一组不错的参数后,就拿这组参数来建model并用来做最后对未知数据的预测。 这整个过程叫cross validation , 也就是交叉比对。 在我们找参数的过程中,可以利用 svmtrain 的�建交叉比对功能来帮忙:
-v n: n-fold cross validation
n 就是要拆成几组,像 n=3 就会拆成三组,然后先拿 1跟2来训练并预测 3 以得到正确率; 再来拿 2跟 3 训练并预测1,最后 1,3 训练并预测2。其它以此类推。如果�有交叉比对的话,很容易找到只在特定输入时好的参数。像前面我们 c=10 得到 92.2%,不过拿 -v 5 来看看:
 ./svm-train -v 5 -c 10 heart_scale
Cross Validation Accuracy = 80.3704%
平均之后才只有 80.37%,比一开始的 86 还差。
What arguments rules?
通常而言,比较重要的参数是 gamma (-g) 跟 cost (-c) 。而交叉比对 (-v) 的参数常用 5。cost �设值是 1, gamma �设值是 1/k ,k 等于输入数据条数。 那我们怎么知道要用多少来当参数呢?
 TRY就是尝试找比较好的参数值。 Try 参数的过程是用指数增长的方式来增加与�少参数的数值,也就是 2^n (2 的 n 次方)。因为有两组参数,所以等于要尝试 n*n=n^2 次。 这个过程是不连续的成长,所以可以想象成我们在一个 X-Y 平面上指定的范围�找一群格子点 (grid,如果你不太明白,想成方格�或我们把平面上所有整数交点都打个点,就是那样),每个格子点的 X 跟 Y 经过换算 (如 2^x, 2^y) 就拿去当 cost 跟 gamma 的值来交叉比对。所以�在你应该懂得 libsvm 的 python 子目录下面有个 grid.py 是做啥的了: 它把上面的过程自动化, 在你给定的范围�呼叫svm-train去尝试所有的参数值。grid.py 还会把�果绘制出来,方便你�找参数。 libsvm 有很多跟 python �合的部份,由此可� python 是�大方便的工具。很多神奇的功能,像自动登入多台机器去平行跑 grid等等都是python帮忙的。不过 SVM 本身可以完全不需要python,只是会比较方便。跑 grid (基本上用 grid.py 跑当然是最方便,不过如果你不懂python而且觉得很难搞,那你要自己产生参数来跑也是可以的)通常好的范围是 [c,g]=[2^-10,2^10]*[2^-10,2^10]另外其实 grid 用 [-8,8] 也很够了。
Regression(衰减)
另一个值得一提的是regression(衰减)。 简单来说,前面都是拿 SVM 来做分类,所以label的值都是离散的数据、或说已知的固定值。而 regression 则是求连续的值、或说未知的值。你也可以说,一般是二分类问题, 而 regression是可以�测一个实数。
比如说我知道股市指数受到某些因素影响, 然后我想�测股市。股市的指数就是我们的 label, 那些因素量化以后变成属性。 以后收集那些属性给 SVM 它就会 �测出指数(可能是�出�过的数字),这就要用 regression。那对于开奖的号码呢?因为都是固定已知的数字,很明显我们应该用一般SVM的分类来预测 。 (�这是真实的例子 --llwang就写过这样的东西) 所以说 label 也要扫描, 用 svm-scale -y lower upper但是比较糟糕的情况是grid.py不支持regression,而且较差对比对 regression 也常常不是很有效。
 总而言之,regression 是非常有趣的东西,不过也是比较高级的用法。 在这里我们不细谈了,有兴趣的人请再参考SVM与libsvm的其它文件。
尾声
到此我已经简单的说明了 libsvm 的使用方式, 更完整的用法请参考 libsvm 的说明跟 cjlin 的网站、。对于 SVM 的新手来说, libsvmtools 有很多好东西。像 SVM for dummies 就是很方便观察 libsvm 流程的东西。

 

libsvm 简易指南 [zz]

这篇文章转自:http://www.blog.edu.cn/user2/huangbo929/archives/2007/1714753.shtml

原作:林弘德
 

为什么写这个指南

我一直觉得 SVM 是个很有趣的东西,不过一直�办法去听林智仁老� Data miningSVM的课,后来看了一些Internet上的文件,后来听 kcwu 讲了一下 libsvm 的用法后,就想整理一下,算是对于并不需要知道完整 SVM 理论的人提供使用 libsvm 的入门。 原始 libsvm READMEFAQ也是很好的文件, 不过你可能要先对 svm 跟流程有点了解后才看得懂 (我在看时有这样的感觉) 这篇入门就是为了从零开始的人而写的。

不过请记得底下可能有些说法不一定对,但是对于只是想用 SVM 的人来说我觉得这样说明会比较易懂。这篇入门原则上是给会写基本程序的人看的,也是给我自己一个备忘, 不用太多数学底子,也不用对 SVM 有任何预备知识。

SVM:什么是SVM,它能为我们做什么?

SVM, Support Vector Machine , 简而言之它是个起源与人工神经网络有点像的东西,�今最常拿来就是做分类。也就是说,如果我有一堆已经分好类的东西(可是分类的依据是未知的),那当收到新的东西时,SVM可以�测新的数据要分到哪一堆去。听起来是很神奇的事(如果你觉得不神奇,请重想一想这句话代表什么:分类的依据是未知的!,还是不神奇的话就请你写个程序,解解上面的问�),不过 SVM 基于统计学习理论的,可以在合理的时间�漂亮的解决这个问�。

以图形化的例子来说明,假定我在空间中标了一堆用�色分类的点, 点的�色就是它的类�, 位置就是它的数据, SVM 就可以找出区隔这些点的程序, 依此就可以分出一个个的区域; 拿到新的点(数据) , 只要对照该位置在哪一区就可以找出它应该是哪一�色(类�)了。当然 SVM 不是真的只有分区那么简单, 不过看上面的例子应该可以了解 SVM 大概在作什么. 要对 SVM 再多懂一点点,可以参考 cjlin data mining 课的 slides: pdf ps 。我们可以把 SVM 当个黑盒子, 数据�进去让他处理然后我们再来用就好了.

哪里得到SVM?

libsvm 当然是最完美的工具.下�处: libsvm.zip 或者 libsvm.tar.gz

.zip .tar.gz 基本上是一样的, 只是看你的操作系统; 习惯上 Windows .zip 比较方便 (因为有WinZIP, 也有WinRAR), UNIX 则是用 .tar.gz

编译libsvm

解开来后, 假定是UNIX 系统, 直接打 make 就可以了; 编不出来的话请详读说明和运用常识. 因为这是指南, 所以我不花时间细谈, 而且编不出来的情形真是少之又少, 通常一定是你的系统有问�。 其他的子目录可以不管, 只要 svm-train, svm-scale, svm-predict 三个执行文件有就可以了. Windows 的用�要自己重编当然也是可以, 不过已经有编好的执行文件在里面了: 请检查 windows 子目录, 应该会有 svmtrain.exe, svmscale.exe, svmpredict.exe, svmtoy.exe.

SVM的使用

libsvm 有很多种用法, 这篇指南只打算讲简单的部分.

程序

svmtrain

训练数据. SVM被戏称为 "开火�" 也是由于这个程序名而来. train会接受特定格式的输入, 产生一个 "Model" 文件. 这个 model 你可以想像成SVM的�部数据,因为预测要model才能预测, 不能直接吃原始数据.想想也很合理,假定 train 本身是很耗时的动作, train可以以某种形式存起�部数据,那下次要预测时直接把那些�部数据载入就快多了.

svmpredict

依照已经训练好的 model, 再加上给定的输入(新值), 输出�测新值所对应的类�.

svmscale

扫描数据. 因为原始数据可能范围过大或过小, svmscale 可以先将数据重新 scale (�放) 到适当范围使训练与预测速度更快。

文件格式

文件格式要先交代一下. 你可以参考 libsvm 里面附的 "heart_scale": 这是SVM 的输入文件格式.

[label] [index1]:[value1] [index2]:[value2] ...

[label] [index1]:[value1] [index2]:[value2] ...

一行一条记录数据,如:

+1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1

label

或说是class, 就是你要分类的种类,通常是一些整数。

index

是有�序的索引,通常是连续的整数。

value

就是用来 train 的数据,通常是一堆实数。

每一行都是如上的�构, 意思就是: 我有一排数据, 分�是 value1, value2, .... value, (而且它们的�序已由 index 分�指定),这排数据的分类�果就是label

或�你会不太懂,为什么会是 value1,value2,.... 这样一排呢? 这牵涉到 SVM 的原理。 你可以这样想(我�说这是正确的), 它的名字就叫 Support "Vector" Machine 所以输入的训练数据是 "Vector"(向量), 也就是一排的 x1, x2, x3, ... 这些值就是 value,而 x[n] n就是由index 指定。 这些东西又称为 "(属性)attribute"

真实的情况是,大部份时候我们给定的数据可能有很多 "特征(feature)" 或说 "属性(attribute)",所以输入会是一组的。 举例来说,以前面点分区的例子 来说,我们不是每个点都有 X Y 的坐标吗? 所以它就有两种属性。 假定我有两个点: (0,3) (5,8) 分�在 label(class) 1 2 ,那就会写成

1 1:0 2:3
2 1:5 2:8
同理,空间中的三�坐标就等于有三组属性。这种文件格式最大的好处就是可以使用稀疏矩阵(sparse matrix), 或说有些 数据的属性可以有缺失。

运行libsvm

下来解释一下libsvm 的程序怎么用。 你可以先拿 libsvm 附的heart_scale 来做输入,底下也以它为例:

看到这里你应该也了解,使用 SVM 的流程大概就是:

1. 准备数据并做成指定格式 (有必要时需 svmscale)

2. svmtrain 来训练成 model

  1. 对新的输入,使用 svmpredic来预测新数据的类别.

svmtrain

svmtrain 的语法大致就是:

svmtrain [options] training_set_file [model_file]

training_set_file 就是之前的格式,而 model_file 如果不给就会 [training_set_file].model options 可以先不要给。

下列程序执行�果会产生 heart_scale.model 文件:(�幕输出不是很重要,�有错�就好了)

./svmtrain heart_scale

optimization finished, #iter = 219

nu = 0.431030

obj = -100.877286, rho = 0.424632
nSV = 132, nBSV = 107

Total nSV = 132

svmpredict

svmpredict 的语法是 :

svmpredict  test_file   model_file   output_file

test_file 就是我们要预测的数据。它的格式跟 svmtrain 的输入,也就是 training_set_file 是一样的, 不过每行最前面的 label 可以省略 (因为预测就是要预测那个 label) 但如果 test_file label 的值的话, predict 完会�便拿 predict 出来的值跟 test_file 里面写的值去做比对,这代表: test_file 写的label是真正的分类�果,拿来跟我们预测的�果比对就可以知道预测的效果。所以,我们可以拿原 training set 当做 test_file再�给 svmpredict 去预测(因为格式一样),看看正确率有多高,方便后面调参数。其它参数就很好理解了: model_file就是 svmtrain 出来的文件, output_file是存输出�果的文件案。 输出的格式很简单,每行一个 label,对应到你的 test_file 里面的各行。下列程序执行�果会产生 heart_scale.out

./svm-predict heart_scale heart_scale.model heart_scale.out

Accuracy = 86.6667% (234/270) (classification)

Mean squared error = 0.533333 (regression)

Squared correlation coefficient = 0.532639(regression)

我们把原输入�回去 predict 第一行的 Accuracy 就是�测的正确率了。如果输入�有label 的话,那就是真的预测了。看到这里,基本上你应该已经可以利用 svm 来作事了: 你只要写程序输出正确格式的数据,交给 svm train 后来再 predict 并读入�果即可。

Advanced Topics

后面可以说是一些稍微进阶的部份,我可能不会讲的很清楚,因为我的重点是想表达一些观念和解释一些你看相关文件时很容易碰到的名�。

Scaling

svm-scale 目前不太好用,不过它有其必要性。因为适当的扫描有助于参数的选择,还有解svm的速度。svmscale 会对每个属性做扫描。 范围用 -l, -u 指定,通常是[0,1]或是[-1,1] 输出在 stdout另外要注意的(常常会忘记) testing data training data要一起扫描。而 svm-scale 最难用的地方就是�办法指定 testing data/training data(不同文件) 然后一起扫描。

Arguments

前面提到,在train的时候可以使用一些参数。(直接执行 svm-train 不指定输入文件与参数会列出所有参数及语法说明) 这些参数对应到原始 SVM 公式的一些参数,所以会影响预测的正确与否。

举例来说,改个 c=10:
./svm-train -c 10 heart_scale
再来预测 ,正确率�上变成 92.2% (249/270)

Cross Validation

一般而言, SVM 使用的方式(在决定参数时)常是这样:

1. 先有已分好类的一堆数据

2. 随机拆成好几组训练集

  1. 用某组参数去训练并预测�组,看正确率
  2. 正确率不够的话,换参数再重复训练/预测

等找到一组不错的参数后,就拿这组参数来建model并用来做最后对未知数据的预测。 这整个过程叫cross validation 也就是交叉比对。 在我们找参数的过程中,可以利用 svmtrain 的�建交叉比对功能来帮忙:

-v n: n-fold cross validation
n
就是要拆成几组,像 n=3 就会拆成三组,然后先拿 12来训练并预测 3 以得到正确率; 再来拿 2 3 训练并预测1,最后 1,3 训练并预测2。其它以此类推。如果�有交叉比对的话,很容易找到只在特定输入时好的参数。像前面我们 c=10 得到 92.2%,不过拿 -v 5 来看看:

 ./svm-train -v 5 -c 10 heart_scale

Cross Validation Accuracy = 80.3704%

平均之后才只有 80.37%,比一开始的 86 还差。

What arguments rules?

通常而言,比较重要的参数是 gamma (-g) cost (-c) 。而交叉比对 (-v) 的参数常用 5cost �设值是 1, gamma �设值是 1/k k 等于输入数据条数。 那我们怎么知道要用多少来当参数呢?

 TRY就是尝试找比较好的参数值。 Try 参数的过程是用指数增长的方式来增加与�少参数的数值,也就是 2^n (2 n 次方)。因为有两组参数,所以等于要尝试 n*n=n^2 次。 这个过程是不连续的成长,所以可以想象成我们在一个 X-Y 平面上指定的范围�找一群格子点 (grid,如果你不太明白,想成方格�或我们把平面上所有整数交点都打个点,就是那样),每个格子点的 X Y 经过换算 ( 2^x, 2^y) 就拿去当 cost gamma 的值来交叉比对。所以�在你应该懂得 libsvm python 子目录下面有个 grid.py 是做啥的了: 它把上面的过程自动化, 在你给定的范围�呼叫svm-train去尝试所有的参数值。grid.py 还会把�果绘制出来,方便你�找参数。 libsvm 有很多跟 python �合的部份,由此可� python 是�大方便的工具。很多神奇的功能,像自动登入多台机器去平行跑 grid等等都是python帮忙的。不过 SVM 本身可以完全不需要python,只是会比较方便。跑 grid (基本上用 grid.py 跑当然是最方便,不过如果你不懂python而且觉得很难搞,那你要自己产生参数来跑也是可以的)通常好的范围是 [c,g]=[2^-10,2^10]*[2^-10,2^10]另外其实 grid [-8,8] 也很够了。

Regression衰减)

另一个值得一提的是regression(衰减)。 简单来说,前面都是拿 SVM 来做分类,所以label的值都是离散的数据、或说已知的固定值。而 regression 则是求连续的值、或说未知的值。你也可以说,一般是二分类问题, regression是可以�测一个实数。

比如说我知道股市指数受到某些因素影响, 然后我想�测股市。股市的指数就是我们的 label, 那些因素量化以后变成属性。 以后收集那些属性给 SVM 它就会 �测出指数(可能是�出�过的数字),这就要用 regression。那对于开奖的号码呢?因为都是固定已知的数字,很明显我们应该用一般SVM的分类来预测 (�这是真实的例子 --llwang就写过这样的东西) 所以说 label 也要扫描, svm-scale -y lower upper但是比较糟糕的情况是grid.py不支持regression,而且较差对比对 regression 也常常不是很有效。

 总而言之,regression 是非常有趣的东西,不过也是比较高级的用法。 在这里我们不细谈了,有兴趣的人请再参考SVMlibsvm的其它文件。

尾声

到此我已经简单的说明了 libsvm 的使用方式, 更完整的用法请参考 libsvm 的说明跟 cjlin 的网站、。对于 SVM 的新手来说, libsvmtools 有很多好东西。像 SVM for dummies 就是很方便观察 libsvm 流程的东西。

 

Google