机器学习系统设计——如何对真实样本分类?
2015-08-13 22:54
435 查看
本文是在学习机器学习系统设计第二章的时候的笔记(不敢保证百分之一百的准确与完整)。
所用到的环境是:
Python3
Matplotlib,sklearn,numpy还暂时没用到
Anaconda的Spyder,其他的也可以只是注意下可能会遇到注释部分编码的问题
如果要学好这一章的话,就要对Iris(鸢尾花)数据集有一些研究。
Iris数据集说简单一点就是对三种鸢尾花(山鸢尾花、变色鸢尾花、维吉尼亚鸢尾花)采样,每种找50朵,每个都要测量,测量什么呢?——花萼的长度、花萼的宽度、花瓣的长度、花瓣的宽度——这四个属性。
然后将测量的50×3=150组数据做成一个(150,4)的数组,就成了Iris数据集,以后你随便找一个鸢尾花,我拿过来一量花萼/花瓣,在和我的数据集一对照,就知道它是哪一种了。
不说了,直接撸码,先看看可不可以运行。
然后再逐步解释,如果遇到编码的问题,就把中间的长字符串注释掉或删掉试试
再然后就是把其余的属性都组合起来,画在一幅图中
可以用以下命令保存成图片
我们这么做的目的就是:把所有的数据按照一定的规则展现出来,方便我们观察。
从上面六个图像中可以看到,红色三角形所代表的山鸢尾花比较“特立独行”。其中以最后一张图(花瓣的长度,花瓣的宽度)尤为明显,不仅与其他两个品种距离较远而且比较集中紧凑,另外在x轴(花瓣的长度)上明显没有重合,因此可以很容易的通过花瓣的长度来确定是不是山鸢尾花。
我们通过最大值和最小值的方法来验证一下。
所用到的环境是:
Python3
Matplotlib,sklearn,numpy还暂时没用到
Anaconda的Spyder,其他的也可以只是注意下可能会遇到注释部分编码的问题
如果要学好这一章的话,就要对Iris(鸢尾花)数据集有一些研究。
Iris数据集说简单一点就是对三种鸢尾花(山鸢尾花、变色鸢尾花、维吉尼亚鸢尾花)采样,每种找50朵,每个都要测量,测量什么呢?——花萼的长度、花萼的宽度、花瓣的长度、花瓣的宽度——这四个属性。
然后将测量的50×3=150组数据做成一个(150,4)的数组,就成了Iris数据集,以后你随便找一个鸢尾花,我拿过来一量花萼/花瓣,在和我的数据集一对照,就知道它是哪一种了。
不说了,直接撸码,先看看可不可以运行。
from matplotlib import pyplot as plt from sklearn.datasets import load_iris import numpy as np data=load_iris() features=data['data'] feature_names=data['feature_names'] target=data['target'] target_names=data['target_names'] for t,marker,c in zip(range(3),">ox","rgb"): plt.scatter(features[target==t,0], features[target==t,1], marker=marker, c=c)
然后再逐步解释,如果遇到编码的问题,就把中间的长字符串注释掉或删掉试试
from matplotlib import pyplot as plt from sklearn.datasets import load_iris import numpy as np #data是sklearn自带的一个数据结构,是一个字典结构,有5个keys,分别是: #'DESCR','data','feature_names','target','target_names' data=load_iris() #features就是字典data中键值'data'对应的value,它是一个150×4的二维数组 #注意数组与列表的区别。 features=data['data'] #feature_names是一个有四个元素的列表, #“花萼长度、花萼宽度、花瓣长度、花瓣宽度” feature_names=data['feature_names'] #target是一个数组,有50个0,50个1,50个2,主要是用来标记花的类型。 target=data['target'] #target_names就是data字典的最后一个items, #是一个数组,主要是三种鸢尾花的花名,原来的程序中没有,也暂时用不到。 target_names=data['target_names'] """ 以下就是为了把features=data['data']中的“前两列”数据成对的画出来,做成 离散图。 最开始的时候我总是理解不了这是怎么实现的,后来慢慢调试的时候,尝试着。 print target==0 print features[target==0,0] 才发现自己对数组的索引还是不很熟悉,补充了一下这方面的知识后,才逐渐清晰 """ for t,marker,c in zip(xrange(3),">ox","rgb"): plt.scatter(features[target==t,0], features[target==t,1], marker=marker, c=c)
再然后就是把其余的属性都组合起来,画在一幅图中
import numpy as np from sklearn.datasets import load_iris from matplotlib import pyplot as plt data = load_iris() features = data['data'] feature_names = data['feature_names'] target = data['target'] """ 由上文我们知道,Iris数据集中的核心data是一个(150行,4列)的二维数组。 其中每一列代表的一个特征,现在我们要将这4列数据两两组合,组合成6个组合 (也可以理解为组合成6个(150,2)的数组)将其做成6个离散图。 因此先创建一个组合方式,pairs列表,如下 """ pairs = [(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)] for i,(p0,p1) in enumerate(pairs): plt.subplot(2,3,i+1) #subplot是将多个图画到一个平面上的工具 for t,marker,c in zip(range(3),">ox","rgb"): plt.scatter(features[target == t,p0], features[target == t,p1], marker=marker, c=c) plt.xlabel(feature_names[p0]) plt.ylabel(feature_names[p1]) plt.xticks([]) plt.yticks([])
可以用以下命令保存成图片
plt.savefig("1.png")
我们这么做的目的就是:把所有的数据按照一定的规则展现出来,方便我们观察。
从上面六个图像中可以看到,红色三角形所代表的山鸢尾花比较“特立独行”。其中以最后一张图(花瓣的长度,花瓣的宽度)尤为明显,不仅与其他两个品种距离较远而且比较集中紧凑,另外在x轴(花瓣的长度)上明显没有重合,因此可以很容易的通过花瓣的长度来确定是不是山鸢尾花。
我们通过最大值和最小值的方法来验证一下。
#提取所有的花瓣长度数据,150个 plength=features[:,2] #提取 setosa 和 非setosa 的花瓣长度,我把原文稍微修改了一下,比较好理解 #需要了解target与features的对应关系。 is_setosa=(target==0) setosa_plength=plength[is_setosa] other_plength=plength[~is_setosa] #找出 setosa 花瓣的最大长度,和 非setosa花瓣的最小长度 max_setosa=setosa_plength.max() min_non_setosa=other_plength.min() #根据下面输出的数据可知 setosa 花瓣的最大长度,和 非setosa花瓣的最小长度没有重合 #因此如果一朵花的花瓣长度小于2的话,那么是setosa的可能性就非常大。 print('Maximun of setosa: {0}.'.format(max_setosa)) #输出值是1.9 print('Minimum of others: {0}.'.format(min_non_setosa)) #输出值是3.0
相关文章推荐
- 单词计数例子
- BZOJ2790 : [Poi2012]Distance
- coj 1262: 安全密码
- IBM Bluemix云计算大会见闻
- python编码的理解
- 126. Word Ladder II
- 插件式程序开发及其应用(C#)
- coj 1344: Special Judge
- 三种强大的物体识别算法
- 用javascript语言编写一个小程序:在一个文本框(用户名框)中按回车键时,跳转到另一个文本框(密码框)中,密码框回车之后,打一个登陆成功。点击button也是登陆成功。
- 如何编译Apache Hadoop2.6.0源代码
- Java中的编译时多态和运行时多态
- 继承的学习(8.13)
- C 语言 switch case 优化和小技巧一发
- 多线程造成死锁的例子
- 可以直接使用十六进制设置控件的颜色,而不必通过除以255.0进行转换
- 【Windows编程】系列第九篇:剪贴板使用
- 第二篇 Integration Services:SSIS数据泵
- WIN10 1080P 模糊
- 关于文件异步上传