机器学习方法——一些问题的汇总

课堂小练

对于机器学习中出现的一些问题,做一次简单的总结。

题一

为什么进行交叉验证

  • 得到拟合程度 → \rightarrow 模型的真实水平(模型的分类能力)
  • 即交叉验证在做评估测验
  • 变换交叉验证方式去测试模型 → \rightarrow 泛化

交叉验证的种类

  1. 简单的训练集与测试集的切分 → \rightarrow 即按照百分比切分出测试集与训练集
  2. 标准k折交叉验证 → \rightarrow 将数据样本分为k份,每一份(n/k个样本)轮流作为测试集
  3. 分层k折交叉验证 → \rightarrow 在标准k折的基础上,每一折内不同类别的占比与整个数据样本内一致
  4. 留一法(n折交叉验证) → \rightarrow 测试集只有一个样本,其余全部作为训练集,相当于k折交叉验证的特例(k=n)
  5. 随机排列交叉验证 → \rightarrow 多次随机进行测试集与训练集的切分(第一种方式)

总的来说:数据决定评估结果的上限,算法决定评估结果的下限!

题二

贝叶斯垃圾邮件分类

计算概率表单 → \rightarrow 条件概率 { P ( 词 i ∣ 正 ) , 正 常 邮 件 中 某 个 词 出 现 的 概 率 P ( 词 i ∣ 垃 ) , 垃 圾 邮 件 中 某 个 词 出 现 的 概 率 \left\{\begin{matrix} P(词_i|正),正常邮件中某个词出现的概率 \\ P(词_i|垃),垃圾邮件中某个词出现的概率 \end{matrix}\right. {P(i)P(i)

  • 推导出 P ( 垃 ∣ 新 邮 件 ) = P ( 垃 ∣ 词 集 合 ) P(垃|新邮件)=P(垃|词集合) P()=P()的公式:
    推导过程

题三

贝叶斯分类器的种类与应用场景

高斯贝叶斯分类器(GaussianNB)
sklearn.naive_bayes.GaussianNB
  • 无参数,不需要调参
  • 方法
    • fit()
    • partial_fit():追加训练模型,适用于规模大的数据集,划分为若干个小数据集,在这些小数据集上连续使用partial_fit训练模型
    • predict()
    • score()
  • 属性
    • class_prior_:每个类别的概率
    • class_count_:每个类别包含样本数量
多项式贝叶斯分类器(MultinomialNB)
  • 适用特征为2个以上离散量,特征数据符合多项分布
sklearn.naive_bayes.MutlnomialNB
  • 参数

    • alpha:浮点数,指定朴素贝叶斯估计公式中λ值
    • fit_prior=True:是否学习P(y=Ck),不学习则以均匀分布替代
    • class_prior=None:可以传入数组指定每个分类的先验概率,None代表从数据集中学习先验概率
    • class_count:数组,形状为(n_class,),每个类别包含训练样本数量
    • feature_count:数组,形状(n_class,n_features),每个类别每个特征遇到的样本数
  • 方法同上述的高斯贝叶斯分类器

伯努利贝叶斯分类器(BernoulliNB)
  • 适用特征只有2个离散量,特征数据符合伯努利二项分布
  • 特征取值只能是0和1(如文本分类中某个词出现,特征为1;无,特征为0)
sklearn.naive_bayes.BernoulliNB
  • 参数

    • alpha:浮点数,指定贝叶斯估计中的λ
    • binarize=0.0:浮点数或None,None表明原始数据已二元化;浮点数作为边界,特征取值大于该边界作为1,否则作为0(通过这个浮点数来实现二元化)
    • fit_prior=True:是否学习P(y=Ck),不学习则以均匀分布替代
    • class_prior=None:可以传入数组指定每个分类的先验概率,None代表从数据集中学习先验概率
    • class_count:数组,形状为(n_class,),每个类别包含训练样本数量
    • feature_count:数组,形状(n_class,n_features),每个类别每个特征遇到的样本数
  • 方法同上述高斯贝叶斯分类器

    • alpha对预测的影响,越大(>100)准确率反而下降
    • binarize不能过小不能太大,一般取所有特征的所有值的(Min+Max)/2

题四

对三种分类器的比较

分类器比较

  • 说KNN不需要训练,是因为它计算距离采用的是训练集自带的特征值,KNN的fit过程只是保存了训练集的值,不像贝叶斯需要计算出概率表单、决策树需要计算各特征的信息熵或基尼系数;
  • 所以KNN的再“训练”成本很低,不需要进行新的计算,保存即可。

题五

决策树进行处理莺尾花分类

  1. 针对莺尾花数据集的各个特征,我们获取其特征值的最大最小值,确定一个取值区间;
  2. 用每个区间范围生成一个含有n个元素的等差数组,每个元素都视为一个阈值;
  3. 计算按照各阈值分割后的信息增益(或信息熵、基尼系数),比较得出最优分割特征与阈值;
  4. 将该特征的该阈值作为判断条件,分割出两个子数据集;
  5. 对每个子数据集重复上述四步操作,直到所有叶子结点信息增益为1(信息熵、基尼系数为0)或达到最大树深

莺尾花决策树

期中总结

交叉验证

评价模型:评估拟合程度 → \rightarrow 模型分类好坏 → \rightarrow 模型泛化能力

  • 对于一个事件,首先有发生:True和不发生:False,这里简称为T和F
  • 对于其是否发生我们做出预测,又有预测正确:Right和预测错误:Wrong,这里简称为R和W
  • 那么我们大致就可以将事件的预测结果分为以下四种情况:
  • 发生且预测正确(预测为发生):TR
  • 发生且预测错误(预测为不发生):TW
  • 不发生且预测正确(预测为不发生):FR
  • 不发生且预测错误(预测为发生):FW

那么对于这次对多个事件的预测结果做一个评估,我们就可以采用以下三个标准:

  • 准确率:所有事件中,预测结果中与真实结果一致的占比; T R + F R T R + T W + F R + F W \frac{TR+FR}{TR+TW+FR+FW} TR+TW+FR+FWTR+FR

  • 召回率:所有真实结果为发生的事件中,被预测正确的占比;
    T R T R + T W \frac{TR}{TR+TW} TR+TWTR

  • 精准率:所有被我们预测为发生的事件中,被预测正确的占比;
    T R T R + F W \frac{TR}{TR+FW} TR+FWTR

  • 准确率的使用场景比较宽泛,因为它关注的是整体的预测情况;

  • 召回率更适用于处理不好的事件,因为它更关注于一个事件的发生能否被更好的预测到,如对地震发生的预测则依据召回率评估比较有效;

  • 精准率更适用于处理好的事件,因为它更关注于我们预测要发生的事件是否真的会发生,如对彩票中奖的预测则依据精准率评估比较有效;

超参数与参数

  • 超参数:在开始学习过程之前就要设置值的参数;
  • 参数:通过模型训练得出的值(或者权重);

KNN { k → 最 近 邻 居 数 → 可 调 节 拟 合 程 度 { 小 , 过 拟 合 大 , 欠 拟 合 p → 距 离 计 算 公 式 → 可 调 节 拟 合 程 度 ← 根 据 距 离 添 加 权 重 \left\{\begin{matrix} k\rightarrow最近邻居数\rightarrow可调节拟合程度\left\{\begin{matrix} 小,过拟合 \\ 大,欠拟合 \end{matrix}\right. \\ p\rightarrow距离计算公式\rightarrow可调节拟合程度\leftarrow根据距离添加权重\end{matrix}\right. k{p

机器学习与深度学习

  • 深度学习适合处理海量的数据,对于少量的数据机器学习表现更佳
  • 机器学习的优势:简单、高效;
  • 深度学习的优势:特征复杂、事物本身复杂的海量数据,能趋近于无穷复杂度;

集成学习:

1)bagging: { 分 块 训 练 → 每 个 模 型 用 一 部 分 的 样 本 数 据 并 行 训 练 → 模 型 之 间 独 立 训 练 \left\{\begin{matrix} 分块训练\rightarrow每个模型用一部分的样本数据 \\ 并行训练\rightarrow模型之间独立训练 \end{matrix}\right. {

2)boosting: { 递 进 训 练 → 每 个 模 型 的 训 练 会 强 化 上 一 个 模 型 的 弱 项 串 行 训 练 \left\{\begin{matrix} 递进训练\rightarrow每个模型的训练会强化上一个模型的弱项 \\ 串行训练\end{matrix}\right. {

  • adaboost:①强化错误训练样本;②加权;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值