尝试使用 LASSO 执行 LDA

Trying to perform LDA with LASSO

PenalizedLDA( x = train_x, y =train_y)returns

Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) : 'x' must be atomic

我正在尝试对来自 UCI 的 sampbase 数据集使用带套索的线性判别分析。(我已将 headers 添加到列中,并在适当的地方 return列到区间 [0,1].

我第一次运行代码报错

Error in PenalizedLDA(x = train_x, y = train_y) : y must be a numeric vector, with values as follows: 1, 2, ....

我通过将 train_y 传递为

解决了这个问题
train_y =as.list.numeric_version(training_set[,58])

当我再次 运行 时,我得到了错误

Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) : 'x' must be atomic

这里我卡住了。

library(penalizedLDA)
data = read.csv("spambase.csv",header = TRUE)

new_data = data/100
new_data[,c(55,56,57,58)] = data[,c(55,56,57,58)]
new_data[,58]= factor(new_data[,58])

# Splitting dataset into Training set and Test set


set.seed(seeds)
split = sample.split(new_data$factor, SplitRatio = 0.7)
training_set = subset(new_data, split == TRUE)
test_set = subset(new_data, split == FALSE)

#scale data

training_set[-58] = scale(training_set[,-58])
test_set[-58] = scale(test_set[,-58])

train_x =training_set[,-58]
train_y =as.list.numeric_version(training_set[,58])
#Sparse linear discriminant Analysis
classifier = PenalizedLDA( x = training_set[,-58], y =training_set[,58],K = 1,lambda = "standard")

根据PenalizedLDA()的帮助页面,它的参数y =应该是:

A n-vector containing the class labels. Should be coded as 1, 2, . . . , nclasses, where nclasses is the number of classes.

这意味着感兴趣变量的水平(在你的例子中是位置 58)应该从 1 而不是 0 开始。此外,不要使用函数 as.list.numeric_version(),因为它会创建一个列表,而需要矢量。

data = read.csv("...")

new_data = data/100
new_data[,c(55,56,57,58)] = data[,c(55,56,57,58)]
new_data[,58] = factor(new_data[,58] + 1)  # in order to start at 1 and not 0
new_data[-58] = scale(new_data[,-58])

classifier = PenalizedLDA(x = new_data[,-58], y = new_data[,58], K = 1, lambda = .1)