决策树(Decision Trees ,DTs)是一种无监督的学习方法,用于分类和回归。它对数据中蕴含的决策规则建模,以预测目标变量的值。
某些情况,例如下面的例子,决策树通过学习模拟一个包含一系列是否判断的正弦曲线。树越深,决策树的规则和拟合越复杂。
决策树的一些优点:
决策树的一些缺点:
DecisionTreeClassifier 能够对数据进行多分类的类。
和其他分类器一样,DecisionTreeClassifier 有两个向量输入:X,稀疏或密集,大小为[n_sample,n_fearure],存放训练样本; Y,值为整型,大小为[n_sample],存放训练样本的分类标签:
>>> from sklearn import tree >>> X = [[0, 0], [1, 1]] >>> Y = [0, 1] >>> clf = tree.DecisionTreeClassifier() >>> clf = clf.fit(X, Y)
拟合后,模型可以用来预测分类:
>>> clf.predict([[2., 2.]])
array([1])
另外,每个分类的概率可以被预测,即某个叶子中,该分类样本的占比。
>>> clf.predict_proba([[2., 2.]])
array([[ 0., 1.]])
DecisionTreeClassifier 能同事应用于二分类(标签为[-1,1])和多分类(标签为[0,1,K-1])。
用数据集 lris ,可以构造下面的树:
>>> from sklearn.datasets import load_iris >>> from sklearn import tree >>> iris = load_iris() >>> clf = tree.DecisionTreeClassifier() >>> clf = clf.fit(iris.data, iris.target)
训练完成后,我们可以用 export_graphviz 将树导出为 Graphviz 格式。下面是导出 iris 数据集训练树的例子。
>>> from sklearn.externals.six import StringIO >>> with open("iris.dot", 'w') as f: ... f = tree.export_graphviz(clf, out_file=f)
然后用 Graphviz的 dot 工具创建PDF文件(或者其他支持的文件格式):dot -Tpdf iris.dot -o iris.pdf.
>>> import os >>> os.unlink('iris.dot')
或者,如果安装了pydot 模块,可以直接用Python创建PDF文件(或者其他支持文件):
>>> 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")
export_graphviz 也支持很多美观选项,包括根据节点的分类(或者拟合的值)着色和根据需要描述变量和分类。 IPython notebooks can also render these plots inline using the Image() function:
>>> from IPython.display import Image >>> dot_data = StringIO() >>> tree.export_graphviz(clf, out_file=dot_data, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True) >>> graph = pydot.graph_from_dot_data(dot_data.getvalue()) >>> Image(graph.create_png())
拟合之后,模型可以用来样本分类:
>>> clf.predict(iris.data[:1, :])
array([0])
或者,每个分类的概率能被预测,即某个叶子中,该分类样本的占比。
>>> clf.predict_proba(iris.data[:1, :])
array([[ 1., 0., 0.]])
Examples:
决策树也可用来解决回归问题,使用 DecisionTreeRegressor 类。
和分类一样,拟合方法也需要两个向量参数,X 和 y,不同的是这里y是浮点型数据,而不是整型:
>>> from sklearn import tree >>> X = [[0, 0], [2, 2]] >>> y = [0.5, 2.5] >>> clf = tree.DecisionTreeRegressor() >>> clf = clf.fit(X, y) >>> clf.predict([[1, 1]]) array([ 0.5])
Examples:
多输出问题是预测多个输出的监督学习过程,也就是说,y是大小为[n_sample, n_output]的二维向量。
当输出变量之间不相关是,一个非常简单的解决办法是
啊啊啊啊