《Python 机器学习及实践–从零开始通往kaggle竞赛之路》很基础
主要介绍了Scikit-learn,顺带介绍了pandas、numpy、matplotlib、scipy。
本书代码基于python2.x。不过大部分能够经过修改print()来适应python3.5.x。
提供的代码默认使用 Jupyter Notebook,建议安装Anaconda3。
html
最好是到https://www.kaggle.com注册帐号后,运行下第四章的代码,感觉下。python
监督学习:
2.1.1分类学习(Classifier)
2.1.1.1 线性分类器(Linear Classifier)
2.1.1.2 支持向量机(Support Vector Classifier)
2.1.1.3 朴素贝叶斯(Native Bayes)
2.1.1.4 K近邻(K-Nearest Neighbor)
2.1.1.5 决策树(Decision Tree)
2.1.1.6 集成模型(Ensemble):随机森林:Random Forest Classifier,梯度提高决策树:Gradient Tree Boosting。
2.1.2 回归预测(Regressor)
2.1.2.1 线性回归器
2.1.2.2 支持向量机
2.1.2.3 K近邻
2.1.2.4 回归树
2.1.2.5 集成模型
2.2 无监督学习
2.2.1 数据聚类
2.2.1.1 K均值算法(K-means)
2.2.2 特征降维
2.2.2.1 主成分分析(Principal Component Analysis:PCA)
3.1 模型使用技巧
3.1.1 特征提高
3.1.1.1 特征抽取
3.1.1.2 特征筛选
3.1.2 模型正则化
3.1.2.1 欠拟合与过拟合
3.1.2.2 L1范数正则化
3.1.2.3 L2范数正则化
3.1.3 模型检验
3.1.3.1 留一验证
3.1.3.2 交叉验证
3.1.4 超参数搜索
3.1.4.1 网格搜索
3.1.4.2 并行搜索
3.2 流行库/模型实践
天然语言包:NLTK
词向量:Word2Vec
XGBoost模型
TensorFlow算法
《Python机器学习及实践:从零开始通往Kaggle竞赛之路》帮助对机器学习、数据挖掘感兴趣的读者整合时下流行的基于Python语言的程序库。如Scikit-learn,Pandas, NLTK,Gensim, XGBoost,TensorFlow等,而且针对现实中遇到的数据,甚至是Kaggle竞赛中的分析任务,快速搭建有效的机器学习系统。编程
同时,做者尽力减小读者为了理解本书,而对编程技能、数学背景的过度依赖,进而下降机器学习模型的实践门槛,让更多的兴趣爱好者体会到使用经典模型以及新的高效方法解决实际问题的乐趣。微信
本书面向全部对机器学习与数据挖掘的实践及竞赛感兴趣的读者,从零开始,以Python编程语言为基础,在不涉及大量数学模型与复杂编程知识的前提下,逐步带领读者熟悉而且掌握当下流行的机器学习、数据挖掘与天然语言处理工具,如Scikit-learn、NLTK、Pandas、gensim、XGBoost、Google Tensorflow等。网络
全书共分4章。第1章简介篇,介绍机器学习概念与Python编程知识;第2章基础篇,讲述如何使用Scikit-learn做为基础机器学习工具;第3章进阶篇,涉及怎样借助高级技术或者模型进一步提高既有机器学习系统的性能;第4章竞赛篇,以Kaggle平台为对象,帮助读者一步步使用本书介绍过的模型和技巧,完成三项具备表明性的竞赛任务。数据结构
范淼,清华大学计算机系人工智能研究所博士,研究方向涉及机器学习与天然语言处理技术。2015年3月受国家留学基金委公派至美国纽约大学计算机系联合培养。攻读博士期间,于所在研究领域内多个重要国际会议与期刊上发表论文近20篇。前后在Hulu、MSRA(微软亚洲研究院)、百度天然语言处理部、Bosch(博世)北美硅谷研究院等多个公司的研发部门实习,并承担机器学习与天然语言处理相关的研究任务。并发
李超, 工学博士,清华大学副研究员,信息技术研究院Web 与软件技术研究中心副主任。中国计算机学会信息存储技术专委会委员、中国计算机学会高级会员、全国文献影像技术标准化技术委员会(SAC/TC86/SC6)委员、IEEE 会员。研究领域包括海量数据存储、组织与管理、分析,及其在数字图书馆/档案馆/教育/医疗/金融等领域的应用。主持及参与多项国家97三、86三、科技支撑、天然基金等纵向项目及横向合做项目。已发表学术论文50 余篇、得到受权发明专利10 余项。框架
《Python机器学习及实践》很契合实际,从零开始介绍简单的Python语法以及如何用Python语言来写机器学习的模型。每个章节环环相扣,配合代码样例,很是适合但愿了解机器学习领域的初学者,甚至没有编程基础的学生。但愿看到这本新书能推进普及机器学习。dom
——今日头条实验室科学家,前百度美国深度学习实验室少帅科学家-李磊
这是一本面向机器学习实践的具备很强实用性的好书,适合于想使用机器学习方法求解实际问题的博士生、硕士生、高年级本科生,以及在企业工做的工程技术人员阅读,是一本快速掌握机器学习方法求解实际问题的入门读物,相信读者将从本书中获益匪浅。
——清华大学计算机系教授-马少平
尽管目前市场上关于机器学习的书籍不少,但不多具备可以将开发语言及机器学习理论紧密结合,利用开源技术,采用相似“实训”方式的实践教学书籍。该书的做者把本身学习的经验充分融入到全书,深刻浅出,是一本适合在校学生以及工程技术人员在机器学习方面快速入门的指导书。
—— 北京邮电大学软件学院教授,教研中心主任-吴国仕
不一样于多数专业性的书籍,该书拥有更低的阅读门槛。即使不是计算机科学技术专业出身的读者,也能够跟随本书借助基本的Python编程,快速上手zui新而且zui有效的机器学习模型。
——香港科技大学计算机与工程系讲座教授,系主任,IEEE、AAAI Fellow, 国际人工智能协会(IJCAI,AAAI)常务理事,中国人工智能协会副理事,ACM KDD China (ACM数据挖掘委员会 中国分会)主席-杨强
该书的做者从初学者的视角,一步步带领读者从零基础快速成长为一位可以独立进行数据分析而且参与机器学习竞赛的兴趣爱好者。全书深刻浅出,特别是对有意了解机器学习,又不想被复杂的数学理论困扰的读者,会今后书中获益。
——苏州大学计算机科学与技术学院副院长、人类语言技术研究所所长、特聘教授、国家杰出青年科学基金得到者-张民
若是说机器学习会主导信息产业的下一波浪潮,那么在这波浪潮来临以前,咱们是否有必要对其一窥究竟。我很高兴有这样一本零基础实战的好书服务广大读者,为普及这一潮流尽绵薄之力。就像过去几十年间咱们不懈普及计算机与互联网同样,人工智能,特别是机器学习的核心思想也应该走出象牙塔,拥抱普罗大众,尽量让更多的兴趣爱好者参与到实践当中。
——清华大学语音和语言技术中心主任、教授-郑方
这是一本讲解利用Python进行机器学习实战的入门级好书。该书引领刚入门的读者,从零开始学习数据分析并掌握机器学习竞赛技能,适合于从事机器学习研究和应用的在校生和科研工做者。
——微软研究院首席研究员,天然语言处理资深专家-周明
第1章 简介篇..............................................................1
1.1 机器学习综述..............................................................1
1.1.1 任务....................................................................3
1.1.2 经验....................................................................5
1.1.3 性能....................................................................5
1.2 Python编程库..............................................................8
1.2.1 为何使用Python........................................................8
1.2.2 Python机器学习的优点....................................................9
1.2.3 NumPy & SciPy..........................................................10
1.2.4 Matplotlib.............................................................11
1.2.5 Scikit-learn..........................................................11
1.2.6 Pandas.................................................................11
1.2.7 Anaconda...............................................................12
1.3 Python环境配置...........................................................12
1.3.1 Windows系统环境........................................................12
1.3.2 Mac OS 系统环境........................................................17
1.4 Python编程基础...........................................................18
1.4.1 Python基本语法.........................................................19
1.4.2 Python 数据类型........................................................20
1.4.3 Python 数据运算........................................................22
1.4.4 Python 流程控制........................................................26
1.4.5 Python 函数(模块)设计................................................28
1.4.6 Python 编程库(包)的导入..............................................29
1.4.7 Python 基础综合实践....................................................30
1.5章末小结..............................................................33
第2章 基础篇..............................................................34
2.1监督学习经典模型.........................................................34
2.1.1分类学习...............................................................35
2.1.1.1 线性分类器
2.1.1.2 支持向量机(分类)
2.1.1.3 朴素贝叶斯
2.1.1.4 K近邻(分类)
2.1.1.5 决策树
2.1.1.6 集成模型(分类)
2.1.2回归预测...............................................................64
2.1.2.1 线性回归器
2.1.2.2 支持向量机(回归)
2.1.2.3 K近邻(回归)
2.1.2.4 回归树
2.1.2.5 集成模型(回归)
2.2 无监督学习经典模型.......................................................81
2.2.1数据聚类......................................................81
2.2.1.1 K均值算法
2.2.2特征降维...............................................................91
2.2.2.1 主成分分析
2.3 章末小结.................................................................97
第3章 进阶篇...............................................................98
3.1 模型实用技巧.............................................................98?
3.1.1 特征提高...............................................................99
3.1.2 模型正则化............................................................111
3.1.3 模型检验..............................................................121
3.1.4 超参数搜索............................................................122
3.2 流行库/模型实践.........................................................129
3.2.1天然语言处理包(NLTK)................................................131
3.2.2 词向量(Word2Vec)技术................................................133
3.2.3 XGBoost模型...........................................................138
3.2.4 Tensorflow框架........................................................140
3.3 章末小结................................................................152
第4章 实战篇..............................................................153
4.1 Kaggle平台简介..........................................................153
4.2 Titanic罹难乘客预测.....................................................157
4.3 IMDB影评得分估计........................................................165
4.4 MNIST手写体数字图片识别.................................................174
4.5 章末小结................................................................180
后记.....................................................................181
参考文献.................................................................182
第3章 进阶篇
在第2章中,咱们向读者介绍了大量经典的机器学习模型,而且使用Python编程语言分析这些模型在许多不一样现实数据上的性能表现。然而,细心的读者在深刻研究这些数据或者查阅Scikit-learn的文档以后就会发现: 全部咱们在第2章中使用过的数据几乎都通过了规范化处理,并且模型也大多只是采用了默认的初始化配置。换言之,尽管咱们可使用通过处理以后的数据,在默认配置下学习到一套用以拟合这些数据的参数,而且使用这些参数和默认配置取得一些看似良好的性能表现;可是咱们仍然没法回答几个最为关键的问题: 实际研究和工做中接触到的数据都是这样规整的吗?难道这些默认配置就是最佳的么?咱们的模型性能是否还有提高的空间?本章"3.1模型使用技巧"节将会帮助读者朋友解答上述疑问。阅读完这一节,相信各位读者朋友就会掌握如何经过抽取或者筛选数据特征、优化模型配置,进一步提高经典模型的性能表现。
然而,随着近些年机器学习研究与应用的快速发展,经典模型渐渐没法知足日益增加的数据量和复杂的数据分析需求。所以,愈来愈多更加高效并且强力的学习模型以及对应的程序库正逐渐被设计和编写,并慢慢被科研圈和工业界所普遍接受与采用。这些模型和程序库包括: 用于天然语言处理的NLTK程序包;词向量技术Word2Vec;可以提供强大预测能力的XGBoost模型,以及Google发布的用于深度学习的Tensorflow框架等等。更加使人振奋的是,上述这些最为流行的程序库和模型, 不但提供了Python的编程接口API,并且有些成为Python编程语言的工具包,更是方便了咱们后续的学习和使用。所以,在"3.2流行库/模型实践"节将会带领各位读者一同领略这些时下最为流行的程序库和新模型的奥妙。
3.1模型实用及技巧
这一节将向读者朋友传授一系列更加偏向于实战的模型使用技巧。相信各位读者在第2章中品味了多个经典的机器学习模型以后,就会发现: 一旦咱们肯定使用某个模型,本书所提供的程序库就能够帮助咱们从标准的训练数据中,依靠默认的配置学习到模型所须要的参数(Parameters);接下来,咱们即可以利用这组得来的参数指导模型在测试数据集上进行预测,进而对模型的表现性能进行评价。
可是,这套方案并不能保证: (1) 全部用于训练的数据特征都是最好的;(2) 学习获得的参数必定是最优的;(3) 默认配置下的模型老是最佳的。也就是说,咱们能够从多个角度对在前面所使用过的模型进行性能提高。本节将向你们介绍多种提高模型性能的方式,包括如何预处理数据、控制参数训练以及优化模型配置等方法。
3.1.1特征提高
早期机器学习的研究与应用,受模型种类和运算能力的限制。所以,大部分研发人员把更多的精力放在对数据的预处理上。他们指望经过对数据特征的抽取或者筛选来达到提高模型性能的目的。所谓特征抽取,就是逐条将原始数据转化为特征向量的形式,这个过程同时涉及对数据特征的量化表示;而特征筛选则更进一步,在高维度、已量化的特征向量中选择对指定任务更有效的特征组合,进一步提高模型性能。
3.1.1.1特征抽取
原始数据的种类有不少种,除了数字化的信号数据(声纹、图像),还有大量符号化的文本。然而,咱们没法直接将符号化的文字自己用于计算任务,而是须要经过某些处理手段,预先将文本量化为特征向量。
有些用符号表示的数据特征已经相对结构化,而且以字典这种数据结构进行存储。这时,咱们使用DictVectorizer对特征进行抽取和向量化。好比下面的代码55。
代码55: DictVectorizer对使用字典存储的数据进行特征抽取与向量化
>>> # 定义一组字典列表,用来表示多个数据样本(每一个字典表明一个数据样本)。
>>>measurements= [{'city': 'Dubai', 'temperature': 33.}, {'city': 'London', 'temperature': 12.}, {'city': 'San Fransisco', 'temperature': 18.}]
>>> # 从sklearn.feature_extraction 导入 DictVectorizer
>>>from sklearn.feature_extraction import DictVectorizer
>>> # 初始化DictVectorizer特征抽取器
>>>vec=DictVectorizer()
>>> # 输出转化以后的特征矩阵。
>>>print vec.fit_transform(measurements).toarray()
>>> # 输出各个维度的特征含义。
>>>print vec.get_feature_names()[[1. 0 0.33]
[0. 1. 0.12.]
[0. 0. 1.18.]]
['city=Dubai', 'city=London', 'city=San Fransisco', 'temperature']
从代码55的输出能够看到: 在特征向量化的过程当中,DictVectorizer对于类别型(Categorical)与数值型(Numerical)特征的处理方式有很大差别。因为类别型特征没法直接数字化表示,所以须要借助原特征的名称,组合产生新的特征,并采用0/1二值方式进行量化;而数值型特征的转化则相对方便,通常状况下只须要维持原始特征值便可。
另一些文本数据则表现得更为原始,几乎没有使用特殊的数据结构进行存储,只是一系列字符串。咱们处理这些数据,比较经常使用的文本特征表示方法为词袋法(Bag of Words): 顾名思义,不考虑词语出现的顺序,只是将训练文本中的每一个出现过的词汇单独视做一列特征。咱们称这些不重复的词聚集合为词表(Vocabulary),因而每条训练文本均可以在高维度的词表上映射出一个特征向量。而特征数值的常见计算方式有两种,分别是: CountVectorizer和TfidfVectorizer。对于每一条训练文本,CountVectorizer只考虑每种词汇(Term)在该条训练文本中出现的频率(Term Frequency)。而TfidfVectorizer除了考量某一词汇在当前文本中出现的频率(Term Frequency)以外,同时关注包含这个词汇的文本条数的倒数(Inverse Document Frequency)。相比之下,训练文本的条目越多,TfidfVectorizer这种特征量化方式就更有优点。由于咱们计算词频(Term Frequency)的目的在于找出对所在文本的含义更有贡献的重要词汇。然而,若是一个词汇几乎在每篇文本中出现,说明这是一个经常使用词汇,反而不会帮助模型对文本的分类;在训练文本量较多的时候,利用TfidfVectorizer压制这些经常使用词汇的对分类决策的干扰,每每能够起到提高模型性能的做用。
咱们一般称这些在每条文本中都出现的经常使用词汇为停用词(Stop Words),如英文中的the、a等。这些停用词在文本特征抽取中常常以黑名单的方式过滤掉,而且用来提升模型的性能表现。下面的代码让咱们从新对"20类新闻文本分类"问题进行分析处理,这一次的重点在于列举上述两种文本特征量化模型的使用方法,并比较他们的性能差别。
……
前言
致广大读者朋友:
欢迎各位购买和阅读《Python机器学习实践》!
该书的编写旨在帮助大量对机器学习和数据挖掘应用感兴趣的读者朋友,整合并实践时下最流行的基于Python语言的程序库:如Scikit-learn、NLTK、gensim、XGBoost、TensorFlow等;并且针对现实中的科研问题,甚至是Kaggle竞赛(当前世界最流行的机器学习竞赛平台)中的分析任务,快速搭建有效的机器学习系统。
朋友们在阅读了几个章节以后,就会发现这本书的特别之处。笔者力求减小读者对编程技能和数学知识的过度依赖,进而下降理解本书与实践机器学习模型的门槛;并试图让更多的兴趣爱好者体会到使用经典模型,乃至更加高效的方法解决实际问题的乐趣。同时,笔者对书中每一处的关键术语都提供了标准的英文表述,也方便读者朋友更加快速查阅和理解相关的英文文献。
因为本书不涉及对大量数学模型和复杂编程知识的讲解,所以受众很是普遍。这其中就包括:在互联网、IT相关领域从事机器学习和数据挖掘相关任务的研发人员;于高校就读的博士、硕士研究生,甚至是对计算机编程有初步了解的高年级本科生;以及对机器学习与数据挖掘竞赛感兴趣的计算机业余爱好者等等。
最后,衷心地但愿各位读者朋友可以从本书获益,同时这也是对我最大的鼓励和支持。全书代码下载地址为:http://pan.baidu.com/s/1bGp15G。对于任何出如今书中的错误,欢迎你们批评指正,并发送至电邮:fanmiao.cslt.thu@gmail.com,咱们会在本书的勘误网站https://coding.net/u/fanmiao_thu/p/Python_ML_and_Kaggle/topic 上记录下您的重要贡献。
写于美国纽约中央公园
2015年12月25日
后记
2015年12月的一天夜里,我在纽约的家中收到清华大学李超老师的一则微信。她说她本人很是欣赏我在网络上发表的数个有关如何使用Python快速搭建机器学习系统并在Kaggle竞赛平台上实战的帖子,而且但愿我整理出一本书出版。
开始我还很诧异,由于我在网上发表的全部帖子都是平常学习工做的经验之谈,随性之做;没有太多的逻辑可言,更别说出版书籍了。当时发表那些帖子的初衷,只是不但愿不少机器学习爱好者重蹈我在实践中的错误,也但愿能够帮助更多的同窗快速上手而且体验实战中乐趣。
可是,当我接下整理这部书稿的任务以后,突然感受本身身上的担子重了不少。特别是在得知这本书颇有可能被选为通用教材以后,马上发现以前全部我发布在互联网上的帖子几乎都不可用。缘由是,做为一部教材就更要设身处地为读者着想,尤为是这本教材的目标受众不只仅是计算机专业人士,更有非计算机专业的爱好者和初入此道的本科生。因此,我几乎从新编制了整部书的提纲,参考网上的帖子重写了第二和第三章节,而且考虑到不一样层次读者的需求,增长了第一章节的Python编程基础和第四章Kaggle竞赛实战等相关内容。
尽管时间仓促,笔者也力求全书能够条理清晰、深刻浅出地为广大读者朋友服务;但也有因能力所限、力所不逮之处,还望各位朋友批评指正,及时勘误。
最后,再次感谢您购阅《Python机器学习及实践》,并借由笔者本人时常所引用斯蒂夫·乔布斯的一句名言,做为本书的收尾:求知若饥、虚心若愚(Stay Hungry, Stay Foolish),但愿在从此的人生道路上能与读者朋友们共勉。
写于中国北京清华园
2016年5月1日