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

当我们追求不可替代时

昨天,angela zhu在她的公众号“嘀嗒嘀嗒”,发表了一篇职场文章,怎样让自己成为不可替代的程序员。突然,我发现我在职场上难有前进的弱点和问题被暴露无遗。因为一直以来,我追寻的目标,都是可替代。其实我没有在任何公司从事过哪怕一天的职业运维工作,但很有意思,在我职场的最后几年,运维工程师很多工作方式和策略都是我来手把手教的。并不是因为我懂得多少技术,而是我非常清楚运维的至高目标,系统架构应竭力避免单点隐患,什么是单点隐患,就是这个节点崩溃了,系统整个就崩溃了。如何避免?就是任何一个节点,一个设备,一个硬件,或一个服务,崩溃了,系统都有自动检测,利用冗余机制快速恢复,哪怕是降级恢复的策略,保证系统的可用性,不会因为这个故障而全盘崩溃。当然,实话说,这个只是目标,在实践中并不是能做到完全的可靠,但至少,我们所有运维策略,架构设计,以及系统的扩展性分析,都是以这个目标为导向的,那么,为什么罗嗦...阅读全文

我是如何成为一名更优秀的程序员的

译者注:本文作者 James Long,前 Mozilla 工程师,NodeJS, ReactJS 社区活跃开发者。NodeJS 著名模板引擎 Nunjucks 作者,JavaScript 格式化工具 Prettier 作者。在 Mozilla 工作 6 年后离开,年仅 32 岁自己创业开公司。其人生经历值得大部分程序员学习。在React Conf上有几位朋友咨询我如何成为一名更优秀的程序员。由于某种原因,人们认为我是一个值得倾听的高级程序员。所以我想有必要把我这些年编程路上的『心路历程』写下来。关于我的一些详细信息:我现年32岁,有10年以上扎实的工作经验。直到最近几年我才对自己所做的工作充满信心。即使是现在,我也在不断质疑自己。问题在于,这种质疑并不会消失,所以你要做的就是无视它,不断的解决问题,不断的积累经验。首先我要说明的是以下提到的只是一些帮你提升技能的小贴士。最终你还是需要找到...阅读全文

Golang并发编程中的同步(sync)与通信(channel)

Golang中实现并发非常简单,只需在需要并发的函数前面添加关键字"go",但是如何处理go并发机制中不同goroutine之间的同步与通信,golang 中提供了sync包和channel机制来解决这一问题。Synsync 包提供了互斥锁这类的基本的同步原语。除 Once 和 WaitGroup 之外的类型大多用于底层库的例程。更高级的同步操作通过信道与通信进行。而golang中的同步是通过sync.WaitGroup来实现的。WaitGroup的功能:它实现了一个类似队列的结构,可以一直向队列中添加任务,当任务完成后便从队列中删除,如果队列中的任务没有完全完成,可以通过Wait()函数来出发阻塞,防止程序继续进行,直到所有的队列任务都完成为止。WaitGroup总共有三个方法:Add(delta int), Done(), Wait()。Add:添加或者减少等待goroutine的数量...阅读全文

进程间的通讯(IPC)方式

为什么要进行进程间的通讯(IPC (Inter-process communication)数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。资源共享:多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。linux常用的进程间的通讯方式(1)、管道(pipe):管道可用于具有亲缘关系的进程间的通信,是一种半双工的方式,数据只能单向流动,允许一个进程和另一个与它有共同祖先的进程之间进行通信。(2)、命名...阅读全文

Professor Frisby’s Mostly Adequate Guide to Functional Programming

前言同学推荐的书籍,Mark下,有时间阅读About this booThis is a book on the functional paradigm in general. We'll use the world's most popular functional programming language: JavaScript. Some may feel this is a poor choice as it's against the grain of the current culture which, at the moment, feels predominately imperative. However, I believe it is the best way to learn FP for several reasonsYou likely use it ev...阅读全文

Shell脚本之输出带颜色的字体

shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-格式如下echo -e “\033[字背景颜色;文字颜色m字符串\033[0m”例如echo -e “\033[41;36m something here \033[0m”其中41的位置代表底色, 36的位置是代表字的颜色注  1、字背景颜色和文字颜色之间是英文的”;”2、文字颜色后面有个3、字符串前后可以没有空格,如果有的话,输出也是同样有空格下面是相应的字和背景颜色,可以自己来尝试找出不同颜色搭配例echo -e “\033[31m 红色字 \033[0m”echo -e “\033[34m 黄色字 \033[0m”echo -e “\033[41;33m 红底黄字 \033[0m”echo -e “\033[41;37m 红底白字 \033[0m”字颜色:30—–3echo -e “\033[30m 黑色字 \033[0m”...阅读全文

2017 WTM(谷歌女性开发者节) 报名

Google 长期致力于在全球范围内搭建更具包容性的工作环境,其中很关键的一点就是给予女性更多机会去实现梦想,并帮助她们创造改变世界的工具。通过提供适宜的环境和政策,女性可以在科学技术上更加快速地成长,获得更高的价值实现。Women Techmakers (WTM,女性开发者大会)项目是由 GDG (谷歌开发者社区) 的 Women Tech Lead 发起并组织,旨在鼓励和促进女性在技术领域的参与,从而使得更多的女性开发者、女性设计师和科技型公司女性企业家成长、提升和成功。和 I/O 一样,WTM 也是全球性活动。今年 WTM 的主题是 Telling Our Story。今年的 WTM 可以预见的将成为天津 GDG 历史上第二大的活动。嘉宾阵容和数量超过去年很多,我们也换了一个更大的场地。4月15日,我们一起见证属于女性的精彩绽放。当然绿叶们还是可以坐在台下的。时间 / 地点活动时间:...阅读全文