You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

机器学习输入数据集标准化最佳实践咨询(Python+多模型预测)

数据集标准化与数据准备最佳实践(针对线性回归、随机森林、XGBoost)

针对你提供的数据集,下面分步骤梳理数据准备的核心环节,以及不同模型对应的标准化策略:

一、基础数据类型修正

首先要把数据转换成模型能识别的格式:

  • qty列:去掉千位分隔符,转为整数类型:df['qty'] = df['qty'].str.replace(',', '').astype(int)
  • date列:转为datetime类型,再提取实用时间特征(时间特征对预测需求通常有很大帮助):
    df['date'] = pd.to_datetime(df['date'], format='%m/%d/%y')
    df['year'] = df['date'].dt.year
    df['month'] = df['date'].dt.month
    df['quarter'] = df['date'].dt.quarter
    df['is_weekend'] = df['weekday'].isin(['sat', 'sun']).astype(int)
    
  • 数值列检查:确认max_temp、min_temp是浮点/整数类型,若有异常值(比如不合理的温度值),用箱线图检测后删除或截断。

二、类别特征处理

针对weekday和type两个类别特征,不同模型的处理方式略有区别:

  • weekday:属于有序类别(周一到周日有顺序),用标签编码直接转成数值即可:
    from sklearn.preprocessing import LabelEncoder
    le_weekday = LabelEncoder()
    df['weekday_encoded'] = le_weekday.fit_transform(df['weekday'])
    
  • type:属于无序二分类特征,两种处理方式都可行:
    • 映射为0/1:df['type_encoded'] = df['type'].map({'casual': 0, 'member': 1})
    • 独热编码(更适合线性回归):pd.get_dummies(df['type'], prefix='type')

三、特征工程(可选但推荐)

新增衍生特征能提升模型性能:

  • 计算温差:df['temp_diff'] = df['max_temp'] - df['min_temp'],温度波动可能和qty相关
  • 若有更多业务背景,还可以添加季节特征(比如12-2月为冬季等)

四、缺失值处理

先检查各列缺失情况:df.isnull().sum()

  • 数值型特征(max_temp、min_temp):用中位数填充(避免均值受异常值影响)
  • 类别特征(weekday、type):用众数填充
  • date/holiday:若缺失可通过日历工具补全

五、标准化策略(核心差异点)

不同模型对特征尺度的敏感度完全不同,别做无用功:

1. 线性回归:必须标准化

线性回归基于最小二乘法或梯度下降,特征尺度不一致会直接影响系数权重,导致模型偏差。

  • 仅对连续数值特征做标准化:max_temp、min_temp、temp_diff
  • 标准化时机:先划分训练集/测试集,再用训练集拟合Scaler,避免数据泄露:
    from sklearn.preprocessing import StandardScaler
    from sklearn.model_selection import train_test_split
    
    X = df[['holiday', 'weekday_encoded', 'type_encoded', 'max_temp', 'min_temp', 'temp_diff', 'year', 'month']]
    y = df['qty']
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    scaler = StandardScaler()
    numeric_cols = ['max_temp', 'min_temp', 'temp_diff']
    X_train[numeric_cols] = scaler.fit_transform(X_train[numeric_cols])
    X_test[numeric_cols] = scaler.transform(X_test[numeric_cols])
    

2. 随机森林/XGBoost:无需标准化

树模型是基于特征分裂规则进行训练,完全不依赖特征的尺度大小,标准化不会提升模型性能,反而增加计算成本。直接使用处理后的原始特征即可。

六、目标变量优化(针对线性回归)

如果qty的分布存在严重偏态(比如大部分值集中在低区间,少数极高值),可以对目标变量做对数变换:

import numpy as np
y_train_log = np.log(y_train)
y_test_log = np.log(y_test)

训练后再用指数转换还原预测值:np.exp(predicted_log_values)


内容的提问来源于stack exchange,提问作者Curiel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:50:23