决策树模型练习:https://www.kaggle.com/c/GiveMeSomeCredit/overview

1. 监督学习--分类

机器学习肿分类和预测算法的评估:

  a. 准确率

  b.速度

  c. 强壮行

  d.可规模性

  e. 可解释性

2. 什么是决策树/判定树(decision tree)?

https://scikit-learn.org/stable/modules/tree.html

3. 熵(entropy)概念:

变量的不确定越大,熵也就越大。

4. 决策树归纳算法(ID3)

5. 其他算法及优缺点

6. 决策树的应用

生成后的决策树

逻辑代码:

整理好的代码 --》

python3.6.3

Successfully installed joblib-0.13.2 numpy-1.16.4 scikit-learn-0.21.2 scipy-1.3.0

  1. # -*- coding:utf-8 -*-
  2. from sklearn.feature_extraction import DictVectorizer
  3. import csv
  4. from sklearn import preprocessing
  5. from sklearn import tree # 要求是数值型的值
  6. from sklearn.externals.six import StringIO
  7. import pandas as pd
  8.  
  9. """
  10. 注意: 决策树要求要数值型的值,不能是字符串类型的值
  11. 例如: no, yes这样的值是不允许的
  12. 需要转换成矩阵
  13. ====================================
  14. age income student
  15. youth high no
  16. youth high no
  17. middle_aged high no
  18. senior medium no
  19. senior low yes
  20. ====================================
  21.  
  22. 比如上面这种数据:
  23. youth middle_aged senior high medium low ......
  24. 1 0 0 1 0 0
  25. 1 0 0 1 0 0
  26. .....
  27.  
  28. """
  29.  
  30. fileName = r"C:\Users\Administrator\Desktop\data.xlsx"
  31. data = pd.read_excel(fileName)
  32. # 删除id序列
  33. del data["RID"]
  34. # headers
  35. headers = data.columns.values
  36. # print(headers)
  37. # ["RID", 'age'.....]
  38.  
  39. # 样本量
  40. # print(len(data))
  41.  
  42. # dict格式化单个样本
  43. # print(dict(data.ix[1]))
  44. # 单个样本最后一个数据
  45. # print(data.ix[1][-1])
  46.  
  47. featureList = []
  48. labelList = []
  49. for row in range(len(data)):
  50. rowData = data.ix[row]
  51. labelList.append(rowData[-1])
  52. featureList.append(dict(rowData))
  53.  
  54. # print(featureList)
  55.  
  56. # [
  57. # {"credit_rating": "fair", "age": "youth"},
  58. # .... #作用,方便转换成矩阵。将数据转换成对象
  59. # ]
  60. # print(labelList)
  61. # ['no', 'no', 'yes', 'yes', 'yes', 'no', 'yes', 'no', 'yes', 'yes', 'yes', 'yes', 'yes', 'no']
  62.  
  63. # =========<格式化数据,转换成decision tree需要的格式模型>============
  64.  
  65. vec = DictVectorizer()
  66. dummyX = vec.fit_transform(featureList).toarray()
  67.  
  68. print("dummyX:" + str(dummyX)) # 转换成矩阵的数据了二维
  69. print(vec.get_feature_names())
  70.  
  71. print("labelList: " + str(labelList))
  72.  
  73. lb = preprocessing.LabelBinarizer()
  74. dummyY = lb.fit_transform(labelList)
  75. print("dummyY: " + str(dummyY))
  76.  
  77. # ===========《决策树建模分析》=============
  78.  
  79. clf = tree.DecisionTreeClassifier(criterion="entropy")
  80. clf = clf.fit(dummyX, dummyY)
  81. print("clf: ", str(clf))
  82.  
  83. # # 存储决策树信息
  84.  
  85. # # Graphviz 将dot转换成pdf的命令: dot -T pdf iris.dot -o output.pdf
  86. # # 可以查看decision tree 的形状了(看pdf的值)
  87. # with open(r"C:\Users\Administrator\Desktop\code\mechine_learning\allElectronicInformationGainOri.dot", "w") as f:
  88. # f = tree.export_graphviz(clf, feature_names = vec.get_feature_names(), out_file = f)
  89.  
  90. # # 下面的代码属于预测的代码
  91. # # 属于转化后的矩阵数值,其实就是进行复制修改
  92. oneRowX = dummyX[2, :]
  93. print("oneRowX: " + str(oneRowX))
  94.  
  95. newRowX = oneRowX
  96.  
  97. # newRowX[0] = 1
  98. # newRowX[2] = 1
  99. print("newRowX: ", str(newRowX))
  100.  
  101. predictedY = clf.predict([newRowX])
  102. # 预测 class_buys_labels的值
  103. print("predictedY: " + str(predictedY))

但这段代码不是特别通用,而且有bug, 需要修改,但基本逻辑是正确的

  1. # -*- coding:utf-8 -*-
  2. from sklearn.feature_extraction import DictVectorizer
  3. import csv
  4. from sklearn import preprocessing
  5. from sklearn import tree # 要求是数值型的值
  6. from sklearn.externals.six import StringIO
  7.  
  8. """
  9. 注意: 决策树要求要数值型的值,不能是字符串类型的值
  10. 例如: no, yes这样的值是不允许的
  11. 需要转换成矩阵
  12. ====================================
  13. age income student
  14. youth high no
  15. youth high no
  16. middle_aged high no
  17. senior medium no
  18. senior low yes
  19. ====================================
  20.  
  21. 比如上面这种数据:
  22. youth middle_aged senior high medium low ......
  23. 1 0 0 1 0 0
  24. 1 0 0 1 0 0
  25. .....
  26.  
  27. """
  28.  
  29. allElectronicsData = open(r"C:\Users\Administrator\Desktop\data.xlsx", 'r')
  30. reader = csv.reader(allElectronicsData)
  31. print(reader)
  32. headers = next(reader)
  33.  
  34. print(headers)
  35. # ["RID", 'age'.....]
  36.  
  37. featureList = []
  38. labelList = []
  39. for row in reader:
  40. labelList.append(row[len(row) - 1])
  41. rowDict = {}
  42. for i in range(1, len(row) - 1):
  43. rowDict[headers[i]] = row[i]
  44.  
  45. featureList.append(rowDict)
  46.  
  47. print(featureList)
  48. # [
  49. # {"credit_rating": "fair", "age": "youth"},
  50. # .... #作用,方便转换成矩阵。将数据转换成对象
  51. # ]
  52.  
  53. vec = DictVectorizer()
  54. dummyX = vec.fit_transform(featureList).toarray()
  55.  
  56. print("dummyX:" + str(dummyX)) # 转换成矩阵的数据了二维
  57. print(vec.get_feature_names())
  58.  
  59. print("labelList: " + str(labelList))
  60.  
  61. lb = preprocessing.LabelBinarizer()
  62. dummyY = lb.fit_transform(labelList)
  63. print("dummyY: " + str(dummyY))
  64.  
  65. clf = tree.DecisionTreeClassifier(criterion="entropy")
  66. clf = clf.fit(dummyX, dummyY)
  67. print("clf: ", str(clf))
  68.  
  69. # 存储决策树信息
  70.  
  71. # Graphviz 将dot转换成pdf的命令: dot -T pdf iris.dot -o output.pdf
  72. # 可以查看decision tree 的形状了(看pdf的值)
  73. with open(r"C:\Users\Administrator\Desktop\code\mechine_learning\allElectronicInformationGainOri.dot", "w") as f:
  74. f = tree.export_graphviz(clf, feature_names = vec.get_feature_names(), out_file = f)
  75.  
  76. # 下面的代码属于预测的代码
  77. # 属于转化后的矩阵数值,其实就是进行复制修改
  78. oneRowX = dummyX[0, :]
  79. print("oneRowX: " + str(oneRowX))
  80.  
  81. newRowX = oneRowX
  82.  
  83. newRowX[0] = 1
  84. newRowX[2] = 0
  85. print("newRowX: ", str(newRowX))
  86.  
  87. predictedY = clf.predicted(newRowX)
  88. # 预测 class_buys_labels的值
  89. predicted("predictedY: " + str(predictedY))
  90.  
  91. if __name__ == '__main__':
  92. main()

