创建一颗树,使用红酒数据集
from sklearn import tree from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split import pandas as pd wine = load_wine() #input(wine.target) pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1) #将它变成一个表格 #input(wine.feature_names) Xtrain,Xtest,Ytrain,Ytest=train_test_split(wine.data,wine.target,test_size=0.3) #input(Xtrain.shape) clf=tree.DecisionTreeClassifier(criterion="entropy") clf=clf.fit(Xtrain,Ytrain) score=clf.score(Xtest,Ytest)
tree.DecisionTreeClassifier()函数的参数如下:
- criterion:衡量分割质量的准则,可选参数,默认为"gini"。可选的值有"gini"和"entropy"。如果设置为"gini",则使用基尼不纯度作为分割准则;如果设置为"entropy",则使用信息增益作为分割准则。
- splitter:选择分割特征的策略,可选参数,默认为"best"。可选的值有"best"和"random"。如果设置为"best",则选择最佳的分割特征;如果设置为"random",则随机选择分割特征。
- max_depth:决策树的最大深度,可选参数,默认为None。如果设置为None,则决策树将被完全展开。
- min_samples_split:分割内部节点所需的最小样本数,可选参数,默认为2。如果一个节点的样本数少于min_samples_split,则不会再进行分割。
- min_samples_leaf:叶节点所需的最小样本数,可选参数,默认为1。如果一个叶节点的样本数少于min_samples_leaf,则该叶节点将被剪枝。
- min_weight_fraction_leaf:叶节点所需的最小加权样本数的总和的比例,可选参数,默认为0。如果一个叶节点的加权样本数的总和的比例小于min_weight_fraction_leaf,则该叶节点将被剪枝。
- max_features:寻找最佳分割时要考虑的特征数量,可选参数,默认为None。如果设置为None,则考虑所有特征;如果设置为"sqrt",则考虑\sqrt{n}n个特征;如果设置为"log2",则考虑\log_2(n)log2(n)个特征;如果设置为整数值nn,则考虑nn个特征;如果设置为"auto",则与"sqrt"相同;如果设置为"None"或"auto",则将max_features设置为nn。
- random_state:随机数种子,可选参数,默认为None。如果设置为整数值,则每次运行时都会得到相同的结果。
- max_leaf_nodes:叶节点的最大数量,可选参数,默认为None。如果设置为None,则不限制叶节点的数量。
- min_impurity_decrease:分割节点的不纯度减少量的阈值,可选参数,默认为0。如果分割节点后的不纯度减少量小于min_impurity_decrease,则该分割将被丢弃。
- class_weight:类别权重,可选参数,默认为None。可以使用字典或"balanced"来指定类别的权重。如果设置为None,则所有类别的权重都为1。
- presort:是否预先排序数据以加速训练,可选参数,默认为False。如果设置为True,则在训练过程中会预先排序数据。
clf的四个重要接口
clf.fit clf.score clf.apply(XtestP) clf.predict(Xtest)
使用graphviz 画一颗树
import graphviz a=["1","2","3","4","5","6","7","8","9","10","11","12","13"] #命名特征,数量要与实际一致 dot_data=tree.export_graphviz( clf ,feature_names=None ,class_names=["a","b","c"] ,filled=True ,rounded=True ) graph=graphviz.Source(dot_data) #创建一个图形对象 graph.view() #绘制决策树 data = [*zip(a, clf.feature_importances_)] #将一列一列输出每一个特征是否使用及其重要程度 for column in data: print(column)
tree.export_graphviz()函数的参数如下:
- decision_tree:决策树模型对象,必需参数。
- out_file:输出文件的路径或文件对象,可选参数,默认为None。如果设置为None,则输出结果将作为字符串返回,而不是写入文件。
- max_depth:决策树的最大深度,可选参数,默认为None。如果设置为None,则决策树将被完全展开。
- feature_names:特征的名称列表,可选参数,默认为None。如果设置为None,则特征将以整数形式显示。
- class_names:类别的名称列表,可选参数,默认为None。如果设置为None,则类别将以整数形式显示。
- filled:是否给节点着色,可选参数,默认为False。如果设置为True,则节点将根据类别进行着色。
- rounded:是否给节点添加圆角边框,可选参数,默认为False。如果设置为True,则节点将带有圆角边框。