尝试使用 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)
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)