代码改错:from sklearn.preprocessing import LabelEncoder from sklearn.tree import DecisionTreeClassifier from sklearn.tree import export_graphviz import graphviz# 数据预处理 data = [['s', 's', 'no', 'no'], ['s', 'l', 'yes', 'yes'], ['l', 'm', 'yes', 'yes'], ['m', 'm', 'yes', 'yes'], ['l', 'm', 'yes', 'yes'], ['m', 'l', 'yes', 'yes'], ['m', 's', 'no', 'no'], ['l', 'm', 'no', 'yes'], ['m', 's', 'no', 'yes'], ['s', 's', 'yes', 'no'] ] X = [] y = [] for row in data: X.append(row[:-1]) y.append(row[-1]) le = LabelEncoder() X = le.fit_transform(X) y = le.fit_transform(y)# 生成决策树 clf = DecisionTreeClassifier(criterion='entropy') clf.fit(X, y)# 可视化决策树 dot_data = export_graphviz(clf, out_file=None, feature_names=['日志密度', '好友密度', '是否使用真实头像', '账号是否真实'], class_names=['no', 'yes']) graph = graphviz.Source(dot_data) graph.render('decision_tree')
时间: 2023-08-06 07:18:21 浏览: 65
代码改错如下:
```
from sklearn.preprocessing import LabelEncoder
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
import graphviz
# 数据预处理
data = [['s', 's', 'no', 'no'],
['s', 'l', 'yes', 'yes'],
['l', 'm', 'yes', 'yes'],
['m', 'm', 'yes', 'yes'],
['l', 'm', 'yes', 'yes'],
['m', 'l', 'yes', 'yes'],
['m', 's', 'no', 'no'],
['l', 'm', 'no', 'yes'],
['m', 's', 'no', 'yes'],
['s', 's', 'yes', 'no']]
X = []
y = []
for row in data:
X.append(row[:-1])
y.append(row[-1])
le = LabelEncoder()
X_encoded = []
for i in range(len(X[0])):
X_encoded.append(le.fit_transform([row[i] for row in X]))
y_encoded = le.fit_transform(y)
# 生成决策树
clf = DecisionTreeClassifier(criterion='entropy')
clf.fit(list(zip(*X_encoded)), y_encoded)
# 可视化决策树
dot_data = export_graphviz(clf, out_file=None, feature_names=['日志密度', '好友密度', '是否使用真实头像', '账号是否真实'], class_names=['no', 'yes'])
graph = graphviz.Source(dot_data)
graph.render('decision_tree')
```
主要改动如下:
1. 对 X 数据进行了编码,并将编码后的数据作为决策树分类器的输入。
2. 对 y 数据进行了编码。
3. 在 clf.fit() 中传入的 X 数据为编码后的数据。
4. 在 clf.fit() 中传入的 y 数据为编码后的数据。
5. 在 list(zip(*X_encoded)) 中使用 * 号将列表解压缩,使得每个元素都作为一个参数传入 zip() 函数中。
阅读全文