✨ 欢迎关注Python机器学习AI ✨
本节介绍: 平衡随机森林分类器(BRF):解决数据不平衡的集成学习方法 。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,细节并不保证与原文一定相同,仅供参考。 详细数据和代码将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。
✨ 论文信息 ✨
从文献的内容来看,BRF(平衡随机森林分类器) 主要用于解决数据类别不平衡问题 。在该研究中,数据集中少数类别(如NCDIA毒性药物)样本量较少,导致分类模型可能会偏向多数类,进而影响少数类的预测性能。为了解决这个问题,研究使用了BRF模型。BRF通过对每棵决策树采用一种修改过的采样技术,首先从少数类中抽取样本,然后再从多数类中随机等量抽取样本,确保每棵树都能在平衡的数据集上进行训练。最终,所有的决策树一起工作,从而提高了少数类的识别率,优化了模型对类别不平衡数据的处理能力。
相对于一般先划分训练集和测试集,然后对训练集进行过采样或欠采样后的数据再纳入模型的传统方法,BRF(平衡随机森林分类器)提供了一种更加简便且高效的解决方案。
✨ 代码实现 ✨
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
import warnings
# 忽略所有警告
warnings.filterwarnings("ignore")
path = r"2025-4-14公众号Python机器学习AI.xlsx"
df = pd.read_excel(path)
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['Electrical_cardioversion'], axis=1)
y = df['Electrical_cardioversion']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
random_state=42,
stratify=df['Electrical_cardioversion']
)
将一个不平衡数据集划分为训练集和测试集,并确保划分后每个子集的目标变量类别分布与原始数据集一致。其中,stratify=df['Electrical_cardioversion'] 参数确保在划分数据时,训练集和测试集中的类别比例与原始数据集相同,有助于避免数据划分过程中类别不平衡问题的加剧
from imblearn.ensemble import BalancedRandomForestClassifier
# 创建平衡随机森林分类器
brf = BalancedRandomForestClassifier(
n_estimators=100, # 森林中的树的数量,通常设置为较高的值,100棵树通常是一个常见的选择
random_state=0, # 随机种子,确保每次运行的结果可复现
sampling_strategy="all", # 采样策略。'all' 表示对少数类别进行过采样,使其与多数类别的样本数量一致
replacement=True, # 在过采样时是否允许重复采样样本,True表示允许
bootstrap=False, # 是否采用自助采样法。False表示不使用自助采样法,数据集中的样本不重复用于训练
)
# 训练模型
brf.fit(X_train, y_train)
创建训练一个平衡随机森林分类器(BRF),通过集成采样策略处理数据不平衡问题。在这里,没有单独对训练集进行过采样或欠采样,而是直接将训练集传入模型,模型内部使用集成的采样策略(如对少数类别进行过采样)来解决数据不平衡问题
sampling_strategy 参数控制平衡样本的策略
- 'all':对所有少数类别进行过采样,使其与多数类别样本数量一致,常用于完全平衡数据集
- 'auto':默认设置,自动选择合适的采样策略,通常对少数类进行过采样
- float:指定少数类样本的采样比例,如 0.5 表示少数类样本为多数类的一半
- dict:为每个类别指定目标样本数或采样比例,提供更细粒度的控制
- 'not majority':通过过采样少数类并欠采样多数类,使所有类别样本数量相同,适用于极为不平衡的数据
plot\_confusion\_matrix(brf, X\_test, y\_test, 'BalancedRandomForestClassifier', pdf\_filename= "BalancedRandomForestClassifier.pdf")
从测试集混淆矩阵的结果来看,类别0(NO)的样本数是类别1(YES)的两倍,且BRF模型在处理这种类别不平衡的数据时表现得相对不错。具体来说
- 对于类别0(NO),模型准确识别了大部分样本,其中84.6%的预测结果是正确的
- 对于类别1(YES),虽然样本较少,但模型也能有效地识别它,80.0%的正确率
虽然类别0占主导地位,但由于BRF模型通过平衡采样策略来处理数据不平衡,能够在一定程度上提高对少数类(类别1)的识别能力。因此,即便数据不平衡,BRF依然能够提供相对稳定且较为准确的预测
from sklearn.ensemble import RandomForestClassifier
# 创建默认的随机森林模型
rf_model = RandomForestClassifier(random_state=42)
# 训练模型
rf_model.fit(X_train, y_train)
创建训练一个默认的随机森林分类器,该模型用于与平衡随机森林(BRF)模型进行对比,以评估在处理类别不平衡数据时,标准随机森林和BRF的表现差异
plot\_confusion\_matrix(rf\_model, X\_test, y\_test, 'RF', pdf\_filename= "RF.pdf")
从这个随机森林(RF)模型的混淆矩阵来看,模型在类别0(NO)的识别上表现得非常好,92.3%的准确率,但在类别1(YES)的识别上表现较差,56.0%的正确率,且有14个样本被错误分类为类别0(NO)
与平衡随机森林(BRF)的结果相比,RF模型虽然对多数类(NO)的识别非常准确,但它对少数类(YES)的预测能力较弱。具体来说,BRF模型在少数类(YES)上的准确率为80.0%,而RF模型只有44.0%。这表明,在类别不平衡的情况下,BRF通过集成的采样策略,能够更好地处理少数类的样本,而标准的随机森林由于没有这种处理,倾向于忽视少数类,导致较差的预测效果
值得注意的是,以上两个模型的性能并没有进行过调参,读者可以通过调整超参数(如树的数量、深度等)来进一步优化模型的表现,提升分类精度,尤其是在处理类别不平衡问题时,最后同样的可以对我们训练的BRF模型进行shap模型解释
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 购买介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,购买作者的公众号合集。截至目前为止,合集已包含200多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 购买前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!
往期推荐
Frontiers in Oncology:利用生存机器学习RSF模型预测患者预后模拟实现
期刊配图:通过SHAP组图解读模型探索不同类型特征和分组对模型的影响
机器学习在临床数据分析中的应用:从数据预处理到Web应用实现的完整流程教学
Psychiatry Research基于SHAP可解释性的机器学习模型构建与评估:混淆矩阵、ROC曲线、DCA与校准曲线分析
nature communications:基于Light GBM与随机森林结合的多模型特征选择方法
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考