机器学习知识点

文章目录

    • 机器学习
      • 聚类
        • K-means聚类
      • 有监督学习
        • K-means近邻
          • 青少年市场细分
        • 决策树
          • ID3、C4.5、CART
        • LR
          • 为什么用最大似然函数作为损失函数
          • 为什么用sigmod
          • 应用场景
        • SVM
          • 常见核函数
        • 决策树
        • 朴素贝叶斯
          • 垃圾短信过滤
      • 评价指标
          • 样本分布不均,如何训练
        • 训练集和测试集的划分
        • 分类指标
        • 过拟合、欠拟合
          • 为什么会发生过拟合
          • 如何防止过拟合
          • 为什么参数越小模型越简单
          • 实现参数的稀疏的用处
        • PR、AOC、AUC曲线
          • P-R
          • ROC
          • AUC
      • 损失函数
        • 损失函数
    • 深度学习
      • 神经网络
        • BP神经网络
      • TensorFlow
        • 张量
        • 主要用途
        • 主要优点
        • 解决过拟合问题
        • 手写识别mnist
        • 单变量线性回归
        • 多元线性回归

用于突击一下机器学习的一些东西,第二志愿被改到机器学习部门了,感觉其实挺凉的估计,毕竟这玩意没碰到过,也就两三天时间,随便看一下吧。
我也不知道这里面具体都有什么分类,就看到哪里抄到哪里吧

机器学习

机器学习分为有监督学习和无监督学习。

  • 有监督学习:有训练样本和每个样本对应的标签值,有输入有输出,针对性训练。(所有分类和回归都是有监督)
  • 无监督学习:只有训练样本,但是没有标签纸,然后自动根据样本的相似特征进行归类

聚类

聚类是一种无监督学习。
聚类则是试图将数据集的样本划分为若干个互不相交的类簇,从而每个簇对应一个潜在的类别。

K-means聚类

首先随机指定类中心,根据样本与类中心的远近划分类簇,接着重新计算类中心,迭代直至收敛。

有监督学习

K-means近邻

如果一个样本在特征空间中的k个最相似的样本大多都属于一个类别,那么这个样本就属于这个类别。
k通常不大于20。
比如下面这个图,如果k为3,则绿色需要判断距离最近的三个点,红色占据三分之二,所以认为绿色是红色;如果k为5,则判断最近的五个点,蓝色占五分之三,则此时绿色是蓝色。
机器学习知识点_第1张图片
算法步骤(测试数据就是带待预测的):

  1. 分别计算测试数据和训练数据的距离
  2. 按照距离递增排序
  3. 选取距离最小的k个点
  4. 统计这k个点中的训练数据的每一类频率
  5. 选取频率最高的一个作为测试数据的分类
青少年市场细分

一个K-means的小实验
步骤:

  1. 先读取数据,然后统计男女的个数
  2. 由于统计青少年,需要除去13-20岁以外的人,标记为NaH。其实这里对这些空置设置第三个类别unknown,标记这是缺失数据
  3. 先对数据进行编码处理,使用独热编码。也就是一个特征占用一位,即这里需要三位,分别表示M、F、unknown。(独热编码解决的分类器不好处理数据特征的问题、也扩充了特征)
  4. 对数据进行标准化处理
  5. 调用sklearn的Kmeans类进行分析,设置k为5
  6. 可以查看聚类效果

决策树

思想和人的思考过程类似吧。
比如我是否拥有房产,这是一个节点,两个子节点有和没有;如果有,能否结婚,这又是一个节点,子节点是能和不能;选择能,然后是月收入是否大于4k,这也是一个节点,子节点为是或者否,以此类推。
决策树是一个二叉树,非叶子节点存放数据的一些特征属性,每一个分支则表示这个属性的一个输出,叶子节点存放判别的决策结果。从根节点出发,根据数据特征以此选择合适的分支,最终的叶子节点存放的类别作为决策结果。

机器学习知识点_第2张图片

为了解决噪声和离群点带来的过拟合,可以进行剪枝操作。

  • 在构造的时候,根据某些条件进行判断如果不符合就不创建这个分支
  • 构造完成以后,通过某些规则遍历然后剪枝

特点:

  • 每个非叶节点表示一个特征属性测试。
  • 每个分支代表这个特征属性在某个值域上的输出。
  • 每个叶子节点存放一个类别。
  • 每个节点包含的样本集合通过属性测试被划分到子节点中,根节点包含样本全集。
ID3、C4.5、CART

