Skip to main content

moregeek program

bagging策略和随机森林的应用以及线性回归与局部加权回归三种实例(线性回归、adaboost、gradientboostingregressor)【机器学习】_上进小菜猪的博客-多极客编程

一.Bagging策略




  • bootstrap aggregation 有放回抽样集合




  • 从样本集中重采样(有重复的)选出n个样本




  • 在所有属性上,对这n个样本建立分类器(ID3、C4.5、CART、SVM、Logistic回归等)




  • 重复以上两步m次,即获得了m个分类器




  • 将数据放在m个分类器上,最后根据m个分类器的投票结果,决定数据属于哪一类




在这里插入图片描述


二.随机森林


随机森林在bagging基础上做了修改。



  • 从样本集中用Bootstrap采样选出n个样本;
  • 从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;
  • 重复以上两步m次,即建立了m棵CART决策树-这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类

2.1 随机森林的应用


下图是实际B超拍摄的胎儿影像。完成头骨的自动检测算法,从而能够进一步估算胎儿头骨直径、胎龄等信息。假定现在有已经标记的几千张不同胎儿的图像,对于新的一张图像,如何做自动检测和计算?


在这里插入图片描述


一种可行的解决方案:随机森林



  • 通过Haar特征提取等对每幅图片分别处理,得到M个特征。N个图片形成NM的矩阵。
    随机选择若干特征和样本,得到a
    b的小矩阵,建立决策树;
  • 重复K次得到随机森林。
  • 投票方法选择少数服从多数。

2.2红酒数据集(随机森林)


1.使用红酒数据集使用随机森林,引包如下:


import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_wine
wine = load_wine()
X=wine.data
y=wine.target

2.输出训练结果:


from sklearn.ensemble import RandomForestClassifier
model=RandomForestClassifier(n_estimators=3,random_state=9)
model.fit(X[:,:2],y)
print("traing score:",model.score(X[:,:2],y))

运行结果如下:


在这里插入图片描述


3.可视化随机森林结果:


x_min,x_max=X[:,0].min()-1,X[:,0].max()+1
y_min,y_max=X[:,1].min()-1,X[:,1].max()+1
h=(x_max/x_min)/100
xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))
plt.subplot(1,1,1)
Z= model.predict(np.c_[xx.ravel(),yy.ravel()])
Z=Z.reshape(xx.shape)
plt.contourf(xx,yy,Z,cmap=plt.cm.Paired,alpha=0.8)
plt.scatter(X[:,0],X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlabel(wine['feature_names'][0])
plt.ylabel(wine['feature_names'][1])
plt.xlim(xx.min(), xx.max())
plt.title('Random Forest with Gini')
plt.show()

可视化结果如下:


在这里插入图片描述


三.线性回归与局部加权回归




  • 黑色是样本点




  • 红色是线性回归曲线




  • 绿色是局部加权回归曲线
    在这里插入图片描述




在这里插入图片描述


3.1 加利福尼亚的房价数据的线性回归实例


1.将加利福尼亚的房价数据集加载到本地


from sklearn.datasets import fetch_california_housing
import pandas as pd
from sklearn.model_selection import train_test_split

housing = fetch_california_housing()
X = housing.data
y = housing.target
df=pd.DataFrame()

2.切分数据集:七三分


X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

3.使用线性回归


from sklearn import linear_model

model = linear_model.LinearRegression()
model.fit(X_train, y_train)
print("train:", model.score(X_train, y_train))
print("test:", model.score(X_test, y_test))

4.训练结果如下:


在这里插入图片描述


3.2 AdaBoost 回归器超参数比较(加利福尼亚的房价数据)


AdaBoost 回归器是一个元估计器,它首先在原始数据集上拟合一个回归器,然后在同一数据集上拟合回归器的额外副本,但是实例的权重会根据当前预测的误差进行调整。


引入包:


from sklearn.ensemble import AdaBoostRegressor

进行训练,查看得分:


model = AdaBoostRegressor(n_estimators=3,random_state=3)
model.fit(X_train, y_train)
print("train:", model.score(X_train, y_train))
print("test:", model.score(X_test, y_test))

可以看出来:训练结果并不是很好。
在这里插入图片描述


3.3 GradientBoostingRegressor 向前分布算法的加法模型


梯度增强回归(GBR)是一种从错误中学习的技术。本质上,它是集思广益,整合一堆糟糕的学习算法进行学习。应注意两点:



  • 每种学习算法的准备率都不高,但它们可以被集成以获得良好的准确性。
  • 这些学习算法依次应用,即每个学习算法都从先前学习算法的错误中学习

from sklearn.ensemble import GradientBoostingRegressor

我们还是采用加利福尼亚的房价数据:


model = GradientBoostingRegressor(n_estimators=25,random_state=3)
model.fit(X_train, y_train)
print("train:", model.score(X_train, y_train))
print("test:", model.score(X_test, y_test))

运行结果如下:


在这里插入图片描述


四.评价指标


以下近考虑二分类问题,即将实例分成正类(positive)或负类(negative)。
对一个二分问题来说,会出现四种情况。
如果一个实例是正类并且也被预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false negative)。


在这里插入图片描述


五.ROC曲线实例


在这里插入图片描述


5.1 认识ROC曲线


在这里插入图片描述


5.2 ROC曲线相关名词解释



  • ROC的全称是Receiver Operating Characteristic Curve,中文名字叫“受试者工作特征曲线”。
  • AUC(Area Under roc Curve),ROC曲线下面的面积。
  • FPR(False Positive Rate),假阳性率。
  • TPR (True Positive Rate),真阳性率。
  • 混淆矩阵,confusion matrix。
  • Cl:置信区间,Confidence interval。
  • 约登指数,TPR+FPR-1(敏感性+特异性-1),最佳截断点。

