数据挖掘的基础

2023-11-06

目录

数据挖掘

一、数据挖掘理解

二、数据准备

1、缺失值处理

2、异常值处理

3、数据偏差的处理

4、数据的标准化

5、特征选择

三、数据建模

1、分类问题

2、聚类问题

3、回归问题

4、关联问题

四、评估模型

1、混淆矩阵与准确率指标

2、评估数据的处理


 业务理解、数据理解、数据准备、构建模型、评估模型、模型部署。

一、数据挖掘理解

业务理解和数据理解

思考问题

数据挖掘只能在有限的资源与条件下去提供最大化的解决方案

把握数据

主要是看是否有数据、有多少数据、是什么样的数据、数据标签

二、数据准备

找到数据

数据探索

数据清洗

1、缺失值处理

删掉有缺失值的数据;补充缺失值;不做处理。

2、异常值处理

不同情况的异常值有不同的处理办法:

  • 数据本身的错误,需要对数据进行修正,或者直接丢弃;
  • 数据是正确的,需要根据你的业务需求进行处理。如果你的目标就是发现异常情况,那么这种异常值就需要保留下来,甚至需要特别关照。
  • 如果你的目标跟这些异常值没有关系,那么可以对这些异常值做一些修正,比如限定最大值和最小值的标准等,从而防止这些数据影响你后面模型的效果。

3、数据偏差的处理

如果你需要比较均衡的样本,那么通常可以考虑丢弃较多的数据,或者补充较少的数据。

在补充较少的数据时,又可以考虑使用现有数据去合成一些数据,或者直接复制一些数据从而增加样本数量。当然了,每一种方案都有它的优点和缺点,具体的情况还是要根据目标来决定,哪个对目标结果的影响较小就采取哪种方案。

4、数据的标准化

 http://t.csdn.cn/pz63Y

可以看我之前总结的文章。

5、特征选择

维度越多,数据就会越稀疏,模型的可解释性就会变 差、可信度降低。

这个时候就需要用到特征选择的技巧,比如自然语言处理里的关键词提取,或者去掉屏蔽词,以减少不 必要的数据维度。

构建训练集和测试集

在数据进入模型之前,你还需要对其进行数据采样处理。如果说前面的部分是为了给模型提供一个好的 学习内容,那么数据采样环节则是为了评估模型的学习效果。 在训练之前,你要把数据分成训练集和测试集,有些还会有验证集。

  • 如果是均衡的数据,即各个分类的数据量基本一致,可以直接随机抽取一定比例的数据作为训练样 本,另外一部分作为测试样本。
  • 如果是非均衡的数据,比如在风控型挖掘项目中,风险类数据一般远远少于普通型数据,这时候使 用分层抽样以保障每种类型的数据都可以出现在训练集和测试集中。

当然,训练集和测试集的构建也是有方法的,比如:

  • 留出法,就是直接把整个数据集划分为两个互斥的部分,使得训练集和测试集互不干扰,这个是最 简单的方法,适合大多数场景;
  • 交叉验证法,先把数据集划分成 n 个小的数据集,每次使用 n-1 个数据集作为训练集,剩下的作 为测试集进行 n 次训练,这种方法主要是为了训练多个模型以降低单个模型的随机性;
  • 自助法,通过重复抽样构建数据集,通常在小数据集的情况下非常适用。

三、数据建模

1、分类问题

分类是有监督的学习过程。

分类问题中包括以下 3 种情况:

  • 二分类。 这是分类问题里最简单的一种,因为要回答的问题只有 “是” 或“否”。比如我在处理用户 内容时,首先要做一个较大的分类判断,即一条内容是否属于旅游相关内容,这就是二分类问题, 得出的结论是这条内容要么是旅游相关,要么不是旅游相关。
  • 多分类。 在二分类的基础上,将标签可选范围扩大。要给一条内容标注它的玩法,那种类就多 了,比如冲浪、滑雪、自驾、徒步、看展等,其种类甚至多达成百上千个标签。
  • 多标签分类。 是在多分类基础上再升级的方法。对于二分类和多分类,一条内容最后的结果只有 一个,标签之间是互斥的关系。但是多标签分类下的一条数据可以被标注上多个标签。比如一个人 在游记里既可以写玩法,也可以写美食,这两者并不冲突。

由于分类问题众多,所以用来解决分类问题的算法也非常多,像 KNN 算法、决策树算法、随机森林、SVM 等都是为解决分类问题设计的。

2、聚类问题

聚类是无监督的。

