【机器学习】机器学习大白话
买芒果
嘴馋的你想吃芒果了,于是你走到水果摊,挑了几个让老板过过秤,然后你再根据芒果的斤两付钱走人。
显然,买芒果你当然是挑着最甜、最熟的来买(因为你是根据重量而不是质量来掏钱的)。怎么个挑法才靠谱呢?
对了,你奶奶说过,金黄色的要比浅黄的更甜些。于是你就做了一个简单的规定:只挑金黄色的买,过磅、付钱、回家。就这么简单?不尽然。
生活没那么简单
拎着芒果回到了家,尝了尝,你发现有些很对口味,有些则马马虎虎。显然,光凭你奶奶的智慧还是有所不足的。挑芒果不能只看颜色。
一 番细品,再一番苦想之后,你得出了结论:那些大个儿的、金黄色的芒果一定是甜的,而那些小个儿的、金黄的就只有一半是甜的了。(比如,你买了 100 个黄灿灿的芒果,50 个个头较大,50 个个头一般,那么个头大的那 50 个就都是甜的,个头小的 50 个当中就平均只有 25 个是甜的了。)
你 对自己的研究发现甚感满意,想着下次买芒果的时候能更靠谱些。终于你又来到了水果市场,发现你最常去的那个水果摊已经见不着踪影了。于是你就找了另一个摊 档,而他们的芒果又产自不同的地方。你挠挠头,叹了口气:得了,“大个、金黄色的果子甜”的经验在这又不适用了,一切从头开始。尝了一遍后,你发现那些小 个的、浅黄的芒果是当中最甜的。
你的表妹大老远的来看你,你决定给她整些美味的芒果尝尝。但她并不在乎果子甜不甜,而只关心是不是鲜嫩多汁。好吧,你又挠挠头,在果摊尝了一遍,发现越软的越多汁。
这次,你到了另一个国度。这儿的芒果味道与家乡的截然不同:绿色的竟然要比黄色的味道更棒。
你结了婚,发现她对芒果完全不感冒,而对苹果很是喜欢。这回,你又跑去买苹果去了。你又得学神农“遍尝百果”,摸索苹果的物理特征和味道之间都有怎样的联系——为了她,又有什么不可以的呢?满满的都是爱呀。
写段电脑程序来帮忙
为什么不用电脑程序来帮你挑芒果(或苹果)呢?你把规则写了出来:
if (color is bright yellow and size is big and sold by favorite vendor):
mango is sweet.if (soft): mango is juicy.
etc.
这就是你挑芒果用到的规则了。把它发给你的弟弟,想必他也能帮你买到对你口味的芒果。
但问题在于,每回你在试验之后得出了观察结果,你都得把规则做一番修正。你还得明察秋毫地了解清楚都有那些因素在影响芒果的品质。如果问题复杂起来的话,你在上面耗费的心血甚至都有可能为你拿个“芒果科学”的 PhD 下来(如果有的话)。
但这样的大闲人还真的不多。
写个机器学习算法吧
机器学习算法是普通算法的进化版,它们让你的程序变得“更聪明”,能从你提供的数据里自动学到东西。
你 在市场上随机选择了某个品种的芒果(training data),把每个芒果的物理特征都写进了一个表格——颜色、大小、形状、产地、所属果摊等(features),甜度、多汁程度、成熟度(output variables)也做了记录。你把这些数据都放进了一个机器学习算法(classification/regression),然后这个算法就会自动 从芒果的物理特征和品质之间得出一个相关性模型。
等到下一回你到市场的时候,你把在售的芒果的特征信息都收集起来,再扔进你的机器学习算 法,它就会利用之前计算出来的模型来预测哪些芒果是甜的、熟的、以及/或多汁的了。该算法可能会使用和你曾经手写的差不多的规则,也有可能使用的规则会更 有相关性,不管怎样,在很大程度上你都不用操太多心了。
现在,算法在手,你就可以挺直身板去买芒果去了。更重要的是,你的算法还能继续演进 (reinforcement learning),读取更多的训练数据,准确率也更高,每预测错误后再进行自我修正。更妙的是,你还能用同一个算法来训练不同的模型,预测预测苹果、橙 子、香蕉、葡萄、樱桃、西瓜什么的。
机器学习:让你的算法聪明起来,这样你就可以少动脑了。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JNI线程相关
- JNI函数加载
- CSS中的传统布局、多列布局、弹性伸缩布局及Emmet工具
- 数据分析可视化(四)|Pyecharts制作地图的几种方法评析
- tensorflow运行提示未编译使用SSE4.1,SSE4.2等问题的解决方法
- [手把手系列之二]实现多层神经网络
- 使用SystemVerilog简化FPGA中的接口
- 想用深度学习谱写自己的音乐吗?这篇指南来帮你!(附代码)
- 你不是说你会aop吗?
- 开源:推荐一个不错的离线IP地址定位库
- 武磊告别西甲!Python带你解读「全村的希望」武磊职业数据
- 谁在崛起,谁在没落?新一线城市竞争力盘点,用Python绘制动态图带你看懂!
- 两数相加
- 这样设置 IDEA,让你爽到飞起!
- Tensorflow基础入门十大操作总结