目录

2.1 决策树

2.1.1 样本数据集

2.1.2 决策树可视化

2.2 模型分类性能预测

2.2.1 模型稳定性

2.2.2 SE、SP、ACC分类性能预测

# 代码实现


2.1 决策树

2.1.1 样本数据集

本次决策树的构建使用总为样本数据351,其中男生样本数量为283,女生样本数量为68;训练集样本数量为245,测试集样本数量为106;其中测试集约占样本总数的30%。

2.1.2 决策树可视化

2.2 模型分类性能预测

2.2.1 模型稳定性

性能度量是衡量模型泛化能力的评价标准,反映了任务需求;使用不同的性能度量往往会导致不同的评判结果。

首先,利用score(),输入测试样本的数据和标签,返回经过测试样本预测后模型的分类score;

第二步:得到分数后,再做十次交叉验证,看模型的稳定性。利用sklearn 中的cross_val_score函数进行交叉验证,输入数据特征与数据标签,这里cv设置为10,进行十次交叉验证,返回测试分数也是0.8019,由此可知模型稳定性良好;

list Score
测试集 0.8019
十次交叉验证 0.8019
调整树深 0.8063

第三步:调整参数,这里主要针对决策树的深度,为了看看到底是过拟合还是欠拟合,这里我们把训练集和测试集的表现都比较一下。由表2.2.1得知结果为0.8063,从图2.2.1 可以看到是有过拟合的倾向。

2.2.2 SE、SP、ACC分类性能预测

本次预测任务,使用决策树中的函数predict(),对测试集的106个样本进行预测,返回样本的预测标签。根据测试集的真实标记与预测结果计算样本的评价指标TP、TN、FP、FN,然后在算出SE、SP、ACC等评价指标。

列表如下,其中1代表正类,0代表负类:

其中,TP 表示预测正确的正样本;TN 表示预测正确的负样本;FP 表示预测错误的负样本 ;FN表示预测错误的正样本。

敏感性(SE)=TP/(TP+FN) #tpr

特异性(SP)=TN/(TN+FP) # tnr=1-fpr

准确率(ACC)=(TP+TN)/(TP+FP+TN+FN)

模型预测性能如表4

敏感性SE

特异性SP

准确率ACC

0.942

0.300

0.821

表 4 决策树分类性能评估

从表中可知,由ACC准确率可知,能够被正确预测的样本高达总数的82.1%;由敏感性SE可知,该模型对男生(正样本)的预测正确率高达94.2%;而由特异性SP可知,该模型对女生(负样本)的分类正确率只有30%,这可能是在模型训练的过程中,女生(负样本)数量过少,导致训练的模型不够准确,因而正确率不高。

