处理不均衡的数据(imbalanced data)

本文探讨了解决机器学习中不均衡数据问题的多种方法,包括获取更多数据、更改评估指标、重组数据集、选择更适合的算法及调整算法参数。

什么是不均衡数据 

处理不均衡数据 (Imbalanced data)

不均衡数据的形式很简单. 这里有苹果和梨, 当你发现你手中的数据对你说, 几乎全世界的人都只吃梨, 如果随便抓一个路人甲, 让你猜他吃苹果还是梨, 正常人都会猜测梨.

处理不均衡数据 (Imbalanced data)

不均衡的数据预测起来很简单. 永远都猜多的那一方面准没错. 特别是红色多的那一方占了90%. 只需要每一次预测的时候都猜红色, 预测准确率就已经达到了相当高的90%了. 没错, 机器也懂这个小伎俩. 所以机器学到最后, 学乖了, 每次都预测多数派. 解决的方法有几种, 我们来谈谈.

获取更多数据 

处理不均衡数据 (Imbalanced data)

首先, 我们要想想, 自己还能不能获取到更多的数据. 有时候只是因为前段时期的数据多半呈现的是一种趋势, 等到后半时期趋势又不一样了. 如果没有获取后半时期的数据, 整体的预测可能就没有那么准确了.

更换评判方式 

处理不均衡数据 (Imbalanced data)

通常, 我们会用到 准确率 accuracy, 或者误差 cost来判断机器学习的成果. 可是这些评判方法在不均衡数据面前, 高的准确率和低的误差变得没那么重要. 所以我们得换一种方式评判. 通过 confusion matrix 来计算 precision 和 recall, 然后通过 precision 和 recall 再计算f1 分数.这种方式能成功地区分不均衡数据, 给出更好的评判分数. 因为时间关系, 具体的计算不过程就不会在这里提及.

重组数据 

处理不均衡数据 (Imbalanced data)

第三种方法是最简单粗暴的方法之一. 重新组合不均衡数据, 使之均衡. 方式一: 复制或者合成少数部分的样本, 使之和多数部分差不多数量. 方式二: 砍掉一些多数部分, 使两者数量差不多.

使用其他机器学习方法 

处理不均衡数据 (Imbalanced data)

如果使用的机器学习方法像神经网络等, 在面对不均衡数据时, 通常是束手无策. 不过有些机器学习方法, 像决策树, decision trees 就不会受到不均很数据的影响.

修改算法 

处理不均衡数据 (Imbalanced data)

这个简介视频的最后一种方法是让自己变得有创造力, 尝试修改算法. 如果你用的是 Sigmoid 的激励函数, activation function, 他会有一个预测门槛, 一般如果输出结果落在门槛的这一段,预测结果为梨, 如果落在这一段, 预测结果为苹果, 不过因为现在的梨是多数派, 我们得调整一下门槛的位置, 使得门槛偏向苹果这边, 只有很自信的时候, 模型才会预测这是苹果. 让机器学习,学习到更好的效果.


### 处理机器学习回归任务中数据分布不均衡问题 在机器学习的回归任务中,当面对数据分布不均的情况时,可能会遇到诸如预测偏差增大、模型泛化能力下降等问题。为了有效应对这些问题,可以从以下几个方面着手: #### 1. 数据处理方法 - **重采样技术**:通过对少数类样本进行过采样或将多数类样本欠采样来平衡训练集中各类别的比例。然而需要注意的是,在回归场景下直接应用这些方法可能不合适,因为它们原本设计用于分类任务。一种改进方案是对目标变量按照一定区间分箱后再执行上述操作[^1]。 - **特征工程**:引入更多有助于区分不同水平响应值的新特性;尝试变换现有输入属性(如取对数),使原始非均匀分布变得更加接近正态分布或其他更易于建模的形式[^2]。 ```python import numpy as np from sklearn.preprocessing import PowerTransformer # 假设X为特征矩阵,y为目标向量 pt = PowerTransformer(method='yeo-johnson') y_transformed = pt.fit_transform(y.reshape(-1, 1)) ``` #### 2. 修改损失函数 针对特定应用场景定制化的定义新的评价指标以及相应的优化准则。例如采用绝对误差平均百分比(APE)代替传统的均方根误差(RMSE),这样可以减少极端大数值带来的负面影响;或者考虑加入L1/L2正则项约束以防止过拟合现象发生的同时缓解因某些区域密度较高而导致局部最优解的问题[^3]。 ```python from sklearn.linear_model import HuberRegressor huber_reg = HuberRegressor(epsilon=1.35) huber_reg.fit(X_train, y_train) # 使用Huber loss替代普通的平方loss ``` #### 3. 应用集成学习算法 利用Bagging或Boosting框架下的多种弱监督器组合而成的强大预测器往往能够更好地适应复杂多变的实际状况。特别是像Gradient Boosting Machines (GBMs), XGBoost这类基于决策树结构构建起来的方法,在处理偏斜严重的连续型输出上有显著优势[^4]。 ```python import xgboost as xgb dtrain = xgb.DMatrix(X_train, label=y_train) params = { 'objective': 'reg:squarederror', 'eval_metric': ['rmse', 'mae'] } bst = xgb.train(params=params, dtrain=dtrain, num_boost_round=100) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值