IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 山东大学2019级机器学习实验一思路分析 -> 正文阅读

[人工智能]山东大学2019级机器学习实验一思路分析

山东大学2019级机器学习实验一思路分析

实验说明

在这里插入图片描述

在这里插入图片描述

中间的字段说明就不再写上了

实验分析

前提说明,默认大家已经掌握了贝叶斯模型是什么,怎么使用贝叶斯模型,不知道的可以点击链接查看添加链接描述。然后实验步骤依次如下:

  1. 数据预处理
  2. 训练模型,得到不同属性的概率
  3. 测试模型,运用概率去估测测试集并与结果比对得出精度

数据预处理

这里的数据预处理总共有四种,分别是补充缺失值、文字转成数值、日期格式、无关属性删除

补充缺失值

这次实验的缺失值比较特殊,一个是年份的位置(work_year)有缺失值,剩下有缺失值的位置位于f0-f4以及pub_dero_bankrup。补充可以采取pandas内置函数。inplace=true可以直接改变df中的值

# 缺失值补充
df['work_year'].fillna(0, inplace=True)
df['f0'].fillna(0, inplace=True)
df['f1'].fillna(0, inplace=True)
df['f2'].fillna(0, inplace=True)
df['f3'].fillna(0, inplace=True)
df['f4'].fillna(0, inplace=True)
df['pub_dero_bankrup'].fillna(0, inplace=True)

文字转成数值

这个没用到

日期格式

这个我把日期直接当成无关属性了,如果加上精度可能会更高。我可以提供思路,自己懒得写了,对于Series,可以使用describe函数获取日期的起始日期,算一个日期差,然后离散化处理即可。

无关属性删除

这个也是之前把我误导到一个误区的地方,误以为这个应该在训练中不断调整,也就是说,一开始确定一些属性为有关属性,然后依次增加属性,看精度的变化,如果精度有提升,就加入该属性,如果下降,就不加入该属性。后来,当我和王一讨论的时候才发现,无关属性删除在预处理中操作的,也就是说选什么属性有我们自己来定,这个选择看个人了。

训练模型

大家其实一开始都很懵,模型都不知道是什么,怎么训练,输入输出是什么。这时候,我们要回归贝叶斯模型的定义,贝叶斯模型的输入是一个x,x具有很多属性,输出是它属于哪个类别,判断依据是不同属性的概率,所以说关键就在于概率。通过训练集,得到每个属性的不同取值的概率,就完成我们的任务了。但是这里会有两个问题,也就是说明中提到的。一个是连续数据离散化,另一个就是零概率平滑处理。

连续数据离散化

我认为的连续数据就是那个取值相对较多的数据(王一指导),然后离散化的方法可以使用上学期Python课上学到的pandas.cut

在这里插入图片描述

就可以进行离散化了,这里做一些修改,因为我们需要划分的区间,所以做一些修改得到区间

# 离散化数据
for _attribute in _Attributes:
	temp = pd.cut(self.ds[_attribute], 4, labels=Labels, retbins=True)
	self.ds[_attribute] = temp[0]
	# 保存离散区间
	Intervals[_attribute] = list(temp[1])

零概率平滑处理

所谓零概率事件,就是测试集属性的取值在训练集中没有,这里处理的方式是询问商志达和王一得到的——拉普拉斯修正(百度了解一下),在训练集得到概率的时候,计算ELSE概率作为没有出现的属性取值的概率。具体代码如下

num = len(temp) + len(categories) + 1  # 做平滑处理
for category in categories:
	Probability[attribute][1][category] = (counts[category] + 1) / num
Probability[attribute][1]['ELSE'] = 1 / num

测试模型

这个应该就不用在多说了,就是每次取出一行,通过之前得到的区间对连续值进行离散化处理,然后计算1和0的概率作比较,就可以了

个人结果

我这边用了一些我认为有用的数据,得到了92.1的精度,个人感觉还可以。

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-22 10:56:24  更:2021-10-22 10:58:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:46:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码