集成学习方法之随机森林
集成学习方法
集成学习通过建立几个模型的组合来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和做出预测。这些预测最后结合成组合预测,因此优于任何一个单分类做出的预测。
随机森林
在机器学习中,随机森林是一个包含多个决策的分类器,并且其输出的类别是由个别树输出的类别的众数而定。
例如,如果你训练了5个树,其中有4个树的结果是True,1个树的结果是False,那么最终的结果就是True.
随机森林原理过程
学习算法根据下列算法而建造每棵树:
用N来表示训练例(样本)的个数,M表示特征数目。
1 一次随机选出一个样本,重复N次(有可能出现重复的样本)。
2 随机去选出m个特征,要求m<<M,建立决策树。
采取bootstrap抽样(即有放回的抽样)
为什么要有放回的抽样呢?
用随机森林来对鸢尾花数据进行预测:
#导入实现随机森林的模块 from sklearn.ensemble import RandomForestClassifier
#利用随机森林对鸢尾花进行分类 def multi_decision_iris(): ''' 用决策树对鸢尾花进行分类 :return: ''' #1 获取数据集 iris = load_iris() #2 划分数据集,传入特征值和目标值,返回的是,训练集的特征值,测试集的特征值,训练集的目标值,测试集合的目标值 x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state = 22) #使用随机森林法 estimator = RandomForestClassifier() # 加入网格搜索和交叉验证 # 参数准备 param_dict = {"n_estimators": [120, 200, 300, 500, 800, 1200],"max_depth":[5,8,15,25,30]} # cv是交叉验证次数,param_grid是要确定的超参的范围 estimator = GridSearchCV(estimator, param_grid=param_dict, 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 None
结果:
总结:
随机森林:
在当前所有算法中,具有极好的准确率。
能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维。
能够评估各个特征在分类问题上的重要性。