ID3
ID3算法使用信息增益为准则来选择划分属性,“信息熵”(information entropy)是度量样本结合纯度的常用指标
C4.5
ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性,来避免这个问题带来的困扰。首先使用ID3算法计算出信息增益高于平均水平的候选属性,接着C4.5计算这些候选属性的增益率
CART
CART决策树使用“基尼指数”(Gini index)来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小越好

LR

Logistic回归算法,名字虽带有回归,但其实是一个分类模型。它将特征的线性组合作为自变量,然后利用sigmoid函数将其映射到(0,1)上,映射后的值是y=1的概率。
対生成的结果是0或1的概率进行建模,通过采用最大似然估计的方法最大化似然函数,采用梯度上升的方法得到使似然函数最大的参数。求最小值用梯度下降。
优点:

  • 实现简单
  • 占用资源少
  • 模型训练速度快

缺点:

  • 只能处理线性可分
  • 只能解决二分类
为什么用最大似然函数作为损失函数

对数损失函数求解参数很快,和sigmod函数无关,训练快。
而平方损失函数的话,梯度更新速度和sigmod比较相关的,会导致训练很慢。

为什么用sigmod

sigmod把输入的连续实值变为0-1的映射
sigmod连续单调递增
导数计算很快

应用场景
  • 是否患病
  • 是否点击广告
  • 是否垃圾邮件等

SVM

支持向量机,是一个二分类模型,有线性和非线性两种。
基本特征是定义在特征空间上的一个线性分类器。是求解凸二次规划的最优化算法
基本思想是求解能够正确划分训练集并使得几何间隔最大的分离超平面。

有以下三类大概
训练样本线性
最大间隔的超平面划分。
通过硬间隔最大化,可以用线性方程wTx+b=0划分超平面。
其中w是法向量,b叫偏移量,决定了超平面和原点的距离。
训练样本近似线性
引入松弛变量,软间隔最大化学习一个线性分类器
线性不可分
使用核技巧和软间隔最大化
通过非线性变换可以转为某个特征空间的线性分类问题。
然后其实在高维里面,不需要显式指定非线性变换,用核函数替换内积。

常见核函数

解决线性不可分问题时,常常采用映射的方式,将低维原始空间映射到高维特征空间,使得数据集在高维空间中变得线性可分,从而再使用线性学习器分类。

核函数可以直接计算隐式映射到高维特征空间后的向量内积,而不需要显式地写出映射后的结果,它虽然完成了将特征从低维到高维的转换,但最终却是在低维空间中完成向量内积计算,与高维特征空间中的计算等效(低维计算,高维表现),从而避免了直接在高维空间无法计算的问题。

核函数的充要条件是半正定的对称函数
机器学习知识点_第3张图片

线性核函数
是最简单的核函数
多项式核函数
很适合正交归一化后的数据,参数较多,比较稳定
高斯核函数
也叫鲁棒径向基核,对噪音有着较好的抗干扰能力。参数决定了函数作用范围,超过范围以后,数据作用就基本消失了。
指数核函数
是高斯核函数的变种,将向量的L2距离变为L1距离,对参数依赖性较小,使用范围较小。
拉普拉斯核函数
就是指数核函数,这个对参数敏感度更低一些。

决策树

按照人思考的问题的方式一样,代表对象属性和值之间的一种映射关系,每个节点表示一个对象,每个分支就表示的是对象的某个属性,每个叶子节点就表示的是对象的值,一个决策树只有单一输出。
从数据产生一个决策树的机器学习叫做决策树学习。
通俗说,就是我是否想结婚,这是一个节点,有两个分支,是和否,是属性;选择是,下一个月薪是否超过4k,又是一个节点,有两个分支,是和否;就这一步一步往下走走到叶子节点就能找到一个值

有两种算法ID3和C4.5。

朴素贝叶斯

贝叶斯公式如下
机器学习知识点_第4张图片

原始的贝叶斯分类器最大的问题在于联合概率密度函数的估计,首先需要根据经验来假设联合概率分布,其次当属性很多时,训练样本往往覆盖不够,参数的估计会出现很大的偏差。为了避免这个问题,朴素贝叶斯分类器采用了“属性条件独立性假设”,即样本数据的所有属性之间相互独立。
朴素的意思是简单,单纯的意思。
假设了数据之间是独立的,逻辑较为简单,算法稳定,数据出现其他特点的时候,分类性能也不会差太多。
缺点就是数据要求相对独立。

用处:可以用于文本分析,

垃圾短信过滤

