● 文为「365天深度学习训练营」内部文章
● 参考本文所写文章,请在文章开头带上「🔗 声明」
前言
● 语言环境:Python 3.9.13
● 编译器:Jupyter Lab
● 环境:scikit-learn-1.5.1
分类决策树
一、概念
决策树是一种常见的数据挖掘和机器学习方法。决策树通过对数据进行逐步分析和判断,最终得到一个结论或决策。因为这些问题和答案就像一颗倒过来树,每个问题就像是树的一个分叉点,因此也叫决策树。
举例:玩猜谜游戏时,通常会通过逐步抛出问题、缩小范围来得到需要的答案,决策树的决策正是抛出问题并得到答案的过程。
- 根节点 决策树的起点,通常代表需要解决的问题或者所拥有的数据
- 问题或条件 每个节点代表一个问题或者条件,这个条件将根据不同的答案将数据分成两个或者多个部分
- 分支 每个答案都导向一个新的节点:下一个问题或者最终的决策(叶节点)
- 叶节点 当不再有进一步的问题时,就得到了一个叶节点:决策或者预测的结果
二、分类
早期的算法主要是ID3和C4.5算法。但近年来,由于信息熵和信息增益等指标在处理连续属性和多分类问题时的不足,CART算法为代表的基尼指数决策树算法逐渐兴起
CART决策树:使用基尼指数来度量数据集的不纯度,通过选择最小化基尼指数的特征来进行分裂,以达到更精准的费雷和递归(与分类树的区别:叶节点是根据数值分类的)
三、代码实现
import pandas as pd
import numpy as np
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class']
dataset = pd.read_csv(url, names=names)
dataset
X = dataset.iloc[ : ,[0,1,2,3]].values
Y = dataset.iloc[ : , 4].values
from sklearn import tree
from sklearn.datasets import load_iris
clf = tree.DecisionTreeClassifier() # sk-learn的决策树模型
clf = clf.fit(X, Y) # 用数据训练树模型构建()
r = tree.export_text(clf)
text_x = X[[0,1,50,51,100,101], :]
pred_target_prob = clf.predict_proba(text_x) # 预测类别概率
pred_target = clf.predict(text_x)
print("\n===模型======")
print(r)
print("\n===测试数据:=====")
print(text_x)
print("\n===预测所属类别概率:=====")
print(pred_target_prob)
print("\n===预测所属类别:======")
print(pred_target)
回归决策树
一、简介
回归决策树用于处理连续值预测问题,即输出变量是连续数值的情况,如温度、销售额等。
通过分割数据集的特征,创建一个树形结构来预测连续变量的值,每个内部节点代表一个特征上的决策规则,而每个叶节点则代表预测结果(通常是目标变量的平均值或中位数)
二、代码实现
import pandas as pd
import numpy as np
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class']
dataset = pd.read_csv(url, names=names)
dataset
X = dataset.iloc[ : ,[0,1,2]].values
Y = dataset.iloc[ : , 3].values
from sklearn import tree
from sklearn.datasets import load_iris
clf = tree.DecisionTreeRegressor() # sk-learn的决策树模型
clf = clf.fit(X, Y) # 用数据训练树模型构建()
r = tree.export_text(clf)
test_x = X[[0,1,50,51,100,101], :]
test_y = Y[[0,1,50,51,100,101]]
pred_target = clf.predict(test_x) # 预测y
df = pd.DataFrame()
df["原y"] = test_y
df["预测y"] = pred_target
print("\n===模型======")
# print(r)
print("\n===预测结果======")
print(df)