@ramonyeung
2016-05-02T10:12:19.000000Z
字数 3015
阅读 687
UsingPython2.7
这应该是调包侠的第一步。意识1:你需要相信所有你需要的功能,早就有人给你写好了。如果没有,那就是你的想法还不够好。
看到英文不要怂,基本上只需要看代码,还有代码前后的一两句英文(通常是对代码的最直接解释)。
Talk is cheap, show me the code. 因为功力不足,所以最好就是把东西丢进编译器看看输出是什么。这也是一种新手读代码比较靠谱的方式。Print it out.
from sklearn import tree
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, Y)
print clf.predict([[2., 2.]])
编译器直接输出了1(一个预测的结果)。你看,import一个别人写好的包,把数据丢进去,fit & predict就搞定了。老板要是问你这什么原理?
from sklearn.datasets import load_iris
from sklearn import tree
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
# 至此,就已经完成了训练,测试或应用,主要看心情。
# 画棵树给老板看看。
from sklearn.externals.six import StringIO
with open("iris.dot", 'w') as f:
f = tree.export_graphviz(clf, out_file=f)
import os
os.unlink('iris.dot')
from sklearn.externals.six import StringIO
import pydot
dot_data = StringIO()
tree.export_graphviz(clf, out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")
什么?官方代码也能报错?
ImportError: No module named pydot
报这个错误的时候,估计尴尬症都快犯了,鱿鱼也快炒熟了。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
以下是我解决问题的流程和演过的内心戏
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
其实你需要的是安装一个包(module),通过百度“pydot 安装”,其实很容易可以找到方法。一般人家的博客里面都会有比较系统的总结。如果没有,那就看第二个博客。
第一个链接一般是最靠谱的吧。提到了安装需要两个东西:pyparsing,Graphviz。还有下载地址,但绝望的是,地址失效了。
第二个链接看起来很靠谱。
里面也提到pyparsing + graphviz。还有版本号,好像是某个包的样子。同时你应该学到更专业的表达:配置xx环境(意识3:信息能相互印证时,可靠程度是比较高的。)
这个时候就可以试试看安装了:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
只有代码是有用的,而且每一行是一个可执行的命令
如果你看不懂,最有可能是你不懂什么叫cmd,什么叫一条命令
百度一下,你就知道
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
这里提示我已经装好了。
# 如果你已经自行探索,还失败了。。
# 先把之前装的东西删掉
conda remove graphviz
conda remove pyparsing
pip uninstall pydot
pip uninstall pydot2
# 简单来说,如果你是用conda install命令安装的,conda remove your-package-name
# 如果你是用pip install命令安装的,pip uninstall your-package-name
conda install graphviz
# 按y+回车确定之后,等待完成
conda install pyparsing
# 这个时候它会告诉你anaconda已经有了。。。
第三个链接也好像可以。实际上,里面有非常重要的信息,pyparsing是个包,而且因为某些原因,这个包有两个版本,太新的还不行。
pip uninstall pyparsing
pip install -Iv https://pypi.python.org/packages/source/p/pyparsing/pyparsing-1.5.7.tar.gz#md5=9be0fcdcc595199c646ab317c1d9a709
pip install pydot
这里还有一些小bug,将错误提示丢入百度之后可以找到答案。
# 还需要安装
pip install pydot2
我为大家推荐anaconda,好处就是他集成了大部分你可能需要的东西。比如所有的科学计算和数据挖掘包,新手光是研究怎么安装这些包可能都花去了一大半的热情。比如方便的交互式编程工具Jpuyter,类似Pycharm的IDLE————Spyder等等。
就说包的安装这个问题,困难的是地方是解决冲突。通过上面的问题,可以让大家体会到这个难处。比如pydot是基于pyparsing和graphviz的,如果基础的包版本不对(一般是太落后),那么高级包(pydot)写出来的代码是不可能通过编译的。
再比如,numpy这个包为python引入了一种强大的数据结构:矩阵。让python摆脱了低效的for循环。机器学习(sklearn,statsmodel)中的很多算法,也是用矩阵去迭代更新计算结果的。试想numpy这个包被改动一些,后果有多严重。
但是包总是要更新的,所以anaconda里面还实现了一个包管理工具conda。这就是我们上面的命令conda install中的conda的意思。值得一提的是pip也是一个包管理工具。conda在更新包的时候,会自动寻找它的依赖包,先把它的依赖包都升级了。是不是很人性化。。。
但这也意味着,你不会在初期经历这些坑。所以这是本次作业的目的所在。