Machine Learning | (8) Scikit-learn的分类器算法-随机森林(Random Forest)

举报
DrugAI 发表于 2021/07/15 01:43:30 2021/07/15
【摘要】 Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集与机器学习组成 Machine Learning | (3) Scikit-learn的分类器算法-k-近邻 Machine Learning | (4) Scikit-...

Machine Learning | 机器学习简介

Machine Learning | (1) Scikit-learn与特征工程

Machine Learning | (2) sklearn数据集与机器学习组成

Machine Learning | (3) Scikit-learn的分类器算法-k-近邻

Machine Learning | (4) Scikit-learn的分类器算法-逻辑回归

Machine Learning | (5) Scikit-learn的分类器算法-朴素贝叶斯

Machine Learning | (6) Scikit-learn的分类器算法-性能评估

Machine Learning | (7) Scikit-learn的分类器算法-决策树(Decision Tree)

Machine Learning | (8) Scikit-learn的分类器算法-随机森林(Random Forest)


随机森林(Random Forest)

在机器学习中,随机森林(Random Forest)是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。利用相同的训练数搭建多个独立的分类模型,然后通过投票的方式,以少数服从多数的原则作出最终的分类决策。例如, 如果你训练了5个树, 其中有4个树的结果是True, 1个数的结果是False, 那么最终结果会是True.

在前面的决策当中我们提到,一个标准的决策树会根据每维特征对预测结果的影响程度进行排序,进而决定不同的特征从上至下构建分裂节点的顺序,如此以来,所有在随机森林中的决策树都会受这一策略影响而构建的完全一致,从而丧失的多样性。所以在随机森林分类器的构建过程中,每一棵决策树都会放弃这一固定的排序算法,转而随机选取特征。

学习算法

根据下列算法而建造每棵树:

  • 用N来表示训练用例(样本)的个数,M表示特征数目。
  • 输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。
  • 从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。
  • 对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。

sklearn.ensemble,集成方法模块

sklearn.ensemble提供了准确性更加好的集成方法,里面包含了主要的RandomForestClassifier(随机森林)方法。


  
  1. class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None)
  2. """
  3. :param n_estimators:integer,optional(default = 10) 森林里的树木数量。
  4. :param criteria:string,可选(default =“gini”)分割特征的测量方法
  5. :param max_depth:integer或None,可选(默认=无)树的最大深度
  6. :param bootstrap:boolean,optional(default = True)是否在构建树时使用自举样本。
  7. """

属性

  • classes_:shape = [n_classes]的数组或这样的数组的列表,类标签(单输出问题)或类标签数组列表(多输出问题)。
  • featureimportances:array = [n_features]的数组, 特征重要性(越高,功能越重要)。

方法

  • fit(X,y [,sample_weight]) 从训练集(X,Y)构建一棵树林。

  • predict(X) 预测X的类

  • score(X,y [,sample_weight]) 返回给定测试数据和标签的平均精度。

  • decision_path(X) 返回森林中的决策路径


泰坦尼克号乘客数据案例

这里我们通过决策树和随机森林对这个数据进行一个分类,判断乘客的生还。


  
  1. import pandas as pd
  2. import sklearn
  3. from sklearn.cross_validation import train_test_split
  4. from sklearn.feature_extraction import DictVectorizer
  5. from sklearn.tree import DecisionTreeClassifier
  6. from sklearn.metrics import classification_report
  7. from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
  8. titanic = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
  9. #选取一些特征作为我们划分的依据
  10. x = titanic[['pclass', 'age', 'sex']]
  11. y = titanic['survived']
  12. # 填充缺失值
  13. x['age'].fillna(x['age'].mean(), inplace=True)
  14. x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
  15. dt = DictVectorizer(sparse=False)
  16. print(x_train.to_dict(orient="record"))
  17. # 按行,样本名字为键,列名也为键,[{"1":1,"2":2,"3":3}]
  18. x_train = dt.fit_transform(x_train.to_dict(orient="record"))
  19. x_test = dt.fit_transform(x_test.to_dict(orient="record"))
  20. # 使用决策树
  21. dtc = DecisionTreeClassifier()
  22. dtc.fit(x_train, y_train)
  23. dt_predict = dtc.predict(x_test)
  24. print(dtc.score(x_test, y_test))
  25. print(classification_report(y_test, dt_predict, target_names=["died", "survived"]))
  26. # 使用随机森林
  27. rfc = RandomForestClassifier()
  28. rfc.fit(x_train, y_train)
  29. rfc_y_predict = rfc.predict(x_test)
  30. print(rfc.score(x_test, y_test))
  31. print(classification_report(y_test, rfc_y_predict, target_names=["died", "survived"]))

 

文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。

原文链接:drugai.blog.csdn.net/article/details/104301208

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。