Sklearn决策树的应用

Sklearn库中的决策树有两种:分类决策树、回归决策树。下面我们通过具体的案例学习如何使用这两种决策树。

分类决策树

分类决策树(DecisionTreeClassifier)就是通过对训练集的训练,然后对测试集中的数据做出正确的分类。
这个表格反映了银行通过对一个人的评判,然后决定是否给予其贷款

序号年龄有工作有自己的房子信贷情况类别
0青年一般
1青年
2青年
3青年一般
4青年一般
5中年一般
6中年
7中年
8中年非常好
9中年非常好
10老年非常好
11老年
12老年
13老年非常好
14老年一般

我们通过对这个数据集的训练,然后预测一个人是否会得到银行的贷款

from sklearn.tree import DecisionTreeClassifier
import graphviz
from sklearn import tree

'''
    function : 使用决策树分类器训练训练集,然后使用测试集测试训练效果
    author : lemon
'''

'''
    重要方法:
        1、fit(X,Y)
            X : 训练集数据
            Y : 训练集数据对应的目标值(类标签),为整数或字符串
        2、predict(X)
            X : 测试集样本
            return : 预测的类或预测值
        3、predict_proba(X)
            X : 测试集样本
            return : 预测为每个类别的概率
        4、decision_path(X)
            X : 测试集样本
            return : 返回树中决策路径,非0元素表示样本通过节点
'''

# 加载数据集
def loadDataSet():
    data = [
        [0, 0, 0, 0],
        [0, 0, 0, 1],
        [0, 1, 0, 1],
        [0, 1, 1, 0],
        [0, 0, 0, 0],
        [1, 0, 0, 0],
        [1, 0, 0, 1],
        [1, 1, 1, 1],
        [1, 0, 1, 2],
        [1, 0, 1, 2],
        [2, 0, 1, 2],
        [2, 0, 1, 1],
        [2, 1, 0, 1],
        [2, 1, 0, 2],
        [2, 0, 0, 0],
    ]
    target = ['no','no','yes','yes','no','no','no','yes','yes','yes','yes','yes','yes','yes','no']
    return data,target


if __name__ == '__main__':
    data,target = loadDataSet()
    clf = DecisionTreeClassifier()
    # 根据训练集构建决策分类器
    clf.fit(data,target)
    # 需要预测的变量
    test_data = [[0,1,0,1],[1,1,1,1],[0,0,0,0]]

    # 导出决策树的操作
    dot_data = tree.export_graphviz(clf)
    graph = graphviz.Source(dot_data)
    graph.render('tree')
    # result 预测结果
    result = clf.predict(test_data)
    print('预测结果')
    print(result)
    # chance 预测为每个类别的概率
    chance = clf.predict_proba(test_data)
    print('预测为每个类别的概率')
    print(chance)

预测结果

预测结果
['yes' 'yes' 'no']
预测为每个类别的概率
[[0. 1.]
 [0. 1.]
 [1. 0.]]
回归决策树

回归决策树(DecisionTreeRegressor)是通过对数据的拟合,然后预测测试数据的值。
下面我们通过对boston数据使用决策树模型,预测新数据测值。

from sklearn.datasets import load_boston
from sklearn.tree import DecisionTreeRegressor
import time
import numpy as np

'''
    function :
    author :
'''
'''
    重要方法:
        1、fit(X,Y)
            X : 训练集样本
            Y : 目标值(实数)
        2、predict(X)
            X : 测试集样本
            return : 基于X的预测值
        3、score(X,y)
            X : 测试样本
            y : X对应的真值
'''

# 加载数据
boston = load_boston()
# 将数据分为训练集和测试集两部分
train_data = boston.data[:400:]
train_target = boston.target[:400:]
test_data = boston.data[400::]
test_target = boston.target[400::]
regressor = DecisionTreeRegressor(random_state=0)
print(f"{time.strftime('%Y-%m-%d %H:%M:%S')}: begin training...")
regressor.fit(train_data,train_target)
# result 预测的值
print(f"{time.strftime('%Y-%m-%d %H:%M:%S')}: begin testing...")
result = regressor.predict(test_data)
MSE = ((np.array([result]) - np.array(test_target))**2)/len(test_target)
print('MSE = '+str(MSE.sum().round(3)))

预测结果
我们将数据分为了两部分:训练集和测试集,然后观察模型对测试集的预测情况:

2019-02-20 11:41:22: begin training...
2019-02-20 11:41:22: begin testing...
MSE = 45.055

得到模型的均方误差MSE=45.055,由于数据集不大,我们也没有进行特征选择,所以均方误差有点大。这里我们仅仅是展示一下如何使用决策树模型进行回归,相应的特征选择还需要根据具体数据集来分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

steven_moyu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值