目录

  • 1 课程简介
    • 1.1 教学大纲
    • 1.2 授课计划
    • 1.3 课内实训指导书
  • 2 绪论
    • 2.1 数据挖掘的概念和任务
    • 2.2 十大经典数据挖掘算法
    • 2.3 开放数据获取来源-数据挖掘常见误区
    • 2.4 数据挖掘中的隐私保护
  • 3 认识数据
    • 3.1 数据对象和数据属性
    • 3.2 数据的统计描述
    • 3.3 数据可视化
    • 3.4 数据相似性度量
    • 3.5 数据可视化案例综合应用
  • 4 数据预处理
    • 4.1 数据清洗
    • 4.2 数据集成与数据规约
    • 4.3 数据离散化与概念分层
  • 5 分类与预测
    • 5.1 分类与预测:基本概念
    • 5.2 决策树分类
    • 5.3 朴素贝叶斯分类
    • 5.4 决策树方法的分析比较
    • 5.5 KNN分类算法
    • 5.6 分类与预测算法的性能评价方法
    • 5.7 高级分类算法
  • 6 回归分析
    • 6.1 基本概念
    • 6.2 线性回归编程案例
    • 6.3 逻辑回归
    • 6.4 岭回归
    • 6.5 CART分类回归树
    • 6.6 从线性回归到神经网络
    • 6.7 神经网络训练&神经网络设计原则
    • 6.8 过拟合与正则化
  • 7 关联规则挖掘
    • 7.1 基本概念
    • 7.2 闭项集和极大频繁项
    • 7.3 Apriori算法及其应用
    • 7.4 关联挖掘的常见误区
    • 7.5 FP树及软件实践
    • 7.6 课堂实录 Apriori基础与算法
    • 7.7 课堂实录 Apriori算法分析与案例应用
  • 8 聚类分析
    • 8.1 聚类概述
    • 8.2 聚类的划分方法
    • 8.3 聚类的层次方法
    • 8.4 聚类的密度方法
    • 8.5 孤立点分析
    • 8.6 Kmeans简单实战
    • 8.7 Kmeans常见错误解析
    • 8.8 Kmeans实现数据无监督分类
  • 9 案例开发与综合应用
    • 9.1 scikitlearn安装与配置
    • 9.2 KNN预测男女
    • 9.3 KNN测试自带数据评分对比以及绘图
    • 9.4 KNN用于分类
    • 9.5 KNN用于数据回归预测
    • 9.6 KNN基于历史数据预测未来
  • 10 课程实验
    • 10.1 实验一:数据可视化实践
    • 10.2 实验二:数据规范化实践
    • 10.3 实验三:朴素贝叶斯分类与预测
    • 10.4 实验四:决策树分类及可视化
    • 10.5 实验五:关联规则挖掘
    • 10.6 实验六:Kmeans聚类
    • 10.7 实验七:密度聚类
    • 10.8 实验八:案例综合应用
  • 11 python数据挖掘编程讲解
    • 11.1 函数练习
    • 11.2 函数编程
    • 11.3 可视化编程
    • 11.4 机器学习库的基本编程
实验三:朴素贝叶斯分类与预测

实验名称:朴素贝叶斯分类与预测

实验内容:1、通过调用库函数sklearn中的naive_bayes 相关方法。 可调用的三种naive_bayes函数:BernoulliNBGaussianNB和 MultinomialNB,参考代码为:


(1)要求三种方法都要调用一次,并分析如果X中存在0分量,三种函数的运行结果如何,阐述你的实验观察结论;

(2)将购买电脑案例作为样本输入,预测

待分类数据x=

{age=”<=30”,income=”medium”,

student=”yes”,credit_rating=”fair”}的分类结果。

2、以购买电脑案例为样本输入,调用自编的贝叶斯分类方法,预测

待分类数据x=

{age=”<=30”,income=”medium”,

student=”yes”,credit_rating=”fair”}的分类结果。


import math


class NB():

def __init__(self):

self.cla_all_num = 0

self.cla_num = {}

self.cla_tag_num = {}

self.landa = 1  # 拉普拉斯修正值


def train(self, taglist, cla):  # 训练,每次插入一条数据

# 插入分类

self.cla_all_num += 1

if cla in self.cla_num:  # 是否已存在该分类

self.cla_num[cla] += 1

else:

self.cla_num[cla] = 1

if cla not in self.cla_tag_num:

self.cla_tag_num[cla] = {}  # 创建每个分类的标签字典

# 插入标签

tmp_tags = self.cla_tag_num[cla]  # 浅拷贝,用作别名

for tag in taglist:

if tag in tmp_tags:

tmp_tags[tag] += 1

else:

tmp_tags[tag] = 1


def P_C(self, cla):  # 计算分类 cla 的先验概率

return self.cla_num[cla] / self.cla_all_num


def P_all_C(self):  # 计算所有分类的先验概率

tmpdict = {}

for key in self.cla_num.keys():

tmpdict[key] = self.cla_num[key] / self.cla_all_num

return tmpdict


def P_W_C(self, tag, cla):  # 计算分类 cla 中标签 tag 的后验概率

tmp_tags = self.cla_tag_num[cla]  # 浅拷贝,用作别名

if tag not in self.cla_tag_num[cla]:

return self.landa / (self.cla_num[cla] + len(tmp_tags) * self.landa)  # 拉普拉斯修正

return (tmp_tags[tag] + self.landa) / (self.cla_num[cla] + len(tmp_tags) * self.landa)



def test(self, test_tags):  # 测试

res = ''

res_P = None

for cla in self.cla_num.keys():

log_P_W_C = 0

for tag in test_tags:

log_P_W_C += math.log(self.P_W_C(tag, cla))

tmp_P = log_P_W_C + math.log(self.P_C(cla))  # P(w|Ci) * P(Ci)

if res_P is None:

res = cla

res_P = tmp_P

if tmp_P > res_P:

res = cla

res_P = tmp_P

return res


def set_landa(self, landa):

self.landa = landa


def clear(self):  # 重置模型

self.cla_all_num = 0

self.cla_num.clear()

self.cla_tag_num.clear()



if __name__ == '__main__':

    nb = NB()  # 生成模型

    # 训练模型

    # 年龄,收入,是否学生,信用等级  --->  是否买了电脑

    nb.train(['1', '3', '0', '0'], '0')

    nb.train(['1', '3', '0', '1'], '0')

    nb.train(['1', '3', '0', '0'], '1')

    nb.train(['3', '2', '0', '0'], '1')

    nb.train(['3', '1', '1', '0'], '1')

    nb.train(['3', '1', '1', '1'], '0')

    nb.train(['2', '1', '1', '1'], '1')

    nb.train(['1', '2', '0', '0'], '0')

#   nb.train(['1', '1', '1', '0'], '1')

#   nb.train(['3', '2', '1', '0'], '1')

#   nb.train(['1', '2', '1', '1'], '1')

#   nb.train(['2', '2', '0', '1'], '1')

    nb.train(['2', '3', '1', '0'], '1')

    nb.train(['3', '2', '0', '1'], '0')


testdata = ['1', '2', '1', '0']

print('测试结果:', nb.test(testdata))