Я смотрю на различные методы, чтобы классифицировать электронную почту в наборе спамбаз 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)