机器学习(二)–决策树
今天学习了决策树算法,trees.py代码没有遇到什么问题,但是在程序清单3-5利用文本注解绘制树节点时,中文的显示遇到了问题。
我用的是Anaconda,Python3.5版本,按照网上的说法修改matplotlib中的matplotlibrc文件,但是在Anaconda安装目录下,matplotlib是个tar.bz2压缩包,修改了也没用。于是按照
http://blog.chinaunix.net/uid-26611383-id-3521248.html
的方法,在代码文件中动态修改,代码如下:
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 10 20:35:42 2016
@author: Daniel
"""
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
font = FontProperties(fname=r"c:\Windows\Fonts\msyh.ttf", size=10)
decisionNode = dict(boxstyle = "sawtooth", fc="0.8")
leafNode = dict(boxstyle = "round4",fc="0.8")
arrow_args = dict(arrowstyle = "<-")
def plotNode(nodeTxt, centerPt, parentPt, nodeType):
createPlot.ax1.annotate(nodeTxt, xy=parentPt, xycoords='axes fraction',
xytext=centerPt, textcoords='axes fraction',
va="center", ha="center", bbox=nodeType,
arrowprops=arrow_args, fontproperties=font)
def createPlot():
fig = plt.figure(1,facecolor='white')
fig.clf()
createPlot.ax1 = plt.subplot(111, frameon=False)
plotNode('决策节点',(0.5,0.1),(0.1,0.5),decisionNode)
plotNode('叶节点', (0.8,0.1),(0.3,0.8),leafNode)
plt.show()
主要是在font中引用了微软雅黑字体,好像不能用宋体、楷体等,要用Fonts文件夹下有的且支持中文的。
Python3.0后,字符串都是utf-8编码,所以不用在‘决策节点’‘叶节点’前加U了。
程序清单3-6
dict.keys()函数返回的对象可迭代,但不可索引,因此,必须显式转化为list,
firstStr = list(myTree.keys())[0]