PenalizedLDA( x = train_x, y =train_y)
返回
sort.int(x,na.last = na.last,减少=减少,...)中的错误: 'x'必须是原子的
我正在尝试对来自UCI的sampbase数据集的套索使用线性判别分析。(我已将标题添加到列中,并在适当的地方将列返回到间隔[0,1]。
我第一次运行代码时出现错误
PenalizedLDA(x = train_x,y = train_y)中的错误: y必须是数值向量,其值如下:1、2 ....
我通过将train_y传递为
解决了这个问题train_y =as.list.numeric_version(training_set[,58])
当我再次运行它时,我得到了错误
sort.int(x,na.last = na.last,减少=减少,...)中的错误: 'x'必须是原子的
我在这里被卡住了。
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")
答案 0 :(得分:0)
根据PenalizedLDA()
的帮助页面,其参数y =
应为:
包含类标签的n向量。应编码为1、2 、. 。 。 ,nclasses,其中nclasses是类的数量。
这意味着感兴趣的变量的级别(在您的情况下为58)应从1开始而不是从0开始。此外,请勿使用函数as.list.numeric_version()
,因为它会创建一个列表,而a向量是必需的。
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)