这里有个小例子,基于朴素贝叶斯的垃圾短信过滤。
主要步骤:

  1. 读取数据,对数据类型进行一个标记,ham和spam,如果是垃圾邮件就是1,如果不是就是0
  2. 对文本进行处理,全部转为小写,去掉标点符号
  3. 调用sklearn的CountVectorizer去除一些停止词,比如to,and和but等,然后计算词频分析
  4. 调用sklearn的TfidVectorizer对文本进行TF-IDF特征提取,降低维度,最小词频位是5,估计就是5位长度吧。
  5. 划分训练集75%和测试集25%
  6. 调用sklearn进行朴素贝叶斯分类
  7. 然后结果可视化一下

评价指标

样本分布不均,如何训练

训练集和测试集的划分

  1. 留出法:划分数据集为两个集合
  2. 交叉验证法:数据集划分为k个互斥子集,每次使用k-1个子集的并集训练,剩下用来测试

分类指标

  • 精确率Accuracy:模型预测正确的个数和总个数的比值
  • 准确率Precision:模型预测为正的样本中真正的正样本所占的比例
  • 召回率Recall:模型预测为正的样本占总的正样本的比例
  • ROC曲线:当阈值变化的时候,假阳率和真阳率的变化情况。横坐标是假阳率,纵坐标是真正率,左下角为判断为反例的情况,右上角则判断为正例的情况。
  • AUC曲线:给出的是分类器的平均性能值

过拟合、欠拟合

  • 过拟合:模型在训练集和测试集上的误差过大,模型复杂度高于实际了,属于“死记硬背”,也没有理解数据背后的规律,泛化能力差;
  • 欠拟合:模型无法在训练集上获得足够小的误差,即模型复杂度低,模型在训练集上的表现很差,没有学习到数据背后的规律。
为什么会发生过拟合
  1. 训练数据样本过于单一,不够足。比如如果都给负样本,但是用正样本进行测试,显然不行
  2. 训练数据中噪声干扰太大,从而忽略了真正的输入输出的数据特征
  3. 模型过于复杂,大概是比较主要的原因,仅仅死记硬背知道了训练集的规律,不够灵活变通,无法探索出测试集的规律。
如何防止过拟合

需要显著减少测试误差而且不过度增加训练误差,提高泛化能力。
可以使用正则化,正则化是指修改学习方法,使其降低泛化误差而不降低训练误差
常用的正则化方法根据使用策略不同可以分为如下:

  1. 直接提供正则化约束的参数正则化方法,如L1/L2正则化;
  2. 通过工程上的技巧来实现更低泛化误差的方法,如提前终止(Early stopping)和Dropout;
  3. 不直接提供约束的隐式正则化方法,如数据增强等。

使用和获取更多数据用于训练,是解决过拟合的根本方法
在实际中如果没有太多数据,可以使用“假数据”添加进行测试。
采用合适的模型
比如对于深度学习,CNN层数越多效果越好,但是也会更容易产生过拟合。
L1、L2正则
L1正则是在原始损失函数后面加一个L1正则项,即全部权重w的绝对值的和,再乘λ/n。这是让权重靠近0,减小网络中的网络复杂度,趋向于产生少量的特征,其他特征全为0.因为最优的参数值很有可能出现在坐标轴上,会导致某一维权重为0,从而产生稀疏权重矩阵
L2正则又称为权重衰减,在原始损失函数后面加一个L2正则项,全部权值w的平方和,乘以λ/2n。会选择更多的特征,让这些特征全为0.因为最优的参数值很少出现在坐标轴上,因此每一维的参数都不会是0,最小化权值的时候,可以让每一项趋于0
droupout
在训练过程中,按照一定概率随机“删除”一部分神经元,其实就是隐藏起来不用了。这样在训练中可以产生多个模型,当计算到达一定程度的时候,其实结果是在一个范围内徘徊的,因此这个结果可能是不同模型的一个平均输出。也削弱了对某个神经元的某种依赖关系提高了泛化能力
提前终止
当再每个epoch测试的时候,同时用验证集开始检测,如果在验证集上进行测试,如果发现误差率开始上升,说明前就说好了

为什么参数越小模型越简单

越复杂的模型越会尝试对所有样本进行拟合,会造成在较小的区间有一些较大的波动,而较大的波动反应在导数越大。只有越大的参数会出现越大的导数,因此小参数会简单。

实现参数的稀疏的用处

通过参数的稀疏一定程度上可以实现对于特征的选择。在实际情况可能有大部分特征的用处其实都不大,虽然可以减少训练集的误差,但是也可能带来干扰,因此可以将这些没用的特征权值设为0让它不起作用。

