当前位置: 首页 > news >正文

02-机器学习基础: 监督学习——集成学习

集成学习:随机森林

一、为什么需要集成学习?

1.1 弱分类器的困境

importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.treeimportDecisionTreeClassifierfromsklearn.ensembleimportRandomForestClassifierfromsklearn.datasetsimportmake_moonsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_scoreimportwarnings warnings.filterwarnings('ignore')print("="*60)print("集成学习:三个臭皮匠,顶个诸葛亮")print("="*60)# 生成数据X,y=make_moons(n_samples=300,noise=0.25,random_state=42)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)# 单棵决策树 vs 随机森林single_tree=DecisionTreeClassifier(max_depth=5,random_state=42)random_forest=RandomForestClassifier(n_estimators=50,max_depth=5,random_state=42)single_tree.fit(X_train,y_train)random_forest.fit(X_train,y_train)single_acc=single_tree.score(X_test,y_test)rf_acc=random_forest.score(X_test,y_test)print(f"\n单棵决策树准确率:{single_acc:.4f}")print(f"随机森林准确率:{rf_acc:.4f}")print(f"提升:{rf_acc-single_acc:.4f}")# 可视化对比fig,axes=plt.subplots(1,2,figsize=(14,5))defplot_decision_boundary(model,X,y,ax,title):x_min,x_max=X[:,0].min()-0.5,X[:,0].max()+0.5y_min,y_max=X[:,1].min()-0.5,X[:,1].max()+0.5xx,yy=np.meshgrid(np.linspace(x_min,x_max,200),np.linspace(y_min,y_max,200))Z=model.predict(np.c_[xx.ravel(),yy.ravel()])Z=Z.reshape(xx.shape)ax.contourf(xx,yy,Z,alpha=0.3,cmap='RdBu')ax.scatter(X[y==0,0],X[y==0,1],c='blue',alpha=0.5,s=15)ax.scatter(X[y==1,0],X[y==1,1],c='red',alpha=0.5,s=15)ax.set_title(title)ax.set_xlabel('特征1')ax.set_ylabel('特征2')ax.grid(True,alpha=0.3)plot_decision_boundary(single_tree,X_test,y_test,axes[0],f'单棵决策树\n准确率={single_acc:.3f}')plot_decision_boundary(random_forest,X_test,y_test,axes[1],f'随机森林\n准确率={rf_acc:.3f}')plt.suptitle('单棵决策树 vs 随机森林',fontsize=14)plt.tight_layout()plt.show()print("\n💡 集成学习的核心思想:")print(" 1. 多个弱分类器组合成强分类器")print(" 2. 不同分类器在不同区域有优势")print(" 3. 投票决定最终结果,减少方差")

二、Bagging与随机森林原理

2.1 Bootstrap采样

defvisualize_bootstrap():"""可视化Bootstrap采样"""fig,axes=plt.subplots(1,2,figsize=(14,5))# 1. Bootstrap采样过程ax1=axes[0]ax1.axis('off')ax1.set_title('Bootstrap采样(有放回抽样)',fontsize=12)# 原始数据original_data=['A','B','C','D','E','F','G','H']n_samples=len(original_data)# 绘制原始数据fori,iteminenumerate(original_data):circle=plt.Circle((0.1+i*0.08,0.7),0.04,color='lightblue',ec='black')ax1.add_patch(circle)ax1.text(0.1+i*0.08,0.7,item,ha='center',va='center',fontsize=8)ax1.text(0.5,0.85,'原始数据集 (8个样本)',ha='center',fontsize=10)# Bootstrap采样结果np.random.seed(42)bootstrap_samples=[]foriinrange(3):sample=np.random.choice(original_data,n_samples,replace=True)bootstrap_samples.append(sample)y_pos=0.5fori,sampleinenumerate(bootstrap_samples):ax1.text(0.05,y_pos,f'采样{i+1}:',fontsize=9,fontweight='bold')forj,iteminenumerate(sample):ax1.text(0.15+j*0.06,y_pos,item,fontsize=8,bbox=dict(boxstyle='circle',facecolor='lightgreen',alpha=0.7))y_pos-=0.12ax1.text(0.5,0.15,'特点: 部分样本重复,部分样本未出现',ha='center',fontsize=9,bbox=dict(boxstyle='round',facecolor='lightyellow'))# 2. Bagging架构ax2=axes[1
http://www.jsqmd.com/news/663048/

相关文章:

  • 2026年上海AI智能体应用落地服务商参考:上海鲲之益AI智能体研发与落地、企业AI化转型方案、行业AI定制化服务、AI自动化与运营相关智能体应用 - 海棠依旧大
  • 告别U盘拷贝:基于TFTP的Linux开发板高效文件传输方案
  • 告别QCustomPlot!用Qt Charts打造工业级数据可视化交互(附完整源码)
  • 解决VMWare ESXi PCIe直通显卡导致的DevicePowerOn启动故障
  • 【限时解密】国家级AGI验证实验室内部使用的5类压力测试协议(含可复现prompt工程验证模板)
  • 从GitHub README到技术博客:让Mermaid流程图成为你的Markdown加分项
  • 从无人机到平衡车:MPU6050姿态融合(互补滤波)的实战调参指南与避坑总结
  • Go语言的plugin包与动态链接库在运行时扩展中的加载机制
  • Java 内存泄漏排查的实战技巧
  • 【后端】【架构】从“插件化AI”到“智能工作流”:Flask驱动的AI PPT生成引擎设计解析
  • 医学报告生成论文精读-前沿方法解构
  • 告别推理卡顿:实测TensorRT INT8量化后,VGG-13推理速度提升7倍的完整配置流程
  • 【仿真】CARLA实战避坑指南:从SUMO联调到Docker部署的典型问题解析
  • 02-GlobalBurdenR包进阶-数据筛选与趋势地图绘制
  • 用层级令牌桶实现 Harness 的多维度限流
  • c++如何通过重定向streambuf流捕获标准错误输出并记录到运行日志【详解】
  • Superpowers - 15 用 Git Worktrees 打造“无尘室”开发环境:从 Superpowers 实践谈起
  • 别再死记硬背了!用Python手把手教你从‘敲西瓜’到‘决策树’(ID3/C4.5/CART实战)
  • 超声波测距精度提升技巧:STM32温度补偿与多采样平均实战
  • Translumo:打破语言障碍的终极实时屏幕翻译神器
  • Redis 缓存雪崩防护机制的实现方法
  • 从RNN到Transformer:为什么相对位置表示是NLP模型理解顺序的关键
  • 告别QChart!用QCustomPlot打造动态数据可视化的5个实用技巧
  • BetterNCM安装器:解决网易云音乐插件管理的3个核心痛点
  • Python微服务怎么写_Nameko框架搭建轻量级微服务架构
  • DELL SCv3020风扇狂转别慌!手把手教你排查‘脑裂’与控制器升级(附串口连接避坑指南)
  • 终极指南:如何用ObjToSchematic将3D模型一键变成Minecraft建筑
  • FPGA显示驱动入门:手把手教你用DE模式点亮RGB888屏幕,告别时序混乱
  • gprMax实战:构建多相随机介质三维地质模型与雷达波场模拟
  • Termux进阶:利用proot-distro实现Linux发行版环境迁移与团队协作