本文是学习以下项目后,结合自己实际工作一段时间具体的理解进行总结归纳的
西瓜书:书名叫《机器学习》,是周志华老师编写的 南瓜书:是对西瓜书中数学原理的推导,需要具备本科数学三件套的基本知识《高数》《线性代数》《概率论与数理统计》
https://github.com/datawhalechina/pumpkin-book
算法实现项目:上面两本书都是理论,具体代码实现几乎没有,但是github上有很多对各个学习算法的实现。下面两个项目是我认为不错的。
https://github.com/zhulei227/ML_Notes https://github.com/apachecn/ailearning
另外:
随着不断学习发现,数学在机器学习中是必不可少的,如果你只是想赶紧做个项目解决一下问题,以后都不会再接触机器学习了,那么可以放弃补充数学知识。但是一旦你想要深入学习,你会每天和各种数学公式打交道,你需要不断地数学建模
一、简介与环境搭建
1. 环境搭建
既然你已经进入到学习深度学习的阶段了,那么默认你python基础肯定没有问题,而集成开发工具pycharm早已经开关百遍
但是因为深度学习每个项目可能所需的环境都不一样,所以我们需要额外的工具——anaconda
找到anaconda的官网并下载安装完成后,接下来介绍一些操作,日后不在赘述
默认的环境是base,那么我们既然下载了anaconda来管理不同环境,就必须学会如何创建一个环境
安装成功后,运行Anaconda Prompt
这里给出一个python3.8版本的环境例子
python==3.8 tensorflow==2.4.0 keras==2.4.3 numpy==1.19.5 pandas==1.3.5 matplotlib==3.4.2 sklearn==0.0
依据上面的例子,接下来我们开始操作。首先创建一个名字为keras
的环境,基础python为3.8
起名keras是因为我们要使用keras,目前大家都用pytorch比较多,之后会主要使用pytorch实战。但是基础阶段,keras更加简单,便于我们将心思集中于基础,而不是如何使用自由度更高但也更复杂的pytorch。
conda create -n keras python == 3.8
查看我们现有的环境,是否除了默认的base外,多了一个keras
conda env list
为我们的keras环境安装我们需要的包
首先进入keras环境
activate keras
安装TensorFlow,下面会给出使用豆瓣源和阿里源安装的命令,如果对自己网速有信心,可以直接使用pip install tensorflow==2.4.0安装,而不指定豆瓣源
pip install tensorflow == 2.4 .0 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install tensorflow == 2.4 .0 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
按照上诉步骤依次安装其余的包
pip install keras == 2.4 .3 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install numpy == 1.19 .5 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install pandas == 1.3 .5 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install matplotlib == 3.4 .2 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install sklearn == 0.0 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
可以通过pip list命令确定是否安装了对应的包
如何与pycharm联动呢?pycharm如何使用这个环境呢?
进入pycharm,右下角可以选择添加环境 选择conda环境,配置conda.exe文件 配置好后,点击加载环节,我们就可以使用我们存在的环境keras了
2. 机器学习简介
给出了一个更形式化的定义:假设用 P 来评估计算机程序在某任务类T上的性能,若一个程序通过利用经验E在T中任务上获得了性能改善,则我们就说关于T和P, 该程序对E进行了学习.
简单来讲,我们人类为了完成任务T,是利用了经验E,例如通过观察傍晚的环境,预测出明天是否下雨。那么我们不断利用经验E,完成T任务的能力不断提升,那么说明我们对经验E进行了总结学习
而机器学习正是这样一门学科,致力于研究如何通过计算的手段,利用经验来改善系统自身的性能
“经验”通常以“数据”形式存在, 机器学习所研究的主要内容,是关于在计算机上从数据中产生“模型”(model)的算法,即“学习算法”(learning algorithm)。有了学习算法,我们把经验数据提供给它,它就能基于这些数据产生模型 在面对新的情况时,能够类似于人类一样,依据自身积累的经验,提供相应的判断
机器学习已广泛应用于数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA 序列测序、语音和手写识别、战略游戏和机器人等领域
如果说计算机科学是研究关于“算法”的学问,那么类似的,可以说机器学习是研究关于“学习算法”的学问.
简单来讲,机器学习就是从一堆样本数据中,找到特征(关键),根据特征指定机器学习算法(核心),训练泛化
因此,特征工程,也就是找特征的能力,是决定一个机器学习研究人员水平高低的重要指标,直接决定机器学习模型的性能 而有了特征,配合你所掌握的机器学习算法,将直接决定你的机器学习模型的质量 所以特征工程和机器学习算法是你开展机器学习工作的两大核心,也是你学习的重点。
“数据决定模型的上限,而算法则是让模型无限逼近上限”
“模型”泛指从数据中学得的结果.
有文献用“模型”指全局性结果(例如一棵决策树),而用“模式”指局部性结果(例如一条规则)
监督学习:输入数据带有标签。监督学习建立一个学习过程,将预测结果与 “训练数据”(即输入数据)的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率,比如分类和回归问题等。常用算法包括决策树、贝叶斯分类、最小二乘回归、逻辑回归、支持向量机、神经网络等。 非监督学习:输入数据没有标签,而是通过算法来推断数据的内在联系,比如聚类和关联规则学习等。常用算法包括独立成分分析、K-Means 和 Apriori 算法等。 半监督学习:输入数据部分标签,是监督学习的延伸,常用于分类和回归。常用算法包括图论推理算法、拉普拉斯支持向量机等。 强化学习:输入数据作为对模型的反馈,强调如何基于环境而行动,以取得最大化的预期利益。与监督式学习之间的区别在于,它并不需要出现正确的输入 / 输出对,也不需要精确校正次优化的行为。强化学习更加专注于在线规划,需要在探索(在未知的领域)和遵从(现有知识)之间找到平衡。
但是如果按照学习方式划分的形式学习算法,会让人容易晕头转向,所以本文将基于功能划分的顺序介绍算法
每学到一个算法,可以来这里判断一下,是属于监督学习还是非监督学习,亦或是半监督学习,还是强化学习
3. 基本术语
根据《西瓜书》中的例子,要进行机器学习,先要有数据.
一般地,令 D={1,2,…,m}表示包含m个示例的数据集,
假定我们收集了一批关于西瓜的数据,例如(色泽-青绿;根蒂=蜷缩;敲声=浊响),(色泽=乌黑;根蒂=稍蜷;敲声=沉闷),(色泽=浅白;根蒂=硬挺;敲声=清脆),…… 这组记录的集合称为一个“数据集”,其中每条记录是关于一个事件或对象(这里是一个西瓜)的描述,称为一个“示例”(instance)或“样本”(sample).
也称为“示例”,是关于一个事件或对象的描述。 要想让计算机能对现实生活中的事物进行机器学习,必须先将其抽象为计算机能理解的形式,计算机最擅长做的就是进行数学运算,因此考虑如何将其抽象为某种数学形式。 线性代数中的向量就很适合,因为任何事物都可以由若干“特征”(或称为“属性”)唯一刻画出来,而向量的各个维度即可用来描述各个特征。 扩展更多维度的特征,一般称此类与特征处理相关的工作为“特征工程”。
也称为“输入空间”或“属性空间”。由于样本采用的是标明各个特征取值的“特征向量’来进行表示 根据线性代数的知识可知,有向量便会有向量所在的空间,因此称表示样本的特征向量所在的空间为样本空间,通常用花式大写的
X
X
X 表示。
“属性”(attribute)或“特征”(feature)
样本需要反应事件或对象某方面的特征,例如色泽怎么样,根蒂怎么样 属性上的取值,例如“青绿”“乌黑”,称为“属性值”(attribute value) 属性张成的空间称为“属性空间”(attribute space)、“样本空间”(sample space)或“输入空间”
张成空间是线性代数中的知识,例如通过3个向量(或坐标轴),代表3个特征,张成一个3维空间。每个西瓜都可在这个空间中找到自己的坐标位置.由于空间中的每个点对应一个坐标向量,因此我们也把一个示例称为一个“特征向量”(feature vector).
学习(learning)或“训练”(training)
从数据中学得模型的过程,通过执行某个学习算法来完成 训练过程中使用的数据称为“训练数据”(training data),其中每个样本称为一个“训练样本”(training sample)训练样本组成的集合称为“训练集”(trainingset).
学得模型对应了关于数据的某种潜在的规律,因此亦称“假设”(hypothesis); 这种潜在规律自身,则称为“真相”或“真实”(ground-truth),学习过程就是为了找出或逼近真相
如果希望学得一个能帮助我们判断没剖开的是不是“好瓜”的模型,仅有前面的示例数据显然是不够的. 要建立这样的关于“预测”(prediction)的模型,我们需获得训练样本的“结果”信息,例如“((色泽=青绿;根蒂=蜷缩敲声=浊响),好瓜)”. 也就是说,我们要提供的样本,需要包含标签(答案)
这里关于示例结果的信息,例如“好瓜”,称为“标记”(label);拥有了标记信息的示例,则称为“样例”(example).
一般地,用
(
x
i
,
y
i
)
(x_i,y_i)
( x i , y i ) 表示第i个样例,其中
y
i
∈
γ
y_i∈\gamma
y i ∈ γ 是示例
x
i
x_i
x i 的标记,
γ
\gamma
γ 是所有标记的集合,亦称“标记空间”(label space)或“输出空间”
“分类”(classifcation)和“回归”(regression)
若我们欲预测的是离散值,例如“好瓜”“坏瓜”,此类学习任务称为“分类”(classifcation); 若欲预测的是连续值,例如西瓜成熟度 0.95、0.37此类学习任务称为“回归”(regression).
例如预测明天的天气,预测明天的电价,预测明天的房间等
对只涉及两个类别的“二分类
”(binary classifcation)任务,通常称其中一个类为“正类”(positive class)另一个类为“反类”(negativeclass); 涉及多个类别时,则称为“多分类
”(multi-class classifcation)任务. 一般地,预测任务是希望通过对训练集
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
{(x_1, y_1),(x_2, y_2),...,(x_m,y_m)}
( x 1 , y 1 ) , ( x 2 , y 2 ) , ... , ( x m , y m ) 进行学习,建立一个从输入空间
X
X
X 到输出空间
γ
\gamma
γ 的映射
f
:
X
→
γ
f:X\rarr \gamma
f : X → γ 对二分类任务,通常令
γ
=
{
−
1
,
+
1
}
\gamma=\{-1,+1\}
γ = { − 1 , + 1 } 或
{
0
,
1
}
\{0,1\}
{ 0 , 1 } ;对多分类任务
∣
γ
∣
>
2
|\gamma|>2
∣ γ ∣ > 2 ;对回归任务,
γ
=
R
,
R
为实数集
\gamma=\R,\R为实数集
γ = R , R 为实数集 .
当标记取值为连续型时,称此类任务为“回归”,例如学习预测西瓜的成熟度、学习预测未来的房价等。由于是连续型,因此标记的所有可能取值无法直接罗列,通常只有取值范围,回归任务的标记取值范围通常是整个实数域
R
\R
R ,即
γ
=
R
\gamma=\R
γ = R 。
测试”(testing),“测试样本”(testing sample)
学得模型后,使用其进行预测的过程称为“测试”(testing),被预测的样本称为“测试样本”(testing sample). 例如在学得f后,对测试例 ,可得到其预测标记y= f(x)
将训练集中的西瓜分成若干组,每组称为一个“簇”(cluster) 这些自动形成的簇可能对应一些潜在的概念划分,例如“浅色瓜”“深色瓜”,甚至“本地瓜”“外地瓜” 这样的学习过程有助于我们了解数据内在的规律,能为更深入地分析数据建立基础 需说明的是,在聚类学习中
,“浅色瓜”“本地瓜”这样的概念我们事先是不知道的
而且学习过程中使用的训练样本通常不拥有标记信息
“监督学习”(supervised learning)和“无监督学习”(unsupervised learning)
分类和回归是监督学习 聚类是无监督学习 根据训练数据是否拥有标记信息,学习任务可大致划分为两大类:“监督学习”(supervised learning)和“无监督学习”(unsupervised learning)
机器学习的目标是使学得的模型能很好地适用于“新样本”而不是仅仅在训练样本上工作得很好。即便对聚类这样的无监督学习任务,我们也希望学得的簇划分能适用于没在训练集中出现的样本. 学得模型适用于新样本的能力,称为“泛化”(generalization)能力.具有强泛化能力的模型能很好地适用于整个样本空间. 于是,尽管训练集通常只是样本空间的一个很小的采样,我们仍希望它能很好地反映出样本空间的特性,否则就很难期望在训练集上学得的模型能在整个样本空间上都工作得很好,
通常假设样本空间中全体样本服从一个未知“分布”(distribution)
D
D
D ,我们获得的每个样本都是独立地从这个分布上采样获得的,即“独立同分布”(independent and identicallydistributed,简称 i.i.d.). 一般而言,训练样本越多,我们得到的关于D的信息越多,这样就越有可能通过学习获得具有强泛化能力的模型 指的是概率论中的概率分布,通常假设样本空间服从一个未知“分布”D,而我们收集到的每个样本都是独立地从该分布中采样得到,即“独立同分布”。通常收集到的样本越多,越能从样本中反推出 D的信息,即越接近真相。此假设属于机器学习中的经典假设,在后续学习机器学习算法过程中会经常用到。
4. 假设空间
假设现已收集到某地区近几年的房价和学校数量数据,希望利用收集到的数据训练出能通过学校数量预测房价的模型。
基于对以上数据的观察以及日常生活经验,不难得出“房价与学校数量成正比”的假设,若将学校数量设为 x,房价设为 y,则该假设等价表示学校数量和房价呈y= x +b的一元一次函数关系,此时房价预测问题的假设空间即为“一元一次函数”
确定假设空间以后便可以采用机器学习算法从假设空间中学得模型,即从一元一次函数空间中学得能满足表1-1中数值关系的某个一元一次函数
除此之外,也可以将问题复杂化,假设学校数量和房价呈
y
=
w
x
2
+
b
y=wx^2+b
y = w x 2 + b 一元二次函数关系,此时问题变为了线性回归中的多项式回归问题,按照多项式回归算法可学得模型为
y
=
x
2
y=x^2
y = x 2 。
因此,以表1-1中数据作为训练集可以有多个假设空间,且在不同的假设空间中都有可能学得能够拟合训练集的模型,我们将所有能够拟合训练集的模型构成的集合称为“版本空间”。
5. 模型评估与选择
错误率:
E
=
a
m
E = \dfrac{a}{m}
E = m a ,其中m为样本个数,a为分类错误样本个数
通常我们把分类错误的样本数占样本总数的比例称为“错误率”(errorrate), 即如果在m个样本中有a个样本分类错误,则错误率 E=a/m;
精度:精度常写为百分比形式
(
1
−
a
m
)
×
100
%
(1-\dfrac{a}{m})×100\%
( 1 − m a ) × 100%
1-a/m 称为“精度”(accuracy),即“精度= 1-错误率”
“误差”(error):学习器(模型)的实际预测输出与样本的真实输出之间的差异
学习器在训练集上的误差称为“训练误差”(trainingerror)或“经验误差”(empirical error) 在新样本上的误差称为“泛化误差”(generalizationerror)
在新样本上能表现得很好的学习器,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别 当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种现象在机器学习中称为“过拟合”(overftting).
例如判断一张图片是不是人类,结果过拟合了,把训练样本中的人左下巴的痣,归结为人类的特征。之后再给他一张人类图片,脸上没有痣,就会判断这张图片不是人类
与“过拟合”相对的是“欠拟合”(underftting),这是指对训练样本的一般性质尚未学好
例如判别图片是猫还是人,结果欠拟合了,只要有毛的都是猫,这时给他一张无毛猫的照片,他就会判别这张照片不是猫
有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成的. 欠拟合比较容易克服,过拟合则很麻烦。必须认识到,过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险
二、数学
算法或理论 用到的数学知识点 贝叶斯分类器 随机变量,贝叶斯公式,随机变量独立性,正态分布,最大似然估计 决策树 概率,熵,Gini 系数 KNN算法 距离函数 主成分分析 协方差矩阵,散布矩阵,拉格朗日乘数法,特征值与特征向量 流形学习 流形,最优化,测地线,测地距离,图,特征值与特征向量 线性判别分析 散度矩阵,逆矩阵,拉格朗日乘数法,特征值与特征向最 支持向量机 点到平面的距离,Slater条件,强对偶,拉格朗日对偶,KKT条件,凸优化,核函数,Mercer条件 Logistic 概率,随机变量,最大似然估计,梯度下降法,凸优化,牛顿法 随机森林 抽样,方差 AdaBoost 算法 概率,随机变量,最大似然估计,梯度下降法,凸优化,牛顿法 隐马尔可夫模型 概率,离散型随机变量,条件概率,随机变量独立性,拉格朗日乘数法,最大似然估计 条件随机场 条件概率,数学期望,最大似然估计 高斯混合模型 正态分布,最大似然估计,Jensen不等式 人工神经网络 梯度下降法,链式法则 卷积神经网络 梯度下降法,链式法则 循环神经网络 梯度下降法,链式法则 生成对抗网络 梯度下降法,链式法则,极值定理,Kullback-Leibler散度,Jensen-Shannon散度,测地距离,条件分布,互信息 K-means算法 距离函数 贝叶斯网络 条件概率,贝叶斯公式,图 VC维 Hoeffding 不等式
三、机器学习算法
1. 线性模型
2. 决策树系列
3. 深度学习