CONFUSION_MATRIX
使用响应变量的观察值和预测值计算表的混淆矩阵。 CONFUSION_MATRIX
生成具有以下尺寸的表格:
-
行:类的数量
-
列:类的数量 + 2
语法
CONFUSION_MATRIX ( targets, predictions [ USING PARAMETERS num_classes = num‑classes ] OVER()
参数
实参 targets 和 predictions 必须设置为数据类型相同的输入列,即以下之一:INTEGER、BOOLEAN 或 CHAR/VARCHAR。根据数据类型,这些列将按如所示标识类:
-
INTEGER:从零开始的连续整数(介于 0 和 (num-classes-1) 之间),其中 num-classes 为类数。例如,给定以下输入列值 —
{0, 1, 2, 3, 4
} — Vertica 假定有五个类。注意
如果输入列值不连续,Vertica 将插入缺失值。因此,给定以下输入值 —{0, 1, 3, 5, 6,}
— Vertica 假设有七个类。 -
BOOLEAN:“是”或“否”
-
CHAR/VARCHAR:类名。如果输入列的类型为 CHAR/VARCHAR 列,则还必须将参数
num_classes
设置为类数。注意
Vertica 将类数计算为两个输入列中值的并集。例如,假如 targets 和 predictions 中的值集输入列为如下所示,则 Vertica 将计为四个类:
{'milk', 'soy milk', 'cream'} {'soy milk', 'almond milk'}
参数
num_classes
一个整数 > 1,指定要传递给该函数的类数。
如果指定的输入列为 CHAR/VARCHAR 类型,则必须设置此参数。否则,该函数将根据列数据类型处理此参数:
-
INTEGER:默认设置为 2,如果类数为任何其他值,则必须正确设置此参数。
-
BOOLEAN:默认设置为 2,不能设置为任何其他值。
-
示例
此示例计算逻辑回归模型的混淆矩阵,该模型将 mtcars
数据集中的汽车分为自动档或手动档。观察值在输入列 obs
中,而预测值在输入列 pred
中。因为这是一个二元分类问题,所以所有值都是 0 或 1。
在返回的表中,列 am
中值为 0 的所有 19 辆汽车都被 PREDICT_LOGISTIC_REGRESSION
正确预测其值为 0。在 am
列中值为 1 的 13 辆汽车中,12 辆被正确预测其值为 1,而 1 辆汽车被错误地分类为值 0:
=> SELECT CONFUSION_MATRIX(obs::int, pred::int USING PARAMETERS num_classes=2) OVER()
FROM (SELECT am AS obs, PREDICT_LOGISTIC_REG(mpg, cyl, disp,drat, wt, qsec, vs, gear, carb
USING PARAMETERS model_name='myLogisticRegModel')AS PRED
FROM mtcars) AS prediction_output;
actual_class | predicted_0 | predicted_1 | comment
-------------+-------------+-------------+------------------------------------------
0 | 19 | 0 |
1 | 0 | 13 | Of 32 rows, 32 were used and 0 were ignored
(2 rows)