跟 Google 学 machineLearning [1]

时至今日,我才发现 machineLearning 的应用门槛已经被降到了这么低,简直唾手可得。我实在找不到任何理由不对它进入深入了解。如标题,感谢 Google 为这项技术发展作出的贡献。当然,可能其他人做了 99%, Google 只做了 1%,我想说,真是漂亮的 1%。

切入正题,今天从 Youtube 上跟随 Google 的工程师完成了第一个 machineLearning 的小程序。作为学习这项技能的 hello world 吧。

是为记录。

 1 from scipy.spatial import distance
 2 def euc(a,b):
 3     return distance.(a,b)
 4
 5 class knnClassifier():
 6     def fit(self, x_train, y_train):
 7         self.x_train = x_train
 8         self.y_train = y_train
 9
10     def predict(self, x_test):
11         predictions = []
12         for row in x_test:
13             label = self.closest(row)
14             predictions.append(label)
15         return predictions
16
17     def closest(self, row):
18         best_dist = euc(row, self.x_train[0])
19         best_index = 0
20         for i in range(1, len(self.x_train)):
21             dist = euc(row, self.x_train[i])
22             if dist < best_dist:
23                 best_dist = dist
24                 best_index = i
25         return self.y_train[best_index]
26
27 from sklearn import datasets
28 iris = datasets.load_iris()
29 x = iris.data
30 y = iris.target
31
32 from sklearn.cross_validation import train_test_split
33 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size= .5)
34 print x_train
35 print y_train
36
37 my_classifier = knnClassifier()
38 my_classifier.fit(x_train, y_train)
39 predictions = my_classifier.predict(x_test)
40
41 from sklearn.metrics import accuracy_score
42 print accuracy_score(y_test, predictions)

对上面的代码进行简单解释:

1. 1-3 行是引用 scipy 的 distance 类中计算欧氏距离的函数,并进行了简单封装。(欧氏距离:N 维空间中,两个点之间的真实距离)

2. 5-25 中,定义了自己的 classifier 类,关键方法包括了 fit 和 predict。fit 主要是将喂进来的数据赋值给内部变量;predict 是根据送进来的 row,返回我们预期的 Label。这里的 classifier 是我们 hand code 的,并不是训练出来的。事实上并不算是真正意义上的 machineLearning,但是很好的解释了其内部的原理。machineLearning 中,我们定义的 closet 函数,将通过训练的到,即 model。

3. 27-30, 在入了 sklearn 库中的 iris 花的数据库,作为我们后面实验的数据来源。iris_data 是三种花的原始数据,是一个三维数组。数组中每个元素代表一朵花的三个参数,分别是花的xx长度,花的xx宽度,和xx长度(我并不关系他是什么数据,反正是花的数据);iris_target 是 data 相对应的花的种类,大概就是0表示红玫瑰,1表示蓝玫瑰,2表示粉玫瑰之类。

4. 32-35, 把载入的花朵数据 split 为两组,一组用做 train,作为预测的凭据,另一组作为检验 classifier 准确性的待测数据。验证时,因为验证组的数据对应的结果也是已知的,所以拿 classifier 出来的结果与真实值比较,便可知 classifier 是否合理。使用上面代码进行判定的成功率已经达到 >90%,事实上拿它来对未知新数据判定,结果可信度已经很高。

5. 37-39 ,应用了在 2 中定义的 classifier,将 4 中分割出来的 x_train, y_train 喂给 classifier。然后,使用 classifier 根据 x_test 中的花的数据,预测花的种类,得到对应的预测结果数组 predictions。

6. 41-42,比较真实的花的种类 y_test 与 预测结果 predictions 之间的符合度。可以看到并不是 100%,信息总是会有遗漏的,哪怕是人眼来判断也一样。

因为载入的数据在 split 时,是随机的。所以,因为 train 组和 test 组数据的不同,预测的准确度也会稍有不同。

虽然这里的 classifier 已经有了很高的准确度,但是,不能回避的是,这样的计算比对,运算量是非常大的。同时,因为我们数据属性的关系,我们可以直接通过找最接近数据来进行预测,在其他一些应用中,某些属性并不是线性分布的,或者,并不是凭人眼能发现规律的。这时候,就需要真正的 train 了。

时间: 2024-10-12 14:20:58

跟 Google 学 machineLearning [1]的相关文章

跟Google 学代码 :Building Apps with Content Sharing(跟女神去表白)

