添加精确召回曲线以使用函数绘制
add precision-recall curves to plot using a function
我有一个具有许多分类器的精度和召回率的数据框,每个分类器 运行 具有 4 个不同的置信度阈值:
MODEL CONFIDENCE_THR PRECISION RECALL
0 Model1 0.25 0.992647 0.950704
1 Model1 0.45 1.000000 0.929577
2 Model1 0.35 0.992537 0.936620
3 Model1 0.30 0.992593 0.943662
4 Model2 0.45 0.992647 0.950704
5 Model2 0.30 0.992647 0.950704
6 Model2 0.35 0.992647 0.950704
7 Model2 0.25 0.992701 0.957746
8 Model3 0.30 0.978417 0.957746
9 Model3 0.35 0.978102 0.943662
.
.
.
我想在 JupyterLab 中创建一个 Matplotlib 图,并为每个模型添加一条精确召回曲线。由于模型列表将来可能会发生变化,我想使用 Python 函数来执行此操作,而不是在 Matplotlib 代码中对模型名称进行硬编码。我写了类似
的东西
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib widget
df = pd.read_csv("results.csv")
plt.title('Precision-Recall curves')
plt.legend(loc = 'lower right')
def plot_precision_recall_curve(df, model, plt):
df = df.loc[df['MODEL'] == model, ['MODEL', 'PRECISION', 'RECALL']]
plt.plot(df['RECALL'], df["PRECISION"], 'b', label = model)
plot_precision_recall_curve(df, 'Model1', plt)
plt.show()
但是我得到一个空的图,上面有消息
No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.
另外,请注意,在我的代码中,我试图绘制单个模型的精确召回曲线,但实际上我想在同一图中添加数据框中包含的所有模型的精确召回曲线。你能帮帮我吗?
要修复您的代码,请在绘制内容后移动 plt.legend()
,最好在 plt.show()
:
之前
plt.title('Precision-Recall curves')
plot_precision_recall_curve(df, 'Model1', plt)
plt.legend(loc = 'lower right')
plt.show()
另一方面,您是否愿意 seaborn
:
import seaborn as sns
sns.lineplot(data=df, x='RECALL', y='PRECISION', hue='MODEL')
输出:
我有一个具有许多分类器的精度和召回率的数据框,每个分类器 运行 具有 4 个不同的置信度阈值:
MODEL CONFIDENCE_THR PRECISION RECALL
0 Model1 0.25 0.992647 0.950704
1 Model1 0.45 1.000000 0.929577
2 Model1 0.35 0.992537 0.936620
3 Model1 0.30 0.992593 0.943662
4 Model2 0.45 0.992647 0.950704
5 Model2 0.30 0.992647 0.950704
6 Model2 0.35 0.992647 0.950704
7 Model2 0.25 0.992701 0.957746
8 Model3 0.30 0.978417 0.957746
9 Model3 0.35 0.978102 0.943662
.
.
.
我想在 JupyterLab 中创建一个 Matplotlib 图,并为每个模型添加一条精确召回曲线。由于模型列表将来可能会发生变化,我想使用 Python 函数来执行此操作,而不是在 Matplotlib 代码中对模型名称进行硬编码。我写了类似
的东西import pandas as pd
import matplotlib.pyplot as plt
%matplotlib widget
df = pd.read_csv("results.csv")
plt.title('Precision-Recall curves')
plt.legend(loc = 'lower right')
def plot_precision_recall_curve(df, model, plt):
df = df.loc[df['MODEL'] == model, ['MODEL', 'PRECISION', 'RECALL']]
plt.plot(df['RECALL'], df["PRECISION"], 'b', label = model)
plot_precision_recall_curve(df, 'Model1', plt)
plt.show()
但是我得到一个空的图,上面有消息
No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.
另外,请注意,在我的代码中,我试图绘制单个模型的精确召回曲线,但实际上我想在同一图中添加数据框中包含的所有模型的精确召回曲线。你能帮帮我吗?
要修复您的代码,请在绘制内容后移动 plt.legend()
,最好在 plt.show()
:
plt.title('Precision-Recall curves')
plot_precision_recall_curve(df, 'Model1', plt)
plt.legend(loc = 'lower right')
plt.show()
另一方面,您是否愿意 seaborn
:
import seaborn as sns
sns.lineplot(data=df, x='RECALL', y='PRECISION', hue='MODEL')
输出: