news 2026/11/3 9:22:35

【机器学习【6】】数据理解:数据导入、数据审查与数据可视化方法论

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【机器学习【6】】数据理解:数据导入、数据审查与数据可视化方法论

文章目录

  • 一、机器学习数据导入
    • 1、 Pandas:机器学习数据导入的最佳选择
    • 2、与其他方法的差异
  • 二、机器学习数据理解的系统化方法论
    • 1、数据审查方法论:六维数据画像技术
      • 维度1:数据结构审查
      • 维度2:数据质量检查
      • 维度3:目标变量分析
      • 维度4:特征关联分析
      • 维度5:数据分布特征
      • 维度6:数据完整性
    • 2、从数据观察到算法选择的逻辑链条
      • 1、数据特征→算法匹配
      • 2、决策示例
  • 三、数据可视化驱动的机器学习决策
    • 1、五维可视化分析
      • 维度1:直方图:分布形态分析 - "数据长什么样?
      • 维度2:箱线图:分布细节分析 - "异常值在哪里?"
      • 维度3:密度图:连续性分析 - "数据如何变化?"
      • 维度4:热力图:关联强度分析 - "特征间如何影响?"
      • 维度5:关系模式分析 - "特征间如何交互?"
    • 2、"观察-提问-决策"闭环系统
      • 1、示例说明
      • 2、可视化驱动的工作流

一、机器学习数据导入

1、 Pandas:机器学习数据导入的最佳选择

Pandas DataFrame的数据结构优势

Pandas之所以成为机器学习数据导入的首选,核心在于其DataFrame数据结构。DataFrame不仅是一个二维表格,更是一个为数据科学量身定制的数据容器:

  • 列式存储:每列可以是不同数据类型,完美适配机器学习特征的多样性
  • 索引系统:内置行列索引,支持快速数据定位和切片
  • 内存优化:自动类型推断和内存管理,避免不必要的内存浪费

2、与其他方法的差异

让我们通过实际代码来对比三种方法的差异:

方法1:Python标准库 - 手动处理每个细节

fromcsvimportreaderimportnumpyasnp filename='pima_data.csv'withopen(filename,'rt')asraw_data:readers=reader(raw_data,delimiter=',')x=list(readers)data=np.array(x).astype('float')# 手动类型转换print(data.shape)

方法2:NumPy - 适合纯数值数据

fromnumpyimportloadtxt filename='pima_data.csv'withopen(filename,'rt')asraw_data:data=loadtxt(raw_data,delimiter=',')print(data.shape)

方法3:Pandas - 一行代码完成复杂任务

frompandasimportread_csv filename='pima_data.csv'names=['preg','plas','pres','skin','test','mass','pedi','age','class']data=read_csv(filename,names=names)print(data.shape)


核心差异分析:

Pandas的优势不仅在于语法简洁,更重要的是它在背后自动处理了复杂逻辑:

  1. 自动类型推断:无需手动指定数据类型,智能识别数字、文本、日期
  2. 缺失值处理:自动将空值转换为NaN,统一处理逻辑
  3. 列名管理:支持自定义列名,便于后续数据操作
  4. 内存优化:大文件时采用懒加载策略,避免内存溢出

而标准库和NumPy都需要手动处理这些细节,导致代码复杂度呈指数级增长。


选择推荐

场景推荐方案原因
机器学习项目Pandas生态完整,与scikit-learn无缝集成
大规模数值计算NumPy + Pandas结合NumPy的计算性能和Pandas的易用性
简单数据处理标准库无外部依赖,适合轻量级场景

二、机器学习数据理解的系统化方法论

数据理解的本质不是简单的数据浏览,而是通过系统化的观察和分析,发现数据中隐藏的模式、问题和机会,从而指导后续的特征工程和算法选择。

一个经典的失败案例:某团队花费3个月训练复杂的深度学习模型,准确率始终无法提升。最后发现问题出在数据上—目标变量分布极不均衡(99%为负例),而他们从未做过类别分布分析。

1、数据审查方法论:六维数据画像技术

一个完整的数据画像需要从六个维度进行审查:

维度1:数据结构审查

frompandasimportread_csv filename='pima_data.csv'names=['preg','plas','pres','skin','test','mass','pedi','age','class']data=read_csv(filename,names=names)# 查看数据规模和结构print(data.shape)print(data.dtypes)