既然是要划分小组,就要先看看小组之间可能存在的 4 种情况。

  • 互斥:小组和小组之间是没有交集的,也就是说一个用户只存在于一个小组中。
  • 相交:小组和小组之间有交集,那么一条数据可能既存在于 A 组,也存在于 B 组之中,如一个用 户既可以爱滑雪,也可以爱爬山。
  • 层次:一个大组还可以细分成若干个小组,比如将高消费用户继续细分,可以有累积高消费用户和 单次高消费用户。
  • 模糊:一个用户并不绝对属于某个小组,只是用概率来表示他和某个小组的关系。假设有五个小 组,那么他属于这五个小组的模糊关系就是 [0.5,0.5,0.4,0.2,0.7]。

所以,对应上面 4 种不同的小组情况,也有 4 种不同的聚类方法。

  • 第一种:基于划分的聚类,通常用于互斥的小组。 划分的方法就好像在数据之间画几条线,把数 据分成几个小组。想象你的数据散落在一个二维平面上,你要把数据划分成三个类,那么在划分完 之后,所有数据都会属于一个类别。
  • 第二种:基于密度的聚类,可以用来解决数据形状不均匀的情况。 有些数据集分布并不均匀,而 是呈现不规则的形状,而且组和组之间有一片空白区域,这个时候用划分的方法就很难处理,但是 基于密度的聚类不会受到分布形状的影响,只是根据数据的紧密程度去聚类。
  • 第三种:基于层级的聚类,适用于需要对数据细分的情况。 就像前面说的要把数据按照层次进行 分组,可以使用自顶向下的方法,使得全部数据只有一个组,然后再分裂成更小的组,直到满足你 的要求。如有从属关系,需要细分的数据,就非常适合这种方法。同样,也可以使用自底向上的方 法,最开始每一条数据都是一个组,然后把离得近的组合并起来,直到满足条件。
  • 最后一种:基于模型的聚类。 这种聚类方法首先假设我们的数据符合某种概率分布模型,比如说 高斯分布或者正态分布, 那么对于每一种类别都会有一个分布曲线,然后按照这个概率分布对数 据进行聚类,从而获得模糊聚类的关系。

3、回归问题

与分类问题十分相似,都是根据已知的数据去学习,然后为新的数据进行预测。但是不同的是,分类方 法输出的是离散的标签,回归方法输出的结果是连续值。

4、关联问题

关联问题对应的方法就是关联分析。这是一种无监督学习,它的目标是挖掘隐藏在数据中的关联模式并 加以利用。与分类和回归不同,关联分析是要在已有的数据中寻找出数据的相关关系,以期望能够使用 这些规则去提升效率和业绩。

四、评估模型

1、混淆矩阵与准确率指标

一级指标

  • 真实值是positive,模型认为是positive的数量(True Positive=TP)
  • 真实值是positive,模型认为是negative的数量(False Negative=FN):这就是统计学上的第二类错误(Type II Error)
  • 真实值是negative,模型认为是positive的数量(False Positive=FP):这就是统计学上的第一类错误(Type I Error)
  • 真实值是negative,模型认为是negative的数量(True Negative=TN)

二级指标

  • 准确率(Accuracy):是指所有预测正确的占全部样本的概率,即小猪图被预测成小猪,以及不 是小猪被预测成不是小猪的结果,与所有图片的比值,公式为 (TP+TN)/(TP+FP+FN+TN),在本案 例中为 (745+175)/(745+175+25+55)=0.92。
  • 精确率(Precision):指的是预测正确的结果占所有预测成 “是” 的概率,即 TP/(TP+FP)。精确率 按照类别来计算,比如说对于 “是小猪图” 这个类别的精确率是 745/(745+25)≈ 0.9675。
  • 召回率(Recall):按照类别来区分,某个类别结果的召回率即该类别下预测正确的结果占该类别 所有数据的概率,即 TP/(TP+FN),在本案例中 “是” 类别召回率 745/(745+55)≈0.93。
  • F 值(F Score):基于精确率和召回率的一个综合指标,是精确率和召回率的调和平均值。一般 的计算方法是 2(PrecisionRecall)/(Precision+Recall)。如果一个模型的准确率为 0,召回率 为 1,那么 F 值仍然为 0。
  • ROC 曲线和 AUC 值:这个略微有点复杂,但也是一个非常常用的指标。仍然是基于混淆矩阵,但 不同的是这个对指标进行了细化,构建了很多组混淆矩阵。

其他评估指标

