<jupyter_start><jupyter_text>决策树>本章实现了决策树 ID3 算法，进行了一个实例实战：* 推荐隐形眼镜类型。>本 Notebook 采用 sklearn 进行实例演示，并结合 pydotplus 可视化决策树。**决策树算法*** 优点：计算复杂度不高、输出结果易于理解、对中间值的缺失不敏感、可以处理不相关特征数据。* 缺点：容易过拟合。* 适用范围：数据型和标称型。<jupyter_code>df = pd.read_table('data/ch3/lenses.txt', header=None, names=['age', 'prescript', 'astigmatic', 'tearRate', 'lense'])
df.head()
# 由于 sklearn 并不支持 categorical data 决策树，将 categorical data 转换为 numerical data
le = preprocessing.LabelEncoder()
x = df[['age', 'prescript', 'astigmatic', 'tearRate']].apply(lambda x: le.fit_transform(x))
y = le.fit_transform(df['lense'])
y
# 构建决策树
clf = tree.DecisionTreeClassifier(criterion='entropy')
# 训练
clf.fit(x, y)
# 决策树可视化
# 可视化的决策树为 numerical data ，若要显示为 categorical data，可修改 dot 文件
# tree.export_graphviz(clf, out_file=output_file) 可保持 dot 文件
name = x.columns
label = ["hard","no lenses", "soft"]
dot_data = tree.export_graphviz(clf, out_file=None,feature_names=name, class_names=label,filled=True)
graph = pydotplus.graph_from_dot_data(dot_data)
#graph.write_png('tree.png')
Image(graph.create_png())<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup