决策树模型练习: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

# -*- coding:utf-8 -*-
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree # 要求是数值型的值
from sklearn.externals.six import StringIO
import pandas as pd """
注意: 决策树要求要数值型的值,不能是字符串类型的值
例如: no, yes这样的值是不允许的
需要转换成矩阵
====================================
age income student
youth high no
youth high no
middle_aged high no
senior medium no
senior low yes
==================================== 比如上面这种数据:
youth middle_aged senior high medium low ......
1 0 0 1 0 0
1 0 0 1 0 0
..... """ fileName = r"C:\Users\Administrator\Desktop\data.xlsx"
data = pd.read_excel(fileName)
# 删除id序列
del data["RID"]
# headers
headers = data.columns.values
# print(headers)
# ["RID", 'age'.....] # 样本量
# print(len(data)) # dict格式化单个样本
# print(dict(data.ix[1]))
# 单个样本最后一个数据
# print(data.ix[1][-1]) featureList = []
labelList = []
for row in range(len(data)):
rowData = data.ix[row]
labelList.append(rowData[-1])
featureList.append(dict(rowData)) # print(featureList) # [
# {"credit_rating": "fair", "age": "youth"},
# .... #作用,方便转换成矩阵。将数据转换成对象
# ]
# print(labelList)
# ['no', 'no', 'yes', 'yes', 'yes', 'no', 'yes', 'no', 'yes', 'yes', 'yes', 'yes', 'yes', 'no'] # =========<格式化数据,转换成decision tree需要的格式模型>============ vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray() print("dummyX:" + str(dummyX)) # 转换成矩阵的数据了二维
print(vec.get_feature_names()) print("labelList: " + str(labelList)) lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY: " + str(dummyY)) # ===========《决策树建模分析》============= clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(dummyX, dummyY)
print("clf: ", str(clf)) # # 存储决策树信息 # # Graphviz 将dot转换成pdf的命令: dot -T pdf iris.dot -o output.pdf
# # 可以查看decision tree 的形状了(看pdf的值)
# with open(r"C:\Users\Administrator\Desktop\code\mechine_learning\allElectronicInformationGainOri.dot", "w") as f:
# f = tree.export_graphviz(clf, feature_names = vec.get_feature_names(), out_file = f) # # 下面的代码属于预测的代码
# # 属于转化后的矩阵数值,其实就是进行复制修改
oneRowX = dummyX[2, :]
print("oneRowX: " + str(oneRowX)) newRowX = oneRowX # newRowX[0] = 1
# newRowX[2] = 1
print("newRowX: ", str(newRowX)) predictedY = clf.predict([newRowX])
# 预测 class_buys_labels的值
print("predictedY: " + str(predictedY))

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

# -*- coding:utf-8 -*-
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree # 要求是数值型的值
from sklearn.externals.six import StringIO """
注意: 决策树要求要数值型的值,不能是字符串类型的值
例如: no, yes这样的值是不允许的
需要转换成矩阵
====================================
age income student
youth high no
youth high no
middle_aged high no
senior medium no
senior low yes
==================================== 比如上面这种数据:
youth middle_aged senior high medium low ......
1 0 0 1 0 0
1 0 0 1 0 0
..... """ allElectronicsData = open(r"C:\Users\Administrator\Desktop\data.xlsx", 'r')
reader = csv.reader(allElectronicsData)
print(reader)
headers = next(reader) print(headers)
# ["RID", 'age'.....] featureList = []
labelList = []
for row in reader:
labelList.append(row[len(row) - 1])
rowDict = {}
for i in range(1, len(row) - 1):
rowDict[headers[i]] = row[i] featureList.append(rowDict) print(featureList)
# [
# {"credit_rating": "fair", "age": "youth"},
# .... #作用,方便转换成矩阵。将数据转换成对象
# ] vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray() print("dummyX:" + str(dummyX)) # 转换成矩阵的数据了二维
print(vec.get_feature_names()) print("labelList: " + str(labelList)) lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY: " + str(dummyY)) clf = tree.DecisionTreeClassifier(criterion="entropy")
clf = clf.fit(dummyX, dummyY)
print("clf: ", str(clf)) # 存储决策树信息 # Graphviz 将dot转换成pdf的命令: dot -T pdf iris.dot -o output.pdf
# 可以查看decision tree 的形状了(看pdf的值)
with open(r"C:\Users\Administrator\Desktop\code\mechine_learning\allElectronicInformationGainOri.dot", "w") as f:
f = tree.export_graphviz(clf, feature_names = vec.get_feature_names(), out_file = f) # 下面的代码属于预测的代码
# 属于转化后的矩阵数值,其实就是进行复制修改
oneRowX = dummyX[0, :]
print("oneRowX: " + str(oneRowX)) newRowX = oneRowX newRowX[0] = 1
newRowX[2] = 0
print("newRowX: ", str(newRowX)) predictedY = clf.predicted(newRowX)
# 预测 class_buys_labels的值
predicted("predictedY: " + str(predictedY)) if __name__ == '__main__':
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. 2018年蓝桥杯A组C/C++决赛题解

    2018年第九届蓝桥杯A组C/C++决赛题解 点击查看视频题解 点击查看2018年蓝桥杯A组C/C++决赛题目(不含答案) 1:三角形面积 画个图,求三角形面积,可以用外接长方形 - 其他多余区域面积 ...

  2. 2016年蓝桥杯B组C/C++决赛题解

    2016年第七届蓝桥杯B组C/C++决赛题解 2016年蓝桥杯B组C/C++决赛题目(不含答案) 1.一步之遥 枚举解方程,或者套模板解线性方程 #include<bits/stdc++.h&g ...

  3. Python企业面试题(系列目录)

    本系列计划把Python面试中出现频率比较高知识点整理出来,以便各位童鞋复习和练习: [第1题] Python内存管理以及垃圾回收机制 [第2题] 链表的逆置 [第3题] 两个队列创建一个栈 [第4题 ...

  4. 【CSP-S 2019】D2T2 划分

    Description 传送门 Solution 算法1 12pts 指数算法随便乱搞. 算法2 36pts \(O(n^3)\)dp. 设\(f_{i,j}\)表示以位置\(j\)结尾,上一个决策点 ...

  5. 剑指Offer-19.顺时针打印矩阵(C++/Java)

    题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 ...

  6. sqlite 的去重

    1) 找到重复的记录,归类到一个新表里面 max(id) 是想要删除的record 2) 删除 delete from gallery where id in ( select theid from ...

  7. 在Ubuntu18.04.2LTS上安装视频播放器smplayer/vlc

    在Ubuntu18.04.2LTS上安装视频播放器smplayer/vlc 一.前言 在Ubuntu上的视频播放器质量很差,没有解码器,非常的不方便,于是我们需要手动去安装适合我们的播放器,比如smp ...

  8. 1+x证书Web前端开发CSS3详细教程

    web 前端开发之 CSS3 新特性 http://blog.zh66.club/index.php/archives/189/ web 前端开发之 html5 新特性 http://blog.zh6 ...

  9. 【mysql】修改mysql数据库密码

    修改mysql数据库密码 操作系统:Linux centos7 数据库:mysql5.7 一.在已知MYSQL数据库的ROOT用户密码的情况下,修改密码 1.在Linux命令行,使用mysqladmi ...

  10. linux安装redis步骤

    1.安装gcc  redis是c语言编写的 -- 安装命令 yum install gcc-c++ -- 检查gcc 是否安装 gcc -v 2.下载redis安装包,在root目录下执行 wget ...