【机器学习】嘿马机器学习(算法篇)第1篇:机器学习(算法篇 2 ),1.1 朴素贝叶斯算法简介【附代码文档】

举报
程序员一诺python 发表于 2025/05/30 22:01:08 2025/05/30
【摘要】 机器学习(算法篇 2 ) 1.1 朴素贝叶斯算法简介 1.2 概率基础复习 学习目标 1.概率定义 2.案例:判断女神对你的喜欢情况 3.联合概率、条件概率与相互独立 4.贝叶斯公式 4.1 公式介绍 4.2 案例计算 4.3 文章分类计算 5 小结 1.3 案例:商品评论情感分析 1.api介绍 HMM模型 4.7 HMM模型API介绍 1 API的安装: 2 hmmlear

教程总体简介:机器学习(算法篇 2 ) 1.1 朴素贝叶斯算法简介 1.2 概率基础复习 学习目标 1.概率定义 2.案例:判断女神对你的喜欢情况 3.联合概率、条件概率与相互独立 4.贝叶斯公式 4.1 公式介绍 4.2 案例计算 4.3 文章分类计算 5 小结 1.3 案例:商品评论情感分析 1.api介绍 HMM模型 4.7 HMM模型API介绍 1 API的安装: 2 hmmlearn介绍 3 MultinomialHMM实例 集成学习进阶 5.1 xgboost算法原理 1 最优模型的构建方法 2 XGBoost的目标函数推导 2.1 目标函数确定 2.2 CART树的介绍 2.3 树的复杂度定义 4 XGBoost与GDBT的区别 5.4 otto案例介绍 -- Otto Group Product Classification Challenge【xgboost实现】 1 背景介绍 2 思路分析 3 部分代码实现 5.5 lightGBM 1 写在介绍lightGBM之前 1.2 AdaBoost算法 1.3 GBDT算法以及优缺点 1.4 启发 5.8 《绝地求生》玩家排名预测 1 项目背景 2 数据集介绍 3 项目评估方式 5.9 stacking算法基本思想 1 集成学习基本复习 3 stacking的特点 5.10 住房月租金预测 2 任务 3 数据 4 评分标准 向量与矩阵的范数 1.向量的范数 朗格朗日乘子法 Huber Loss 极大似然函数取对数的原因 1 减少计算量 2 利于结果更好的计算 3 取对数并不影响最后结果的单调性 朴素贝叶斯 2.2 SVM算法api初步使用 支持向量机 2.3 SVM算法原理 1 定义输入数据 2 线性可分支持向量机 3 SVM的计算过程与算法步骤 3.1 推导目标函数 4 举例 2.4 SVM的损失函数 小结 2.8 案例:数字识别器 3 案例实现 3.1 初识EM算法 3.2 EM算法介绍 1 极大似然估计 1.1 问题描述 1.2 用数学知识解决现实问题 1.3 最大似然函数估计值的求解步骤 2 EM算法实例描述 EM算法 4.1 马尔科夫链 1 简介 2 经典举例 4.2 HMM简介 1 简单案例 2 案例进阶 2.2 问题解决 4.4 前向后向算法评估观察序列概率 1 回顾HMM问题一:求观测序列的概率 2 用前向算法求HMM观测序列的概率 2.1 流程梳理 3 HMM前向算法求解实例 4.5 维特比算法解码隐藏状态序列 1 HMM最可能隐藏状态序列求解概述 2 维特比算法概述 4.6 鲍姆-韦尔奇算法简介 定位 目标 K-近邻算法 1.3 距离度量 1 欧式距离(Euclidean Distance): 3 切比雪夫距离 (Chebyshev Distance): 4 闵可夫斯基距离(Minkowski Distance): 5 标准化欧氏距离 (Standardized EuclideanDistance): 7 汉明距离(Hamming Distance)【了解】: 逻辑回归 3.5 ROC曲线的绘制 1 曲线绘制 1.1 如果概率的序列是(1:0.9,2:0.7,3:0.8,4:0.6,5:0.5,6:0.4)。 2 意义解释 决策树算法 4.2 决策树分类原理 1 熵 1.1 概念 2 决策树的划分依据一----信息增益 2.1 概念 5 小结 5.1 常见决策树的启发函数比较 5.2 决策树变量的两种类型: 5.3 如何评估分割点的好坏? 4.3 cart剪枝 1 为什么要剪枝 2 常用的减枝方法 2.1 预剪枝 2.2后剪枝: 4.4 特征工程-特征提取 1 特征提取 4.5 决策树算法api 4.6 案例:泰坦尼克号乘客生存预测 4 决策树可视化 4.1 保存树的结构到dot文件 4.2 网站显示结构 5.2 Bagging 1 Bagging集成原理 2 随机森林构造过程 3 随机森林api介绍 4 随机森林预测案例 聚类算法 6.3 聚类算法实现流程 1 k-means聚类步骤 6.4 模型评估 1 误差平方和(SSE \The sum of squares due to error): 2 “肘”方法 (Elbow method) — K值确定 3 轮廓系数法(Silhouette Coefficient) 4 CH系数(Calinski-Harabasz Index) 6.5 算法优化 1 Canopy算法配合初始聚类 1.2 Canopy算法的优缺点 3 二分k-means 4 k-medoids(k-中心聚类算法) 5 Kernel k-means(了解) 6 ISODATA(了解) 7 Mini Batch K-Means(了解) 6.6 特征降维 1 降维 1.2 降维的两种方式 2 特征选择 2.1 定义 2.2 方法 2.3 低方差特征过滤 3 主成分分析 3.1 什么是主成分分析(PCA) 3.2 API 3.3 数据计算 6.7 案例:探究用户对物品类别的喜好细分 1 需求 3 完整代码 6.8 算法选择指导 正规方程的另一种推导方式 1.损失表示方式 梯度下降法算法比较和进一步优化 1 算法比较 2 梯度下降优化算法 维灾难 1 什么是维灾难 2 维数灾难与过拟合 1.4 k值的选择 1 K值选择说明 1.5 kd树 2 构造方法 1.6 案例:鸢尾花种类预测--数据集介绍 2 scikit-learn中数据集介绍 2.2 sklearn数据集返回值介绍 2.3 查看数据分布 2.4 数据集的划分 1.9 练一练 同学之间讨论刚才完成的机器学习代码,并且确保在自己的电脑是哪个运行成功 1.10 交叉验证,网格搜索 1 什么是交叉验证(cross validation) 1.2 为什么需要交叉验证 2 什么是网格搜索(Grid Search) 3 交叉验证,网格搜索(模型选择与调优)API: 4 鸢尾花案例增加K值调优 1.11 案例2:预测facebook签到位置 2.1 线性回归简介 1 线性回归应用场景 2 什么是线性回归 2.2 线性回归的特征与目标的关系分析 2.3 数学:求导 1 常见函数的导数 2 导数的四则运算 3 练习 4 矩阵(向量)求导 [了解] 线性回归 2.4 线性回归的损失和优化 1 损失函数 3 梯度下降和正规方程的对比 2.5 梯度下降法介绍 1 全梯度下降算法(FG) 3 小批量梯度下降算法(mini-batch) 2.7 案例:波士顿房价预测 3 回归性能评估 2.8 欠拟合和过拟合 2 原因以及解决办法 3 正则化 3.1 什么是正则化 2.9 正则化线性模型 1 Ridge Regression (岭回归,又名 Tikhonov regularization) 2 Lasso Regression(Lasso 回归) 3 Elastic Net (弹性网络) 3.1 逻辑回归介绍 2 逻辑回归的原理 2.2 激活函数 3 损失以及优化 3.1 损失 3.3 案例:癌症分类预测-良/恶性乳腺癌肿瘤预测 3.4 分类评估方法 2 ROC曲线与AUC指标 2.1 TPR与FPR 2.3 AUC指标 2.4 AUC计算API

