机器学习笔记一-数据预处理

数据预处理是数据分析、机器学习和深度学习等领域中的重要步骤。它包括清洗、转换、归一化、编码等操作,旨在使数据适合于建模和分析。数据预处理的质量直接影响模型的性能和准确性。下面详细介绍数据预处理的常见步骤和技术。

1. 数据清洗

  • 处理缺失值:

    • 删除缺失数据: 如果缺失值的数量较少,或者缺失的样本对分析无关紧要,可以直接删除。
    • 插值填补: 使用均值、中位数、众数、或插值等方法填补缺失值。
    • 预测填补: 使用其他变量预测缺失值,例如使用回归模型填补。
    import pandas as pd
    
    # 删除包含缺失值的行
    df.dropna(inplace=True)
    
    # 用均值填补缺失值
    df.fillna(df.mean(), inplace=True)
    
  • 处理异常值:

    • 检测异常值: 可以使用箱线图、标准差、Z-score 等方法检测异常值。
    • 处理异常值: 异常值可以被删除、替换或者转换。可以使用插值法来平滑异常值。
    # 使用Z-score检测异常值
    from scipy import stats
    z_scores = stats.zscore(df['column_name'])
    abs_z_scores = np.abs(z_scores)
    filtered_entries = (abs_z_scores < 3)
    df = df[filtered_entries]
    

2. 数据转换

  • 标准化(Standardization):

    • 将特征值转换为均值为0、方差为1的标准正态分布。常用于模型对数据尺度敏感的情况(如线性回归、逻辑回归、SVM)。
    from sklearn.preprocessing import StandardScaler
    
    scaler = StandardScaler()
    df_scaled = scaler.fit_transform(df)
    
  • 归一化(Normalization):

    • 将特征值缩放到指定范围内(通常是 [0, 1])。适用于范围差异较大的数据,如深度学习中的输入数据。
    from sklearn.preprocessing import MinMaxScaler
    
    scaler = MinMaxScaler()
    df_normalized = scaler.fit_transform(df)
    
  • 对数变换(Log Transformation):

    • 将数据转换为对数形式,通常用于处理数据的偏态分布或减少异方差性。
    import numpy as np
    
    df['log_column'] = np.log(df['column_name'] + 1)  # +1防止log(0)
    
  • 分箱(Binning):

    • 将连续变量转换为离散变量,可以使用等宽分箱或等频分箱。
    df['binned_column'] = pd.cut(df['column_name'], bins=5)
    
  • One-Hot编码:

    • 将分类变量转换为二进制向量,适用于机器学习算法需要数值输入的场景。
    df = pd.get_dummies(df, columns=['categorical_column'])
    
  • 标签编码(Label Encoding):

    • 将分类变量转换为整数值,每个类别对应一个整数。适用于树模型等不需要特征标准化的算法。
    from sklearn.preprocessing import LabelEncoder
    
    le = LabelEncoder()
    df['encoded_column'] = le.fit_transform(df['categorical_column'])
    

3. 特征选择

  • 过滤法(Filter Method):

    • 使用统计方法(如方差、卡方检验、相关系数)选择特征,剔除冗余或不相关的特征。
    from sklearn.feature_selection import SelectKBest, chi2
    
    X_new = SelectKBest(chi2, k=10).fit_transform(X, y)
    
  • 嵌入法(Embedded Method):

    • 基于模型的特征选择,例如 L1 正则化(Lasso)、决策树的特征重要性。
    from sklearn.linear_model import Lasso
    
    lasso = Lasso(alpha=0.01)
    lasso.fit(X, y)
    model = SelectFromModel(lasso, prefit=True)
    X_new = model.transform(X)
    
  • 包裹法(Wrapper Method):

    • 使用递归特征消除(RFE)或其他算法通过不断地训练模型来选择特征。
    from sklearn.feature_selection import RFE
    from sklearn.linear_model import LogisticRegression
    
    model = LogisticRegression()
    rfe = RFE(model, 10)
    X_new = rfe.fit_transform(X, y)
    

4. 特征工程

  • 特征交互:

    • 创建特征的组合,生成新的特征。例如,将两个特征相乘或相除。
    df['new_feature'] = df['feature1'] * df['feature2']
    
  • 多项式特征:

    • 生成特征的多项式项,用于线性模型中提升表现。
    from sklearn.preprocessing import PolynomialFeatures
    
    poly = PolynomialFeatures(degree=2)
    X_poly = poly.fit_transform(X)
    
  • 时间特征提取:

    • 从时间戳中提取出年、月、日、星期等信息。
    df['year'] = df['date_column'].dt.year
    df['month'] = df['date_column'].dt.month
    df['day_of_week'] = df['date_column'].dt.dayofweek
    

5. 数据拆分

  • 训练集与测试集划分:

    • 将数据集拆分为训练集和测试集,常用的划分比例是 70% / 30% 或 80% / 20%。
    from sklearn.model_selection import train_test_split
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    
  • 交叉验证:

    • 使用 K 折交叉验证评估模型性能,避免过拟合。
    from sklearn.model_selection import cross_val_score
    
    scores = cross_val_score(model, X, y, cv=5)
    

6. 数据增强:

  • 数据扩增:

    • 对图像、文本等数据进行增强,生成新的样本,通常用于深度学习。
    from keras.preprocessing.image import ImageDataGenerator
    
    datagen = ImageDataGenerator(rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
    

总结:

数据预处理是模型构建过程中至关重要的一步。高质量的预处理能帮助模型更好地理解数据,从而提升模型性能。不同类型的数据和任务可能需要不同的预处理方法,因此在具体项目中应灵活应用这些技术。

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值