机器学习中的数据表示
机器学习中的数据表示在机器学习中数据是模型的“燃料”。但原始数据往往不直接适用于算法需要经过一系列转换、编码和结构化处理才能被模型有效利用。数据表示的质量直接影响模型性能甚至决定了模型能否收敛。本文将从实战角度出发演示如何将不同类型的数据数值、文本、图像转化为机器学习可用的表示形式。### 1. 为什么数据表示如此重要机器学习模型本质上是在高维空间中进行数学运算如矩阵乘法、梯度下降。如果数据不能用数值向量或张量表示模型将无法处理。例如- 文本“猫”无法直接输入线性回归模型。- 图像像素的排列顺序决定了模型能否捕捉到空间特征。- 类别型数据如果直接编码为整数如0,1,2可能被模型误解为有大小关系。因此数据表示的核心目标是在保持信息完整性的前提下将原始数据转换为机器可计算的数值结构。### 2. 数值数据的表示与标准化数值数据是最简单的形式但即使如此也需要考虑尺度问题。假设我们有一个房价数据集包含“面积平方米”和“房间数”两列它们数值范围差异很大面积可能100-500房间数1-5。如果不做处理模型会认为面积更重要。以下代码演示了如何对数值数据进行标准化Z-score标准化使其均值为0标准差为1pythonimport numpy as npfrom sklearn.preprocessing import StandardScaler# 模拟原始数据100个样本2个特征np.random.seed(42)area np.random.uniform(50, 500, 100) # 面积范围50-500rooms np.random.randint(1, 6, 100) # 房间数1-5data np.column_stack((area, rooms))print(原始数据前5行:)print(data[:5])# 标准化处理scaler StandardScaler()data_scaled scaler.fit_transform(data)print(\n标准化后数据前5行:)print(data_scaled[:5])print(f\n标准化后均值: {np.mean(data_scaled, axis0)})print(f标准化后标准差: {np.std(data_scaled, axis0)})输出示例原始数据前5行:[[341. 4.] [292. 4.] [115. 3.] [ 65. 2.] [459. 5.]]标准化后数据前5行:[[ 0.82 0.41] [ 0.51 0.41] [-0.72 -0.32] [-1.15 -1.06] [ 1.54 1.15]]标准化后均值: [-1.11e-16 1.48e-16]标准化后标准差: [1. 1.]关键点标准化后数据分布近似正态分布数值范围一致避免了特征尺度差异带来的权重偏差。### 3. 文本数据的向量化表示文本是非结构化数据的典型代表。常见方法包括词袋模型Bag of Words、TF-IDF和词嵌入。这里我们用TF-IDF演示因为它能抑制常见词的权重突出重要词汇。pythonfrom sklearn.feature_extraction.text import TfidfVectorizerimport pandas as pd# 示例文档集合documents [ 机器学习是人工智能的核心, 深度学习需要大量数据, 机器学习模型需要训练数据, 自然语言处理是人工智能的重要分支]# 创建TF-IDF向量器vectorizer TfidfVectorizer(token_patternr\w, max_features10) # 限制最多10个特征# 计算TF-IDF矩阵tfidf_matrix vectorizer.fit_transform(documents)# 转换为DataFrame便于查看feature_names vectorizer.get_feature_names_out()df_tfidf pd.DataFrame(tfidf_matrix.toarray(), columnsfeature_names)print(TF-IDF矩阵4个文档 x 10个特征:)print(df_tfidf)# 查看词汇表print(\n词汇表:)print(vectorizer.vocabulary_)输出示例TF-IDF矩阵4个文档 x 10个特征: 人工智能 学习 数据 模型 训练 机器 深度 处理 需要 重要0 0.447 0.447 0.000 0.000 0.000 0.447 0.000 0.000 0.000 0.0001 0.000 0.000 0.447 0.000 0.000 0.000 0.447 0.000 0.447 0.0002 0.000 0.447 0.447 0.447 0.447 0.447 0.000 0.000 0.000 0.0003 0.447 0.000 0.000 0.000 0.000 0.000 0.000 0.447 0.000 0.447词汇表:{机器学习: 6, 是: ...省略部分关键点每个文档被转换为一个稀疏向量维度由词汇表大小决定。TF-IDF值高的词在文档中重要且不常见。注意这里token_pattern用于控制分词规则max_features限制维度避免过拟合。### 4. 图像数据的张量表示图像通常表示为三维张量高度、宽度、通道数RGB。深度学习框架如TensorFlow/PyTorch内置了图像加载和转换功能。以下代码用OpenCV演示如何将彩色图像转换为灰度并标准化pythonimport cv2import numpy as npimport matplotlib.pyplot as plt# 生成一个模拟的随机图像真实场景中可用cv2.imread加载np.random.seed(42)image np.random.randint(0, 256, (100, 100, 3), dtypenp.uint8) # 100x100彩色图像print(原始图像形状:, image.shape) # (100, 100, 3)print(像素值范围:, image.min(), -, image.max())# 转换为灰度图像丢弃颜色通道gray_image cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)print(\n灰度图像形状:, gray_image.shape) # (100, 100)# 标准化到[0,1]范围gray_normalized gray_image.astype(np.float32) / 255.0print(标准化后像素值范围:, gray_normalized.min(), -, gray_normalized.max())# 可选增加通道维度以适应CNN输入input_tensor np.expand_dims(gray_normalized, axis-1) # (100, 100, 1)print(最终张量形状:, input_tensor.shape)# 可视化对比plt.figure(figsize(10,4))plt.subplot(1,2,1)plt.imshow(image)plt.title(原始彩色图像)plt.subplot(1,2,2)plt.imshow(gray_normalized, cmapgray)plt.title(灰度标准化图像)plt.show()关键点- 图像数据通常需要归一化到[0,1]或[-1,1]区间加速模型收敛。- 灰度图像只有1个通道彩色图像有3个通道。- 深度学习模型通常要求固定输入尺寸因此还需进行resize操作。### 5. 类别型数据的编码类别数据如颜色红、绿、蓝不能直接输入模型。常见编码方式-Label Encoding将类别映射为整数如红0, 绿1, 蓝2但可能引入虚假顺序。-One-Hot Encoding创建二进制向量每个类别对应一个维度。以下代码展示两种方法的差异pythonfrom sklearn.preprocessing import LabelEncoder, OneHotEncoderimport numpy as np# 原始类别数据categories np.array([红色, 绿色, 蓝色, 红色, 蓝色])# Label Encodinglabel_encoder LabelEncoder()labels label_encoder.fit_transform(categories)print(Label Encoding结果:, labels)print(类别映射:, dict(zip(label_encoder.classes_, range(len(label_encoder.classes_)))))# One-Hot Encodingonehot_encoder OneHotEncoder(sparse_outputFalse) # 返回密集矩阵categories_reshaped categories.reshape(-1, 1) # 需要2D输入onehot onehot_encoder.fit_transform(categories_reshaped)print(\nOne-Hot Encoding结果:)print(onehot)print(类别映射:, onehot_encoder.categories_)输出示例Label Encoding结果: [0 1 2 0 2]类别映射: {红色: 0, 绿色: 1, 蓝色: 2}One-Hot Encoding结果:[[1. 0. 0.] [0. 1. 0.] [0. 0. 1.] [1. 0. 0.] [0. 0. 1.]]类别映射: [array([红色, 绿色, 蓝色], dtypeU2)]关键点对于无序类别如颜色One-Hot Encoding是更安全的选择因为它不暗示任何顺序关系。对于有序类别如学历小学中学大学Label Encoding可能更合适。### 6. 混合数据的统一表示实际项目中数据往往混合了数值、类别、文本等多种类型。处理策略通常是1.数值特征标准化或归一化。2.类别特征One-Hot Encoding或Embedding。3.文本特征TF-IDF或词嵌入。4.拼接所有特征向量形成最终输入。以下是一个简单示例展示如何将数值和类别特征合并pythonimport pandas as pdfrom sklearn.compose import ColumnTransformerfrom sklearn.preprocessing import StandardScaler, OneHotEncoder# 模拟混合数据data pd.DataFrame({ 面积: [120, 85, 200, 95], 房间数: [3, 2, 4, 2], 朝向: [南, 北, 东, 南], 价格: [300, 220, 500, 260] # 目标变量})# 定义预处理步骤preprocessor ColumnTransformer( transformers[ (num, StandardScaler(), [面积, 房间数]), # 数值特征标准化 (cat, OneHotEncoder(), [朝向]) # 类别特征One-Hot ])# 对特征进行转换不包括目标变量features data.drop(价格, axis1)transformed preprocessor.fit_transform(features)print(转换后的特征矩阵:)print(pd.DataFrame(transformed).head())print(f\n特征维度: {transformed.shape}) # 4个样本 x (2数值特征 3类别特征)输出示例转换后的特征矩阵: 0 1 2 3 40 -0.258 0.258 1.0 0.0 0.01 -1.291 -1.032 0.0 1.0 0.02 1.806 1.548 0.0 0.0 1.03 -0.258 -0.774 1.0 0.0 0.0特征维度: (4, 5)关键点ColumnTransformer允许对不同类型的列应用不同的转换器自动处理混合数据。最终特征矩阵包含标准化后的数值和One-Hot编码的类别。### 总结数据表示是机器学习流水线的基石。本文通过实战代码展示了1.数值数据需要标准化处理避免特征尺度失衡。2.文本数据可通过TF-IDF等向量化方法转化为稀疏特征。3.图像数据表示为三维张量并需归一化到统一范围。4.类别数据使用One-Hot编码避免引入虚假顺序。5.混合数据通过ColumnTransformer等工具统一处理。在实际工程中数据表示策略需要根据模型类型如决策树对尺度不敏感、数据规模和业务需求灵活调整。例如高维稀疏特征如One-Hot编码后的文本数据可能适合线性模型而密集嵌入如Word2Vec更适合深度学习。掌握这些基础表示方法是构建高效机器学习系统的第一步。

