Topic:simple is the best V.S. no free lunch——SVM V.S. other models

今天听一个讲述SVM(Support Vector Machine)模型与其他模型区别的讲座,这里整理如下:(主要参考书籍是bengio先生的《deep learning》还有周志华老师的西瓜书《机器学习》svm的思维还是很bug(这里是闪光点的意思,惊艳)的,解决问题的角度啊,很吸引人,很神奇的思维,有很直观的视角和很严格的数学基础。svm的反其道行之的思想太好了,其他模型,想分的好,,,都是试图让模型的capacity变大(这里capacity指:样本数据),SVM恰恰相反,SVM的精髓是simple is the best,而其他的是 no free lunch。一、初始阶段咱今天主题是讨论两大高手的对决,第一大高手,叫做no free lunch,分类在他的眼中,很简单。有一堆样本x1~xN,,有一堆类别标号1~K,这个高手眼中的分类,是寻找一个函数f,使得f(x)约等于他的类别...阅读全文

Regression splines

1.作用:做数据平滑(smoothing),换句话说,进行数据拟合,预测数据发展趋势。2. 与regression analysis(回归分析)的区别:回归分析方法的模型建立,比如:linear model(线性模型),其表达式唯一(没有分段之说);而对于regression splines来说,对一组数据来说,其构建的模型表达式,直白的说是分段函数,或者在模型表达式中加入hinge function产生kink/knot(节点,转折点,或者分段点)更好的表示数据延伸趋势。Regression splines的模型最小二乘误差比linear model的要小,也即是说明了:该模型的鲁棒性。3. Regression splines 模型这个函数是基础函数B(x)加权之后的和。Ci是系数,也可以称为是单个基础函数Bi(x)的权重,其实就是我们初中学的:直线的斜率。组合之后,构成非线性方程,在...阅读全文

TDD(测试驱动开发)的好处

你会更加站在用户的角度去看你将要完成的产品,你要尽可能想到用户所有进行的操作。而不是从程序员的角度想用户应该会如何去使用我们的产品。测试用例是在对功能进行测试。在写代码之前先写测试用例,可以对我们编写代码提供指导性的参考。防止我们漏掉一些功能。它使我们对自己代码有了信心,因为我们事先设计好的所有测试用例都Pass了。如果在更改代码后测试用例不能通过,我们可以根据不能通过的测试用例精确的定位问题,并轻而易举的解决的这个bug。哈!我们的一整套完备的测试用例在这里替我们把关(把的什么关?),我们就可以十分安全的使用极限编程的另一个最重要的工具——重构。重构改变的是代码的内部结构,而不会改变外部接口功能。知道在做重构时测试用例是把的什么关了吧!很明显,测试用例是保证我们在进行重构时,不会影响到代码的外部接口功能。所以我刚刚说,我们进行的重构是十分安全的。基于第5点,我们找到了重构的信心,必要时候...阅读全文

编程的智慧

编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋。然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获。反复推敲代码既然“天才是百分之一的灵感,百分之九十九的汗水”,那我先来谈谈这汗水的部分吧。有人问我,提高编程水平最有效的办法是什么?我想了很久,终于发现最有效的办法,其实是反反复复地修改和推敲代码。在IU的时候,由于Dan Friedman的严格教导,我们以写出冗长复杂的代码为耻。如果你代多写了几行,这老顽童就会大笑,说:“当年我解决这个问题,只写了5行代码,你回去再想想吧……” 当然,有时候他只是夸张一下,故意刺激你的,其实没有人能只用5行代码完成。然而这种提炼代码,减少冗余的习惯,却...阅读全文

PRML学习系列——第一章 多项式拟合

pattern recognition and machine learning 简称PRML是模式识别人工智能的基础书籍,好好学习学习,打下坚实基础,这里记录学习的点滴,可能会有误解之处,在后续的学习中会及时更正,也希望广大学友们,发现问题,能给我留言,我会及时更正,避免误导他人,共同学习进步。看了多项式拟合(polynomial curve fitting),为什么要做多项式拟合?是因为我们根据现有的数据(输入,输出对),想要预测:给定一个新的数据,其输出是什么。中间的决策箱就是所谓的“训练模型”,决策结果称为:预测。拟合函数如下(1其中x是训练数据向量,W是训练的参数,整体称为模型,M是多项式的阶次。式(1)对x来说y是非线性的  但是对于w系数来说,y是线性的模型。这里x的次幂为M,这个参数表示模型的复杂程度,x的次幂越高,模型越复杂,同样也需要大于这个M的样本,也即是:模型越...阅读全文

Rabin-Karp 算法(字符串快速查找)

Go 语言的 strings 包(strings.go)中用到了 Rabin-Karp 算法。Rabin-Karp 算法是基于这样的思路:即把字符串看作是字符集长度进制的数,由数值的比较结果得出字符串的比较结果。朴素的字符串匹配算法为什么慢?因为它太健忘了,前一次匹配的信息其实有部分可以应用到后一次匹配中去,而朴素的字符串匹配算法只是简单的把这个信息扔掉,从头再来,因此,浪费了时间。好好的利用这些信息,自然可以提高运行速度。由于完成两个字符串的比较需要对其中包含的字符进行逐个比较,所需的时间较长,而数值比较则一次就可以完成,那么我们首先把“搜索词”中各个字符的“码点值”通过计算,得出一个数值(这个数值必须可以表示出字符的前后顺序,而且可以随时去掉某个字符的值,可以随时添加一个新字符的值),然后对“源串”中要比较的部分进行计算,也得出一个数值,对这两个数值进行比较,就能判断字符串是否匹配。对...阅读全文