十 集成学习方法之随机森林
集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。大致可以分为:Bagging,Boosting 和 Stacking 三大类型。
(1)每次有放回地从训练集中取出 n 个训练样本,组成新的训练集;
(2)利用新的训练集,训练得到M个子模型;
(3)对于分类问题,采用投票的方法,得票最多子模型的分类类别为最终的类别;(取众数?平均数?)
随机森林属于集成学习,通过构建一个包含多个决策树(通常称为基学习器或弱学习器)的森林,每棵树都在不同的数据子集和特征子集上进行训练,最终通过投票或平均预测结果(取结果最多的数据作为预测数据)来产生更准确和稳健的预测。
优点:提高了预测精度,降低了过拟合风险,能够处理高维度和大规模数据集
1算法原理
-
随机: 特征随机,训练集随机(分类器是一样的,模型不一样)
-
样本:对于一个总体训练集T,T中共有N个样本,每次有放回地随机选择n个样本。用这n个样本来训练一个决策树。
-
特征:假设训练集的特征个数为d,每次仅选择k(k<d)个来构建决策树。
-
-
森林: 多个决策树分类器构成的分类器, 因为随机,所以可以生成多个决策树
-
处理具有高维特征的输入样本,而且不需要降维 (在进行训练集分类的时候就相当于已经进行了降维)
-
使用平均或者投票来提高预测精度和控制过拟合
2API
class sklearn.ensemble.RandomForestClassifier
参数:
n_estimators: int, default=100
森林中树木的数量。(决策树个数)
criterion: {“gini”, “entropy”}, default=”gini” 决策树属性划分算法选择
当criterion取值为“gini”时采用 基尼不纯度(Gini impurity)算法构造决策树;(基尼指数越小纯度越高,以最小的作为决策树第一层)
当criterion取值为 “entropy” 时采用信息增益( information gain)算法构造决策树.
max_depth: int, default=None 树的最大深度。
eg1
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
#数据导入
data = pd.read_csv('./src/titanic/titanic.csv')
# print(data["age"].mode()[0])
#数据预处理
data["age"].fillna(data["age"].mode()[0],inplace=True)
# print(data.tail())
y=data[["survived"]].to_numpy()
# print(y)
data.drop(["survived"],axis=1,inplace=True)
# print(data.tail())
x=data[["age","sex","pclass"]]
#数据转换
dict1=x.to_dict(orient='records')
# dict1
vec=DictVectorizer(sparse=False)
x=vec.fit_transform(dict1)
# print(x)
# print(y)
# 数据集划分
x_train,x_test,y_train,y_test=train_t