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

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

这里我们给出一个数据预处理的办法:数据清洗(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 - Q1
            lower_bound = Q1 - 1.5 * IQR
            upper_bound = Q3 + 1.5 * IQR
            chunk = 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)

实例:

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

就需要用到数据清洗

加油

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中进行数学建模时,数据预处理是一个非常重要的步骤,它可以帮助我们清洗、转换和准备数据,以便后续的分析和建模。下面是一些常见的MATLAB数据预处理技术: 1. 数据清洗数据清洗是指处理数据中的异常值、缺失值和重复值等问题。在MATLAB中,可以使用函数如`isnan`、`isoutlier`和`unique`来检测和处理这些问题。 2. 数据转换:数据转换是指将原始数据转换为适合建模和分析的形式。常见的数据转换方法包括标准化、归一化、对数转换和平滑等。在MATLAB中,可以使用函数如`zscore`、`normalize`和`log`来进行这些转换。 3. 特征选择:特征选择是指从原始数据中选择最相关或最具有代表性的特征。在MATLAB中,可以使用特征选择算法如相关系数、方差分析和主成分分析等来进行特征选择。 4. 数据降维:数据降维是指将高维数据转换为低维表示,以减少数据的复杂性和存储空间。常见的数据降维方法包括主成分分析(PCA)和线性判别分析(LDA)。在MATLAB中,可以使用函数如`pca`和`lda`来进行数据降维。 5. 数据平衡:数据平衡是指处理不平衡数据集中类别不均衡的问题。在MATLAB中,可以使用函数如`undersample`和`oversample`来平衡数据集中的类别。 以上是MATLAB中常见的数据预处理技术,它们可以帮助我们提高数据的质量和准确性,从而更好地进行数学建模和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值