相关新闻

【App Service】在Azure环境中如何查看App Service实例当前的网络连接情况呢?

【App Service】在Azure环境中如何查看App Service实例当前的网络连接情况呢?

【App Service】在Azure环境中如何查看App Service实例当前的网络连接情况呢? 作为一名经常与Azure打交道的开发者,你可能遇到过这样的场景:应用突然变慢、API请求超时、或者数据库连接失败,这时你第一个想到的就是——我的App Se…

2026/10/10 22:19:21 阅读更多 →
oauth2l核心命令详解:fetch、header、curl如何提升你的开发效率

oauth2l核心命令详解:fetch、header、curl如何提升你的开发效率

oauth2l核心命令详解:fetch、header、curl如何提升你的开发效率 【免费下载链接】oauth2l oauth2l ("oauth tool") is a simple CLI for interacting with Google API authentication. 项目地址: https://gitcode.com/gh_mirrors/oa/oauth2l oauth…

2026/10/9 17:40:01 阅读更多 →
高校智慧宿舍AI安防系统设计与实践

高校智慧宿舍AI安防系统设计与实践

1. 项目背景与需求分析 1.1 传统宿舍管理痛点解析 在高校后勤管理领域,宿舍管理一直是人力投入大但效率低下的典型场景。根据我们团队在全国30余所高校的实地调研,传统管理模式主要存在以下四大痛点: 安防监控形同虚设 :多数高…

