机器学习p1
机器学习是人工智能的一个子集
早期的人工智能都擅长于某一点
例如:深蓝计算机可以下国际象棋到达冠军水平 但它也只能做这个
现在 我们希望编写一个程序 就能解决很多问题 而不用重写
AlphaGo就是一个很好的例子 它击败了世界围棋冠军
但重要的是 相同的程序 它还能学习雅达利的游戏 雅达利(Atari)
机器学习让这成为可能 它是一种学习的算法 可以从例子和经验中学习(就是监督学习supervised learning)
今天讲的是一个很简单的例子
我会给你们一个简单的问题 但是不使用机器学习就解决不了的问题
你能用代码来区分哪个是苹果 哪个是橘子吗?
假设我们要编写一个程序 可以接收一张图片作为输入
经过分析后 输出水果的类型
你要怎么解决这一问题?
你打算手动编写一堆规则开始吗?
比如你可能会写 数出橙色的像素点的个数 绿色的像素点的个数
对比的结果应该可以帮你认出水果类型
对于简单的图像 这是很好使的
但是深入一些的问题这个结果就会一团糟
现实世界是很复杂的 你编写的代码会不断出现问题
比如苹果和橘子的黑白照你又打算怎么处理呢?
所以无论你写出了怎样的代码 我都可以找到一张图片让其失效
难道你要写无数条代码 而只是用来区分苹果和橘子吗?
如果给你一个新问题 那你不得吐血?
所以我们需要一个更好的方法 一种更好的算法
假如这个算法可以帮我们自己制定规则 那我们就不用自己编写规则了
所以我们要训练一个叫做分类器(classifier) 的算法
你可以把分类器当成一个函数 它接受数据 然后贴标签输出
比如我们希望给一张苹果图片它可以识别出苹果
一封邮件它可以识别是不是垃圾邮件
自动编写分类器的技术我们叫做 “监督学习(supervised learning)”
我们需要两个开源库 “scikit-learn"和"TensorFlow”
我们马上就能看到scikit的实际运行效果
我们需要下载“scikit-learn”
先Anaconda是比较快的 方便的方式
Anaconda(Windows下载链接、其他系统也在里面选择即可)
我们要完成一个函数
然后遵循几个步骤得到结果
graph LR
收集训练数据-->得到特征
得到特征-->|计算推断|判断类型
训练数据是指我们要解决问题对象的特征、数据
这里接着橘子和苹果的问题
我们选择了重量(weigtht)和纹理(texture) 对应 标签(label)
bumpy 疙瘩不平的 ; smooth 平顺光滑的
好的特征可以使区分水果的品种变得简单
训练数据越多 能创建的分类器就越好
我们用0表示bumpy 用1表示smooth
label里面的0代表苹果 1代表橘子
接下来我们要用到一个分类器叫做“决策树”
可以理解为一堆规则的组合 在面对n个问题时进行n个决策
我们要引进这个决策树需要以下代码
from sklearn import tree
feature = [[140,1],[130,1],[150,0],[170,0]]
labels = [0,0,1,1]
clf = tree.DecisionTreeClassifier()
我们还输入了特征值和对应的标签
现在的决策树还是一个没有规则的空盒子
现在我们需要一种学习算法来让他“形成”规则
规则比如说 它发现橘子的weight一般更大
那么它会认为重一点的是橘子的可能性更大 这是规则
在scikit中 包含在分类器对象中的 训练算法叫做 fit
可以理解fit就是“在数据中找到规律”
于是就有第五行代码
from sklearn import tree
feature = [[140,1],[130,1],[150,0],[170,0]]
labels = [0,0,1,1]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features,labels)
第四行应该是定义clf为树里面的决策树
第五行则是使用决策树里面的fit学习算法来学习处理features和labels
from sklearn import tree
feature = [[140,1],[130,1],[150,0],[170,0]]
labels = [0,0,1,1]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(features,labels)
print (clf.predict([[150,0]]))
我们要测试一个[150,0]的数据 150g并且bumpy的feature
相信我们也能判断出 它会返回[1] (橘子)
下载了anaconda和scikit-learn库并且执行的结果
好了 六行代码完成一个机器学习程序! 听起来很不错!
后面多回顾就能更加理解原理。