时至今日,我才发现 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 了。

跟 Google 学 machineLearning [1] -- hello sklearn的更多相关文章

  1. 跟 Google 学 machineLearning [2] -- 关于 classifier.fit 的 warning

    tensorfllow 的进化有点快.学习的很多例子已经很快的过时了,这里记录一些久的例子里被淘汰的方法,供后面参考. 我系统现在安装的是 tensorflow 1.4.1. 主要是使用了下面的代码后 ...

  2. Google机器学习课程基于TensorFlow : https://developers.google.cn/machine-learning/crash-course

    Google机器学习课程基于TensorFlow  : https://developers.google.cn/machine-learning/crash-course         https ...

  3. 机器学习入门 - Google的机器学习速成课程

    1 - MLCC 通过机器学习,可以有效地解读数据的潜在含义,甚至可以改变思考问题的方式,使用统计信息而非逻辑推理来处理问题. Google的机器学习速成课程(MLCC,machine-learnin ...

  4. 【机器学习】Google机器学习工程的43条最佳实践

    https://blog.csdn.net/ChenVast/article/details/81449509 本文档旨在帮助那些掌握机器学习基础知识的人从Google机器学习的最佳实践中获益.它提供 ...

  5. 【阿里聚安全·安全周刊】Google“手枪”替换 | 伊朗中央银行禁止加密货币

    本周七个关键词:Google"手枪"替换丨IOS 漏洞影响工业交换机丨伊朗中央银行禁止加密货币丨黑客针对医疗保健丨付费DDoS攻击丨数据获利的8种方式丨MySQL 8.0 正式版 ...

  6. 学习笔记之Machine Learning Crash Course | Google Developers

    Machine Learning Crash Course  |  Google Developers https://developers.google.com/machine-learning/c ...

  7. google学习

    https://developers.google.com/machine-learning/crash-course/ https://developers.google.com/machine-l ...

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

    Google 工程教育团队已经发布了多语种的 Google 机器学习术语表,该术语表中列出了一般的机器学习术语和 TensorFlow 专用术语的定义.语言版本包括西班牙语,法语,韩语和简体中文. 查 ...

  9. (原创)sklearn中 F1-micro 与 F1-macro区别和计算原理

    最近在使用sklearn做分类时候,用到metrics中的评价函数,其中有一个非常重要的评价函数是F1值,(关于这个值的原理自行google或者百度) 在sklearn中的计算F1的函数为 f1_sc ...

随机推荐

  1. Spring Framework 4.1.3 还是一样给力

    Spring Framework 4.1.3 发布,此版本是 4.1.x 系列的第三个维护版本,包括超过50 个 bug 修复和改进.本来是计划月末发布,但是想早些发布,配合这周要发布的 Spring ...

  2. 多个Jar的合并操作

    同事要写Android平台下的打包工具,遇到需要将多个jar合并成一个jar的问题.这里列一下操作步骤: 1.将所有jar文件复制至某临时目录中,通过jar命令解压得到所有的.class文件 > ...

  3. window.name实现的跨域数据传输 JavaScript跨域总结与解决办法

    原文地址:  http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html#m4 什么是跨域 1.document.domain+ifr ...

  4. 细思极恐-你真的会写java吗?

    导语 自2013年毕业后,今年已经是我工作的第4个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个java程序员,那你真的会写java吗 ...

  5. 置顶菜单demo

    一朋友需要置顶菜单的功能,给了个网站,让弄下来.看了下,就把样式及效果拔了下来.去掉了复杂的东西,只保留了其基本实现.有需要的朋友可以拿去用用. <style> #navigation{ ...

  6. 生成学习算法(Generative Learning algorithms)

    一.引言 前面我们谈论到的算法都是在给定\(x\)的情况下直接对\(p(y|x;\theta)\)进行建模.例如,逻辑回归利用\(h_\theta(x)=g(\theta^T x)\)对\(p(y|x ...

  7. [leetcode]Pascal's Triangle @ Python

    原题地址:https://oj.leetcode.com/problems/pascals-triangle/ 题意: Given numRows, generate the first numRow ...

  8. [leetcode]Median of Two Sorted Arrays @ Python

    原题地址:https://oj.leetcode.com/problems/median-of-two-sorted-arrays/ 题意:There are two sorted arrays A ...

  9. WCF创建简单程序

    1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序.建立完成后如下图所示: 2.删除系统生成的两个文件IService1.cs与Service1.svc,当然你也可以直接 ...

  10. Spring Boot Maven Plugin打包异常及三种解决方法:Unable to find main class

    [背景]spring-boot项目,打包成可执行jar,项目内有两个带有main方法的类并且都使用了@SpringBootApplication注解(或者另一种情形:你有两个main方法并且所在类都没 ...