欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 数学建模-数据预处理(数据清洗、标准化)

数学建模-数据预处理(数据清洗、标准化)

2025/9/20 10:50:59 来源:https://blog.csdn.net/AuRoRamth/article/details/140906480  浏览:    关键词:数学建模-数据预处理(数据清洗、标准化)

在数学建模的比赛中,数据分析类的题目中往往我们要面对大量的数据,在给出的数据中,如果数据缺失会影响到判断和后序的操作

这里我们给出一个数据预处理的办法:数据清洗(Data Clearning):涉及到检测和纠正数据中的错误、不完整、不准确或不适用的部分,以确保数据质量和可靠性。数据清洗的主要目标是使数据集合适合于后续分析和建模工作。

原理:

  • 数据适应性:将数据调整为适合分析和建模的形式。这包括数据类型的转换、格式的统一、数据集成等操作,以确保数据能够被正确理解和使用。

  • 数据完整性:确保数据集中没有缺失重要信息的记录。处理缺失值是数据清洗中重要的一部分,可以通过填充、删除或者推断等方法来处理缺失数据,以确保分析和建模的准确性。

 

在数据清洗的过程中你可以自己判断需不需要标准化

进行数据标准化是数据预处理中的一项重要步骤,其主要目的是消除不同特征之间由于量纲不同而导致的数据差异,使得数据更加可比较和可解释。以下是进行数据标准化的主要原因:

  1. 消除量纲影响:不同特征可能由于其量纲不同(如单位、量级等)而导致数据值范围差异很大。这种差异会影响到某些基于距离或相似度计算的算法,例如K近邻算法和支持向量机等。通过标准化,可以将不同特征的值都缩放到相似的范围内,避免某些特征对距离计算的影响过大。

  2. 提高模型收敛速度和性能:在使用基于梯度的优化算法(如梯度下降法)训练模型时,特征的值范围如果差异很大,可能会导致优化过程变得缓慢,甚至难以收敛。通过标准化,可以加快优化算法的收敛速度,提高模型训练的效率和性能。

  3. 增强特征的可解释性:标准化后,所有特征都具有相似的尺度和分布,这使得特征的权重更容易解释。在某些模型(如线性回归)中,特征的权重直接反映了其对输出的影响程度,标准化可以确保权重的解释更为准确和可靠。

  4. 改善数据分布的对称性:某些机器学习模型(如逻辑回归、支持向量机等)要求特征服从某种特定的分布,例如服从正态分布。标准化可以使得数据更接近正态分布,有助于提升模型的表现。

  5. 增强模型的稳定性:标准化可以减少数据中的噪声和异常值对模型的影响,提升模型的稳定性和泛化能力。

py代码模板:

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from multiprocessing import Pool, cpu_count  # 多进程处理
from sklearn.preprocessing import StandardScaler  # 导入标准化器# 1. 加载数据(分块读取)
def load_large_data(csv_file, chunksize):"""分块读取大型 CSV 文件,并返回一个生成器对象。"""reader = pd.read_csv(csv_file, chunksize=chunksize)return reader# 2. 处理缺失值
def handle_missing_values(chunk):"""处理缺失值,用均值填充数值型列的缺失值。"""numeric_columns = chunk.select_dtypes(include=[np.number]).columns.tolist()chunk[numeric_columns] = chunk[numeric_columns].fillna(chunk[numeric_columns].mean())return chunk# 3. 标准化数据(根据数据判断需不需要)
# def standardize_data(chunk):
#     """
#     使用 Z-score 标准化对数值型特征进行标准化处理。
#     """
#     numeric_columns = chunk.select_dtypes(include=[np.number]).columns.tolist()
#     scaler = StandardScaler()
#     chunk[numeric_columns] = scaler.fit_transform(chunk[numeric_columns])
#     return chunk# 4. 处理异常值
def handle_outliers(chunk):"""使用 IQR 方法处理异常值。"""for column in chunk.columns:if pd.api.types.is_numeric_dtype(chunk[column]):Q1 = chunk[column].quantile(0.25)Q3 = chunk[column].quantile(0.75)IQR = Q3 - Q1lower_bound = Q1 - 1.5 * IQRupper_bound = Q3 + 1.5 * IQRchunk = chunk[(chunk[column] >= lower_bound) & (chunk[column] <= upper_bound)]return chunk# 5. 保存处理后的数据
def save_processed_data(processed_data, output_file):"""将处理后的数据保存为 CSV 文件。"""pd.concat(processed_data).to_csv(output_file, index=False)print(f"Processed data saved to {output_file}")# 主程序
if __name__ == "__main__":# 读取大型数据集,每次读取的行数input_file = '问题一数据(未处理).csv'  # 替换为你的输入文件路径chunksize = 1000  # 每次读取的行数,根据实际情况调整reader = load_large_data(input_file, chunksize)# 多进程处理数据pool = Pool(cpu_count())  # 使用 CPU 核心数作为进程数processed_chunks = pool.map(handle_missing_values, reader)pool.close()pool.join()# 标准化数据#根据数据判断需要需要进行标准化# processed_chunks = [standardize_data(chunk) for chunk in processed_chunks]# 处理异常值processed_chunks = [handle_outliers(chunk) for chunk in processed_chunks]# 保存处理后的数据output_file = 'processed_data.csv'  # 替换为你的输出文件路径save_processed_data(processed_chunks, output_file)

实例:

在这个比赛当中的第一问:

就需要用到数据清洗

加油

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com