1

我目前正在研究二进制 SVM 分类器。为了可视化分类器的工作原理,我想创建一个概率密度函数(用 scikit 计算)的直方图,它显示单个数据点的标量(无论它属于 0 类还是 1 类)。

剧情:概率密度函数直方图

请注意,在 SVM 中,分类器的“切割边缘”是 -1 和 1。该图很好地描绘了在 [-1,1] 处存在一些决策边界。

回到我的问题:我想分别为标签 0 和 1 的数据点着色以分析软边距(-1 和 1 之间的区域)

概率密度函数存储为np.array 对应的标签存储在 pandas数据框中

如何链接数组和数据框,将类别 0 的数值绘制为 ie 'green' 而类别 1 绘制为 ie'blue' ?

代码:

plt.hist(decisions_function_cv, bins=500, color='navy')

我试图将两者保存在同一个数据帧中,但我无法解密我如何以上述预期方式将其编程到决策函数中:(

Some1 有一个聪明的方法?提前致谢!

编辑:示例代码:

概率的标量。事实。

 np.array([.5,0.6,1,1,1,-1,-1,-1,-.5,-0.6])

带有相应标签的程式化数据框:

df['labels']

0      1.0
1      1.0
2      1.0
3      1.0
4      1.0
5      1.0
6      0.0
7      0.0
8      1.0
9      1.0

*类别 1 的数值应绘制为蓝色

类别 0 的数值应绘制为绿色

4

1 回答 1

2

使用seaborn,您可以轻松构建复杂pyplot的图表。

首先,我们重建您的数据框:

import pandas as pd
import numpy as np

df = pd.DataFrame()
df['values'] = np.array([.5,0.6,1,1,1,-1,-1,-1,-.5,-0.6])
df['category'] = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0]

print(df)

   values  category
0     0.5       1.0
1     0.6       1.0
2     1.0       1.0
3     1.0       1.0
4     1.0       1.0
5    -1.0       1.0
6    -1.0       0.0
7    -1.0       0.0
8    -0.5       1.0
9    -0.6       1.0

然后我们使用您的数据集并使用hue“类别”列配置颜色(参数)(请注意,您定义的调色板独立于实际值):

import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style('whitegrid')

sns.histplot(
    data=df,
    x="values",
    hue="category",
    palette=['green', 'blue']
)

这将打印以下结果:

在此处输入图像描述

于 2021-01-21T13:14:40.377 回答