Использование линейного дискриминантного анализа для выполнения извлечения меток классов объектов - PullRequest
0 голосов
/ 15 января 2019

Я смотрю на различные методы, чтобы классифицировать электронную почту в наборе спамбаз UCI как спам или не спам.

https://archive.ics.uci.edu/ml/datasets/spambase

Поскольку имеется 58 переменных (включая зависимые), я решил использовать линейный дискриминантный анализ (LDA) для уменьшения размеров, а затем другие классификаторы, такие как SVM и т. Д., Чтобы проверить любое улучшение точности классификации.

Однако, хотя точность и увеличила метки классов (что обозначает каждое письмо как спам, а не спам), некоторые из наблюдений меняются.

Прежде чем запустить LDA, у меня есть: В обучающем_сети не спам 1952 спам 1269 В test_set не спам 836 спам 544

После запуска LDA у меня есть: В обучающем_сети не спам 2131 спам 1090 В test_set не спам 919 спам 461

это до I до фактической классификации (SVM). Как мне это остановить? Спасибо заранее.

#Linear Discriminant Analysis
setseed = 100
kfolds = 10

# Importing the dataset
dataset = read.csv('spambase.csv')

# Encoding the target feature as factor
dataset$factor = as.factor(dataset$factor)

# Splitting the dataset into the Training set and Test set
library(caTools)
set.seed(setseed)
split = sample.split(dataset$factor, SplitRatio = 0.7)
training_set = subset(dataset, split == TRUE)
test_set = subset(dataset, split == FALSE)

# Feature Scaling
training_set[-58] = scale(training_set[-58])
test_set[-58] = scale(test_set[-58])

sum(training_set[,58]==0)
sum(training_set[,58]==1)

sum(test_set[,58]==0)
sum(test_set[,58]==1)

# Fitting classifier to the Training set
library(MASS)
library(e1071)
LDA =lda(formula = factor ~ ., data = training_set)

training_set = as.data.frame(predict(LDA, training_set))
training_set = training_set[c(4, 1)]
test_set = as.data.frame(predict(LDA, test_set))
test_set = test_set[c(4, 1)]

sum(training_set[,2]==0)
sum(training_set[,2]==1)

sum(test_set[,2]==0)
sum(test_set[,2]==1)

classifier = svm(formula = class ~ ., data = training_set,
                 type = 'C-classification', kernel = 'linear')

# Predicting the Test set results
pred = predict(classifier, newdata = test_set[-58])

# Making the Confusion Matrix
cm = table(test_set$class,pred)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...