关键问题:数据规模是否足够?特征类型是否合理?

维度2:数据质量检查

# 查看前10行,发现数据模式print(data.head(10))# 描述性统计,发现异常值print(data.describe())

说明了数据集中各数值型特征的分布情况,包括均值、极值、分布范围等。通过这些统计量,可以初步发现数据中的异常值(比如最大值或最小值远离均值,或者四分位数间距很大等)。

关键问题:是否存在缺失值?数值范围是否合理?

维度3:目标变量分析

# 类别分布分析print(data.groupby('class').size())
  • 分析数据集中class这一列的类别分布情况,即每个类别有多少条数据。
  • 常用于分类问题的数据探索阶段,帮助了解各类别样本是否均衡。

关键问题:类别是否均衡?是否需要重采样?

维度4:特征关联分析

frompandasimportset_option set_option('display.width',100)set_option('display.precision',2)print(data.corr(method='pearson'))

  • 计算了皮尔逊相关系数矩阵。皮尔逊相关系数反映了两个变量之间的线性相关程度,取值范围为 [-1, 1],1 表示完全正相关,-1 表示完全负相关,0 表示无线性相关。
  • 即数据集中各数值型特征之间的相关性矩阵,方便你分析变量之间的关系。

关键问题:哪些特征与目标变量强相关?是否存在多重(ing)共线性?

维度5:数据分布特征

# 计算偏态系数print(data.skew())

偏态系数衡量的是数据分布的对称性。
偏态系数 = 0,表示分布完全对称(如正态分布)。
偏态系数 >0,表示分布右偏(长尾在右边,数据集中在左边)。
偏态系数 < 0,表示分布左偏(长尾在左边,数据集中在右边)。

通过查看偏态系数,可以判断数据是否偏离正态分布。偏态较大的特征,可能需要做对数变换、Box-Cox变换等预处理,以便更好地建模。

关键问题:数据分布是否符合算法假设?是否需要变换?

维度6:数据完整性

# 检查缺失值print(data.isnull().sum())

这六个维度的检查顺序遵循了从宏观到微观,从结构到内容的认知规律:

  • 结构审查建立整体的数据认知
  • 质量检查发现数据可靠性问题
  • 目标分析明确建模难度和策略
  • 关联分析揭示特征工程方向
  • 分布分析指导算法选择
  • 完整性检查确定数据清洗优先级

2、从数据观察到算法选择的逻辑链条

1、数据特征→算法匹配

通过系统化的数据理解,我们可以建立数据特征到算法选择的映射关系:

数据特征算法选择原因
数值型+线性关系线性回归、岭回归符合线性假设,计算效率高
高维稀疏数据逻辑回归、SVM处理高维特征能力强
类别不均衡随机森林+重采样对不均衡数据鲁棒性好
非线性关系复杂梯度提升树、神经网络强大的非线性拟合能力

2、决策示例

假设通过数据理解发现:

目标变量类别比例为7:3(轻度不均衡)、特征间存在中等程度相关性(0.3-0.6)、部分特征呈现右偏分布。

决策逻辑:

  1. 类别不均衡程度中等 → 可以使用类别权重平衡,无需重采样
  2. 特征相关性适中 → 可以保留所有特征,无需降维
  3. 数据右偏 → 建议使用基于树的算法(对分布不敏感)

推荐算法:随机森林 + 类别权重调整

三、数据可视化驱动的机器学习决策

可视化的核心价值:它能够揭示统计数字背后的数据结构、异常模式和潜在关系,让我们在建模之前就能洞察数据的本质特征。

一个典型的例子:某数据科学家通过describe()发现某特征均值为50,看似正常。但通过箱线图可视化后发现,数据呈现双峰分布,实际上是两个不同群体的混合,这直接影响了后续的特征工程策略。

1、五维可视化分析

下面将从分布、异常、连续性、关联、交互五个维度进行系统化分析

维度1:直方图:分布形态分析 - "数据长什么样?

frompandasimportread_csvimportmatplotlib.pyplotasplt filename='pima_data.csv'names=['preg','plas','pres','skin','test','mass','pedi','age','class']data=read_csv(filename,names=names)# 直方图 - 揭示频率分布data.hist()plt.show()