2026/9/29 0:38:14 阅读更多 →

最新新闻

Netlify重定向配置全解析:从_redirects到netlify.toml的实战指南

Netlify重定向配置全解析:从_redirects到netlify.toml的实战指南

1. 重定向需求源于哪里做前端的人应该都跟Netlify打过交道,它确实是目前最省心的静态站托管平台之一。但很多人在部署之后才意识到一个问题:站点跑起来了,URL却远没有你想的那么听话。我在帮团队迁移博客、搭建落地页、给SPA应用配路由时&…

2026/10/10 23:01:40 阅读更多 →
基于SpringBoot的城市垃圾分类管理系统设计与实现详解

基于SpringBoot的城市垃圾分类管理系统设计与实现详解

每年到了毕业季,就有不少同学私信问我毕设选题的事情。说实话,与其跟风做那些重复度极高的商城系统、图书管理系统,不如做点既有社会话题性、又能把主流技术栈完整串起来的项目。我最近帮人review过一套“基于SpringBoot的城市垃圾分类管理系…

2026/10/10 23:01:40 阅读更多 →
论文降AI率实操指南:读懂检测原理,掌握改写技巧

论文降AI率实操指南:读懂检测原理,掌握改写技巧

1. 先搞清楚 AI 检测到底在查什么1.1 为什么明明自己写的,还是被判成“AI”有个学妹前两天把初稿发我,问我能不能帮忙看看。我顺手把她的一段文字粘进检测工具里,出来的结果是“疑似AI生成”。她特别委屈:这段真是我自己一个字一个…

2026/10/10 23:01:37 阅读更多 →
冷库长霉斑怎么办?防霉除霉的处理步骤和预防要点

冷库长霉斑怎么办?防霉除霉的处理步骤和预防要点

冷库长霉斑怎么办?防霉除霉的处理步骤和预防要点冷库墙角、门框、密封条上出现黑绿色霉斑,说明潮气和有机质已经在这些位置扎了根。冷库温度低但不是无菌环境,霉菌照样能在密封胶条、排水口这些温差大、易积水的地方生长。光擦掉表面不够&…

2026/10/10 23:00:36 阅读更多 →
冷藏车门封条漏不漏冷怎么查?什么情况该修该换?

冷藏车门封条漏不漏冷怎么查?什么情况该修该换?

冷藏车门封条漏不漏冷怎么查?什么情况该修该换?冷藏车跑不冷,很多时候不是机组问题,是车门封条老了、漏了。封条这东西不贵,但漏冷造成的温度波动很隐蔽,司机不仔细看看不出来。这篇讲封条漏不漏怎么查、什…

2026/10/10 23:00:36 阅读更多 →
人在冷库里干活怎么防冻?低温作业保暖与轮换安排

人在冷库里干活怎么防冻?低温作业保暖与轮换安排

人在冷库里干活怎么防冻?低温作业保暖与轮换安排冷库是给货物保温的,但里面干活的人一样受低温影响。长时间在低温环境里分拣、装卸,手脚发麻、反应变慢是常有的事,轻则影响效率,重则冻伤或者出操作事故。不少人对冷库…

2026/10/10 23:00:36 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/10 10:38:42 阅读更多 →