集成方法 - BaggingClassifier


参考:BaggingClassifier

一,Bagging 算法介绍

算法主要特点
Bagging:

  • 平行合奏:每个模型独立构建
  • 旨在减少方差,而不是偏差
  • 适用于高方差低偏差模型(复杂模型)
  • 基于树的方法的示例是随机森林,其开发完全生长的树(注意,RF修改生长的过程以减少树之间的相关性)

在集成算法中,bagging方法形成了一类算法,它在原始训练集的随机子集上建立一个黑箱估计的多个实例,然后将它们各自的预测聚合起来形成最终的预测。这些方法通过在基本估计量(如决策树)的构造过程中引入随机化,然后对其进行集成,来降低其方差。在许多情况下,bagging方法是相对於单个模型进行改进的一种非常简单的方法,而无需调整底层的基本算法。由于bagging方法提供了一种减少过度拟合的方法,因此它最适合于强模型和复杂模型(例如,充分开发的决策树),而boosting方法通常最适合于弱模型(例如,浅层决策树)。

在scikit学习中,bagging方法被作为一个统一的BaggingClassifier元估计器,输入用户指定的基估计量和指定随机子集绘制策略的参数。特别是max_samplesmax_features控制子集的大小(就样本和特征而言),而bootstrapbootstrap_features控制是否使用替换来绘制样本和特征。当使用可用样本的子集时,可以通过设置oob_score=True使用袋外样本估计泛化精度。

作为一个例子,下面的代码片段说明了如何实例化KNeighborsscifier基估计器的bagging集成,每个估计器都建立在50%样本和50%特征的随机子集上。

>>> from sklearn.ensemble import BaggingClassifier
>>> from sklearn.neighbors import KNeighborsClassifier
>>> bagging = BaggingClassifier(KNeighborsClassifier(),
...                             max_samples=0.5, max_features=0.5)

二,BaggingClassifier使用

官方:sklearn.ensemble.BaggingClassifier

1,参数及属性

Parameters
----------
base_estimator:object, default=None
				适合于数据集的随机子集的基估计量。
				如果 None,则基估计量是决策树。
n_estimators:int, default=10
			  训练基学习器(基本估计器)的个数。

max_samples:int or float, default=1.0
			 从X抽取的样本数,用于训练每个基本估计器
			 如果为int,则抽取 max_samples 个样本。
			 如果为float,则抽取 max_samples * X.shape[0] 个样本。

max_features:int or float, default=1.0
			  从X中提取的用于训练每个基本估计器的特征数
			  如果为int,则绘制 max_features 个特征。
			  如果是float,则绘制特征 max_features * X.shape[1] 个特征。

bootstrap:bool, default=True
		   是否为放回取样。如果为False,则执行不替换的样本。

bootstrap_features:bool, default=False
					是否针对特征随机取样。

oob_score:bool, default=False
		   是否使用袋外样本估计泛化误差。(是否使用现成的样本来估计泛化误差。)

warm_start:bool, default=False
			当设置为True时,重用前面调用的解决方案来拟合并向集成添加更多的估计
			量,否则,只拟合一个全新的集成。

n_jobs:int, default=None
		使用几个处理起来运行;
		-1表示使用所有处理器。
		
random_state:int or RandomState, default=None
			  控制原始数据集的随机重采样(采样和特征)。
			  如果基估计器接受随机状态属性,则为集合中的每个实例生成不同的种子。
			  为跨多个函数调用的可复制输出传递int。

verbose:int, default=0
		 控制拟合和预测时的详细程度。

Attributes
----------
base_estimator_:估计量
			     集合增长的基估计量。

n_features_:int
		     执行拟合(fit)时的特征数。

estimators_:list of estimators
			 拟合基估计量的集合。

estimators_samples_: list of arrays
					 每个基本估计量的抽取样本的子集。

estimators_features_:list of arrays
					  每个基本估算器的绘制要素的子集。

classes_:ndarray of shape (n_classes,)
		  类标签。

n_classes_:int or list
			The number of classes.
			类数。

oob_score_:float
			使用没有选到的样本数据估计获得的训练数据集的分数。
			该属性仅在oob_score为True 时存在。

oob_decision_function_:ndarray of shape (n_samples, n_classes)
						使用训练集上的实际估计值计算的决策函数。
						如果n_estimators、小,则可能在引导过程中从未遗漏任何数据点。在这种情况下, oob_decision_function_可能包含NaN。
						该属性仅在oob_score为True 时存在。

2,方法

'decision_function(self, X)'
	基本分类器决策函数的平均值。
	Parameters
		X{array-like, sparse matrix} of shape (n_samples, n_features)
		训练输入样本。只有在基估计量支持稀疏矩阵的情况下,才接受它们。

	Returns
		score:ndarray of shape (n_samples, k)
		输入样本的决策函数。
		列按属性顺序显示在类别中,与它们对应 classes_。
		回归和二进制分类是的特例k == 1,否则k==n_classes.
	
'fit(self, X, y[, sample_weight])'
	从训练中建立一个估计量包集合.
	Parameters
		X:{array-like, sparse matrix} of shape (n_samples, n_features)
		训练输入样本。仅当基本估计量支持稀疏矩阵时,才接受。

		y:array-like of shape (n_samples,)
		目标值(分类中的类标签,回归中的实数)。

		sample_weight:array-like of shape (n_samples,), default=None
		样品重量。如果为None,则对样本进行平均加权。
		请注意,只有当基本估算器支持样本加权时,才支持此功能。

	Returns
		self:object

'get_params(self[, deep])'
	获取此估计量的参数。

'predict(self, X)'
	预测X的类。
	输入样本的预测类别被计算为具有最高平均预测概率的类别。
	如果基本估算器未实现predict_proba方法,则它会诉诸表决。

'predict_log_proba(self, X)'
	预测X的类对数概率。
	将输入样本的预测类对数概率计算为集合中基本估计量的平均预测类对数的对数。

'predict_proba(self, X)'
	预测X的类概率。
	计算输入样本的预测类别概率,作为集合中基本估计量的平均预测类别概率。
	如果基本估计量未实现predict_proba 方法,则该方法将诉诸表决,并且输入样本的预
	测类概率表示预测每个类的估计量的比例。
	
'score(self, X, y[, sample_weight])'
	返回给定测试数据和标签上的平均准确度。
	在多标签分类中,这是子集准确性,这是一个严格的指标,
	因为您需要为每个样本正确预测每个标签集。

'set_params(self, \*\*params)'
	设置此估算器的参数。

3,例子

>>> from sklearn.svm import SVC
>>> from sklearn.ensemble import BaggingClassifier
>>> from sklearn.datasets import make_classification
>>> X, y = make_classification(n_samples=100, n_features=4,
...                            n_informative=2, n_redundant=0,
...                            random_state=0, shuffle=False)
>>> clf = BaggingClassifier(base_estimator=SVC(),
...                         n_estimators=10, random_state=0).fit(X, y)
>>> clf.predict([[0, 0, 0, 0]])
array([1])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章