机器学习:7集成学习和随机森林

本文介绍了集成学习的概念,包括投票分类、Bagging、Pasting、Boosting(Adaboost、Gradient Boosting)和Stacking。重点讲述了随机森林的实现、极端随机树及其特征重要性的计算。通过实例展示了如何在sklearn中应用这些方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ipynb文件见:https://github.com/824024445/Machine-learning-notes/blob/master/7集成学习和随机森林.ipynb
《Sklearn与TensorFlow机器学习实用指南》学习笔记

一、集成学习

集成学习就是合并多个分类器的预测。
一般会在一个项目快结束的时候使用集成算法,一旦建立了一些好的分类器,就可以使用集成把它们合并成一个更好的分类器。
著名的集成方法:投票分类、bogging、pasting、boosting、stacking、和一些其它算法。

1.1 投票分类(少数服从多数)

令人惊奇的是这种投票分类器得出的结果经常会比集成中最好的一个分类器结果更好。
事实上,即使每一个分类器都是一个弱学习器(意味着它们也就比瞎猜好点),集成后仍然是一个强学习器(高准确率),只要有足够数量的弱学习者,他们就足够多样化。

如果每一个分类器都在同一个数据集上训练,会导致犯同一种类型的错误。相比较而言,每个分类器在不同的数据集上训练,集成后的结果会更好。
下面使用moons数据集,训练三个分类器,使用集成算法。

from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split

moons = make_moons(noise=0.3, random_state=0)
X, y = moons
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42)
# print(X_train[10], y_train[0])

[-0.65805008 -0.12944211] 0
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier #软投票/多数规则分类器
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC

log_clf = LogisticRegression()
rnd_clf = RandomForestClassifier()
svm_clf = SVC()

voting_clf = VotingClassifier(estimators=[("lr", log_clf), ("rf", rnd_clf), ("svc", svm_clf)], voting="hard")
#voting:"soft"/"hard"
#硬投票,默认"hrad"。"hard",使用预测的类标签进行多数规则投票。
#软投票,"soft",基于预测概率之和的argmax来预测类别标签,这推荐用于经过良好校准的分类器的集合。

# voting_clf.fit(X_train, y_train)

测一下准确率:

from sklearn.metrics import accuracy_score #分类准确度得分

for clf in (log_clf, rnd_clf, svm_clf, voting_clf):
  clf.fit(X_train, y_train)
  y_pred = clf.predict(X_test)
  print(clf.__class__.__name__, accuracy_score(y_test, y_pred))
LogisticRegression 0.875
RandomForestClassifier 0.925
SVC 0.95
VotingClassifier 0.95


/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.
  FutureWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.
  "10 in version 0.20 to 100 in 0.22.", FutureWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.
  "avoid this war
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值