《机器学习》 AUC性能测试、回归树、随机森林

目录

一、AUC性能测试

1、什么是AUC

2、什么是AUC-ROC曲线

1)TPR、FPR

• TPR:真实值为1,预测值为1的概率

• FPR:真实值为0,预测值为1的概率

2)如何绘制图示曲线

3、最理想的AUC-ROC曲线图

4、案例实现

运行结果展示:

二、回归树

1、什么是回归树

2、特点

3、案例

1)计算最优切分点

2)计算损失值

• 以切分点为1.5计算损失值

• 以其余点为切分点分别计算损失值:

3)二维数据的决策树划分

4、库、参数解析

        1.criterion

        2.splitter

        3.max_depth

        4. min_samples_split 

        5. min_samples_leaf 

        6. max_leaf_nodes

        7、一些方法:

5、代码实现


一、AUC性能测试

1、什么是AUC

        AUC(Area Under Curve)是一种常用的性能指标,用于评估分类模型的性能。在机器学习中,AUC通常是用来评估二分类模型(如逻辑回归、支持向量机等)的预测质量。

        在机器学习中,性能测量是一项基本任务,因此,当涉及到分类问题时,问哦们可以依靠AUC-ROC曲线,当我们需要检查可视化多类分类问题的性能时,我们使用AUC(曲线下的面积)ROC(接收接收器工作特性)曲线,他是检查任何分类模型性能的最重要评估指标之一。

2、什么是AUC-ROC曲线

        ROC曲线是一个将真阳性率(True Positive Rate,TPR)(也称为灵敏度)对假阳性率(False Positive Rate,FPR)(也称为1-特异度)进行绘制的曲线真阳性率是指在正样本中被正确预测为正样本的比例,假阳性率是指在负样本中被错误预测为正样本的比例

        AUC代表了ROC曲线下的面积,其取值范围在[0,1]之间。AUC越大,代表模型性能越好。当AUC等于1时,表示模型完美预测正负样本,而当AUC等于0.5时,代表模型的预测能力与随机猜测无异。

AUC-ROC曲线图如下所示(AUC是曲线所围面积,ROC为这个曲线):

1)TPR、FPR

        如上图可知AUC-ROC曲线的横纵坐标对应的值为FPR和TPR,那么这两个值是什么呢,看下图:

• TPR:真实值为1,预测值为1的概率

相当于如下混淆矩阵对应召回率:

• FPR:真实值为0,预测值为1的概率

相当于如下概率,即真实值为0,预测错了的概率

2)如何绘制图示曲线

        有了上述 tpr 和 fpr 的计算方法,我们就可以找到对应的点,那么如果去更改这个模型的阈值,是不是又会有一新的 tpr 和 fpr 值,所以这个曲线就是通过tpr、fpr以及阈值去共同构建的。

3、最理想的AUC-ROC曲线图

        如下图所示,即不管 fpr真实值为0,预测错了的概率为多少,tpr 真实值为1,预测对了的概率全是1,此时AUC对应的面积为1

4、案例实现

        同样是上节课所说的电信客户流失那份数据,对上节课代码进行优化后的状态

import pandas as pd

datas = pd.read_excel("电信客户流失数据.xlsx")  # 导入数据

data = datas.iloc[:,:-1]   # 取出特征数据以及标签数据
target = datas.iloc[:,-1]

# 数据切分测试集训练集
from sklearn.model_selection import train_test_split
data_train,data_test,target_train,target_test = train_test_split(data,target,test_size=0.2,random_state=42)

# 定义决策树
from sklearn import tree
# 建立决策树模型,并对其进行训练
dtr = tree.DecisionTreeClassifier(criterion='gini' , max_depth=8 , random_state=42) # 设置计算方式为gini系数计算,最大层数为8层,随机种子设置为42
dtr.fit(data_train,target_train)  # 对训练集数据进行训练
# 预测数据
train_predicted = dtr.predict(data_train)

# 对测试集 打印分类报告
from sklearn import metrics
print(metrics.classification_report(target_train,train_predicted))
# 对原始数据测试,并打印报告
predict = dtr.predict(data)
print(metrics.classification_report(target, predict))
# 对随机切分的数据打印报告
predict1 = dtr.predict(data_test)
print(metrics.classification_report(target_test,predict1))

# AUC值计算
y_pred_proba = dtr.predict_proba(data_test)  # 打印各类别概率
a = y_pred_proba[:,1]  # 取出类别为1的一列

auc_result = metrics.roc_auc_score(target_test,a)  # 输入参数测试集标签、测试集概率,计算AUC值


# 绘制AUC-ROC曲线
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve

# 计算不同预阈值情况下的fpr tpr thresholds为阈值
fpr,tpr,thresholds = roc_curve(target_test,a)  # 输入参数测试集标签和概率,计算fpr、tpr、阈值


plt.figure()  # 创建一个画布
plt.plot(fpr,tpr,color='darkorange',lw=2,label=f'ROC curve{auc_result:0.2f}')  # x轴为fpr,y轴为tpr,图像颜色为深橘色,线宽度为2,提示标签为后面对应的字符串
plt.plot([0,1],[0,1])  # x轴y轴范围
plt.xlim([0.0,1.0])  # 刻度
plt.ylim([0.0,1.05])
plt.xlabel("False Positive Rate")   # 提示信息
plt.ylabel('True Positive Rate')
plt.title("Receiver Operating Characteristic")   # 标题信息
plt.legend()   
plt.show()
运行结果展示:

        此时预测的结果正确率为0.7,比上节课的高,但是还不够,还需要对其进行优化,看接下来的讲解。

