
零基础5步完成AIPND NumPy迷你项目均值归一化与数据分离完整教程【免费下载链接】AIPNDCode and associated files for the AI Programming with Python Nanodegree Program项目地址: https://gitcode.com/gh_mirrors/ai/AIPNDAIPND NumPy迷你项目是 Udacity《AI Programming with Python》纳米学位课程中的经典实验项目文件位于本仓库的NumPy Mini-Project目录。这个均值归一化与数据分离教程将带你用 NumPy 完成机器学习数据预处理的两大基础任务均值归一化Mean Normalization与训练集、交叉验证集、测试集的数据分离。全程零基础可跟5 步跑通全部代码还能避开新手最常见的 3 个坑。什么是均值归一化机器学习为什么离不开它机器学习模型靠大量数据训练但很多算法要求数据处于相近的数值范围这就是特征缩放Feature Scaling。普通归一化把数据压到 0~1 之间而本实验要做的均值归一化更特殊它把数据均匀分布到 0 附近的一个小区间比如 -3~3并且保证整体均值为 0。均值归一化的核心公式非常简单Norm_Col_i (Col_i − μ_i) / σ_i其中 μ_i 是第 i 列的均值σ_i 是第 i 列的标准差。也就是说先让每列减去自己的平均值数据居中再除以标准差统一尺度。理解这个公式你就掌握了整个项目的灵魂。运行环境与项目文件准备开始前先认识一下项目里的两个核心文件练习题NumPy Mini-Project/Mean Normalization and Data Separation.ipynb留空等你填代码标准答案NumPy Mini-Project/Solution.ipynb卡住时可以对照学习环境只需要 Python Jupyter Notebook NumPy安装一条命令即可pip3 install numpy jupyter装好后打开练习笔记本就可以开始我们的 5 步实操了。第1步用 NumPy 生成模拟数据集机器学习实验不能没有数据我们用np.random.randint生成一个 1000 行 × 20 列的随机整数数组数值范围 0~5000用来模拟数值跨度很大的真实数据集import numpy as np X np.random.randint(0, 5001, size(1000, 20)) print(X.shape) # 输出 (1000, 20)shape属性返回(行数, 列数)元组这一步输出的(1000, 20)就是后面所有验证的基础。第2步计算每列均值与标准差的正确方法均值归一化需要每列的均值和标准差。关键在axis0参数——它告诉 NumPy **按列纵向**统计得到的是 20 个值组成的向量而不是一个全局数字ave_cols np.mean(X, axis0) # 每列的平均值 std_cols np.std(X, axis0) # 每列的标准差验证一下形状两个向量都应该是(20,)和 X 的 20 列一一对应。第3步利用NumPy广播一行代码完成均值归一化这是整个实验最优雅的一步。NumPy 的广播Broadcasting机制允许形状为(20,)的均值、标准差向量自动与(1000, 20)的数据逐列对齐运算所以归一化只需一行代码X_norm (X - ave_cols) / std_cols公式里的减均值、除标准差全部由 NumPy 在底层高效完成——这就是数组编程比 Python 普通循环快几个数量级的原因。第4步验证归一化结果是否达标归一化做没做对用三个数字就能检验print(X_norm.mean()) # 全体均值 ≈ -3.4e-17几乎为 0 print(X_norm.min(axis0).mean()) # 每列最小值的平均 ≈ -1.73 print(X_norm.max(axis0).mean()) # 每列最大值的平均 ≈ 1.72因为 X 是随机数生成的每次运行具体数值会略有不同但特征不变均值无限接近 0数值均匀分布在 -1.7 到 1.7 左右。看到这个结果就说明均值归一化成功了。第5步数据分离——训练集、交叉验证集、测试集的划分方法数据归一化后惯例是把数据集按60% / 20% / 20%分成三份数据集占比行数最终形状训练集 X_train60%600(600, 20)交叉验证集 X_crossVal20%200(200, 20)测试集 X_test20%200(200, 20)划分要保证随机且不重复所以先用np.random.permutation把 0~999 的行号打乱比如np.random.permutation(5)可能返回[3, 1, 4, 0, 2]再按比例切分row_indices np.random.permutation(X_norm.shape[0]) sixty int(len(X_norm) * 0.6) # 600 eighty int(len(X_norm) * 0.8) # 800 X_train X_norm[row_indices[:sixty], :] X_crossVal X_norm[row_indices[sixty:eighty], :] X_test X_norm[row_indices[eighty:], :]这种先打乱索引、再按索引取行的写法叫花式索引Fancy Indexing它保证了三个数据集互不重叠、行行不落空。新手最容易踩的3个坑忘记axis0参数不加 axisnp.mean(X)返回的是全体元素的单一均值根本没法做逐列归一化后面全部白算。直接拿row_indices当切片用⚠️X_norm[:600]取的是前 600 行原始顺序而不是随机选出的 600 行。必须写成X_norm[row_indices[:sixty], :]才是随机样本。不验证 shape划分完立刻打印X_train.shape等形状(600, 20)、(200, 20)、(200, 20)一目了然能帮你尽早发现比例算错的问题。AIPND 项目里还有什么好玩的实验这个 NumPy 迷你项目只是 AIPND 仓库的冰山一角。同一个仓库里还有 Matplotlib 可视化练习、用 Pandas 分析苹果/谷歌/亚马逊股票数据的迷你项目Pandas Mini-Project目录以及最有趣的图像分类实验——用 CNN 架构识别宠物图片的品种intropylab-classifying-images/pet_images目录下的这些图片就是它的数据集等你掌握 NumPy 数据预处理后正好可以无缝衔接到这些实战项目里把知识用起来。结语下一步学什么恭喜通过 AIPND NumPy迷你项目你不仅学会了均值归一化和数据分离两个机器学习必备技能还亲手体验了 NumPy 的广播机制、花式索引等高效数组操作。建议你合上答案在练习题笔记本里独立重写一遍代码然后去挑战仓库里的 Pandas 迷你项目用真实股票数据检验你的数据处理能力。【免费下载链接】AIPNDCode and associated files for the AI Programming with Python Nanodegree Program项目地址: https://gitcode.com/gh_mirrors/ai/AIPND创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考