江山建設(shè)工程信息網(wǎng)站網(wǎng)站開(kāi)發(fā)的基本流程
集成學(xué)習(xí):投票法、提升法、袋裝法
目錄
- 🗳? 投票法 (Voting)
- 🚀 提升法 (Boosting)
- 🛍? 袋裝法 (Bagging)
1. 🗳? 投票法 (Voting)
投票法是一種強(qiáng)大的集成學(xué)習(xí)策略,它通過(guò)將多個(gè)模型的預(yù)測(cè)結(jié)果進(jìn)行組合,旨在提升整體模型的性能。這種方法可以分為簡(jiǎn)單投票和加權(quán)投票兩種形式。在簡(jiǎn)單投票中,每個(gè)模型對(duì)分類(lèi)結(jié)果的投票權(quán)重相同,而在加權(quán)投票中,則根據(jù)模型的表現(xiàn)為每個(gè)模型分配不同的權(quán)重。通過(guò)集成多個(gè)模型,投票法能夠有效降低單一模型的偏差,提高預(yù)測(cè)的準(zhǔn)確性。
投票法的實(shí)現(xiàn)
以下是投票法的基本實(shí)現(xiàn),通過(guò) scikit-learn
庫(kù)的 VotingClassifier
進(jìn)行組合:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import VotingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加載數(shù)據(jù)
iris = load_iris()
X = iris.data
y = iris.target# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 定義基學(xué)習(xí)器
clf1 = LogisticRegression(solver='liblinear')
clf2 = DecisionTreeClassifier()
clf3 = SVC(probability=True)# 創(chuàng)建投票分類(lèi)器
voting_clf = VotingClassifier(estimators=[('lr', clf1), ('dt', clf2), ('svc', clf3)], voting='soft')# 訓(xùn)練模型
voting_clf.fit(X_train, y_train)# 預(yù)測(cè)并評(píng)估
y_pred = voting_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)print(f'Voting Classifier Accuracy: {accuracy:.2f}')
投票法的優(yōu)勢(shì)
投票法的主要優(yōu)勢(shì)在于它能夠結(jié)合不同模型的強(qiáng)項(xiàng),減少單個(gè)模型可能產(chǎn)生的錯(cuò)誤。此外,在存在噪聲數(shù)據(jù)時(shí),投票法也能夠有效提高穩(wěn)定性。通過(guò)集成多種算法,投票法能夠適應(yīng)不同的決策邊界,達(dá)到更為理想的分類(lèi)效果。簡(jiǎn)單投票的實(shí)現(xiàn)易于理解,而加權(quán)投票則能更好地利用各個(gè)模型的特長(zhǎng)。通過(guò)這種組合,模型的泛化能力得到提升,特別是在復(fù)雜的數(shù)據(jù)集上。
2. 🚀 提升法 (Boosting)
提升法是一種通過(guò)逐步訓(xùn)練多個(gè)弱分類(lèi)器來(lái)構(gòu)建強(qiáng)分類(lèi)器的技術(shù)。它的核心思想是將關(guān)注點(diǎn)放在那些被先前分類(lèi)器錯(cuò)誤分類(lèi)的樣本上。通過(guò)這種方式,提升法能夠逐步減少模型的偏差,提高整體預(yù)測(cè)的準(zhǔn)確性。常見(jiàn)的提升算法包括 AdaBoost 和 XGBoost 等。
提升法的實(shí)現(xiàn)
以下是使用 AdaBoost 的示例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score# 加載數(shù)據(jù)
iris = load_iris()
X = iris.data
y = iris.target# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 創(chuàng)建基礎(chǔ)學(xué)習(xí)器
base_estimator = DecisionTreeClassifier(max_depth=1)# 創(chuàng)建 AdaBoost 分類(lèi)器
ada_clf = AdaBoostClassifier(base_estimator=base_estimator, n_estimators=50)# 訓(xùn)練模型
ada_clf.fit(X_train, y_train)# 預(yù)測(cè)并評(píng)估
y_pred = ada_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)print(f'AdaBoost Classifier Accuracy: {accuracy:.2f}')
提升法的優(yōu)勢(shì)
提升法的最大優(yōu)勢(shì)在于其強(qiáng)大的預(yù)測(cè)能力,尤其是在面對(duì)復(fù)雜的數(shù)據(jù)模式時(shí)。通過(guò)將多個(gè)弱分類(lèi)器的結(jié)果結(jié)合,提升法能夠形成一個(gè)高度準(zhǔn)確的強(qiáng)分類(lèi)器。此外,提升法對(duì)異常值和噪聲的魯棒性較強(qiáng),能夠有效降低過(guò)擬合的風(fēng)險(xiǎn)。由于其逐步學(xué)習(xí)的特性,提升法還能夠?yàn)槊總€(gè)樣本分配不同的權(quán)重,從而更有效地學(xué)習(xí)復(fù)雜的決策邊界。使用提升法時(shí),選擇合適的基礎(chǔ)學(xué)習(xí)器和參數(shù)設(shè)置至關(guān)重要,這將直接影響模型的性能。
3. 🛍? 袋裝法 (Bagging)
袋裝法是一種通過(guò)對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行重采樣的技術(shù),旨在提升模型的穩(wěn)定性和準(zhǔn)確性。袋裝法通過(guò)在多個(gè)子集上訓(xùn)練多個(gè)模型,最終將它們的預(yù)測(cè)結(jié)果進(jìn)行組合,以減少方差并提高整體性能。隨機(jī)森林是袋裝法的經(jīng)典應(yīng)用,結(jié)合了決策樹(shù)的優(yōu)勢(shì)和袋裝法的靈活性。
袋裝法的實(shí)現(xiàn)
以下是使用隨機(jī)森林實(shí)現(xiàn)袋裝法的示例:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score# 加載數(shù)據(jù)
iris = load_iris()
X = iris.data
y = iris.target# 劃分訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 創(chuàng)建隨機(jī)森林分類(lèi)器
rf_clf = RandomForestClassifier(n_estimators=100, random_state=42)# 訓(xùn)練模型
rf_clf.fit(X_train, y_train)# 預(yù)測(cè)并評(píng)估
y_pred = rf_clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)print(f'Random Forest Classifier Accuracy: {accuracy:.2f}')
袋裝法的優(yōu)勢(shì)
袋裝法的核心優(yōu)勢(shì)在于其通過(guò)重采樣減少方差,進(jìn)而提高模型的穩(wěn)定性。這種方法能夠有效防止過(guò)擬合,尤其是在數(shù)據(jù)量較小或特征較多的情況下。隨機(jī)森林作為袋裝法的代表,結(jié)合了多棵決策樹(shù)的預(yù)測(cè)結(jié)果,通常能獲得優(yōu)于單一模型的效果。此外,袋裝法的并行性使得其在訓(xùn)練速度上也具有一定優(yōu)勢(shì),尤其在數(shù)據(jù)集較大時(shí),能夠顯著減少訓(xùn)練時(shí)間。
通過(guò)對(duì)多個(gè)模型的集成,袋裝法能夠充分發(fā)揮每個(gè)模型的長(zhǎng)處,從而形成更為穩(wěn)定和高效的預(yù)測(cè)系統(tǒng)。由于其結(jié)構(gòu)的簡(jiǎn)單性和易于實(shí)現(xiàn)的特點(diǎn),袋裝法被廣泛應(yīng)用于各類(lèi)機(jī)器學(xué)習(xí)任務(wù)中,成為數(shù)據(jù)科學(xué)家和工程師的常用工具。