仅个人读书笔记.
前言:本书不涉及对大量数学模型和复杂编程知识的讲解,旨在整合并实践时下最流行的基于Pyhton语言的程序库,快速搭建有效的机器学习系统(针对Kaggle竞赛的).
对新手极度友好,这本书涉及核心知识点不多,2,3天过一遍,稍微看看,能达到对机器学习有个大概的宏观了解
我在每小节后面整合了一些总结的比较好的博文,对知识点的深入拓展
书籍配套代码:《python机器学习及实践-从零开始通往kaggle竞赛之路》——代码整理
章节介绍:
本章阐述机器学习的定义并介绍Python用于机器学习的优势,介绍了常用的编程库
机器学习的经典定义是什么?
机器学习经典定义:如果一个程序在使用既有的经验执行某类任务的过程中被认定为是“具备学习能力的”,那么它一定要展现出:利用现有的经验,不断改善其完成既定任务的性能的特质。
机器学习的三要素是什么?
经验、任务、性能
1.1.1 任务
机器学习的任务主要分为哪两类?
(1)监督学习:关注对未知事物表现的预测,一般包括:
分类问题(预测目标:,离散)、回归问题(预测目标:连续)
(2)无监督学习:关注对事物本身特性的分析,一般包括:
数据降维:对事物特性进行压缩和筛选,保留最具有区分性的特征进行分析。
聚类问题:依赖于数据的相似性,把相似的数据样本划分为一个簇
1.1.2 经验
数据就是经验吗?
并不是,只有那些对学习任务有用的特定信息才可称作经验,通常将这些反映数据内在规律的信息叫做特征。
例如:在人脸识别任务中,我们并不是将原始数据作为经验交给学习系统,而是通过降维技术,筛选出主要像素信息更加有助于识别出人脸轮廓特征。
监督学习和无监督学习的经验包括什么?
(1)监督学习的经验包括:特征和标记(Label)。一般用一个特征向量描述一个数据样本,标记的表现形式取决于监督学习的种类。
(2)无监督学习的经验包括:特征,无监督学习没有标记,不能用于预测任务,因此更加适合于对数据结构的分析。在该类任务中,我们可以获取大量的无监督数据,监督数据的标注费时费力,因此数据量较少。
1.1.3 性能
什么是性能?
性能是评价所完成任务质量的指标,性能评价指标因学习任务而异。
为什么使用Python进行机器学习?
(1)方便调试的解释性语言;(2)跨平台执行作业;(3)广泛的应用编程接口;(4)丰富的开源工具包。
有哪些最常用的Python编程库?
NumPy与SciPy:便于向量,矩阵和复杂科学计算;
Matplotlib:仿MATLAB样式绘图;
Scikit-learn:包含大量经典机器学习模型;
Pandas:对数据进行快捷分析和处理;
综合实践平台Anaconda:以及集成了上述所有第三方程序库。
章节介绍:
在本章我们将使用大量实例和数据,着重介绍监督学习经典模型与无监督学习经典模型的使用方法、性能评价指标以及优缺点。
对于每一类经典模型,都将从模型简介、数据描述、编程实践、性能测评以及特点分析5个角度分别进行阐述。
logistic回归模型:sigmoid函数和logistic回归分类器
比较Logistic回归与随机梯度参数估计两种方法
相比之下,前者对参数的计算采用精确解析的方式,计算时间长但是模型性能略高;后者采用随机梯度上升算法估计模型参数,计算时间短但是产出的模型性能略低。一般而言,对于训练数据规模在10万量级以上的数据,考虑到时间的耗用,笔者更加推荐使用随机梯度算法对模型参数进行估计。
什么是支持向量?:
支持向量机分类器是根据训练样本的分布,搜索所有可能的线性分类器中最佳的那个。决定直线位置的样本并不是所有训练数据,而是其中的两个空间间隔最小的两个不同类别的数据点,而我们把这种可以用来真正帮助决策最优线性分类模型的数据点叫做“支持向量”。
SVM模型与Logistic回归模型比较呢?
Logistic回归模型在训练过程中由于考虑了所有训练样本对参数的影响,因此不一定获得最佳的分类器。
特点分析:
支持向量机模型曾经在机器学习研究领域繁荣发展了很长一段时间。主要原因在于其精妙的模型假设,可以帮助我们在海量甚至高维度的数据中,筛选对预测任务最为有效的少数训练样本。这样做不仅节省了模型学习所需要的数据内存,同时也提高了模型的预测性能。然而,要获得如此的优势就必然要付出更多的计算代价(CPU资源和计算时间)。
知识点拓展:
支持向量机通俗导论(理解SVM的三层境界)
朴素贝叶斯基于什么概率论原理?
朴素贝叶斯分类器的构造基础是贝叶斯理论。
抽象一些说,朴素贝叶斯分类器会单独考量每一维度特征被分类的条件概率,进而综
合这些概率并对其所在的特征向量做出分类预测。因此,这个模型的基本数学假设是:
各个维度上的特征被分类的条件概率之间是相互独立的。
该模型适用于什么场景?
朴素贝叶斯模型有着广泛的实际应用环境,特别是在文本分类的任务中间,包括互联网新闻的分类、垃圾邮件的筛选等。
特点分析:
朴素贝叶斯模型被广泛应用于海量互联网文本分类任务。由于其较强的特征条件独立假设,使得模型预测所需要估计的参数规模从幂指数量级向线性量级减少,极大地节约了内存消耗和计算时间。但是,也正是受这种强假设的限制,模型训练时无法将各个特征之间的联系考量在内,使得该模型在其他数据特征关联性较强的分类任务上的性能表现不佳。
K近邻算法的原理是什么?
在样本未知的情况下,首先选择距离测试集最近的K个样本,这K个样本中哪个类别最多,就选择该标签归给哪个数据集。
特点分析:
K近邻算法与其他模型最大的不同在于:该模型没有参数训练过程。也就是说,我们并没有通过任何学习算法分析训练数据,而只是根据测试样本在训练数据的分布直接做出分类决策。然而,正是这样的决策算法,导致了其非常高的计算复杂度和内存消耗。因为该模型每处理一个测试样本,都需要对所有预先加载在内存的训练样本进行遍历、逐一计算相似度、排序并且选取K个最近邻训练样本的标记,进而做出分类决策。这是平方级别的算法复杂度,一旦数据规模稍大,使用者便需要权衡更多计算时间的代价。
决策树
在前面所使用的Logistic回归和支持向量机模型,都在某种程度上要求被学习的数据特征和目标之间遵照线性假设。然而,在许多现实场景下,这种假设是不存在的。在机器学习模型中,决策树就非常适合用来描述非线性关系。
随机森林
随机森林是以决策树为基础的一种更高级的算法。像决策树一样,随机森林即可以用于回归也可以用于分类。随机森林是用随机的方式构建的一个森林,而这个森林是由很多的相互不关联的决策树组成。本质上,随机森林属于机器学习的一个很重要的分支叫做集成学习。集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。
梯度提升决策树
(1)GBDT这个名字非常有深意:G-gradient(表示该算法是基于梯度的),B-Boosting(表示该算法是boosting模型),DT-decision tree(表示算法内部使用的是决策树)
(2)GBDT是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力较强的算法。
知识点拓展:
机器学习–集成学习(Ensemble Learning)
GBDT
模型介绍
算法执行的过程分为4个阶段:
①首先,随机布设K个特征空间内的点作为初始的聚类中心;
②然后,对于根据每个数据的特征向量,从K个聚类中心中寻找距离最近的一个,并且把该数据标记为从属于这个聚类中心;
③接着﹐在所有的数据都被标记过聚类中心之后,根据这些数据新分配的类簇,重新对K个聚类中心做计算;
④如果一轮下来,所有的数据点从属的聚类中心与上一次的分配的类簇没有变化,那么迭代可以停止;否则回到步骤②继续循环。
>如何评估聚类算法的性能?
(1)用来评估的数据本身带有正确的类别信息时。使用API评估性能,API与分类问题中的计算准确性Accuracy类似;
(2)用来评估的数据没有所属的类别信息时,用轮廓系数来度量聚类结果的质量
知识点拓展:
sklearn之聚类评估指标—轮廓系数
聚类算法及其评估指标
特征降维的应用目的是什么?
(1)我们会经常在实际项目中遭遇特征维度非常之高的训练样本,而往往又无法借助自己的领域知识人工构建有效特征;
(2)在数据表现方面,我们无法用肉眼观测超过三个维度的特征。因此,特征降维不仅重构了有效的低维度特征向量,同时也为数据展现提供了可能。
在特征降维的方法中,主成分分析(PCA)是最为经典和实用的特征降维技术,特别在辅助图像识别方面有突出的表现。
PCA的降维原理是什么?
在PCA中,数据从原来的坐标系转换到新的坐标系,由数据本身决定。转换坐标系时,以方差最大的方向作为坐标轴方向,因为数据的最大方差给出了数据的最重要的信息。第一个新坐标轴选择的是原始数据中方差最大的方法,第二个新坐标轴选择的是与第一个新坐标轴正交且方差次大的方向。重复该过程,重复次数为原始数据的特征维数。
知识点拓展:
机器学习实战之PCA
回答如下问题:
1)机器学习模型按照可使用的数据类型,可以分为哪些类别?
答:
机器学习模型按照可使用的数据类型分为监督学习和无监督学习两大类
2)常见的监督学习与无监督学习的模型都有哪些?
答:
监督学习主要包括用于分类和用于回归的模型:
(1)分类:线性分类器(如LR)、支持向量机(SVM)、朴素贝叶斯(NB)、K近邻(KNN)、决策树(DT)、集成模型(RF/GDBT等)
(2)回归:线性回归、支持向量机(SVM)、K近邻(KNN)、回归树(DT)、集成模型(ExtraTrees/RF/GDBT)
无监督学习主要包括:数据聚类(K-means)/ 数据降维(PCA)
就模型特性而言,总结和归纳:
(1)各个模型分别基于哪些数学假设?
(2)各个模型适合处理哪类数据?
(3)每个模型在使用方面的优缺点有哪些?
(4)常见的用于评估各个模型的性能指标以及计算方法是怎样的?
模型名称 | 数学假设 | 适合的数据类型 | 模型优缺点 | 评测指标及其计算方法 |
---|---|---|---|---|
LR | 假设特征与分类结果存在线性关系 | 适合数值型和标称型数据 | 与随机梯度上升算法相比,优点:预测精度准确;缺点:耗费时间长 | 准确性(Accuracy)、召回率(Recall)和精确率(Precision)、F1 |
NB | 基于贝叶斯公原理,朴素,即:各个维度上的特征被分类的条件概率之间是相互独立的 | 只适用于标称型数据 | 优点:在数据较少的情况下仍然有效,可处理多类别问题;缺点:在特征关联性较强的任务性能差 | 准确性(Accuracy)、召回率(Recall)和精确率(Precision)、F1 |
DT | 信息熵 | 只适用于标称型数据,因此数值型数据必须离散化 | 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据;缺点:可能会产生过度匹配问题 | 准确性(Accuracy)、召回率(Recall)和精确率(Precision)、F1 |
SVM | 核函数 | 适用数据类型:数值型和标称型数据 | 优点:泛化错误率低,计算开销不大,结果易解释。缺点:对参数调节和核函数的选择敏感 | 准确性(Accuracy)、召回率(Recall)和精确率(Precision)、F1 |
知识点拓展:
各种机器学习分类模型的优缺点
章节介绍:
(1)基于第2章的各种学习模型,本章回答几个最为关键的问题:
实际研究和工作中接触到的数据都是这样规整的吗?
难道这些默认配置就是最佳的么?
我们的模型性能是否还有提升的空间?
(2)介绍了当下流行的模型和程序库:
用于自然语言处理的NLTK程序包;
词向量技术Word2Vec;
能够提供强大预测能力的XGBoost模型;
用于深度学习的Tensorflow框架等。
本节将向大家介绍多种提升模型性能的方式,包括如何预处理数据、控制参数训练以及优化模型配置等方法。
特征抽取:就是逐条将原始数据转化为特征向量的形式,这个过程同时涉及对数据特征的量化表示;
特征筛选:更进一步,在高维度已量化的特征向量中选择对指定任务更有效的特征组合,进一步提升模型性能。
原始数据的种类有很多种,除了数字化的信号数据(声纹、图像),还有大量符号化的文本。然而,我们无法直接将符号化的文字本身用于计算任务,而是需要通过某些处理手段,预先将文本量化为特征向量。
如:有些用符号表示的数据特征已经相对结构化,并且以字典这种数据结构进行存储。
词袋法(Bag ofWords):
原理:顾名思义,不考虑词语出现的顺序,只是将训练文本中的每个出现过的词汇单独视作一列特征。我们称这些不重复的词汇集合为词表(Vocabulary),于是每条训练文本都可以在高维度的词表上映射出一个特征向量。
适用场景:适用于我们处理的一些表现得更为原始的文本数据,几乎没有使用特殊的数据结构进行存储,只是一系列字符串。
特征数值的常见计算方式:
有两种,分别是:CountVectorizer和TfidfVectorizer。对于每一条训练文本,CountVectorizer只考虑每种词汇在该条训练文本中出现的频率。而TfidfVectorizer除了考量某一词汇在当前文本中出现的频率之外,同时关注包含这个词汇的文本条数的倒数。
相比之下,训练文本的条目越多,TfidfVectorizer这种特征量化方式就更有优势。因为我们计算词频的目的在于找出对所在文本的含义更有贡献的重要词汇。然而,如果一个词汇几乎在每篇文本中出现,如:a,the,说明这是一个常用词汇,反而不会帮助模型对文本的分类;在训练文本量较多的时候,利用TfidfVectorizer压制这些常用词汇的对分类决策的干扰,往往可以起到提升模型性能的作用。
知识点拓展:
特征数值计算的常见方法:Scikit-learn CountVectorizer与TfidfVectorizer
知识点拓展:
机器学习中的特征——特征选择的方法以及注意点
特征选择与特征提取
前情提要:
这节我们将详细解释什么是模型的泛化力,以及如何保证模型的泛化力。
(1)欠拟合与过拟合将首先阐述模型复杂度与泛化力的关系;
(2)L1范数正则化与L2范数正则化将分别介绍如何使用这两种正则化的方式来加强模型的泛化力,避免模型参数过拟合.
欠拟合:当模型复杂度很低时,模型不仅没有对训练集上的数据有良好的拟合状态,而且在测试集上也表现平平;
过拟合:当我们一味追求很高的模型复杂度,尽管模型几乎完全拟合了所有的训练数据,但模型也变得非常波动,几乎丧失了对未知数据的预测能力;
这两种情况都是缺乏模型泛化力的表现。
解决办法:为了平衡这两难的选择,我们通常采用两种模型正则化的方法,这就要求在增加模型复杂度,提高在可观测数据上的性能表现的同时,又需要兼顾模型的泛化力,防止发生过拟合的情况。
正则化的常见方法都是在原模型优化目标的基础上,增加对参数的惩罚项。
也就是说,在原优化目标的基础上,增加了参数向量的L1范数。如此一来,在新目标优化的过程中,也同时需要考量L1惩罚项的影响。为了使目标最小化,这种正则化方法的结果会让参数向量中的许多元素趋向于0,使得大部分特征失去对优化目标的贡献。而这种让有效特征变得稀疏的L1正则化模型,通常被称为Lasso。
与L1范式正则化不同,为了使优化目标最小化,这种正则化方法的结果会让参数向量中的大部分元素都变得很小,压制了参数之间的差异性。而这种压制参数之间差异性的L:正则化模型,通常被称为Ridge。
由于超参数的空间是无尽的,因此超参数的组合配置只能是“更优”解,没有最优解。通常情况下,我们依靠网格搜索对多种超参数组合的空间进行暴力搜索。
每一套超参数组合被代入到学习函数中作为新的模型,并且为了比较新模型之间的性能,每个模型都会采用交叉验证的方法在多组相同的训练和开发数据集下进行评估。
采用网格搜索来寻找超参数组合的过程非常耗时,可以充分利用多核处理器甚至是分布式的计算资源来从事并行搜索,这样能够成倍地节省运算时间。
知识点拓展:
机器学习——超参数搜索
从零开始,教你征战Kaggle竞赛