python_机器学习_监督学习模型_决策树的更多相关文章

  1. [并发并行]_[线程模型]_[Pthread线程使用模型之三 客户端/服务端模型(Client/Server]

    Pthread线程使用模型之三 客户端/服务端模型(Client/Server) 场景 1.在客户端/服务端模型时,客户端向服务端请求一些数据集的操作. 服务端执行执行操作独立的(多进程或跨网络)– ...

  2. [并发并行]_[线程模型]_[Pthread线程使用模型之二 工作组work crew]

    Pthread线程使用模型之二工作组(Work crew) 场景 1.一些耗时的任务,比如分析多个类型的数据, 是独立的任务, 并不像 pipeline那样有序的依赖关系, 这时候pipeline就显 ...

  3. [并发并行]_[线程模型]_[Pthread线程使用模型之一管道Pipeline]

    场景 1.经常在Windows, MacOSX 开发C多线程程序的时候, 经常需要和线程打交道, 如果开发人员的数量不多时, 同时掌握Win32和pthread线程 并不是容易的事情, 而且使用Win ...

  4. Java_太阳系_行星模型_小游戏练习_详细注释

    //实现MyFrame--实现绘制窗口,和实现重写 重画窗口线程类 package cn.xiaocangtian.Test; import java.awt.Frame; import java.a ...

  5. 网络_OSI模型_数据包传输

    2017年1月12日, 星期四 网络_OSI模型_数据包传输 1.  网络_源主机_局域网_交换机_路由器_目标主机 2. OSI7七层_TCP/IP精简 OSI 7层:       应用层     ...

  6. (转)看穿机器学习(W-GAN模型)的黑箱

        本文转自:http://www.360doc.com/content/17/0212/11/35919193_628410589.shtml#   看穿机器学习(W-GAN模型)的黑箱 201 ...

  7. Spark机器学习6·聚类模型(spark-shell)

    K-均值(K-mean)聚类 目的:最小化所有类簇中的方差之和 类簇内方差和(WCSS,within cluster sum of squared errors) fuzzy K-means 层次聚类 ...

  8. spark机器学习从0到1决策树(六)

      一.概念 决策树及其集合是分类和回归的机器学习任务的流行方法. 决策树被广泛使用,因为它们易于解释,处理分类特征,扩展到多类分类设置,不需要特征缩放,并且能够捕获非线性和特征交互. 诸如随机森林和 ...

  9. Python 机器学习实战 —— 监督学习(上)

    前言 近年来AI人工智能成为社会发展趋势,在IT行业引起一波热潮,有关机器学习.深度学习.神经网络等文章多不胜数.从智能家居.自动驾驶.无人机.智能机器人到人造卫星.安防军备,无论是国家级军事设备还是 ...

随机推荐

  1. javascript 生成指定范围内的随机数

    js 生成任意2个区间内的随机整数,js 生成两个数之间的随机数 function random(m,n) { return Math.floor(Math.random() * (n - m)) + ...

  2. 远程控制服务(SSH)之Windows远程登陆Linux主机

    本篇blog同样介绍两种方式进行. 首先进行准备工作: 1.所用到的工具如下: (1)     装有Linux系统的VMware虚拟机*1 (2)     终端连接工具Xshell 6 2.将Wind ...

  3. 02vuex-modules

    01===> module的理解:将一个大的系统进行拆分 拆分成若干个细的模块 给个模块都有自己的 state mutations 等属性 这样可以在自己的小模块中进行修改 方便维护 modul ...

  4. springmvc+strut2比较

    常见web框架中Struts2和SpringMVC独占鳌头,SpringMVC和Struts有什么不同? 我们可以从各个方面进行对比: 一:框架的思想设计上 SpringMVC控制器是基于方法上拦截, ...

  5. idea多模块项目打开RunDashBoard(十)

    在使用spring cloud微服务时,多个服务可以以多个独立子模块(module)的形式放在一个project里面,当服务过多时,一个个启动往往不是很方便,idea有一个贴心的RunDashBoar ...

  6. js判断为空

    function isEmpty (va){    if("undefined" == va){        return true;    }    if(null == va ...

  7. 优雅的阅读CSDN博客

    CSDN现在似乎不强制登录了2333.但是广告多了也是碍眼的不行...将下列css添加到stylus中就行了. 代码转自xzz的博客. 自己修改了一下,屏蔽了登录弹出框. .article_conte ...

  8. hw笔试题-02

    #include<stdio.h> #include<string.h> typedef struct { char *mem; char len; }m_table_t; i ...

  9. (二十四)golang--错误处理

    在默认情况下,遇到错误时,程序会崩溃: 在发生错误时,我们可以捕获错误,使程序可以继续运行,并抛出错误提示: 错误处理: (1)Go语言追求简洁优雅,所以不支持传统的try catch finally ...

  10. vue 移动端禁止浏览器后退,禁止安卓和ios点击后退操作乱跳页面

    开发微信公众号网页,页面登录成功之后,是禁止再次返回到登录页. 我在页面设置了让禁止跳到登录页,可是在手机上有自带的微信浏览器后退按钮,所以必须要禁止浏览器后退,才能禁止后退到登录页. 刚开始百度,查 ...