Python在机器学习中的数据处理

数据清洗这块绝对是重灾区。拿缺失值来说,之前傻乎乎地直接dropna(),结果样本量骤降三分之一。后来学会用Pandas的isnull().sum()先摸清底细,发现不同字段得区别对待:数值型用fillna(mean()),分类变量干脆单独标成"未知"类别。特别是遇到年龄字段有5%缺失时,如果用中位数填充反而比直接删除更保留分布规律。这里推荐试试Scikit-learn的SimpleImputer,支持中位数、众数、常量多种填充策略,配合Pipeline还能避免数据泄露。

异常值处理有个血泪教训。有次发现某型号车的里程数居然有998万公里,追查发现是数据录入时把"未登记"错误编码成9999999。这种明显超出三倍标准差的极端值,用箱线图或describe()查看五数概括最直观。处理时不要暴力删除,可以按1%~99%分位数进行Winsorize缩尾,或者对连续变量做log(1+x)变换。上次对房价数据取对数后,偏度系数从9.8直接降到0.3,效果立竿见影。

类别特征编码这块坑最多。最开始用LabelEncoder把颜色'红','蓝','红'转成0,1,0,结果模型误以为蓝色大于红色。后来改用OneHotEncoder生成哑变量,但遇到"车辆品牌"这种有50多个取值的字段,维度爆炸直接拖垮训练效率。这时候其实可以用均值编码------比如按每个品牌对应的价格均值来编码,既保留信息又控制维度。现在更推荐category_encoders库,支持TargetEncoder、CountEncoder等十多种编码方式,还能自动处理未见过的类别。

特征工程才是真正拉开差距的地方。之前预测餐厅销量时,把"开业日期"转换成"经营年限"后,特征重要性排名从末尾跃升到前三。时间序列里经常要提取年月日、是否节假日;地理信息可以计算周边竞品密度;文本描述先用jieba分词再统计词频。最近用featuretools库自动生成特征,通过对客户交易表进行深度特征合成,半小时就构造出"最近三个月退款率"这类业务特征,比手工效率提升十倍不止。

数据标准化经常被新手忽略。上次用KNN算法时,因为年龄范围0-100而收入范围0-500000,模型完全被收入特征主导。后来在Sklearn里比较了StandardScaler和MinMaxScaler,发现带正则化的线性模型用标准化,图像处理用归一化更合适。特别注意要先拆分训练测试集再分别标准化,用训练集的scaler去transform测试集,这是最容易犯的错误之一。

最后安利几个高效工具链。Pandas_profiling三行代码生成数据报告,能直观看到缺失值分布和相关性矩阵;Sklearn的ColumnTransformer可以对数值型和分类型特征并行处理;再用Pipeline把预处理和模型打包成统一流程,测试集上直接transform一路到底。最近在用的ydata-profiling更强大,连数据质量报告和版本对比都能生成。

其实机器学习项目里大约60%时间都花在数据处理上,但这部分投入绝对物超所值。记得刚开始总想跳过预处理直接建模,结果在垃圾数据上堆再复杂的模型也是白搭。后来坚持用Python这套工具链认真做完数据清洗、特征工程、数据标准化三板斧,哪怕用最简单的随机森林,效果都比在脏数据上跑XGBoost强得多。各位在实战中有什么数据处理的心得体会,欢迎在评论区交流拍砖。

相关推荐
用户8356290780512 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户8356290780512 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
你好潘先生10 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师11 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码11 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
copyer_xyf11 小时前
FastAPI 如何连接 MySQL
后端·python
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
用户8356290780511 天前
使用 Python 在 PDF 中创建与管理书签
后端·python
MeixianAgent1 天前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
咕白m6251 天前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python