Python | CAP - 累积精度曲线分析案例

CAP通常被称为"累积精度曲线",用于分类模型的性能评估。它有助于我们理解和总结分类模型的鲁棒性。为了直观地显示这一点,我们在图中绘制了三条不同的曲线:

  1. 一个随机的曲线(random)
  2. 通过使用随机森林分类器获得的曲线(forest)
  3. 理论上完美的曲线(perfect)

案例分析

加载数据集

python 复制代码
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
 
# loading dataset
data = pd.read_csv('Social_Network_Ads.csv')
 
print ("Data Head : \n\n", data.head())

输出

python 复制代码
Data Head : 

     User ID  Gender  Age  EstimatedSalary  Purchased
0  15624510    Male   19            19000          0
1  15810944    Male   35            20000          0
2  15668575  Female   26            43000          0
3  15603246  Female   27            57000          0
4  15804002    Male   19            76000          0

数据输入输出

python 复制代码
# Input and Output
x = data.iloc[:, 2:4]
y = data.iloc[:, 4]
 
print ("Input : \n", x.iloc[0:10, :])

输出

python 复制代码
Input : 
    Age  EstimatedSalary
0   19            19000
1   35            20000
2   26            43000
3   27            57000
4   19            76000
5   27            58000
6   27            84000
7   32           150000
8   25            33000
9   35            65000

划分训练和测试数据集

python 复制代码
# splitting data
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(
        x, y, test_size = 0.3, random_state = 0)

随机森林分类器

python 复制代码
# classifier
from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators = 400)
 
# training
classifier.fit(x_train, y_train)
 
# predicting
pred = classifier.predict(x_test)

分类器性能评估

python 复制代码
# Model Performance
from sklearn.metrics import accuracy_score
print("Accuracy : ", accuracy_score(y_test, pred) *  100)

输出

python 复制代码
Accuracy :  91.66666666666666

随机模型

随机图是在假设我们已经绘制了从0到数据集中数据点总数的点的情况下绘制的。y轴保持为数据集中因变量结果为1的点的总数。随机图可以理解为线性增加的关系。举个例子,一个模型,预测是否购买产品(积极的结果)的每个人从一组人(分类参数)的因素,如他们的性别,年龄,收入等,如果组成员将被随机联系,销售的产品的累计数量将线性上升到最大值对应的总人数在组内的买家。这种分布称为"随机"CAP。

代码示例

python 复制代码
# code for the random plot
import matplotlib.pyplot as plt
import numpy as np
 
# length of the test data
total = len(y_test)
 
# Counting '1' labels in test data
one_count = np.sum(y_test)
 
# counting '0' labels in test data 
zero_count = total - one_count
 
plt.figure(figsize = (10, 6))
 
# x-axis ranges from 0 to total people contacted 
# y-axis ranges from 0 to the total positive outcomes.
 
plt.plot([0, total], [0, one_count], c = 'b', 
         linestyle = '--', label = 'Random Model')
plt.legend()

输出

随机森林分类器

代码:随机森林分类算法应用于数据集,并绘图。

python 复制代码
lm = [y for _, y in sorted(zip(pred, y_test), reverse = True)]
x = np.arange(0, total + 1)
y = np.append([0], np.cumsum(lm))
plt.plot(x, y, c = 'b', label = 'Random classifier', linewidth = 2)

输出

说明:pred是随机分类器做出的预测。我们压缩预测值和测试值,并以相反的顺序对其进行排序,以便先出现较高的值,然后是较低值。我们只提取数组中的y_test值并将其存储在lm中。np.cumsum()创建一个值数组,同时将数组中以前的所有值累积添加到当前值。x值的范围将从0到总和+1。我们在总数上加1,因为arange()不包含数组中的1,我们希望x轴的范围从0到总数。

完美模型

然后我们绘制完美的图(或理想的曲线)。一个完美的预测准确地确定了哪些组成员将购买产品,这样,最大数量的产品销售将达到最低数量的呼叫。这会在CAP曲线上产生一条陡峭的线,一旦达到最大值(联系所有其他组成员不会导致更多产品销售),这就是"完美"CAP。

python 复制代码
plt.plot([0, one_count, total], [0, one_count, one_count],
         c = 'grey', linewidth = 2, label = 'Perfect Model')

说明:一个完美的模型会在相同的尝试次数中找到积极的结果。在我们的数据集中,我们总共有41个积极的结果,所以在41个时,达到了最大值。

最终分析

在任何情况下,我们的分类器算法都不应该产生一条位于随机线下面的线。在这种情况下,它被认为是一个非常糟糕的模型。由于绘制的分类器线接近理想线,我们可以说我们的模型非常适合。取完美图下的面积,称之为aP。取预测模型下的面积,称之为aR。然后将比率取为aR/aP。这个比率称为准确率。值越接近1,模型越好。这是一种分析方法。

另一种分析方法是从预测模型上的轴的大约50%投影一条线,并将其投影到y轴上。假设我们得到的投影值为X%。

-> 60% :这是一个非常糟糕的模型

-> 60%<X<70%:这仍然是一个糟糕的模型,但明显优于第一种情况

-> 70%<X<80%:这是一个很好的模型

-> 80%<X<90%:这是一个非常好的模型

-> 90%<X<100%:非常好,可能是过拟合的情况之一。

因此,根据这个分析,我们可以确定我们的模型有多准确。

相关推荐
JUNAI_Strive_ving9 分钟前
番茄小说逆向爬取
javascript·python
彤银浦11 分钟前
python学习记录7
python·学习
简单.is.good31 分钟前
【测试】接口测试与接口自动化
开发语言·python
Envyᥫᩣ1 小时前
Python中的自然语言处理:从基础到高级
python·自然语言处理·easyui
哪 吒1 小时前
华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)
javascript·python·华为od
我是陈泽1 小时前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
hakesashou1 小时前
python全栈开发是什么?
python
创作小达人1 小时前
家政服务|基于springBoot的家政服务平台设计与实现(附项目源码+论文+数据库)
开发语言·python
ZPC82102 小时前
Python使用matplotlib绘制图形大全(曲线图、条形图、饼图等)
开发语言·python·matplotlib
镜花照无眠2 小时前
Python爬虫使用实例-mdrama
开发语言·爬虫·python