当前位置: 首页 > news >正文

数学,你在为谁膨胀?

   今天聊数学基础

最近,总看到有人在网上推荐机器学习相关的数学书,今天专门找了找,才发现不是一本,是好几本,甚至一些子领域子问题也专门出了一本书,譬如线性代数在机器学习中的使用,又譬如自然语言处理使用的数学基础,等等。颇有一点出书的比看书的还多的意思。值得推荐的也发现了一些,找机会单聊。当然,我是挺愿意这样讲基础的书多出几本的,虽然生活中我们都喜欢一站式服务,基础知识最好也出个一本通之类的,买回来读完就啥都会了。不过,数学知识体系太庞大,基础概念又多,总是会挂一漏万,读着读着就磕巴了。要全都写进去,书又肯定会厚得吓人,连翻开的勇气也没有了。不过,这里我还是坚持一个观点,数学虽好,不过也不用贪杯哟。如果只为懂机器学习,数学真的不用懂太多。

这样说,肯定会有人不服气:你看,随便一本从数学角度讲机器学习的书至少能写400页,如果再加一点推导,写到700页还只是起步价。这是什么概念?要知道机器学习一般会从数学或者编程两种角度中选择一种来讲,而通常一本从编程角度讲机器学习的书两三百页也就打住了,这里面还算上了大段大段的代码,数学一本顶编程三本,想象一下你就知道,这得学多少数学。

是这样。不过,里面很多数学,就跟我们编写的用户注册功能的代码一样,很大一部分都是条件判断,与核心原理无关。什么意思呢?就算没真的编写过用户注册功能也不要紧,我们肯定都注册过新账户,稍微回忆一下就知道了:用户注册功能最核心的部分就是获取用户输入的用户名以及对应密码的信息,然后存入数据库。通常可能用短短几行。但是,我们需要对用户输入的信息,做大量合规性判断,譬如用户名是不是纯字母和数字,是不是已经存在,密码是不是符合安全规范,譬如长度为6位,包含大小写和特殊字符等等,都需要写条件判断。这些功能整个实现下来,代码就写得很长,而且对输入信息的限制条件越多,这样的合规性条件判断就越多,代码就越长,加点其他的显示效果之类的代码再配上注释,写个上百行不是梦想。

但不管最终代码看起来有多膨胀,别忘了核心原理就是存入数据库那两行。这里我们举个机器学习的例子。支持向量机是机器学习中最复杂的算法之一,scikit-learn里实现的LinearSVR,代码从254行一直写到435行,长度简直惊人!可是这都是核心代码吗?不是,注释就占了一大半,剩下纯代码的部分,变量初始化占了一部分,异常处理占一部分,再加上前面我们说的条件判断又占了一部分,能给核心功能留下的空间真的不多了,满打满算也就十行。

机器学习里的数学也是一样的道理。数学给我们的第一印象一般都是——数学这门课“难学”,不过参考答案“严谨”。具体来说,数学的每个概念每项操作,都必须有定义,定义可能包含其他概念,这就又有定义。每个概念的使用都必须满足一定条件,也就是包含合规性判断,再加上杂七杂八的“注释”,想不膨胀也难了——不过别忘了,核心代码也就两行。

这就是我所建议的,学机器学习,首先得明确动机。如果你更关注的是算法本身的原理,那数学不过是把原理表达出来所使用的一种语言罢了,犯不着把有限的时间精力耗费在与各种证明推导的死磕上。

不过,问题当然还没完,机器学习的数学里哪些是“核心代码”,哪些又是合规性判断,怎么进行区别?别急,话题很大,这一篇是聊不完了。敬请期待......下次再聊!

作者简介:

莫凡——新技术深度爱好者,曾经从事信息安全前沿技术跟踪研究和数据分析工作,在各类信息安全类技术期刊杂志发表文章五十余篇,现转为投身高端知识“白菜化”项目,希望能让将更多听起来高大上的名词沾一沾人间烟火,成为日常中生活真正用得上的知识,著有《机器学习算法的数学解析与Python实现》。个人公众号“睡前机器学习”,个人知乎号“木羊”。

 点击阅读原文,直达数据库专场 

相关文章:

  • 机器人时代已来!推荐几本机器人学硬核好书
  • 当OpenCV遇上Origami
  • 当防范恶意软件时,为什么不像数据科学家那样思考呢?
  • 春分至,燕归来,一心移疫【大数据书单】助你迎接职场新春天!
  • 2020产品经理升职攻略-直播分享课 第三期!
  • 月薪30k-50k、面试通过率90%,这个职位到底是在做什么?
  • 图灵奖公布!计算机图形学先驱Hanrahan和Catmull获奖,祝贺两位好莱坞3D动画大片技术元老...
  • 50亿美元代价的背后,企业该如何做好数据安全?
  • MySQL 狠甩 Oracle 稳居 Top1,私有云最受重用,大数据人才匮乏!
  • 【直播预告】3月22日|数据分析师成长之路
  • “Flutter中文网”社区创始人倾力撰写的网红书 《Flutter实战》正式出版
  • 不用掉一根头发!用 Flutter + Dart 快速构建一款绝美移动 App
  • 从0到1构建用户画像系统技术和方法论
  • 系统能力培养理念在人工智能领域的体现:打通系统与算法,培养系统思维的《智能计算系统》...
  • 武大学生用Python敲出樱花开放 | 附源码
  • 【css3】浏览器内核及其兼容性
  • docker-consul
  • github指令
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • storm drpc实例
  • Vim 折腾记
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 回顾 Swift 多平台移植进度 #2
  • 聊聊flink的BlobWriter
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用parted解决大于2T的磁盘分区
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • ionic异常记录
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # .NET Framework中使用命名管道进行进程间通信
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (6)设计一个TimeMap
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (超详细)语音信号处理之特征提取
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (力扣题库)跳跃游戏II(c++)
  • (论文阅读40-45)图像描述1
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (转)nsfocus-绿盟科技笔试题目
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET Framework .NET Core与 .NET 的区别
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net6+aspose.words导出word并转pdf
  • .Net环境下的缓存技术介绍
  • .net连接MySQL的方法
  • .stream().map与.stream().flatMap的使用
  • :O)修改linux硬件时间
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [383] 赎金信 js