我正在对 R 中的 2 个变量和 2 个组进行线性判别分析,即
ldares <- lda(dat[,2:3], grouping=dat[,1])
接下来,我想获得用于分隔组的决策界限的公式。我知道我可以输出线性判别式的系数:
coef(ldares)
但是,鉴于决策界限由以下方式描述:
a*v1 + b*v2 + c = 0,
如何获得偏差或阈值权重c?
我正在对 R 中的 2 个变量和 2 个组进行线性判别分析,即
ldares <- lda(dat[,2:3], grouping=dat[,1])
接下来,我想获得用于分隔组的决策界限的公式。我知道我可以输出线性判别式的系数:
coef(ldares)
但是,鉴于决策界限由以下方式描述:
a*v1 + b*v2 + c = 0,
如何获得偏差或阈值权重c?
在没有给出先验权重的情况下,我相信您会发现 c=0 并且判别分数是基于设置先验的案例的分布。您可以看到,带有隐式 c=0 假设的分数构造会在 iris 数据集的预测中产生预期的分裂:
require(MASS)
ldares <- lda(iris[ iris[,5] %in% c("setosa", "versicolor"),2:3],
grouping=iris[iris[,5] %in% c("setosa", "versicolor") ,5])
scores <- with( iris[ iris[,5] %in% c("setosa", "versicolor") , 2:3],
cbind(Sepal.Width, Petal.Length) %*% coef(ldares) )
with( iris[ iris[,5] %in% c("setosa", "versicolor") , c(2:3, 5)],
plot(Sepal.Width, Petal.Length, col=c("black", "red")[1+(scores>0)]) )
您应该意识到 LDA 是中心变量的线性组合。所以,判别函数实际上是:
\Sigma [w * (x - mean(x))] > 0
因此:
\Sigma [w * x] > \Sigma w * mean(x)
因此阈值是 \Sigma w * mean(x)。不幸的是,LDA 没有报告整个数据集的均值(x),只有两组均值。但这使我们能够以一种相当直观的方式计算阈值。
假设结果是您的 LDA 结果,则阈值介于对两个类的质心的响应之间:
> `sum( result$scaling * result$means[2,] + result$scaling * result$means[1,] )/2`
ps 请注意,在原始问题w1*a1 + w2*a2 + c = 0
中,阈值为 -c