5.3 改变阅值计算得到的最终ROC曲线


在这里插入图片描述


©著作权归作者所有:来自51CTO博客作者上进小菜猪的原创作品,请联系作者获取转载授权,否则将追究法律责任

五个免费开源的数据挖掘软件_qq604ad839511ed的博客-多极客编程

1、OrangeOrange 是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑定了 Python以进行脚本开发。它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能。其由C++ 和 Python开发,它的图形库是由跨平台的Qt框架开发。2、RapidMinerRapidMi

knime+python anaconda建立数据分析环境_qq604ad839511ed的博客-多极客编程

Python 数据分析环境数据分析领域有很多可选方案,例如SPSS傻瓜式分析工具,SAS专业性商业分析工具,R和python这类需要代码编程类的工具。个人选择是python这类,包括pandas,numpy,matplotlib,sklearn,keras。基于jupyter或者zeppelin作为编程界面,可以用python开发出比较清爽的数据分析报告。总体来说,jupyter notebook

算法竞赛入门【码蹄集进阶塔335题】(mt3330-3335)_灵彧universe的博客-多极客编程

算法竞赛入门【码蹄集进阶塔335题】(MT3330-3335) (文章目录) 前言 为什么突然想学算法了? > 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 > 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪

详解支持向量机-svc真实数据案例:预测明天是否会下雨-探索标签和处理异常值【菜菜的sklearn课堂笔记】_wx63088f6683f8f的博客-多极客编程

视频作者:[菜菜TsaiTsai] 链接:[【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili] 在实际工作中,数据预处理往往比建模难得多,耗时多得多,因此合理的数据预处理是非常必要的。考虑到大家渴望学习真实数据上的预处理的需求,以及SVM需要在比较规则的数据集上来表现的特性,我为大家准备了这个Kaggle上下载的,未经过预处理的澳大利亚天气数据集

草履虫都能上手用的人工智能模型 _51-lolitaann的博客-多极客编程

前排提示: 阅读本文不需要任何人工智能以及算法相关的知识。 你会任何一种编程语言就行,会python当然那更好。 仅作为NLP科普,娱乐,实际算法工作并非这么简单。 X:“宝,你搞的是什么算法?” A:“NLP,又叫自然语言处理。” X:“太抽象了啊” A:“比如聊天机器人?” X:“emmmmm” A:“算了,你自己试一下吧,上车,坐稳了。” 接下来会分为两部分: 没有Pytho

浅谈语义分割网络u-net_51-lolitaann的博客-多极客编程

U-Net出自 U-Net: Convolutional Networks for Biomedical Image Segmentation 这个网络和别的自编码(autoe第二步是 就是ncoder)模型一样,在中间有一个bottleneck,以确保网络只学习最重要的信息。和他之前的模型的一个区别是它引入了编码器和解码器之间的残差连接,大大改善了梯度流。 看下图,看这个形状你们应该就知道它为什

knime+python anaconda建立数据分析环境_qq604ad839511ed的博客-多极客编程

Python 数据分析环境数据分析领域有很多可选方案,例如SPSS傻瓜式分析工具,SAS专业性商业分析工具,R和python这类需要代码编程类的工具。个人选择是python这类,包括pandas,numpy,matplotlib,sklearn,keras。基于jupyter或者zeppelin作为编程界面,可以用python开发出比较清爽的数据分析报告。总体来说,jupyter notebook

算法竞赛入门【码蹄集进阶塔335题】(mt3330-3335)_灵彧universe的博客-多极客编程

算法竞赛入门【码蹄集进阶塔335题】(MT3330-3335) (文章目录) 前言 为什么突然想学算法了? > 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 > 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪

算法竞赛入门【码蹄集进阶塔335题】(mt2326-2330)_灵彧universe的博客-多极客编程

算法竞赛入门【码蹄集进阶塔335题】(MT2326-2330) (文章目录) 前言 为什么突然想学算法了? > 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 > 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪

详解支持向量机-svc真实数据案例:预测明天是否会下雨-探索标签和处理异常值【菜菜的sklearn课堂笔记】_wx63088f6683f8f的博客-多极客编程

视频作者:[菜菜TsaiTsai] 链接:[【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili] 在实际工作中,数据预处理往往比建模难得多,耗时多得多,因此合理的数据预处理是非常必要的。考虑到大家渴望学习真实数据上的预处理的需求,以及SVM需要在比较规则的数据集上来表现的特性,我为大家准备了这个Kaggle上下载的,未经过预处理的澳大利亚天气数据集

草履虫都能上手用的人工智能模型 _51-lolitaann的博客-多极客编程

前排提示: 阅读本文不需要任何人工智能以及算法相关的知识。 你会任何一种编程语言就行,会python当然那更好。 仅作为NLP科普,娱乐,实际算法工作并非这么简单。 X:“宝,你搞的是什么算法?” A:“NLP,又叫自然语言处理。” X:“太抽象了啊” A:“比如聊天机器人?” X:“emmmmm” A:“算了,你自己试一下吧,上车,坐稳了。” 接下来会分为两部分: 没有Pytho

浅谈语义分割网络u-net_51-lolitaann的博客-多极客编程

U-Net出自 U-Net: Convolutional Networks for Biomedical Image Segmentation 这个网络和别的自编码(autoe第二步是 就是ncoder)模型一样,在中间有一个bottleneck,以确保网络只学习最重要的信息。和他之前的模型的一个区别是它引入了编码器和解码器之间的残差连接,大大改善了梯度流。 看下图,看这个形状你们应该就知道它为什