完整笔记资料代码:https://gitee.com/yinuo112/AI/tree/master/机器学习/嘿马机器学习(算法篇)/note.md

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

机器学习(算法篇 2 )


  • 本阶段涉及内容

  • 朴素贝叶斯

  • 支持向量机
  • EM算法
  • HMM模型
  • 集成学习进阶

1.1 朴素贝叶斯算法简介

![垃圾邮ä»åˆ†ç±»](

![æ–‡ç« åˆ†ç±»](

1.2 概率基础复习

学习目标

  • 目标

  • 了解联合概率、条件概率和相关独立的概念

  • 知道贝叶斯公式
  • 知道拉普拉斯平滑系数

1.概率定义

  • 概率定义为一件事情发生的可能性

  • 扔出一个硬币,结果头像朝上

  • P(X) : 取值在[0, 1]

2.案例:判断女神对你的喜欢情况

在讲这两个概率之前我们通过一个例子,来计算一些结果:

![计算概率](

问题如下:

  1. 女神喜欢的概率?
  2. 职业是程序员并且体型匀称的概率?
  3. 在女神喜欢的条件下,职业是程序员的概率?
  4. 在女神喜欢的条件下,职业是程序员、体重超重的概率?

计算结果为:

1
2
3
4
P(喜欢) = 4/7
P(程序员, 匀称) = 1/7(联合概率)
P(程序员|喜欢) = 2/4 = 1/2(条件概率)
P(程序员, 超重|喜欢) = 1/4

思考题:在小明是产品经理并且体重超重的情况下,如何计算小明被女神喜欢的概率?

即P(喜欢|产品, 超重) = ?

此时我们需要用到朴素贝叶斯进行求解,在讲解贝叶斯公式之前,首先复习一下联合概率、条件概率和相互独立的概念。

3.联合概率、条件概率与相互独立

  • 联合概率:包含多个条件,且所有条件同时成立的概率

  • 记作:P(A,B)

  • 条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率

  • 记作:P(A|B)

  • 相互独立:如果P(A, B) = P(A)P(B),则称事件A与事件B相互独立。

4.贝叶斯公式

4.1 公式介绍

![è´åæ–¯å…¬å¼](

4.2 案例计算

那么思考题就可以套用贝叶斯公式这样来解决:

1
2
3
4
P(喜欢|产品, 超重) = P(产品, 超重|喜欢)P(喜欢)/P(产品, 超重)

上式中,

  • P(产品, 超重|喜欢)和P(产品, 超重)的结果均为0,导致无法计算结果。这是因为我们的样本量太少了,不具有代表性。
  • 本来现实生活中,肯定是存在职业是产品经理并且体重超重的人的,P(产品, 超重)不可能为0;
  • 而且事件“职业是产品经理”和事件“体重超重”通常被认为是相互独立的事件,但是,根据我们有限的7个样本计算“P(产品, 超重) = P(产品)P(超重)”不成立。

而朴素贝叶斯可以帮助我们解决这个问题。

  • 朴素贝叶斯,简单理解,就是假定了特征与特征之间相互独立的贝叶斯公式

  • 也就是说,朴素贝叶斯,之所以朴素,就在于假定了特征与特征相互独立。

所以,思考题如果按照朴素贝叶斯的思路来解决,就可以是

1
2
3
4
P(产品, 超重) = P(产品) * P(超重) = 2/7 * 3/7 = 6/49
p(产品, 超重|喜欢) = P(产品|喜欢) * P(超重|喜欢) = 1/2 * 1/4 = 1/8
P(喜欢|产品, 超重) = P(产品, 超重|喜欢)P(喜欢)/P(产品, 超重) = 1/8 * 4/7 / 6/49 = 7/12

那么这个公式如果应用在文章分类的场景当中,我们可以这样看:

![è´åæ–¯å…¬å¼ç†è§£](

公式分为三个部分:

  • P(C):每个文档类别的概率(某文档类别数/总文档数量)
  • P(W│C):给定类别下特征(被预测文档中出现的词)的概率

  • 计算方法:P(F1│C)=Ni/N (训练文档中去计算)

    • Ni为该F1词在C类别所有文档中出现的次数
    • N为所属类别C下的文档所有词出现的次数和
  • P(F1,F2,…) 预测文档中每个词的概率

如果计算两个类别概率比较:

所以我们只要比较前面的大小就可以,得出谁的概率大

4.3 文章分类计算

需求:通过前四个训练样本(文章),判断第五篇文章,是否属于China类

![分类计算例子](

  • 计算结果
1
2
3
4
P(C|Chinese, Chinese, Chinese, Tokyo, Japan) -->
P(Chinese, Chinese, Chinese, Tokyo, Japan|C) * P(C) / P(Chinese, Chinese, Chinese, Tokyo, Japan) 
=
P(Chinese|C)^3 * P(Tokyo|C) * P(Japan|C) * P(C) / [P(Chinese)^3 * P(Tokyo) * P(Japan)]
# 这个文章是需要计算是不是China类,是或者不是最后的分母值都相同:
# 首先计算是China类的概率:
P(Chinese|C) = 5/8
P(Tokyo|C) = 0/8
P(Japan|C) = 0/8
# 接着计算不是China类的概率:
P(Chinese|C) = 1/3
P(Tokyo|C) = 1/3
P(Japan|C) = 1/3

![img](

1
2
3
4
# 这个文章是需要计算是不是China类:
首先计算是China类的概率:  0.0003
    P(Chinese|C) = 5/8 --> 6/14
    P(Tokyo|C) = 0/8 --> 1/14
    P(Japan|C) = 0/8 --> 1/14

接着计算不是China类的概率: 0.0001
    P(Chinese|C) = 1/3 -->(经过拉普拉斯平滑系数处理) 2/9
    P(Tokyo|C) = 1/3 --> 2/9
    P(Japan|C) = 1/3 --> 2/9

5 小结

  • 概率【了解】

  • 一件事情发生的可能性

  • 联合概率【知道】

  • 包含多个条件,且所有条件同时成立的概率

  • 条件概率【知道】

  • 事件A在另外一个事件B已经发生条件下的发生概率

  • 贝叶斯公式【掌握】

![image-20200120234940475](

1.3 案例:商品评论情感分析

学习目标

  • 应用朴素贝叶斯API实现商品评论情感分析

1.api介绍

  • sklearn.naive_bayes.MultinomialNB(alpha = 1.0)

  • 朴素贝叶斯分类

  • alpha:拉普拉斯平滑系数

2.商品评论情感分析

![image-20200106233750808](

2.1 步骤分析

  • 1)获取数据
  • 2)数据基本处理

  • 2.1) 取出内容列,对数据进行分析

  • 2.2) 判定评判标准
  • 2.3) 选择停用词
  • 2.4) 把内容处理,转化成标准格式
  • 2.5) 统计词的个数
  • 2.6)准备训练集和测试集

  • 3)模型训练

  • 4)模型评估

