python实现 构建决策树(模型)

  • 实验数据集:iris
  • 工具和环境:IDEA 2019.1 + python 3.8
  • 运用的模块:sklearn + pandas
  • 训练的算法:CART(默认)
"""
from sklearn import datasets # 导入方法类
iris = datasets.load_iris() # 加载 iris 数据集
iris_feature = iris.data # 特征数据
iris_target = iris.target # 分类数据(标签数据)
iris_target /iris_feature# 查看 iris_target / iris_feature
"""

#1.加载iris数据集
from sklearn import datasets #导入方法类,sklearn模块中的datasets方法包含许多数据集,本次学习用iris数据集
iris = datasets.load_iris() #加载数据集赋值给iris
# print(iris)
# print("iris原始数据集类型",type(iris))
# print(iris.data) #iris数据集中各个特征的取值,以规则数组的形式输出
# print(iris.target) #iris数据集中的所属类别(幻化成离散数值),以规则数组的形式输出
# print("iris中特征数据集/类别标签数据集类型" , type(iris.data))
"""加载本地文件数据
file_path = "E:\\mydata\\DB1.xlsx"
# read_excel方法读取数据,返回值类型为DataFrame,不需要再次转换
# usecols指定读取列(列号0起始),skiprows跳过指定行(行号0起始),默认读到的第一行数据为属性名
feature = pd.read_excel(xlsx_file, usecols=[1, 2, 3, 4, 5, 6, 7, 8], skiprows=0)
target = pd.read_excel(xlsx_file, usecols=[9], skiprows=0)
# print(type(feature))
# print(type(target))
# print(feature)
# print(target)
"""

#2.划分训练集&测试集
#通过pandas的DataFrame将iris数据集的特征与所属类别(标签)拆分成2个可以独立出来的二维数据集
import pandas as pd #导入pandas大数据处理模块模块,用pd简化表示它,
#features = pd.DataFrame(iris.data) #pandas使用一个二维的数据结构DataFrame来表示表数据,DataFrame把iris数据集处理成表格形式,iris_feature数据集表示所有特征的取值
iris_features = pd.DataFrame(iris.data,columns=iris.feature_names)#设置columns属性,将iris_feature的表头命名为iris数据集的表头,各个特征名称
# print(iris_features)
iris_target = pd.DataFrame(iris.target,columns=['type'])#iris_target数据集,表示所有数据所属类别(标签)的取值
# print(iris_target)
# print("iris中特征数据集/类别标签数据集经pd转换后的类型" , type(iris_target))

"""
#利用pandas切片功能划分iris数据集(特征数据集+标签数据集),70%训练数据 + 30%测试数据
split_num = int (len(iris_features)*0.7)#len方法计算数据集长度(条数),设定为int型避免小数,找到切割点用split_name表示
train_features = iris_features[:split_num] #特征数据集features中,切割点之前的数据保留,切割点之后的数据去除,形成的新数据集作为训练数据集 中的特征数据集train_features
test_features = iris_features[split_num:] #特征数据集features中,切割点之后的数据保留,切割点之前的数据去除,形成的新数据集作为测试数据集 中的特征数据集test_features
#print(train_features)
#print(test_features)
train_target = iris_target[:split_num]#标签数据集中70%数据做训练数据集 中的标签数据集train_target
test_target = iris_target[split_num:]#标签数据集中30%数据做测试数据集 中的标签数据集test_target
#print(train_target)
#print(test_target)
"""

#利用sklearn.model_selection中的train_test_split方法划分iris数据集
#区别于pandas的切片功能划分数据集
#train_test_split先将顺序规则的数据打乱,形成随机顺序的数据,避免数据分布不均
#再对不规则的数据集分别划分训练数据/测试数据
from sklearn.model_selection import train_test_split #导入方法类
#将features,target所有数据打乱顺序之后,按比例,分别装到对应的4个训练 特征/标签数据集 or 测试 特征/标签数据集中,random_state随机数种子保证多人随机生成的数据集是相同的
features_train,features_test,target_train,target_test = train_test_split(iris_features,iris_target,test_size=0.3,random_state=42)
# print(features_train)
# print(features_test)
# print(target_train)
# print(target_test)

#3.训练机器学习的模型
#使用sklearn.tree模块中的DecisionTreeClassifier方法训练决策树分类器,该方法默认使用CART算法
from sklearn.tree import DecisionTreeClassifier #导入方法类
dt_model = DecisionTreeClassifier() #实例化决策树模型
#print(model)
dt_model.fit(features_train,target_train) #传入训练数据...train(特征数据集 + 标签数据集),对dt_model使用.fit方法,训练产生模型

#4.模型在测试集上的预测效果
test_predict_result = dt_model.predict(features_test) #对dt_model使用.predict方法,预测产生预测结果(在测试集中的预测结果)
# print(test_predict_result)
test_true_result = target_test.values.flatten() #使用.values.flatten()将测试集中的真实标签转化成数组格式,便于与模型的预测结果做对比
# print(test_true_result)

#5.模型评价
#使用sklearn.metrics模块中的accuracy_score方法计算模型预测准确度
from sklearn.metrics import accuracy_score #导入方法类
as_test = accuracy_score(test_true_result,test_predict_result) #传入测试集中的真实结果(标签)和模型在测试集上的预测结果(标签)
print("accuracy_score评估: \n dt_model在测试集上的预测准确度为:", as_test)
#还可以使用模型再带的score方法评估模型的预测准确度,传入的参数不同而已
s_test = dt_model.score(features_test,target_test)
print("score评估: \n dt_model在测试集上的预测准确度为:", s_test)


#6.模型投入使用,在其它真实数据集上的预测效果
#将符合模型参数要求(类型+个数)的数据传入模型,即可输出预测结果
dt_model_use1 = dt_model.predict([[1,2,3,4]])
if dt_model_use1 == [0]:
    print("花种为:Iris-setosa")
elif dt_model_use1 == [1]:
    print("花种为:Iris-versicolor")
else:
    print("花种为:Iris-virginica")

"""
#7.模型可视化(决策树展现)
from pydotplus import graphviz
from sklearn.tree import export_graphviz #导出图形(决策树)
#export_graphviz(dt_model,out_file="dt_model_tree.dot",feature_names=iris.feature_name,class_names=iris.target_name)
image = export_graphviz(dt_model,out_file=None,feature_names=iris.feature_names,class_names=iris.target_names)
graphviz.Source(image)
"""

笔记几个库:

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值