Попытка выполнить LDA с LASSO - PullRequest
0 голосов
/ 04 февраля 2019

PenalizedLDA( x = train_x, y =train_y) возвращает

Ошибка в sort.int (x, na.last = na.last, уменьшение = уменьшение, ...): x должен быть атомарным

Я пытаюсь использовать линейный дискриминантный анализ с использованием лассо для набора данных базы выборки из UCI . (Я добавил заголовки к столбцам и, где это необходимо, возвращаю столбцы с интервалом [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 должен быть атомарным

Здесь Iзастрял.

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")

1 Ответ

0 голосов
/ 04 февраля 2019

Согласно справочной странице PenalizedLDA(), его параметр y = должен быть:

n-вектор, содержащий метки классов.Должен быть закодирован как 1, 2,.,,, nclasses, где nclasses - количество классов.

Это означает, что уровни интересующей переменной (позиция 58 в вашем случае) должны начинаться с единицы, а не с 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...