python3 学习使用随机森林分类器 梯度提升决策树分类 的api,并将他们和单一决策树预测结果做出对比

附上我的git,欢迎大家来参考我其他分类器的代码: https://github.com/linyi0604/MachineLearning

  1. import pandas as pd
  2. from sklearn.cross_validation import train_test_split
  3. from sklearn.feature_extraction import DictVectorizer
  4. from sklearn.tree import DecisionTreeClassifier
  5. from sklearn.metrics import classification_report
  6. from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
  7.  
  8. '''
  9. 集成分类器:
  10. 综合考量多个分类器的预测结果做出考量。
  11. 这种综合考量大体上分两种:
  12. 1 搭建多个独立的分类模型,然后通过投票的方式 比如 随机森林分类器
  13. 随机森林在训练数据上同时搭建多棵决策树,这些决策树在构建的时候会放弃唯一算法,随机选取特征
  14. 2 按照一定次序搭建多个分类模型,
  15. 他们之间存在依赖关系,每一个后续模型的加入都需要现有模型的综合性能贡献,
  16. 从多个较弱的分类器搭建出一个较为强大的分类器,比如梯度提升决策树
  17. 提督森林决策树在建立的时候尽可能降低成体在拟合数据上的误差。
  18.  
  19. 下面将对比 单一决策树 随机森林 梯度提升决策树 的预测情况
  20.  
  21. '''
  22.  
  23. '''
  24. 1 准备数据
  25. '''
  26. # 读取泰坦尼克乘客数据,已经从互联网下载到本地
  27. titanic = pd.read_csv("./data/titanic/titanic.txt")
  28. # 观察数据发现有缺失现象
  29. # print(titanic.head())
  30.  
  31. # 提取关键特征,sex, age, pclass都很有可能影响是否幸免
  32. x = titanic[['pclass', 'age', 'sex']]
  33. y = titanic['survived']
  34. # 查看当前选择的特征
  35. # print(x.info())
  36. '''
  37. <class 'pandas.core.frame.DataFrame'>
  38. RangeIndex: 1313 entries, 0 to 1312
  39. Data columns (total 3 columns):
  40. pclass 1313 non-null object
  41. age 633 non-null float64
  42. sex 1313 non-null object
  43. dtypes: float64(1), object(2)
  44. memory usage: 30.9+ KB
  45. None
  46. '''
  47. # age数据列 只有633个,对于空缺的 采用平均数或者中位数进行补充 希望对模型影响小
  48. x['age'].fillna(x['age'].mean(), inplace=True)
  49.  
  50. '''
  51. 2 数据分割
  52. '''
  53. x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=33)
  54. # 使用特征转换器进行特征抽取
  55. vec = DictVectorizer()
  56. # 类别型的数据会抽离出来 数据型的会保持不变
  57. x_train = vec.fit_transform(x_train.to_dict(orient="record"))
  58. # print(vec.feature_names_) # ['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=female', 'sex=male']
  59. x_test = vec.transform(x_test.to_dict(orient="record"))
  60.  
  61. '''
  62. 3.1 单一决策树 训练模型 进行预测
  63. '''
  64. # 初始化决策树分类器
  65. dtc = DecisionTreeClassifier()
  66. # 训练
  67. dtc.fit(x_train, y_train)
  68. # 预测 保存结果
  69. dtc_y_predict = dtc.predict(x_test)
  70.  
  71. '''
  72. 3.2 使用随机森林 训练模型 进行预测
  73. '''
  74. # 初始化随机森林分类器
  75. rfc = RandomForestClassifier()
  76. # 训练
  77. rfc.fit(x_train, y_train)
  78. # 预测
  79. rfc_y_predict = rfc.predict(x_test)
  80.  
  81. '''
  82. 3.3 使用梯度提升决策树进行模型训练和预测
  83. '''
  84. # 初始化分类器
  85. gbc = GradientBoostingClassifier()
  86. # 训练
  87. gbc.fit(x_train, y_train)
  88. # 预测
  89. gbc_y_predict = gbc.predict(x_test)
  90.  
  91. '''
  92. 4 模型评估
  93. '''
  94. print("单一决策树准确度:", dtc.score(x_test, y_test))
  95. print("其他指标:\n", classification_report(dtc_y_predict, y_test, target_names=['died', 'survived']))
  96.  
  97. print("随机森林准确度:", rfc.score(x_test, y_test))
  98. print("其他指标:\n", classification_report(rfc_y_predict, y_test, target_names=['died', 'survived']))
  99.  
  100. print("梯度提升决策树准确度:", gbc.score(x_test, y_test))
  101. print("其他指标:\n", classification_report(gbc_y_predict, y_test, target_names=['died', 'survived']))
  102.  
  103. '''
  104. 单一决策树准确度: 0.7811550151975684
  105. 其他指标:
  106. precision recall f1-score support
  107.  
  108. died 0.91 0.78 0.84 236
  109. survived 0.58 0.80 0.67 93
  110.  
  111. avg / total 0.81 0.78 0.79 329
  112.  
  113. 随机森林准确度: 0.78419452887538
  114. 其他指标:
  115. precision recall f1-score support
  116.  
  117. died 0.91 0.78 0.84 237
  118. survived 0.58 0.80 0.68 92
  119.  
  120. avg / total 0.82 0.78 0.79 329
  121.  
  122. 梯度提升决策树准确度: 0.790273556231003
  123. 其他指标:
  124. precision recall f1-score support
  125.  
  126. died 0.92 0.78 0.84 239
  127. survived 0.58 0.82 0.68 90
  128.  
  129. avg / total 0.83 0.79 0.80 329
  130.  
  131. '''