PR、AOC、AUC曲线

P-R

机器学习知识点_第5张图片
P-R曲线定义如下:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测,每次计算出当前的P值和R值,如下图所示。
理论上是曲线下的面积越大性能越好,但是面积不好算,就比较平衡点P=R
机器学习知识点_第6张图片

ROC

以“真正例率”(True Positive Rate,简称TPR)为横轴,纵轴为“假正例率”(False Positive Rate,简称FPR),ROC偏重研究基于测试样本评估值的排序好坏。

AUC

ROC曲线下的面积定义为AUC(Area Uder ROC Curve),不同于P-R的是,这里的AUC是可估算的,即AOC曲线下每一个小矩形的面积之和。易知:AUC越大,证明排序的质量越好,AUC为1时,证明所有正例排在了负例的前面,AUC为0时,所有的负例排在了正例的前面。

损失函数

损失函数

损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。

  1. 平方损失函数
    常用于回归

  2. 对数损失函数

  3. 指数损失函数
    对离群点或者噪声非常敏感

  4. 0-1损失函数
    如果预测值和目标值不一致则为1,如果一致则为0

  5. 绝对值损失函数
    绝对值损失函数是计算预测值与目标值的差的绝对值

深度学习

深度学习是一个迭代的过程,每一轮迭代以后,前向传播算法会预测所以部分数据的预测值,通缩反向传播会动态修改网路中的参数值。

神经网络

神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应。

一直沿用至今的“M-P神经元模型”正是对这一结构进行了抽象,也称“阈值逻辑单元“,其中树突对应于输入部分,每个神经元收到n个其他神经元传递过来的输入信号,这些信号通过带权重的连接传递给细胞体,这些权重又称为连接权(connection weight)。细胞体分为两部分,前一部分计算总输入值(即输入信号的加权和,或者说累积电平),后一部分先计算总输入值与该神经元阈值的差值,然后通过激活函数(activation function)的处理,产生输出从轴突传送给其它神经元。
机器学习知识点_第7张图片

BP神经网络

单隐层前馈神经网络的拓扑结构,BP神经网络算法也使用梯度下降法(gradient descent),以单个样本的均方误差的负梯度方向对权重进行调节。
可以看出:BP算法首先将误差反向传播给隐层神经元,调节隐层到输出层的连接权重与输出层神经元的阈值;接着根据隐含层神经元的均方误差,来调节输入层到隐含层的连接权值与隐含层神经元的阈值。

TensorFlow

是一个python库,用于创建深度(机器)学习的应用程序。
有两个概念

  • 张量:相当于一个多维数组,一个张量包含了名称、形状和类型
  • 流:对张量执行的一系列操作

其他概念

  • 变量:在运行中会发生改变的量,会根据模型自动赋值,也可以修改为不可变量。

提供有一个tensorBoard可视化界面可以直观显示,如日志,图像等信息。

张量

有三种类型的张量

  1. 恒定张量:创建一个接受值不会更改的节点
  2. 可变张量:提供当前值作为输出的节点,可以在多次执行中保留价值
  3. 占位符张量:用于占位,是用于以后分配数据。我们不希望图形在开发的时候依赖于任何实际值,所以还是比较有用的

主要用途

  1. 基于文本的应用程序
  2. 语音/声音识别
  3. 时间序列
  4. 图像识别
  5. 视频检测

主要优点

  1. 可以轻松地在CPU和GPU上对其进行培训, 以进行分布式计算;
  2. 它具有自动区分功能;
  3. 它具有平台灵活性;
  4. 它易于定制和开源;
  5. 它对线程, 异步计算和队列具有高级支持。

解决过拟合问题

  1. 辍学技巧
  2. 正则化
  3. 批量标准化

手写识别mnist

损失函数
tf.nn.softmax_cross_entropy_with_logits(logits=forward,labels=y)

单变量线性回归

给定一个数据集,包含两个变量,自变量和因变量,关系近乎可以用一条之间表示,y=wx+b,确定w和b确定这条直线,就是线性回归。
步骤:

  1. 导入数据
  2. 定义损失函数和优化器,优化目标是让损失函数最小
  3. 然后开始训练,每次迭代绘本剧训练结果不断更新权重w和偏移b
  4. 每一轮计算损失率和准确率,继续

多元线性回归

有多个自变量参与,权值w为一个矩阵,数据需要进行归一化处理,不然偏差如果太大会影响结果。
归一化就是

你可能感兴趣的:(笔记总结,机器学习,深度学习,人工智能)