二、回归树

1、什么是回归树

        用于解决回归问题的决策树模型。它是一种基于树结构的非参数模型,能够将输入特征空间划分为多个不同的区域,并为每个区域分配一个对应的输出值。

        回归树的建模过程从根节点开始,选择一个最佳的特征和切分点,将数据划分为两个子集。然后,递归地对每个子集进行相同的划分操作,直到达到预设的停止条件。在每个叶节点上,使用该节点中的数据样本的平均值作为预测值。

2、特点

  1. 非参数性:回归树是一种非参数模型,它不对数据的分布做出特定的假设。这使得回归树能够更灵活地适应不同类型的数据。

  2. 可解释性:回归树生成的模型易于理解和解释。通过观察树的结构和叶节点的取值,可以直观地理解模型在不同特征值上的划分和预测。

  3. 鲁棒性:回归树对异常值和缺失值具有较好的鲁棒性。由于回归树是基于样本的平均值进行预测,个别异常值对模型的影响较小。

  4. 非线性建模能力:回归树可以自适应地捕捉数据中的复杂非线性关系。通过多层划分,回归树可以对特征空间进行细致的划分,从而较好地拟合非线性模式。

  5. 高效性:在预测阶段,回归树的计算成本相对较低。它只需要根据输入特征的取值进行简单的比较操作,即可得到预测结果。

  6. 必须是二叉树

3、案例

有如下数据:

1)计算最优切分点
        因为只有一个变量,所以切分变量必然是x,可以考虑如下9个切分点:
        [1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5],如下图所示

2)计算损失值

公式:

        有了上述切分点,此时变要对其计算损失值,这里的c为平均值,c1为计算前一部分平均值,c2为计算后一部分损失值,y为标签的值

• 以切分点为1.5计算损失值

        当s=1.5时,将数据分为两个部分:

        第一部分:(1,5.56)

        第二部分:(2,5.7)、(3,5.91)、(4,6.4)…(10,9.05)

        所以可以得出切分点为 1.5 损失值 Loss

        C1=5.56

        C2=1/9(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)=7.5

        Loss = (5.56-5.56)^2 + (5.7-7.5)^2+(5.91-7.5)^2+…+(9.05-7.5)^2 =0+15.72 =15.72

• 以其余点为切分点分别计算损失值:

        可以得到如下数据:

可以看出,s=6.5 时,loss的值最小,所以第一个划分点 s = 6.5,画出如下结果:

由此依次对另外部分数据单独再继续求损失值,可得到如下结果,然后在对比求得下面的划分点,

此时可得到:
        <1>当s=3.5时,loss=0.2771最小,所以第一个划分点s=3.5。
        <2>当s=8.5时,loss=0.021最小,所以第二个划分点s=8.5。

因为输的深度限制为2层,(根节点不算第一层)所以得到以下图形:

最后一层叶子节点的值为每一部分的平均值

3)二维数据的决策树划分

例如有如下数据:

        可以发现此时1.2最小,所以取 x1=1 为第一个切分点,和上述一致,小于1为一个分支,大于1为一个分支,此时得到下列图形,然后再对各项再重复上述步骤即可得到下一层数据

4、库、参数解析

class sklearn.tree.DecisionTreeRegressor(criterion=’mse’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort=False)[source]
        1.criterion

                节点分裂依据。默认:mse,可选择·mae(平均绝对误差)->使用绝对值

        2.splitter

                默认best表示以最优的方式切分节点

        3.max_depth

                树的最大深度。过深的树可能导致过拟合,通过交叉验证来进行选择

        4. min_samples_split 

                默认值是2. 分裂一个内部节点需要的最小样本数,含义与分类相同

        5. min_samples_leaf 

                默认值是1,叶子节点最少样本数,含义与分类相同

        6. max_leaf_nodes

              设置最多的叶子节点个数,达到要求就停止分裂,控制过拟合,设置此参数之后max_depth失效

        7、一些方法:
  1. apply : 返回预测每个样本的叶子的索引
  2. decision_path: 返回树中的决策路径
  3. get_depth: 获取树的深度
  4. get_n_leaves: 获取树的叶子节点数
  5. get_params: 获取此估计器的参数,即前面配置的全部参数信息
  6. score: 得到决策树的评判标准R2

5、代码实现

多元线性回归文件内容如下:

import pandas as pd
from sklearn import tree
# 使用pandas导入csv文件
data = pd.read_csv("多元线性回归.csv",encoding='gbk')

x = data.iloc[:,:-1]  # 选择特征数据集和标签集
y = data.iloc[:,-1]

# 导入模型并对其进行训练
reg = tree.DecisionTreeRegressor()
reg = reg.fit(x,y)
# 对原始数据进行预测
y_pr = reg.predict(x)
print(y_pr)

# 这里的score求的是R方的值,二维的用R方,多元的用调整R方 ,求概率 ,回归是线性的,分类是离散的
score = reg.score(x,y)
print(score)

输出结果为:

由于数据量特别少,所以测试出来百分之99的概率被四舍五入成了100%

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜就多练_0828

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

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

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

打赏作者

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

抵扣说明:

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

余额充值