贵州建设厅网站备案人员查询,开封建网站,双域名网站,筛网怎么做网站前言
这篇文章主要是在图像回归#xff08;一#xff09;的基础上对该项目进行的优化。#xff08;一#xff09;主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后…前言
这篇文章主要是在图像回归一的基础上对该项目进行的优化。一主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后者通过正则化 数据预处理
数据预处理的原因
思路链
未经过处理的原始数据存在一些问题- 对数据进行处理 涉及多种方法-提升模型性能 数据可能存在的问题 冗余信息数据中可能存在重复的特征或高度相关的特征这些信息不会为模型提供额外的价值反而会增加计算负担和过拟合的风险。 噪声数据数据中可能存在错误、异常值或随机波动这些数据点可能来源于测量失误、数据录入错误或自然噪声。 高重复度某些特征或数据点可能高度相似或重复导致模型对这些重复模式过度拟合而无法泛化到新的数据。 缺失值数据中可能存在缺失值需要通过填充或删除等方式处理。 不一致性数据可能来自不同的源格式或单位不一致需要进行标准化或归一化处理。 最终的目的 提高模型训练效率减少特征数量和数据维度降低计算复杂度。 增强模型泛化能力去除噪声和冗余信息使模型更专注于数据中的真实规律。 提升模型可解释性减少特征数量后模型更容易理解和解释。 数据预处理的方式
这里的几种方式就是对原始数据特征提取的方式不同 或者对
PCA主成分分析
核心化繁为简 直击核心
是什么
降维 用更少的维度就表现出多维数据的特征 为什么
简化数据 去除冗余 怎么做
步骤1整理数据
首先要把数据整理好让每个特征的平均值为0。这就好比把一堆杂乱的数据“摆平”让它们在一个统一的水平线上。这一步在数学上叫做“数据标准化”。
步骤2找最重要的方向
接下来PCA会找数据中最“重要”的方向。这里的“重要”是指数据变化最大的方向。想象一下你有一堆点PCA会找一条线让这些点在这条线上的投影尽可能地分散。这条线就是第一个“主成分”。
步骤3找次重要的方向
找到第一个最重要的方向后PCA会继续找第二个最重要的方向但这个方向要和第一个方向垂直也就是完全独立。这样PCA会依次找到多个方向每个方向都比前一个方向“重要”一点。
步骤4简化数据
最后PCA会把数据投影到这些最重要的方向上得到新的特征。这些新特征就是“主成分”。因为主成分的数量通常比原始特征少所以数据就被简化了。 def get_feature_importance_with_pca(feature_data, k4, columnNone):使用PCA进行特征降维并找出对前k个主成分影响最大的原始特征。参数:feature_data (pd.DataFrame or np.ndarray): 特征数据。k (int): 选择的主成分数目默认为4。column (list, optional): 特征名称列表。如果feature_data是DataFrame则可以省略此参数。返回:X_new (np.ndarray): 降维后的特征数据。selected_features (list of lists): 对每个主成分影响最大的原始特征及其载荷。# 如果提供了列名或feature_data是DataFrame获取列名if column is None and hasattr(feature_data, columns):column feature_data.columns.tolist()elif column is None:raise ValueError(Column names must be provided if feature_data is not a DataFrame.)# 数据标准化scaler StandardScaler()feature_data_scaled scaler.fit_transform(feature_data)# 应用PCApca PCA(n_componentsk)X_new pca.fit_transform(feature_data_scaled)return X_new载荷
每个数据的原始特征在主成分中的重要性。比如用苹果 梨子 香蕉做一杯混合果汁 最后得到的果汁的新特征包含上述三种水果的味道和营养 这就是一个主成分 是原始特征的线性组合
载荷指的是每种水果在果汁中的贡献比例
比如
50% 苹果 30% 橙子 20% 香蕉
这里的“50%”、“30%”和“20%”就是每种水果在果汁中的“贡献比例”在PCA中这些比例就叫做载荷。 特征选择
是什么
假设你有一个数据集数据集中有很多特征比如100个特征但并不是所有特征都对预测结果有帮助。有些特征可能是多余的或者和目标没有关系。特征选择的目的就是从这100个特征中挑选出最有用的几个特征比如5个或10个让模型只用这些重要的特征来学习。 为什么 减少计算量模型只需要处理少量的特征训练速度会更快。 提高模型性能去除无关特征后模型可以更专注于重要的特征预测效果可能会更好。
怎么办
def get_feature_importance(feature_data, label_data, k 4,column None):model SelectKBest(chi2, kk) # 定义k个特征值的卡方检验得到的特征选择模型feature_data np.array(feature_data, dtypenp.float64) # 特征值转化成浮点数 X_new model.fit_transform(feature_data, label_data) # 用这个函数选择k个最佳特征print(x_new, X_new)scores model.scores_ # scores即每一列与结果的相关性indices np.argsort(scores)[::-1] # 默认小到大排序 [::-1]表示反转一个列表或者矩阵。 最终实现大到小排序 if column: # 打印k_best_features [column[i1] for i in indices[0:k].tolist()] # 选中这些列 打印print(k best features are: , k_best_features)return X_new, indices[0:k] # 返回选中列的特征和他们的下标。
卡方检验
适用场景
①非负。卡方检验基于频率分布计算的是观测频数与期望频数之间的差异。因此它要求输入特征必须是非负的例如布尔值0或1或频率计数
②离散特征。对于连续的需要先进行离散化处理。
③简单易用 快速筛选 λ的设置
λ 过大 → 模型欠拟合训练和验证损失都很高\lambdaλ 过小 → 可能过拟合训练损失低但验证损失高\lambdaλ 适中 → 平衡拟合与泛化 正则化的影响路径
正向传播损失值预测误差 0.00075×所有权重平方和反向传播梯度原始梯度 2×0.00075×权重 → 权重会自动变小物理意义强制让模型参数趋向于较小的值抑制模型复杂度 模型训练的优化
模型复杂度的体现
在机器学习中模型复杂度通常指的是模型的参数数量和参数的大小。一个复杂的模型可能具有以下特点 参数数量多模型中有大量的参数例如深度神经网络中的权重和偏置。 参数值大模型的参数值权重可能很大这意味着模型对输入特征的响应非常敏感。
复杂模型虽然能够很好地拟合训练数据甚至可以完美拟合但往往会过拟合即在训练数据上表现很好但在新的、未见过的数据上表现不佳。这是因为复杂模型可能会学习到训练数据中的噪声和细节而不是数据的真实规律。 为什么要限制模型复杂度
限制模型复杂度的主要目的是提高模型的泛化能力即让模型在新的、未见过的数据上表现更好。具体原因包括 防止过拟合复杂模型容易过拟合因为它们可以学习到训练数据中的噪声和细节。通过限制复杂度模型更倾向于学习数据的基本规律而不是噪声。 简化模型减少模型的参数数量或参数大小可以使模型更简洁、更易于解释。这也有助于减少计算成本和训练时间。 提高稳定性限制复杂度可以减少模型对输入数据的敏感性使其在面对小的扰动时更加稳定。
如何限制模型复杂度
通过正则化项对损失函数进行约束
原始的损失函数计算 def mseLoss(pred, target, model):loss nn.MSELoss(reductionmean) # 计算loss函数regularization_loss 0 # 正则项for param in model.parameters():# regularization_loss torch.sum(abs(param)) # 参数的绝对值之和 L1正则项regularization_loss torch.sum(param ** 2) # 计算所有参数平方 L2正则项return loss(pred, target) 0.00075 * regularization_loss # 返回损失。常见的正则化方法 L1正则化Lasso 在损失函数中添加参数的绝对值之和作为惩罚项。 公式LossnewLossλ∑i∣wi∣ 作用L1正则化会促使某些参数变为零从而实现稀疏性即自动特征选择。 直观理解通过惩罚参数的绝对值强迫模型丢弃一些不重要的特征。 L2正则化Ridge 在损失函数中添加参数的平方和作为惩罚项。 公式LossnewLossλ∑iwi2 作用L2正则化会使得所有参数的值变得更小但不会变为零从而减少模型对每个特征的依赖。 直观理解通过惩罚参数的平方限制参数的大小使模型更“平滑”。 Dropout 在训练过程中随机丢弃部分神经元的输出。 作用防止神经元之间的共适应性减少模型对某些特定输入的依赖从而提高泛化能力。 Early Stopping 在训练过程中监控模型在验证集上的性能当性能不再提升时停止训练。 作用防止模型过度拟合训练数据