机器学习-决策树系列-随机森林 集成学习-28
1. 概念
多个决策树组合在一起 对新来的样本进行预测 输出预测结果
有朋友的意见投票, 少数服从多数, 有的给出-1 有的给+1 将这些结果全部加一起 最后取符号是+1 -1 就行
majority can corret minority
不同的模型 给不同的权重:
如何生成不同的 决策树模型:
- 同样的数据 但是训练的超参 不同
- 同样的参数:
- 用不同的样本 训练
- 用不同的特征值训练
什么是bagging
bagging:对训练集进行抽样, 将抽样的结果用于训练g(x)。并行,独立训练。例如:random forest
boosting:利用训练集训练出模型 根据本次模型的预测结果, 调整训练集, 然后利用调整后的训练集训练下一个模型。串行。例如:adaboost,GBDT,Xgboost
random forest的思想:
有放回的随机抽取样本 训练得到单个gt 所有的gt均匀的对结果进行预测
随机森林
1、随机选择样本(放回抽样);
2、随机选择特征;
3、构建决策树;
4、随机森林投票(平均)
优点:
1.表现良好
2.可以处理高维度数据(维度随机选择)
3.辅助进行特征选择
4.得益于bagging 可以进行并行训练
缺点:
对于噪声过大的数据容易过拟合
什么是Out of bag data?
在进行抽样的时候, 有些有价值的样本数据始终没有被选到
概率:
这些训练过程中没有被选中的样本 就可以对训练的 模型进行验证 叫做验证集
rnd_clf.oob_score
3. 代码
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:, :2] # 花萼长度和宽度
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
rnd_clf = RandomForestClassifier(n_estimators=15, max_leaf_nodes=16, n_jobs=1, oob_score=True)
rnd_clf.fit(X_train, y_train)
print(rnd_clf.oob_score_)
# bag_clf = BaggingClassifier(
# DecisionTreeClassifier(splitter="random", max_leaf_nodes=16),
# n_estimators=15, max_samples=1.0, bootstrap=True, n_jobs=1
# )
# bag_clf.fit(X_train, y_train)
y_pred_rf = rnd_clf.predict(X_test)
# y_pred_bag = bag_clf.predict(X_test)
print(accuracy_score(y_test, y_pred_rf))
# print(accuracy_score(y_test, y_pred_bag))
# Feature Importance
iris = load_iris()
rnd_clf = RandomForestClassifier(n_estimators=500, n_jobs=-1)
rnd_clf.fit(iris["data"], iris['target'])
for name, score in zip(iris['feature_names'], rnd_clf.feature_importances_):
print(name, score)
4. 代码2
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
log_clf = LogisticRegression()
rnd_clf = RandomForestClassifier()
svm_clf = SVC()
voting_clf = VotingClassifier(
estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],
voting='hard'
)
iris = load_iris()
X = iris.data[:, :2] # 花萼长度和宽度
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
# voting_clf.fit(X, y)
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))
bag_clf = BaggingClassifier(
DecisionTreeClassifier(), n_estimators=10,
max_samples=1.0, bootstrap=True, n_jobs=1
)
bag_clf.fit(X_train, y_train)
y_pred = bag_clf.predict(X_test)
print(y_pred)
y_pred_proba = bag_clf.predict_proba(X_test)
print(y_pred_proba)
print("bagging", accuracy_score(y_test, y_pred))
# oob
bag_clf = BaggingClassifier(
DecisionTreeClassifier(), n_estimators=500,
bootstrap=True, n_jobs=1, oob_score=True
)
bag_clf.fit(X_train, y_train)
print(bag_clf.oob_score_)
y_pred = bag_clf.predict(X_test)
print(accuracy_score(y_test, y_pred))
print(bag_clf.oob_decision_function_)
分类:
机器学习
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战