# 代码实现

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
import math
'''
/**************************task1**************************/
2. 实现基于信息增益率进行划分选择的决策树算法,对男女生样本数据中的(喜
欢颜色,喜欢运动,喜欢文学)3 个特征进行分类,计算模型预测性能(包
含 SE敏感性=TP/(TP+FN)、SP特异性=TN/(TN+FP)、ACC=right/all=(TP+TN)/(TP+FP+TN+FN),并以友好的方式图示化结果
1.构建树步骤(数据处理。。知乎) 分类图
2.预测性能
/**************************task1**************************/
'''
import pandas as pd
import numpy as np
data = pd.read_csv('data_favorite.txt', header=0, sep=' ')
# data.dropna(how='any', inplace=True)  # type(data)--pandas.core.frame.DataFrame
# 处理非数字
data["color"] = pd.factorize(data["color"])[0].astype(np.uint16)
# print(data)# 拆分数据
# 先把数据和标签拆分,
X = data.iloc[:, data.columns != "sex"]
y = data.iloc[:, data.columns == "sex"]# 首先将pandas读取的数据转化为array
X = np.array(X)
y = np.array(y)# 然后按经典的三七分,把数据拆分。由于是随机抽取的,所以索引是乱的。
from sklearn.model_selection import train_test_split
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, y, test_size=0.3)
# print('Xtrain:',Xtrain)
# print('Xtest:', Xtest)
# print('Ytrain:',Ytrain)
# print('Ytest:', Ytest)
print(len(Xtrain))
print(len(Xtest))
# 修正测试集和训练集的索引
'''
for i in [Xtrain, Xtest, Ytrain, Ytest]:i.index = range(i.shape[0])
'''# 训练模型。得到分数后,再做十次交叉验证,看看模型的稳定性
clf = DecisionTreeClassifier(random_state=25)
clf = clf.fit(Xtrain, Ytrain)#根据真实值和预测值计算评价指标
def performance(labelArr, predictArr):  # 样本一定要是数组narray类型 类标签为1,0 # labelArr[i]真实的类别,predictArr[i]预测的类别# labelArr[i] is actual value,predictArr[i] is predict valueTP = 0.; TN = 0.; FP = 0.; FN = 0.for i in range(len(labelArr)):if labelArr[i] == 1 and predictArr[i] == 1:TP += 1.elif labelArr[i] == 1 and predictArr[i] == 0:FN += 1.elif labelArr[i] == 0 and predictArr[i] == 1:FP += 1.elif labelArr[i] == 0 and predictArr[i] == 0:TN += 1.SE = TP / (TP + FN)  # Sensitivity = TP/P  and P = TP + FNSP = TN / (FP + TN) # Specificity = TN/N  and N = TN + FP# MCC = (TP * TN - FP * FN) / math.sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN))ACC = (TP + TN) / (TP + TN + FP + FN)return SE, SP, ACCpredict_label = clf.predict(Xtest)
print(predict_label)
# print(type(predict_label))
print('Ytest:', Ytest)
# print(type(Ytest))print(performance(Ytest, predict_label))  # 测试集特征经过决策树判断出的标签与测试集实际标签输入performance
score_ = clf.score(Xtest, Ytest)
print('训练测试的分数:', score_)  # 进行十次交叉验证# 进行十次交叉验证
score = cross_val_score(clf, X, y, cv=10).mean()
print('进行十次交叉验证:', score_)# 调整参数
# 先从max_depth开始调,为了看看到底是过拟合还是欠拟合,最好还是把训练集和测试集的表现都比较一下。
tr = []
te = []
for i in range(10):clf = DecisionTreeClassifier(random_state=25, max_depth=i+1,criterion="entropy")clf = clf.fit(Xtrain, Ytrain)score_tr = clf.score(Xtrain,Ytrain)score_te = cross_val_score(clf,X,y,cv=10).mean()tr.append(score_tr)te.append(score_te)
print(max(te))
plt.plot(range(1,11),tr,color="red",label="train")
plt.plot(range(1,11),te,color="blue",label="test")
plt.xticks(range(1,11))
plt.legend()
plt.title('Train-Test Accuracy')
plt.savefig(" Decision Tree Train-test Accuracy")
plt.show()
'''
'''
from sklearn import tree
tree.plot_tree(clf)
plt.show()
# 可视化决策树
import graphviz
clf = DecisionTreeClassifier(random_state=25, max_depth=i+1, criterion="entropy")
clf = clf.fit(Xtrain, Ytrain)tree.export_graphviz(clf, out_file='tree.dot')
data_feature_names = ['color', 'sports', 'literature']
# Visualize data
dot_data = tree.export_graphviz(clf,out_file=None,feature_names=data_feature_names,class_names=['girl', 'boy'],filled=True,rounded=True,special_characters=True)
import pydotplus
graph = pydotplus.graph_from_dot_data(dot_data)colors = ('turquoise', 'orange')
import collections
edges = collections.defaultdict(list)for edge in graph.get_edge_list():edges[edge.get_source()].append(int(edge.get_destination()))for edge in edges:edges[edge].sort()for i in range(2):dest = graph.get_node(str(edges[edge][i]))[0]dest.set_fillcolor(colors[i])graph.write_png('tree.png')