2.2 代码实现

1
2
3
4
import pandas as pd
import numpy as np
import jieba
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
  • 1)获取数据
1
2
3
4
# 加载数据
data = pd.read_csv("./data/书籍评价.csv", encoding="gbk")
data
  • 2)数据基本处理 ```python

2.1) 取出内容列,对数据进行分析

content = data["内容"] content.head()

2.2) 判定评判标准 -- 1好评;0差评

data.loc[data.loc[:, '评价'] == "好评", "评论标号"] = 1 # 把好评修改为1 data.loc[data.loc[:, '评价'] == '差评', '评论标号'] = 0

data.head()

good_or_bad = data['评价'].values # 获取数据 print(good_or_bad)

['好评' '好评' '好评' '好评' '差评' '差评' '差评' '差评' '差评' '好评' '差评' '差评' '差评']

2.3) 选择停用词

加载停用词

stopwords=[] with open('./data/stopwords.txt','r',encoding='utf-8') as f: lines=f.readlines() print(lines) for tmp in lines: line=tmp.strip() print(line) stopwords.append(line)

stopwords # 查看新产生列表

对停用词表进行去重

stopwords=list(set(stopwords))#去重 列表形式 print(stopwords)

2.4) 把“内容”处理,转化成标准格式

comment_list = [] for tmp in content: print(tmp) # 对文本数据进行切割 # cut_all 参数默认为 False,所有使用 cut 方法时默认为精确模式 seg_list = jieba.cut(tmp, cut_all=False) print(seg_list) # seg_str = ','.join(seg_list) # 拼接字符串 print(seg_str) comment_list.append(seg_str) # 目的是转化成列表形式

print(comment_list) # 查看comment_list列表。

2.5) 统计词的个数

进行统计词个数

实例化对象

CountVectorizer 类会将文本中的词语转换为词频矩阵

con = CountVectorizer(stop_words=stopwords)

进行词数统计

X =

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。