本篇博客都讲了些什么? 1. Sharing Simple Data 共享简单的数据,如文本,图片,URI 2. Sharing Files 共享文件 3. Sharing Files with NFC无线传输 在写博客之前,假设 "我"是服务端App,我的"女神"是客户端App 情书是"我"想传递的数据 那么我该如何做呢? 向客户端App发送数据(暗送秋波篇) 对女神爱在心中口难开怎么办?如何示爱这是穷学生最纠结的心病 在Android 开发中

跟Google 学代码:Transmitting Network Data Using Volley

这篇博客讲了什么 全文脉络可以看这张思维导图: 准备工作 观看 youtube Google I/O 2013 - Volley: Easy, Fast Networking for Android 使用篇: git clone https://android.googlesource.com/platform/frameworks/volley clone到本地 在开发环境中添加Android Library 发送简单的Request 添加权限 使用newRequestQueue 发送 Req

跟Google 学代码:Building Apps with Graphics &amp; Animation(一)

引言 可以右键保存我做的思维导图: Google这一章的课程共分为四大部分: 我做的思维导图: 高效展示篇 OpenGl使用篇 View动画 使用动画集 考虑精力和博客篇幅,本篇仅仅涉及Building Apps with Graphics & Animation 第一节 Displaying Bitmaps Efficientlty Displaying Bitmaps Efficientlty (高效展示图片) 加载大图 图片有各种各样的形状和尺寸,很多情况下,一款热门的App需要展示很多大

跟Google学写代码:Interacting with Other Apps【Capture Photo from phone】

本文概述 翻译Interacting with Other Apps相关课程,并通过复习该文档的知识,完成如下功能: 与其他应用交互 我们开发的Android 应用一般具有若干个Activity.每个Activity显示一个用户界面,用户可通过该界面执行特定任务(比如,查看地图或拍照).要将用户从一个Activity转至另一Activity,必须使用 Intent 定义当前应用做某事的"意向". 当使用诸如 startActivity() 的方法将 Intent 传递至系统时,系统会使

跟着Google学Android —— 3.1 管好Activity的生命周期

当我们在app的不同页面间穿梭翱翔的时候,app中的Activity也在他们各自的生命周期中转换着不同的状态.当用户执行进入或者是离开某个Activity的操作时,Android系统会调用一系列生命周期的回调函数进行处理,而我们也可以重写这些回调函数,让Activity在不同的状态下执行我们想要的操作. 生命周期回调方法 下图展示了一个Activity的生命周期以及回调方法.这张图看起来就像是一个梯形金字塔,每一步都对应着Activity的一种生命状态. 在这些状态中,只有如下三种状态是静态的,

AI - Google的机器学习速成课程

Google的机器学习速成课程 机器学习速成课程(MLCC,machine-learning crash-course):https://developers.google.com/machine-learning/crash-course/ 机器学习术语表:https://developers.google.com/machine-learning/glossary/ 基本全程中文,程共25节,大约15小时,包含40多项练习,有对算法实际运用的互动直观展示,可以更容易地学习和实践机器学习概念.

Google发布机器学习术语表 (包括简体中文)

Google 工程教育团队已经发布了多语种的 Google 机器学习术语表,该术语表中列出了一般的机器学习术语和 TensorFlow 专用术语的定义.语言版本包括西班牙语,法语,韩语和简体中文. 查阅中文版术语表: https://developers.google.com/machine-learning/crash-course/glossary?hl=zh-cn 原文地址:https://www.cnblogs.com/jacen789/p/8647601.html

人工智能学习资料[欢迎补充~]

人工智能 人工智能知识体系 机器学习 机器学习路线 微软: AI应用开发实战 Google: 机器学习速成教程 机器学习术语表:https://developers.google.com/machine-learning/glossary/ 百度AI开放平台 苹果机器学习 机器学习的个人网站 个人网站,专门教applied machine learning,提倡top-down/learn by doing的方式,不要一进来就学习理论,而是先学会使用机器学习框架 训练数据.解决一些具体问题,对于

TensorFlow中国研发负责人李双峰演讲实录:TensorFlow从研究到实践

5 月 23 日周三晚,TensorFlow 中国研发负责人.Google 搜索架构技术总监李双峰受邀参与北京大学"人工智能前沿与产业趋势"系列座谈会,分享了深度学习的发展与应用.TensorFlow 从研究到实践的相关内容. 感谢作为北京大学"人工智能前沿与产业趋势"系列座谈会合作媒体的量子位旗下公众号"吃瓜社"俞晶翔.张康对活动的记录,演讲嘉宾李双峰也参与本文的联合撰写和修改. 主讲嘉宾:李双峰,TensorFlow 中国研发负责人.Goog