决策树(Decision Tree)
为达到目标,根据一定的条件进行选择的过程,就是决策树,常用于分类
构成元素是结点和边
- 结点:根据样本的特征作出判断,根节点、叶节点。
- 边:指示方向。
衡量标准——熵
这里熵表示样本种类的丰富性,样本种类越多越混乱,熵越大;假若全部属于同一类,则熵等于零。
构造的基本思路
随着层数增加,让熵快速降低,降低速率越快,效率越高。
缺点——过拟合
解决——剪枝
- 预剪枝:达某条件就停止
- 后剪枝:先得树,再加上限制条件(如叶节点个数)进行剪枝。
Python代码
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
import pandas as pd# 读取数据
data = pd.read_csv('data.csv')# 假设数据中的最后一列是目标变量,其余列是特征
X = data.iloc[:, :-1]
y = data.iloc[:, -1]# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建决策树分类器
dt_classifier = DecisionTreeClassifier(random_state=42)# 训练模型
dt_classifier.fit(X_train, y_train)# 在测试集上进行预测
y_pred = dt_classifier.predict(X_test)
print(y_pred)
print(y_test)
# 评估模型准确性
accuracy = accuracy_score(y_test, y_pred)
print(f'Model Accuracy: {accuracy}')
附:构造样例数据的实例代码
# 以通过学生的数学和英语成绩预测是否通过为例
import pandas as pd
import numpy as np
df = pd.DataFrame({'Math_Score': [np.random.randint(40, 101) for x1 in range(100)],'English_Score': [np.random.randint(40, 101) for x2 in range(100)],'Pass': [np.random.randint(0, 2) for x3 in range(100)],
})
df.to_csv('data.csv')