二元决策树就是基于属性做一系列的二元(是/否)决策。每次决策对应于从两种可能性中选择一个。每次决策后,要么引出另外一个决策,要么生成最终的结果。一个实际训练决策树的例子有助于加强对这个概念的理解。了解了训练后的决策树是什么样的,就学会了决策树的训练过程。
代码清单6-1为使用Scikitlearn的DecisionTreeRegressor工具包针对红酒口感数据构建二元决策树的代码。图6-1为代码清单6-1生成的决策树。
代码清单6-1 构建一个决策树预测红酒口感-winTree.py
__author__ = 'mike-bowles'
import urllib2
import numpy
from sklearn import tree
from sklearn.tree import DecisionTreeRegressor
from sklearn.externals.six import StringIO
from math import sqrt
import matplotlib.pyplot as plot
#read data into iterable
target_url = ("http://archive.ics.uci.edu/ml/machine-learning-"
"databases/wine-quality/winequality-red.csv")
data = urllib2.urlopen(target_url)
xList = []
labels = []
names = []
firstLine = True
for line in data:
if firstLine:
names = line.strip().split(";")
firstLine = False
else:
#split on semi-colon
row = line.strip().split(";")
#put labels in separate array
labels.append(float(row[-1]))
#remove label from row
row.pop()
#convert row to floats
floatRow = [float(num) for num in row]
xList.append(floatRow)
nrows = len(xList)
ncols = len(xList[0])
wineTree = DecisionTreeRegressor(max_depth=3)
wineTree.fit(xList, labels)
with open("wineTree.dot", 'w') as f:
f = tree.export_graphviz(wineTree, out_file=f)
#Note: The code above exports the trained tree info to a
#Graphviz "dot" file.
#Drawing the graph requires installing GraphViz and the running the
#following on the command line
#dot -Tpng wineTree.dot -o wineTree.png
# In Windows, you can also open the .dot file in the GraphViz
#gui (GVedit.exe)]
图6-1为针对红酒数据的训练结果,即一系列的决策。决策树框图显示了一系列的方框,这些方框称作节点(nodes)。有两类节点,一种针对问题输出“是”或者“否”,另外一种是终止节点,输出针对样本的预测结果,并终止整个决策的过程。终止节点也叫作叶子节点(leaf)。在图6-1中,终止节点处在框图底部,它们下面没有分支或者进一步的决策节点。
《Python机器学习:预测分析核心算法》作者简介
Michael Bowles拥有机械工程学士和硕士学位、仪器仪表博士学位以及MBA学位。他的履历涉及学术界、工业界以及商业界。他目前在一家初创公司工作,其中机器学习技术至关重要。他是多个管理团队的成员、咨询师以及顾问。他也曾经在加州山景城的黑客道场、创业公司孵化器和办公场所教授机器学习课程。
他出生于俄克拉荷马州并在那里获得学士和硕士学位。在东南亚待了一段时间后,他前往剑桥攻读博士学位,毕业后任职于MIT的Charles Stark Draper实验室。之后他离开波士顿前往南加州的休斯飞机公司开发通信卫星。在UCLA获得MBA学位后,他前往旧金山的湾区工作。作为创始人以及CEO,他目前经营两家公司,这两家公司都已获风险投资。
内容提要
本书遵循了着手解决一个预测问题的基本流程。开始阶段包括对数据的理解、如何形式化表示问题,然后开始尝试使用算法解决问题,评估其性能。
在这个过程中,本书将概要描述每一步采用的方法及其原因。第1章给出本书涵盖的问题和所用方法的完整描述,本书使用来自UC Irvine数据仓库的数据集作为例子;第2章展示了一些数据分析的方法和工具,帮助读者对新数据集具有一定的洞察力。第3章“预测模型的构建:平衡性能、复杂性以及大数据”主要介绍由上述三者带给预测分析技术的困难以及所采用的技术,勾勒了问题复杂度、模型复杂度、数据规模和预测性能之间的关系,讨论了过拟合问题以及如何可靠地感知到过拟合,以及不同类型问题下的性能评价标准。第4章、第5章分别介绍惩罚线性回归的背景及其应用,即如何解决第2章所述的问题。第6章、第7章分别介绍集成方法的背景及其应用。
面向的读者群
本书主要面向想提高机器学习技能的Python开发人员,不管是针对某一特定的项目,还是只想提升相关技能。开发人员很可能在工作中遇到新问题需要使用机器学习的方法来解决。当今机器学习的应用领域如此之广,使其已成为简历中一项十分有用的技能。
本书为Python开发人员提供如下内容:
-
机器学习所解决的基本问题的描述;
-
当前几种最先进的算法;
-
这些算法的应用原则;
-
一个机器学习系统的选型、设计和评估的流程;
-
流程、算法的示例;
-
可进一步修改扩展的代码。
网友评论