决策树可视化及模型评估 SE SP AUC相关推荐

  1. 【PCA、LDA降维,及模型评估(SE,SP,AUC)】

    1. 采用 PCA 对男女生样本数据中的(身高.体重.鞋码.50m 成绩.肺活量) 共 5 个特征进行特征降维,并实现 LDA 算法对处理后的特征进行分类,计算 模型预测性能(包含 SE.SP.ACC ...

  2. dtreeviz:一款超级棒的决策树可视化和模型可解释性工具

    决策树是梯度提升机和随机森林的基本构建块,在学习这些模型的工作原理和模型可解释性时,可视化决策树是一个非常有帮助.不过,当前的可视化包还很初级,对新手没有多少帮助. 最近逛 Github 时,发现一款 ...

  3. 【评价指标】如何计算模型评估中的AUC和AUPR值

      计算模型的auc.aupr值一般用sklearn的包进行计算,下面是计算auc的详细过程.y_true是数据的真实标签,y_score是模型的预测得分.   对于计算的auc值,这里详细解释一下什 ...

  4. 分类模型评估之ROC-AUC

    ROC曲线和AUC ROC(Receiver Operating Characteristic,接受者工作特征曲线)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣. ...

  5. R语言分类模型:逻辑回归模型LR、决策树DT、推理决策树CDT、随机森林RF、支持向量机SVM、Rattle可视化界面数据挖掘、分类模型评估指标(准确度、敏感度、特异度、PPV、NPV)

    R语言分类模型:逻辑回归模型LR.决策树DT.推理决策树CDT.随机森林RF.支持向量机SVM.Rattle可视化界面数据挖掘.分类模型评估指标(准确度.敏感度.特异度.PPV.NPV) 目录

  6. Python机器学习建模的标准流程(特征工程+建模调参+模型评估+全流程可视化)

    作者CSDN:进击的西西弗斯 本文链接:https://blog.csdn.net/qq_42216093/article/details/116994199 版权声明:本文为作者原创文章,转载需征得 ...

  7. R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图、混淆矩阵、准确率、精确度、召回率、ROC、AUC)、PRTPlot函数获取logistic模型最优阈值(改变阈值以优化)

    R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图.混淆矩阵.Accuray.Precision.Recall.ROC.AUC).PRTPlot函数可视化获取logistic ...

  8. python中sklearn实现决策树及模型评估_Python sklearn决策树算法实践

    scikit-learn简称sklearn,支持包括分类.回归.降维和聚类四大机器学习算法.还包含了特征提取.数据处理和模型评估三大模块.sklearn是Scipy科学计算库的扩展,建立在NumPy和 ...

  9. 模型评估指标(Confusion Matrix、ROC、AUC)

    文章目录 1.选择合适的模型评估指标的依据 2.混淆矩阵(Confusion Matrix) 2.1 模型整体效果:准确率 2.2 捕捉少数类:精确率(Precision).召回率(Recall)和F ...

最新文章

  1. 开发Activex控件安全
  2. 在linux中查看端口信息,怎样在 Linux 上查看某个端口的相关信息?
  3. 点火提前角的修正方式有哪些_“天问一号”完成第二次轨道中途修正:精度很高,本次修正量很小...
  4. Please move ‘proctime(r_proctime)‘ to the end of the schema.以及rowtime和proctime
  5. 机器学习面试题(part5)
  6. ubuntu 目录及文件权限 000 444 666 777(转)
  7. Linux 便笺技巧专栏
  8. C# —— IEnumerator和foreach
  9. 代码没写完,哪里有脸睡觉!17 张程序员壁纸推荐
  10. Java怎么按照字母对单词排序_将一段字符串文本中的每个单词提取出来后按照字母顺序排序...
  11. SpringBoot源码篇:Spring5内置tomcat实现code-based的web.xml实现
  12. SoapUI 使用教程链接
  13. 怎么linux添加guest,如何为Ubuntu 16.04安装VirtualBox Guest Additions
  14. (西工程-金花)小米路由器连接哆点设置WiFi保姆式教程
  15. 数据结构队列之企业级应用--优先队列
  16. css网站样式表是什么,什么是css样式表
  17. 正则看这三个网站就够了
  18. 基础算法-支持向量机
  19. 计算机考试打字题遇到字母怎么办,手把手为你解决win10系统打字时莫名其妙出现字母的解决方法...
  20. oracle的weekday函数,VB weekday()函数的用法?

热门文章

  1. 计算机相关专业 英文,计算机相关专业英文求职信模板
  2. python编程else是什么意思_python条件判断if/else - python基础入门(8)
  3. VMware虚拟机XP系统安装教程【图文教程】
  4. android有声电子书新版本1.61发布
  5. 看看多线程,其实没那么可怕----小话多线程(1)
  6. 纽曼 移动硬盘 拆壳方法
  7. minecraft服务器搭建教程_我的世界 创建服务器基本图文教程 怎么联机
  8. dnf用计算机算比例,DNF:干货来啦,教你如何使用伤害计算器
  9. ajax写入json数据格式化,java ajax解析json数据格式化
  10. 耶鲁大学《博弈论》课程——最佳对策