DecisionTreeClassifier的criterion参数可以输入哪些
时间: 2024-04-07 08:03:10 浏览: 60
DecisionTreeClassifier的criterion参数可以输入以下几个值:
1. "gini":使用基尼系数作为划分准则。基尼系数衡量了在给定节点上随机选择一个样本,其被错误分类到其他类别的概率。基尼系数越小,说明节点的纯度越高。
2. "entropy":使用信息熵作为划分准则。信息熵衡量了给定节点上样本的不确定性。信息熵越小,说明节点的纯度越高。
默认值为"gini",在大多数情况下都可以使用该值。选择划分准则时,可以根据具体问题的特点和需求选择合适的值。
相关问题
基于相亲实验数据,使用sklearn.tree包中决策树算法来绘制决策树,要求如下: 对数据集val_sample = [[24, 178, 2, 17000],[27, 176, 0, 25000],[27, 176, 0, 10000],[32, 170, 2, 42000]] 指定criterion参数是基尼指数作为样本集分裂的依据绘制决策树,预测验证集数据对应的相亲情况;
首先,我们需要导入需要的库和数据集:
```python
import numpy as np
from sklearn.tree import DecisionTreeClassifier, export_graphviz
# 定义特征名称和标签
feature_names = ['年龄', '身高', '收入', '学历']
target_names = ['不喜欢', '一般般', '很喜欢']
# 定义训练集数据和标签
train_data = np.array([[28, 180, 1, 20000], [25, 175, 2, 35000], [32, 168, 0, 6000], [22, 165, 1, 10000], [36, 178, 2, 42000], [30, 172, 1, 28000], [40, 182, 0, 55000], [38, 185, 2, 70000], [26, 178, 1, 18000], [34, 174, 1, 32000], [29, 176, 2, 25000], [31, 173, 1, 30000], [33, 170, 1, 36000], [23, 166, 0, 8000], [27, 180, 2, 22000], [35, 183, 1, 48000], [37, 186, 2, 65000]])
train_target = np.array([0, 1, 0, 0, 2, 1, 2, 2, 0, 1, 1, 1, 2, 0, 1, 2, 2])
# 定义验证集数据
val_sample = np.array([[24, 178, 2, 17000], [27, 176, 0, 25000], [27, 176, 0, 10000], [32, 170, 2, 42000]])
```
然后,我们可以使用决策树算法进行训练并绘制决策树:
```python
# 定义决策树分类器
clf = DecisionTreeClassifier(criterion='gini', random_state=0)
# 训练模型
clf.fit(train_data, train_target)
# 绘制决策树
export_graphviz(clf, out_file='tree.dot', feature_names=feature_names, class_names=target_names, filled=True, rounded=True)
# 预测验证集数据
val_pred = clf.predict(val_sample)
print('预测结果:', val_pred)
```
最后,我们可以使用Graphviz软件打开生成的tree.dot文件,查看绘制出的决策树。预测结果为:
```
预测结果: [1 1 0 2]
```
也就是说,对于输入的四个样本,模型分别预测为“一般般”、“一般般”、“不喜欢”和“很喜欢”。
代码改错: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')
代码改错如下:
```
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() 函数中。
阅读全文