除了上述的两大类指标,还可以从以下几个方面来对模型进行评估。

  • 模型速度:主要评估模型在处理数据上的开销和时间。这个主要是基于在实际生产中的考虑,由于模型 的应用在不同的平台、不同的机器会有不同的响应速度,这直接影响了模型是否可以直接上线使用,关 于更多模型速度相关的问题,我们将在下一课时模型应用中介绍。
  • 鲁棒性:主要考虑在出现错误数据或者异常数据甚至~是~数据缺失时,模型是否可以给出正确的结果, 甚至是否可以给出结果,会不会导致模型运算的崩溃。
  • 可解释性:随着机器 学习算法越来越复杂,尤其是在深度学习中,模型的可解释性越来越成为一个问 题。由于在很多场景下(比如金融风控),需要给出一个让人信服的理由,所以可解释性也是算法研究 的一大重点。

2、评估数据的处理

关于数据集的处理,重点目标在于消减评估时可能出现的随机误差。在前面准备数据的课时内容中已经 提过,这里我们再对一些方案详细介绍一下。

  • 随机抽样:即最简单的一次性处理,把数据分成训练集与测试集,使用测试集对模型进行测试,得 到各种准确率指标。
  • 随机多次抽样:在随机抽样的基础上,进行 n 次随机抽样,这样可以得到 n 组测试集,使用 n 组 测试集分别对模型进行测试,那么可以得到 n 组准确率指标,使用这 n 组的平均值作为最终结 果。
  • 交叉验证:交叉验证与随机抽样的区别是,交叉验证需要训练多个模型。譬如,k 折交叉验证,即 把原始数据分为 k 份,每次选取其中的一份作为测试集,其他的作为训练集训练一个模型,这样 会得到 k 个模型,计算这 k 个模型结果作为整体获得的准确率。
  • 自助法:自助法也借助了随机抽样和交叉验证的思想,先随机有放回地抽取样本,构建一个训练 集,对比原始样本集和该训练集,把训练集中未出现的内容整理成为测试集。重复这个过程 k次、构建出 k 组数据、训练 k 个模型,计算这 k 个模型结果作为整体获得的准确率,该方法比较 适用于样本较少的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据挖掘的基础 的相关文章

  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 使用 Python Oauthlib 通过服务帐户验证 Google API

    我不想使用适用于 Python 的 Google API 客户端库 但仍想使用 Python 访问 Google APIOauthlib https github com idan oauthlib 创建服务帐户后谷歌开发者控制台 http
  • 未知错误:Chrome 无法启动:异常退出

    当我使用 chromedriver 对 Selenium 运行测试时 出现此错误 selenium common exceptions WebDriverException Message unknown error Chrome fail
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐

  • Java 基础入门篇(一):Java 概述

    文章目录 一 Java 概述 二 Java 的产品 JDK 2 1 JDK 安装 2 2 Java与 Javac 介绍 2 3 Java 程序的开发步骤 三 Java 程序的执行原理 四 JDK 的组成 五 Java 的跨平台工作原理 一
  • Solidity transfer,call和send 的区别

    address transfer throws on failure forwards 2 300 gas stipend not adjustable safe against reentrancy should be used in m
  • SDF文件【简要说明】

    SDF Standard Delay Format 标准延时格式文件 常用延迟反标注 该文件包含了仿真用到的所有 IOPATH INTERCONNECT的延时 线延时 INTERCONNECT fsm block U27 Q fsm blo
  • 2020-10-10

    闭包和装饰器 1 高阶函数 接收函数作为参数是高阶函数 将函数作为返回值返回的函数就是高阶函数 2 匿名函数 lambda函数 无名函数 语法 lambda 参数列表 表达式 filter 函数 过滤列表 第一个参数 函数 第二个参数 序列
  • Java设计模式(十四)—— 模板方法模式

    模板方法模式是指定义一个操作中算法的骨架 而将一些步骤延迟到子类中 模板方法使子类可以不改变一个算法的结构 即可重定义该算法的某些特定步骤 适合模板方法模式的情景如下 编制一个通用算法 将某些步骤的具体实现留给子类来实现 需要重构代码 将各
  • 对Linux svn保存的明文密码加密

    需求来源 随着GitHub GitLab的兴起 svn已经渐渐的没落了 从公司当初的源代码管理服务器 逐渐演变成公司的ftp服务器 最近需要部署gitlab的CI单元测试模块 而软件版本都在svn上有备份 我就希望从代码的提交 gt 到版本
  • Python统计文本数字,字母,单词量

    统计一百万位圆周率中数字0 9各自的数量 统计一本书中字母a z各自的数量 统计一本书共有多少个单词 含重复的单词 和单词量 不含重复的单词 import string class CountNums 求txt文本中数字或字母的数量 def
  • Jvm类加载机制详解---类加载器及双亲委托模型

    前面介绍了类加载的几个过程 实际中这些过程大部分都是由虚拟机本身去执行的 我们没有办法去改变或影响这些过程的执行 但是虚拟机团队将类加载阶段第一步中的 通过一个类的全限定名来获取描述该类的二进制字节流 这个动作放到虚拟机外部去实现 以便让应
  • 使用R语言绘制ovarian数据集中病例年龄分布的直方图

    使用R语言绘制ovarian数据集中病例年龄分布的直方图 直方图是一种常用的数据可视化工具 用于展示连续变量的分布情况 在R语言中 我们可以使用hist 函数轻松地创建直方图 本文将展示如何使用R语言绘制ovarian数据集中病例年龄的分布
  • String、StringBuffer和StringBuilder三者之间的区别

    最基本的区别就是String是一个字符串常量 长度不可改变 StringBuffer和StringBuilder是字符串变量 他们两个的长度可以改变 但StringBuffer是线程安全的 而StringBuilder是非线程安全的 Str
  • ** LeetCode 刷题 459

    这是一道我没做出来的简单题 5555 学习 方法1 移动匹配 如果一个字符串可以由一个字串重复获得 那么将两个相同字符串并起来 一定可以在中间再找到该字符串 class Solution public bool repeatedSubstr
  • JavaEE-过滤器和监听器 案例分析

    目录 过滤器和监听器 什么是过滤器 过滤器编程接口 接口Filter的主要方法 设计过滤器 实例1 编写一个过滤器审计用户对资源的访问 什么是监听器 监听器编程接口 设计监听器 实例 编写一个HttpSession事件监听器用来记录当前在线
  • Python pandas读取Excel 数据写入到数据库

    需求得到天眼查的法人信息数据导入到数据库中 经过多次不断试错最后使用Python导入 先上代码 import pandas as pd import sqlalchemy as sqla import os 读取Excel数据 def ge
  • net::ERR_HTTP2_PROTOCOL_ERROR 200错误

    场景 web端的环境上某一个请求报这个问题了 其他的请求正常 打开f12控制台看到异常net ERR HTTP2 PROTOCOL ERROR 200错误 排查 查看nginx的error log 报是某一个临时文件的权限不足 原因是启动n
  • CSVDE导出AD域下指定子OU的Group中所有成员的信息

    CSVDE导出AD域下指定子OU的Group中所有成员的信息 最近搞CSVDE搞的头疼 网上各种乱七八糟的资料 都是东搞一下西搞一下 好不容易找到一篇系统性的介绍使用CSVDE来对AD进行导入导出操作的文章 具体链接 http www co
  • mybatis(六) 处理枚举类型

    处理枚举类型 若想映射枚举类型 Enum 则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用 比如说我们想存储取近似值时用到的舍入模式 默认情况下 MyBatis 会利用 EnumT
  • python数据清洗的三个常用的处理方式!

    关于python数据处理过程中三个主要的数据清洗说明 分别是缺失值 空格 重复值的数据清洗 这里还是使用pandas来获取excel或者csv的数据源来进行数据处理 若是没有pandas的非标准库需要使用pip的方式安装一下 pip ins
  • 华为OD机试真题-分班-2023年OD统一考试(B卷)

    题目描述 幼儿园两个班的小朋友在排队时混在了一起 每位小朋友都知道自己是否与前面一位小朋友是否同班 请你帮忙把同班的小朋友找出来 小朋友的编号为整数 与前一位小朋友同班用Y表示 不同班用N表示 输入描述 输入为空格分开的小朋友编号和是否同班
  • 深度网络架构的设计技巧<一>:Can CNNs Be More Robust Than Transformers?

    导读 启发于Transformer结构 作者将三种设计引入到CNN中 加强后的CNN取得比ViT更强的鲁棒性 这三种设计 实现简单 仅仅几行代码就能实现高效的CNN结构设计 ArXiv https arxiv org abs 2206 03
  • 数据挖掘的基础

    目录 数据挖掘 一 数据挖掘理解 二 数据准备 1 缺失值处理 2 异常值处理 3 数据偏差的处理 4 数据的标准化 5 特征选择 三 数据建模 1 分类问题 2 聚类问题 3 回归问题 4 关联问题 四 评估模型 1 混淆矩阵与准确率指标