r语言分类器性能指标

rm(list = ls())
library(dplyr)

新建两列,分别是sepal的长款比(sepal_ratio)和

petal的长宽比(petal_ratio)

df <-read.csv("/data/bigfiles/iris.csv")

我们可以发现Iris-setosa的sepal_ratio值最小,所以可以通过设置一个

sepal_ratio的阈值来把Iris-setosa辨识出来

也就是说,我们此时有一个极简分类器(决策树桩)

只要sepal_ratio小于这个阈值,就将样本预测为Iris-setosa

设置阈值为1.9

thres <- 1.9

使用filter,nrow函数,求整个样本集中的Iris-setosa的个数

n_setosa_all <- df %>%

根据这个阈值thres正确识别出来的Iris-setosa的个数

正确识别的意思就是,它真的是Iris-setosa,并且模型也认为它是Iris-setosa

所谓的模型就是sepal_ratio小于thres即预测为Iris-setosa

n_setosa_hit <-
df %>%

求True positive rate (TPR)

TPR就是检测出来的真阳性(这里的阳就是Iris-setosa)样本数除以

所有真实阳性样本数

tpr <-

求我们根据这个阈值thres错误识别为Iris-setosa的个数(假阳性个数)

n_false_alarm <- df %>%

求False positive rate (FPR)

FPR的含义是检测出来的假阳性样本数除以所有真实阴性样本数。

fpr <-
print(paste(round(tpr, 2), round(fpr, 2)))

完整的代码如下,望采纳

# 清空环境中的对象列表
rm(list = ls())

# 加载 dplyr 包
library(dplyr)

# 读取 iris 数据集
df <- read.csv("/data/bigfiles/iris.csv")

# 计算花萼和花瓣的长宽比
df <- df %>%
  # 在数据集中添加两列:花萼长宽比和花瓣长宽比
  mutate(sepal_ratio = Sepal.Length / Sepal.Width,
         petal_ratio = Petal.Length / Petal.Width)

# 设置花萼长宽比的阈值
thres <- 1.9

# 计算数据集中 Iris-setosa 的个数
n_setosa_all <- df %>%
  # 筛选出种类为 Iris-setosa 的样本
  filter(Species == "Iris-setosa") %>%
  # 计算样本数
  nrow

# 计算正确识别的 Iris-setosa 的个数
n_setosa_hit <- df %>%
  # 筛选出种类为 Iris-setosa 且花萼长宽比小于阈值的样本
  filter(Species == "Iris-setosa", sepal_ratio < thres) %>%
  # 计算样本数
  nrow

# 计算真阳性率
tpr <- n_setosa_hit / n_setosa_all

# 计算假阳性的个数
n_false_alarm <- df %>%
  # 筛选出种类不是 Iris-setosa 且花萼长宽比小于阈值的样本
  filter(Species != "Iris-setosa", sepal_ratio < thres) %>%
  # 计算样本数
  nrow

# 计算假阳性率
fpr <- n_false_alarm / (nrow(df) - n_setosa_all)

# 输出结果
print(paste(round(tpr, 2), round(fpr, 2)))