代码为数据集中的每个数值型特征绘制直方图,直观展示其取值分布和频率,帮助你了解数据的整体分布特征。

核心洞察:直方图能够识别数据的分布类型(正态、偏态、双峰),这直接影响算法选择。

维度2:箱线图:分布细节分析 - “异常值在哪里?”

# 箱线图 - 识别异常值和四分位数data.plot(kind='box',subplots=True,layout=(3,3),sharex=False)plt.show()

箱线图(Boxplot)是一种常用的统计图表,用于展示数据的分布特征、中心位置、离散程度以及异常值。

箱线图的结构

  • 箱体(Box):表示数据的中间50%(从第1四分位数Q1到第3四分位数Q3)。
  • 中位线(Median):箱体中间的绿线,表示数据的中位数(第2四分位数Q2)。
  • “胡须”(Whiskers):从箱体延伸出去的线,通常延伸到1.5倍四分位距(IQR)以内的数据。(IQR=Q3-Q1,四分位距 ing)。
  • 异常值(Outliers):超出“胡须”范围的点,单独以小圆点等方式标出。

具体分析

一、preg, plas, pres, skin, test, mass, pedi, age 字段数据

  1. 这些特征的箱线图都显示了不同程度的异常值(上方或下方的圆点),说明这些特征中有一些数据点远离主流分布,可能是极端值或录入错误。
  2. 箱体高度:箱体越高,说明该特征的中间50%数据分布越分散;越矮则越集中。 中位线位置:如果中位线偏向箱体上方或下方,说明数据分布有偏态。

二、class 字段数据
这个特征的箱线图显示为0和1的分布(因为是分类变量),没有异常值,箱体覆盖了0和1两个取值。

三、结论

  1. 异常值:如test、skin、pedi等特征有较多异常值(上方或下方的圆点)。
  2. 分布偏态:如preg、pedi等特征的中位线偏下,说明数据右偏。
  3. 数据分布:大部分特征的箱体都比较靠近下方,说明数据集中在较小的取值区间,少数点取值很大。

通过这些箱线图,你可以快速发现哪些特征有异常值、分布是否偏态、数据是否集中等,为后续的数据清洗和建模提供依据。

维度3:密度图:连续性分析 - “数据如何变化?”

# 密度图 - 显示连续分布特征data.plot(kind='density',subplots=True,layout=(3,3),sharex=False)plt.show()


密度图能说明什么?

  1. 数据的分布形态:可以直观地看到数据是单峰(一个高峰)、多峰(多个高峰)、偏态(左偏/右偏)还是近似正态分布。 比直方图更平滑,能更好地反映数据的真实分布趋势。
  2. 数据的集中趋势和离散程度:峰值高且窄,说明数据集中在某个区间。 峰值低且宽,说明数据分布较分散。
  3. 是否有异常分布或多重分布:如果密度图有多个峰,说明数据可能由多个不同的子群体组成(多模态分布)。 可以辅助发现异常值(极端的孤立小峰)。
  4. 数据的偏态情况:峰值偏左,右侧尾巴长,说明右偏(正偏态)。 峰值偏右,左侧尾巴长,说明左偏(负偏态)。

核心洞察:密度图能够发现数据的平滑分布模式,识别潜在的数据生成机制。

维度4:热力图:关联强度分析 - “特征间如何影响?”

importnumpyasnp# 相关性热力图 - 显示特征间关联强度correlations=data.corr()fig=plt.figure()ax=fig.add_subplot(111)cax=ax.matshow(correlations,vmin=-1,vmax=1)fig.colorbar(cax)ticks=np.arange(0,9,1)ax.set_xticks(ticks)ax.set_yticks(ticks)ax.set_xticklabels(names)ax.set_yticklabels(names)plt.show()

热力图是一种用颜色深浅来表示数值大小的可视化方式。在相关性热力图中,每个格子代表两个特征之间的相关系数(correlation coefficient),颜色越接近黄色,相关性越强(正相关);颜色越接近深蓝色,相关性越弱或为负相关。

热力图的作用

  • 发现强相关特征:如果两个特征高度相关,可能存在冗余,可以考虑去除其中一个,避免多重共线性。
  • 发现无关特征:相关系数接近0的特征对彼此影响小,适合独立建模。
  • 辅助特征工程:根据相关性调整特征选择、降维等策略。

