当前位置:首页 > 技术 > 正文内容

【数据挖掘】数据预处理和运用概念以及对鸢尾花数据集分类的分位数图和直方图的实际运用

Lotus2022-12-08 13:29技术

一.数据预处理和运用

1.1数据科学家在机器学习的工作统计

image-20221108144008588

1.2 数据清理

大部分的机器学习模型所处理的都是特征,特征通常是输入变量所对应的可用于模型的数值表示。 大部分情况下,收集得到的数据需要经过预处理后才能够为算法所使用,预处理的操作主要包括以下几个部分:

  • 数据过滤

  • 处理数据缺失

  • 处理可能的异常、错误或者异常值

  • 合并多个数据源数据

  • 数据汇总

1.3 脏数据

真实的数据中通常会出现一些数据质量问题:

  • 不完整:数据中缺少属性或者包含一些确实的值
  • 多噪音:数据包含错误的记录或者异常点
  • 不一致:数据中存在矛盾的、有差异的记录

image-20221108155729225

1.4 数据的转换

对数据进行初步的预处理后,需要将其转换为一种适合机器学习模型的表示形式,以下是一些常见的数据转化的形式。

  • 在分类问题中,将类别数据编码成为对应的数值表示(哑编码)

  • 数值数据转换为类别数据以减少变量的值(对年龄分段)

  • 其他数据

    • 从文本数据中提取有用的数据(一般使用词袋法、TF-DF或者word2vec)

    • 理图像数据(颜色空间,灰度化,几何变化,haar特征等,图像增强

  • 特征工程

    • 对特延进行归一化、标准化,以保证同一模型的不同输入变量的值域柏同

    • 特征扩充:对现有变量进行组合或转换以生成新特征,比如平均数

1.5 数据错误的不可避免性

  • 数据输入和获得过程数据错误

  • 数据集成所表现出来的错误

  • 数据传输过程所引入的错误

  • 据统计有错误的数据占总数据的5%左右

1.7 数据预处理的形式

1.数据清理

  • 补充缺失数据、平滑噪声数据、识别或删除离群点,解决不一致

2.数据集成

  • 集成多个数据库、数据立方(DataCube)或文件

3.数据变换

  • 规范化和聚集

4.数据归约

  • 简化数据、但产生同样或相似的结果

1.8度量数据的中心趋势

1.代数度量一可以通过应用一个代数函数于一个或多个分布度量计算的度量。

  • mean()、中列数
  • 中位数、众数

2.整体度量

  • 必须对整个数据集计算的度量。
  • 中位数、众数

二.基本描述数据汇总的图像表示

2.1 分位数图

1.例子使用鸢尾花数据集:事先准备引用

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target

2.采用鸢尾花的1类和2类采用特征1,并且进行排序操作

kid1 =np.sort(X[:50,0])
kid2 = np.sort(X[50:100,0])

3.使用分位数图第一个点和最后一个点的连线:

plt.scatter(kid1,kid2)
plt.plot([kid1[0],kid1[-1]],[kid2[0],kid2[-1]])

4.分位数(x轴的四分位,y轴的四分位)

plt.scatter([np.quantile(kid1,0.25),np.quantile(kid1,0.5),np.quantile(kid1,0.75)],[np.quantile(kid2,0.25),np.quantile(kid2,0.5),np.quantile(kid2,0.75)] ,color="red")
plt.show()

5.结果发现特点并不明显

image-20221108160244157

6.采用循环,观察四个图的特点:

for i in range(4):
    plt.subplot(2, 2, i + 1)
    kid1 = np.sort(X[:50, i])
    kid2 = np.sort(X[100:, i])
    plt.scatter(kid1, kid2)
    plt.plot([kid1[0], kid1[-1]], [kid2[0], kid2[-1]])  # 第一个点和最后一个点的连线
    # 分位数(x轴的四分位,y轴的四分位)
    plt.scatter([np.quantile(kid1, 0.25), np.quantile(kid1, 0.5), np.quantile(kid1, 0.75)],
                [np.quantile(kid2, 0.25), np.quantile(kid2, 0.5), np.quantile(kid2, 0.75)], color="red")
plt.show()

image-20221108160331946

排序之后的四分位图:

for i in range(4):
        x_sorted=np.sort(x[:,i])
        plt.scatter([i for i in range(x.shape[0])],x_sorted)
        plt.plot([0,x.shape[0]-1],[x_sorted[0],x_sorted[x.shape[0]-1]])
        plt.scatter([round(x.shape[0]/4),round(x.shape[0]/2),round(x.shape[0]*3/4)],
                    [np.quantile(x_sorted,0.25),np.quantile(x_sorted,0.5),np.quantile(x_sorted,0.75)],color="red")

运行效果如下:

image-20221108161045682

2.2 直方图

参数:

x: 作直方图所要用的数据,必须是一维数组;多维数组可以先进行扁平化再作图;必选参数; bins: 直方图的柱数,即要分的组数,默认为10; range:元组(tuple)或None;剔除较大和较小的离群值,给出全局范围;如果为None,则默认为(x.min(), x.max());即x轴的范围; density:布尔值。如果为true,则返回的元组的第一个参数n将为频率而非默认的频数; weights:与x形状相同的权重数组;将x中的每个元素乘以对应权重值再计数;如果normed或density取值为True,则会对权重进行归一化处理。这个参数可用于绘制已合并的数据的直方图; cumulative:布尔值;如果为True,则计算累计频数;如果normed或density取值为True,则计算累计频率; bottom:数组,标量值或None;每个柱子底部相对于y=0的位置。如果是标量值,则每个柱子相对于y=0向上/向下的偏移量相同。如果是数组,则根据数组元素取值移动对应的柱子;即直方图上下便宜距离; histtype:{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’};'bar’是传统的条形直方图;'barstacked’是堆叠的条形直方图;'step’是未填充的条形直方图,只有外边框;‘stepfilled’是有填充的直方图;当histtype取值为’step’或’stepfilled’,rwidth设置失效,即不能指定柱子之间的间隔,默认连接在一起; align:{‘left’, ‘mid’, ‘right’};‘left’:柱子的中心位于bins的左边缘;‘mid’:柱子位于bins左右边缘之间;‘right’:柱子的中心位于bins的右边缘; orientation:{‘horizontal’, ‘vertical’}:如果取值为horizontal,则条形图将以y轴为基线,水平排列;简单理解为类似bar()转换成barh(),旋转90°; rwidth:标量值或None。柱子的宽度占bins宽的比例; log:布尔值。如果取值为True,则坐标轴的刻度为对数刻度;如果log为True且x是一维数组,则计数为0的取值将被剔除,仅返回非空的(frequency, bins, patches); color:具体颜色,数组(元素为颜色)或None。 label:字符串(序列)或None;有多个数据集时,用label参数做标注区分; stacked:布尔值。如果取值为True,则输出的图为多个数据集堆叠累计的结果;如果取值为False且histtype=‘bar’或’step’,则多个数据集的柱子并排排列; normed: 是否将得到的直方图向量归一化,即显示占比,默认为0,不归一化;不推荐使用,建议改用density参数; edgecolor: 直方图边框颜色; alpha: 透明度;

返回值(用参数接收返回值,便于设置数据标签): n:直方图向量,即每个分组下的统计值,是否归一化由参数normed设定。当normed取默认值时,n即为直方图各组内元素的数量(各组频数); bins: 返回各个bin的区间范围; patches:返回每个bin里面包含的数据,是一个list。

1.直方图还是使用鸢尾花的数据集:

x=X[:50,0]
plt.hist(x,edgecolor="k")
plt.show()

2.运行结果如下

image-20221108160610086

3.使用第3特征,选取20个,效果如下:

x=X[:,2]
n,bins,_=plt.hist(x,bins=20,edgecolor="k")
plt.show()
print("bins取值范围",list(bins))
print("频数",list(n))

image-20221108160754971

可以看到,以特征3判断,可以看到分类结果非常的明显。

4.4个特征直方图对比

plt.figure(figsize=(12,12))
for i in range(4):
    plt.subplot(2,2,i+1)
    x=X[:,i]
    n,bins,_=plt.hist(x,bins=100,edgecolor="k")
    plt.xlabel(iris["feature_names"][0])
    plt.ylabel("Frequency")
plt.show()

image-20221108160840246

原文链接

扫描二维码推送至手机访问。

版权声明:本文来源于网络,仅供学习,如侵权请联系站长删除。

本文链接:https://news.layui.org.cn/post/1119.html

分享给朋友:

“【数据挖掘】数据预处理和运用概念以及对鸢尾花数据集分类的分位数图和直方图的实际运用” 的相关文章

十分钟速成DevOps实践

摘要:以华为云软件开发平台DevCloud为例,十分钟简单体验下DevOps应用上云实践——H5经典小游戏上云。 本文分享自华为云社区《​​《DevOps实践秘籍》十分钟速成DevOps实践​​》,作者:AppCloud小助手 。 DevOps是什么? DevOps是Development和Operations的组合词,简单点理解就是研发运维一体化的方法论,目的是通过自动化“软件交付”和“架构变...

JavaScript之无题之让人烦躁的模块化

  我怎么记得我好像写过相关类型的文章,但是我找遍了我的博客没有~那就再写一遍吧,其实模块化的核心内容也算不上是复杂,只不过需要整理一下,规划一下罢了。嘻嘻。   开始写标题的时候我就在纠结一件事情,就是,先吃喜欢吃的,还是后吃喜欢吃的,翻译过来就是我应该先写CommonJS和ES6 Module,还是先写CMD和AMD。嗯,我决定了,谁先做好了我就先吃谁。   其实模块化的缘由很简单,就一句话,...

【大话云原生】负载均衡篇-小饭馆客流量变大了

文章开始之前,我给大家推荐一个人工智能学习网站,首先说我之前是完全不涉及人工智能领域的,但是我尽然看懂了,以后老哥我就要参与人工智能了。如果你也想学习,点击跳转到网站 一、前言 这是《大话云原生》系列的第二篇,第一篇《煮饺子与docker、kubernetes之间的关系》推出之后受到大家的欢迎,很多朋友联系到我给我加油打气,感谢!我会继续写下去! 书接上回介绍了《煮饺子与docker、kubern...

一个故事看懂CPU的SIMD技术

好久不见,我叫阿Q,是CPU一号车间的员工。我所在的CPU有8个车间,也就是8个核心,咱们每个核心都可以同时执行两个线程,就是8核16线程,那速度杠杠滴。 我所在的一号车间,除了负责执行指令的我,还有负责读取指令的小A,负责指令译码的小胖和负责结果回写的老K,我们几个各司其职,一起完成执行程序的工作。 一个简单的循环 那天,我们遇到了一段代码: void array_add(int data[]...

从 C# 崩溃异常 中研究页堆布局

一:背景 1.讲故事 最近遇到一位朋友的程序崩溃,发现崩溃点在富编辑器 msftedit 上,这个不是重点,重点在于发现他已经开启了 页堆 ,看样子是做了最后的挣扎。 0:000> !analyze -v EXCEPTION_RECORD: (.exr -1) ExceptionAddress: 82779a9e (msftedit!CCallMgrCenter::SendAllNoti...

Ruoyi字典源码学习

此文章属于ruoyi项目实战系列 使用目的 什么是字典数据:具体的值(0,1,"Y","N"),对应具体的业务逻辑("男","女","是","否")。 字典数据不应该只写死在代码中,还应存入数据库,通过管理系统来增删改查。 源码分析 ruoyi项目在低于3.7.0的版本中,前端字典功能实现比较简单,每个index.vue页面都请求dict的api,获取数据再加工显示即可。3.7.0之后的版本使...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。