使用决策树来预测心输出量,决策树的基本原理及 最后附有代码

决策树的核心就是寻找纯净的划分,因此引入了纯度的概念。在属性选择上,我们是通过统计“不纯度”来做判断的,ID3 是基于信息增益做判断,C4.5 在 ID3 的基础上做了改进,提出了信息增益率的概念。实际上 CART 分类树与 C4.5 算法类似,只是属性选择的指标采用的是基尼系数。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
你可能在经济学中听过说基尼系数,它是用来衡量一个国家收入差距的常用指标。当基尼系数大于 0.4 的时候,说明财富差异悬殊。基尼系数在 0.2-0.4 之间说明分配合理,财富差距不大。基尼系数本身反应了样本的不确定度。当基尼系数越小的时候,说明样本之间的差异性小,不确定程度低。分类的过程本身是一个不确定度降低的过程,即纯度的提升过程。
所以 CART 算法在构造分类树的时候,会选择基尼系数最小的属性作为属性的划分。我们接下来详解了解一下基尼系数。基尼系数不好懂,你最好跟着例子一起手动计算下。假设 t 为节点,那么该节点的 GINI 系数的计算公式为:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import tensorflow as tf
import time
import pandas as pd
from sklearn.model_selection import  train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import r2_score,mean_absolute_error,mean_squared_error

class read_data():
    def __init__(self,):
        path='D://code//dataanaylze//credit_default-master//feature.csv'
        self._CSV_FILE_PATH = path
        self._data = pd.read_csv(self._CSV_FILE_PATH)
        # print(self._data.shape)#查看数据维度
        # print(self._data.describe())#数据集描述
        self._sum_num = self._data.shape[0]  # 数据总行数
        self._indicator = 0

    def read(self):
        cardiac_output= self._data['CO'].value_counts()#查询心输出量的的情况
        # print(cardiac_output)
        df = pd.DataFrame({'ID': cardiac_output.index,'values': cardiac_output.values})
        # print(df)
        # plt.rcParams['font.sans-serif']=['SimHei']#设置字体为SimHei显示中文
        # plt.figure(figsize = (6,6))
        # plt.title('心输出量分布情况\n ')
        # sns.set_color_codes("pastel")
        # sns.barplot(x = 'ID', y="values", data=df)
        # locs, labels = plt.xticks()
        # plt.show()
        self._data.drop(['ID'], inplace=True, axis =1) #去掉ID
        target =  self._data['CO'].values
        # print(type(target))
        # print(target.shape)
        columns =  self._data.columns.tolist()
        columns.remove('CO')
        # print(type(columns))
        features =  self._data[columns].values
        # print(type(features))
        # print(features.shape)
        train_x,train_y ,test_x, test_y = train_test_split(features, target, test_size=0.30, random_state =1)#选择30%作为测试集
        return  train_x,test_x,train_y,test_y
# 创建CART回归树
dtr=DecisionTreeRegressor()
# 拟合构造CART回归树
train_x, train_y,test_x,test_y=read_data().read()
dtr.fit(train_x, train_y)
# 预测测试集中的心输出量
predict_y = dtr.predict(test_x)
# 测试集的结果评价
print('回归树二乘偏差均值:', mean_squared_error(test_y, predict_y))
print('回归树绝对值偏差均值:', mean_absolute_error(test_y, predict_y))

决策树做分类


# encoding=utf-8
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
# 准备数据集
iris=load_iris()
# 获取特征集和分类标识
features = iris.data
labels = iris.target
# 随机抽取33%的数据作为测试集,其余为训练集
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)
# 创建CART分类树
clf = DecisionTreeClassifier(criterion='gini')
# 拟合构造CART分类树
clf = clf.fit(train_features, train_labels)
# 用CART分类树做预测
test_predict = clf.predict(test_features)
# 预测结果与测试集结果作比对
score = accuracy_score(test_labels, test_predict)
print("CART分类树准确率 %.4lf" % score)

在这里插入图片描述


import numpy as np
from sklearn.model_selection import cross_val_score
# 使用K折交叉验证 统计决策树准确率
print(u'cross_val_score准确率为 %.4lf' % np.mean(cross_val_score(clf, train_features, train_labels, cv=10)))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

任任任任小娇在学python的路上

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

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

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

打赏作者

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

抵扣说明:

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

余额充值