图中的对角线都是黄色(相关系数为1)。其他格子的颜色大多为绿色或青色,说明大部分特征之间的线性相关性不强。如果有某两个特征之间的格子颜色明显偏黄或偏蓝,说明它们之间有较强的正相关或负相关关系。

维度5:关系模式分析 - “特征间如何交互?”

frompandas.plottingimportscatter_matrix# 散点图矩阵 - 显示特征间非线性关系scatter_matrix(data)plt.show()
  1. 什么是散点矩阵图?
    散点矩阵图会将数据集中的每一对数值型特征都画成一个散点图,排列成一个矩阵。 对角线上的图通常是每个特征的直方图(显示该特征的分布)。 非对角线上的每个小图,表示两个特征之间的散点分布关系。
  2. 散点矩阵图能看出什么?
    • 特征之间的关系:可以直观地看到任意两列特征之间的关系(线性、非线性、无关等)。
      a. 如果两个特征之间的点分布成一条直线,说明它们高度线性相关。
      b. 如果点分布成某种曲线,说明它们有非线性关系。
      c. 如果点分布很分散,没有明显形状,说明它们之间没有明显关系。
    • 异常值: 可以发现某些特征组合下的极端点(离群点)。
    • 分布特征:对角线上的直方图显示每个特征的分布形态(如正态分布、偏态、多峰等)。
    • 多重共线性:如果某两列的散点图呈现出很强的线性关系,说明这两个特征可能存在多重共线性。

散点图矩阵能够全面、直观地展示数据集中各特征之间的两两关系和各自分布。
帮助你发现特征间的相关性、异常值、分布形态等,为后续的数据预处理和特征工程提供依据。

2、"观察-提问-决策"闭环系统

可视化分析的核心不是看图,而是建立从观察到决策的逻辑链条:

第一步:结构化观察

  • 分布形态:是否符合正态分布?
  • 异常值:异常值比例和位置?
  • 关联性:哪些特征强相关?

第二步:关键问题提炼

  • 数据质量:异常值是噪声还是有价值的信号?
  • 特征工程:是否需要变换或组合特征?
  • 算法选择:数据特征适合哪类算法?

第三步:决策规则制定

观察结果提问决策行动
数据严重偏态是否需要变换?应用对数变换或Box-Cox变换
存在强相关特征是否存在冗余?考虑降维或特征选择
发现异常值聚集是否为特殊群体?分层建模或异常检测
非线性关系明显线性模型是否适用?选择基于树或核方法的算法

1、示例说明

假设通过五维可视化发现:

  • 直方图显示:目标变量呈现双峰分布;
  • 箱线图显示:某特征存在大量异常值;
  • 相关性图显示:两个特征高度相关(r>0.8);
  • 散点图显示:特征与目标存在明显非线性关系。

决策逻辑:

  1. 双峰分布 → 可能存在隐含的数据子群 → 考虑聚类或分层建模
  2. 大量异常值 → 需要异常值处理策略 → 使用鲁棒性强的算法
  3. 高度相关特征 → 存在多重共线性 → 进行特征选择或正则化
  4. 非线性关系 → 线性模型不适用 → 选择随机森林或XGBoost

最终决策:使用随机森林算法 + 特征选择 + 异常值处理的组合策略

2、可视化驱动的工作流

数据导入

五维可视化

数据决策

针对性建模

高效优化

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 9:20:10

【分布式理论13】分布式存储:数据存储难题与解决之道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/3 9:18:30

探索 ZED 双目 3D 相机发展:ZED 2i 的创新功能扩展之路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/3 9:17:16

【高等数学】系统知识点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/3 9:16:21

PP-LCNet_x1_0_textline_ori_onnx部署实战:从ONNX模型到生产环境的完整流程

PP-LCNet_x1_0_textline_ori_onnx部署实战&#xff1a;从ONNX模型到生产环境的完整流程 飞桨PaddlePaddle的PP-LCNet_x1_0_textline_ori_onnx是一个专门用于文本行方向检测的轻量级ONNX模型&#xff0c;能够高效识别文本图像是0度还是180度方向。这个ONNX模型部署方案为开发者…

作者头像 李华
网站建设 2026/11/3 9:13:51

【人工智能基础一】深度学习基础

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华