take3-决策树

决策树
决策树是一种树型结构的机器学习算法,它每个节点验证数据一个属性,根据该属性进行分割数据,将数据分布到不同的分支上,直到叶子节点,叶子结点上表示该样本的label. 每一条从根节点到叶子节点的路径表示分类[回归]的规则. 下面我们先来看看sklearn中决策树怎么用.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris, load_boston
from sklearn import tree

from sklearn.model_selection import train_test_split

# 分类树
X, y = load_iris(return_X_y=True)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X_train, y_train)

print ("Classifier Score:", clf.score(X_test, y_test))

tree.plot_tree(clf.fit(X, y)) 
plt.show()

# 回归树
X, y = load_boston(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
clf = tree.DecisionTreeRegressor()
clf = clf.fit(X_train, y_train)

print ("Regression Score:", clf.score(X_test, y_test))
tree.plot_tree(clf.fit(X, y)) 
plt.show()

决策树节点特征选取方法:
基尼系数
基尼指数又称基尼系数或者基尼不纯度,基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标. 在信息学中,例如分类问题, 假设有K个类,样本点属于第k类的概率是 𝑝𝑘pk ,则该概率分布的基尼指数定义为:

在这里插入图片描述
代码:

 def gini(self, labels):
        """计算基尼指数.
        
        Paramters:
        ----------
        labels: list or np.ndarray, 数据对应的类目集合.
        
        Returns: 
        -------
        gini : float ```Gini(p) = \sum_{k=1}^{K}p_k(1-p_k)=1-\sum_{k=1}^{K}p_k^2 ```
        
        """
        #============================= show me your code =======================

        # here
        
        n = labels.shape[0] #数据集总行数
        iset = labels.iloc[:,-1].value_counts() #标签的所有类别
        p = iset/n #每一类标签所占比
        p=p**2;
        gini =1-p.sum() #计算gini
        #============================= show me your code =======================
        return gini
### 如何用Python绘制决策树 为了更好地理解并可视化决策树模型,可以利用`sklearn`库中的工具配合`matplotlib`来创建和显示决策树图表。下面提供了一个完整的例子,展示了如何加载数据集、训练决策树分类器,并最终绘出该决策树。 #### 加载必要的库与准备数据 首先导入所需的包,并准备好用于建模的数据: ```python import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier, plot_tree # 导入plot_tree函数[^1] ``` 这里选择了鸢尾花(Iris)数据集作为示范案例,这是一个经典的小型多类别分类问题。 #### 构建决策树模型 定义参数并初始化决策树分类器;接着拟合模型到输入特征X和目标变量y上: ```python # Parameters n_classes = 3 plot_colors = "ryb" plot_step = 0.02 # Load data iris = load_iris() for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]]): # We only take the two corresponding features X = iris.data[:, pair] y = iris.target # Train clf = DecisionTreeClassifier().fit(X, y) ``` 这段代码遍历了不同组合下的两个特征对,分别建立对应的二元决策边界图。 #### 绘制决策树结构 使用`plot_tree()`可以直接渲染整个决策过程的图形化视图: ```python plt.figure(figsize=(20,10)) tree_plot = plot_tree(clf, feature_names=iris.feature_names[pair], class_names=iris.target_names, filled=True) plt.show() ``` 上述命令会生成一张详细的决策路径图,其中节点的颜色反映了多数类别的分布情况,而边上的文字则描述了分裂条件[^4]。 除了基本的结构外,还可以进一步定制图像样式,比如调整字体大小、增加比例尺等,使得输出更加美观易读。 对于更复杂的自定义需求,则可能需要借助第三方库如Graphviz来进行高级配置[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值