机器学习之路:python 集成分类器 随机森林分类RandomForestClassifier 梯度提升决策树分类GradientBoostingClassifier 预测泰坦尼克号幸存者的更多相关文章

  1. 机器学习之路: python 线性回归LinearRegression, 随机参数回归SGDRegressor 预测波士顿房价

    python3学习使用api 线性回归,和 随机参数回归 git: https://github.com/linyi0604/MachineLearning from sklearn.datasets ...

  2. 吴裕雄 python 机器学习——集成学习随机森林RandomForestRegressor回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  3. 吴裕雄 python 机器学习——集成学习随机森林RandomForestClassifier分类模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  4. Python 实现的随机森林

    随机森林是一个高度灵活的机器学习方法,拥有广泛的应用前景,从市场营销到医疗保健保险. 既可以用来做市场营销模拟的建模,统计客户来源,保留和流失.也可用来预测疾病的风险和病患者的易感性. 随机森林是一个 ...

  5. Spark2.0机器学习系列之6:GBDT(梯度提升决策树)、GBDT与随机森林差异、参数调试及Scikit代码分析

    概念梳理 GBDT的别称 GBDT(Gradient Boost Decision Tree),梯度提升决策树.     GBDT这个算法还有一些其他的名字,比如说MART(Multiple Addi ...

  6. 吴裕雄 python 机器学习——集成学习梯度提升决策树GradientBoostingRegressor回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  7. chapter02 三种决策树模型:单一决策树、随机森林、GBDT(梯度提升决策树) 预测泰坦尼克号乘客生还情况

    单一标准的决策树:会根每维特征对预测结果的影响程度进行排序,进而决定不同特征从上至下构建分类节点的顺序.Random Forest Classifier:使用相同的训练样本同时搭建多个独立的分类模型, ...

  8. [机器学习]梯度提升决策树--GBDT

    概述 GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由 ...

  9. 【深度森林第三弹】周志华等提出梯度提升决策树再胜DNN

    [深度森林第三弹]周志华等提出梯度提升决策树再胜DNN   技术小能手 2018-06-04 14:39:46 浏览848 分布式 性能 神经网络   还记得周志华教授等人的“深度森林”论文吗?今天, ...

随机推荐

  1. 训练赛第三场A题 zoj 559

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2559 解题报告:比赛的时候的想法是可以确定至少有两对相切的圆,所 ...

  2. linux查看及设置别名,权限,生成ssh秘钥

    1.alias :查看系统中所有的命令别名 2.设定别名 alias 别名='原命令' 3.删除别名 unalias 别名 4.使别名永久生效    vi  ~/.bashrc  写入这个文件中即可永 ...

  3. python作业ATM(第五周)

    作业需求: 额度 15000或自定义. 实现购物商城,买东西加入 购物车,调用信用卡接口结账. 可以提现,手续费5%. 支持多账户登录. 支持账户间转账. 记录每月日常消费流水. 提供还款接口. AT ...

  4. 关于onConfigurationChanged

    这两天测试app时,发现一个奇怪问题,app在启动后,Activity会onCreate两次,起初以为是横屏设置导致,随即在Activity中添加了android:configChanges=&quo ...

  5. 音频增益响度分析 ReplayGain 附完整C代码示例【转】

    转自:http://www.cnblogs.com/cpuimage/p/8846951.html 人们所熟知的图像方面的3A算法有: AF自动对焦(Automatic Focus)自动对焦即调节摄像 ...

  6. HDU 6212 Zuma 2017青岛网络赛 区间DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6212 解法:看了眼题就发现这个BZOJ 1032不是一毛一样?但是BZOJ上那是个巨坑,数据有错,原来 ...

  7. RabbitMQ--Hello world!(一)

    Introduction RabbitMQ is a message broker. The principal idea is pretty simple: it accepts and forwa ...

  8. maven scope 'provided' 和 ‘compile’的区别

    解释 其实这个问题很简单. 对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact(模块)对应的jar包在classpath中. 而对 ...

  9. SQL2008数据库导出到SQL2000全部步骤过程

    2008转到2000的步骤 1. 在sql2008上生成for 2000版本的数据库脚本 -- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例, 右键要转到2000的库 ...

  10. sql server2012 企业版 百度云下载

    链接: https://pan.baidu.com/s/1j7a6RWwpvSzG-sF7Dnexfw 提取码: 关注公众号[GitHubCN]回复获取