building machine learning system with Python 学习笔记--从零开始机器学习(2)第一章

来源:互联网 发布:windows xp ping不通 编辑:程序博客网 时间:2024/05/29 09:40

Python机器学习入门

ps:想了解机器学习发展历史、使命、面临的问题这些的可以看百度BOSS李彦宏新书《智能革命》,挺通俗易懂的。


机器学习的目标就是通过若干示例让机器学会完成人物,例如电子邮件分类。

工作流程绝大部分的时间花在:

1)读取和清洗数据

2)探索和理解输入数据

3)分析如何最好地将数据呈现给学习算法

4)选择正确的模型和学习算法

5)正确地评估性能

通常在训练前要对部分数据进行提炼,一个简单算法在提炼后数据上的表现,甚至能够超过一个非常复杂的算法在原始数据上的结果。提炼数据的流程叫做特征工程--feature engineering。

可以看到算法只是五个环节中的一个,1)、2)、3)都和数据有关。

推荐的问答网站:http://metaoptimize.com/qa专注机器学习主题

http://stats.stackexchange.com 专注统计问题

http://stackoverflow.com 这个不用多说,百度过编程问题的同学应该都见过

Freenode的#machinelearning频道 互联网中转聊天频道,专门讨论机器学习主题(英文聊天室 想玩的看此文:http://blog.csdn.net/zhijiayang/article/details/50700731)

http://www.TwoToReal.com 本书作者制作的即时问答网站,解答不适于上述任何网站的问题。

重点推荐的博客:http://blog.kaggle.com 机器学习比赛优胜选手介绍怎么解决问题


numpy、scipy、matplotlib简介:Python运行速度不快,为何需要密集计算的机器学习选择Python,因为计算任务由底层的C或Fortran扩展包完成。在numpy和scipy的组合中,numpy提供了对高度优化的多维数组的支持,scipy则通过这些数组提供了一套快速的数值分析方法库,matplotlib用来可视化。


学习numpy:


推荐自己敲一遍代码,下面的代码创建了一个数组a,维度是1,包含6个元素


将数组转换到一个2D矩阵b中,b是三维数组,每个维度上有两个元素


下面进行了赋值操作,Python中下标是从0开始的,因此b[1][0]就是第二行第一个元素,原来是2,现在重新赋值为77,相应地,a中的元素值也变动了,这说明b是对a的引用,而不是a的复制


想要真正的副本,可以像下面这样,c和a完全独立了


numpy array和python自带的list不同,对数组的操作是传递到每个元素上,而列表是对整个列表操作,列表是没有平方运算的



1)numpy索引访问数据:允许将数组本身当做索引使用,a中下标为2,3,4的元素,


判断条件可以传递到每个元素,遍历数组判断每个元素是否大于4,是返回True,否返回False:


去掉异常值:大于4的元素全部赋值为4


专门的修剪函数clip(),将数组值超出某个区间边界的部分修剪掉


2)处理不存在的值 如c中的np.NAN,表示非法的数据

isnan()判断是否是非法值,~表示取反,mean()是平均值函数


3)运行时行为比较

Python列表运算,numpy普通运算,numpy的dot()函数运算,三个时间比较

可以看出numpy虽然是C扩展,普通运算比列表运算耗时还要多,dot()函数是最快的



numpy速度快,但只有一个数据类型


尝试使用不同类型的元素,numpy会强制转换数据类型



学习scipy:

在numpy高效数据结构之上,scipy提供了基于这些数组的算法级应用。

为方便起见,numpy的全部命名空间都可以通过scipy访问:两者的点积运算是同一个运算


scipy工具包常用方法:




0 0
原创粉丝点击