赞
踩
随机森林是一种集成学习方法
集成学习通过建立几个模型组合的方法来解决单一预测问题。他的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成组合预测,因此优于任何一个单分类作出的预测。
在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。例如,如果你训练了5个树,其中有4个树的结果是True,1个树的结果为False,那么最终的投票结果就是True。
两个随机(假设N个样本,M个特征)
训练集随机:从N个样本中随机有放回得抽样N个
BootStrap(非前端框架):随机有放回的抽样
特征值随机:从M个特征中随机的抽取m个特征(M >> m)
为什么随机抽样?
答:如果不进行随机抽样,每颗树的训练集都一样,那么最终训练出来的树分类结果也是完全一样的;
为什么有放回抽样?
答:如果不是有放回的抽样,那么每颗树的训练样本是不一样的,都是没有交集的,这样每颗树都是有偏
sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion='gini',max_depth=None,bootstrap=True,random_state=None,min_samples_split=2)
- 随机森林分类器
- n_estimators:integer,optional(default=10)森林里的树木数量
- criterion:string,可选(default='gini')分割特征的测量方法
- max_depth:integer或None,可选(默认无)树的最大深度
- max_features='auto' 每个决策树的最大特征数量
1.if 'auto',then max_feature=sqrt(n_features)
2.if 'sqrt',then max_features=sqrt(n_features)(same as suto)
3.if 'log2',then max_features=log2(n_features)
4.if None,then max_features=n_features
- bootstrap:boolean,optional(default = True)在构建树时是否放回抽样
- min_samples_split:节点划分最少样本树
- min_samples_leaf:叶子节点最小样本数
代码如下所示(加入了超参数搜索):
import pandas as pd from sklearn.feature_extraction import DictVectorizer from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.ensemble import RandomForestClassifier def titanic_demo(): # 1)、获取数据 titanic = pd.read_csv("/Users/dengzhao/Desktop/数据集/titanic/train.csv") # 2)、筛选特征值和目标值 x = titanic[["Pclass","Age","Sex"]] y = titanic["Survived"] # 3)、缺失值处理 x["Age"].fillna(x["Age"].mean(),inplace=True) # 4、转换成字典 x = x.to_dict(orient="records") # 5)、数据集的划分 x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=22)# random_state随机数种子 # 6)、字典特征抽取 transfer = DictVectorizer() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) # 7)、转换器 estimator = RandomForestClassifier() # 8)、模型评价 # 加如网格搜索和交叉验证 # 参数准备 param_dic = {"n_estimators": [120,200,300,500,800,1200],'max_depth':[5,8,10,12,14]} estimator = GridSearchCV(estimator, param_grid=param_dic, cv=3) estimator.fit(x_train, y_train) # 5)模型评估 """评估方法1:直接比对真实值和预测值""" y_predict = estimator.predict(x_test) print("y_predict:\n", y_predict) print("直接比对真实值和预测值:\n", y_test == y_predict) """评估方法2:计算准确率""" score = estimator.score(x_test, y_test) # 相当于计算了预估器的准确率,因为这里本来是完全一致的 print("准确率:\n", score) # 最佳参数:best_params_ print("最佳参数\n", estimator.best_params_) # 最佳结果:best_score_ print("最佳结果\n", estimator.best_score_) # 最佳估计器:best_estimator_ print("最佳估计器\n", estimator.best_estimator_) # 交叉验证结果:cv_results_ print("交叉验证结果\n", estimator.cv_results_) return if __name__ == '__main__': titanic_demo()
结果如下:
准确率:
0.7623318385650224
最佳参数
{‘max_depth’: 5, ‘n_estimators’: 120}
最佳结果
0.8174093375887098
最佳估计器
RandomForestClassifier(max_depth=5, n_estimators=120)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。