集成方法 - 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])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章