# Загрузка пакетов
library(class)
library(gmodels)
# Загрузка и подготовка данных
data(iris)
set.seed(123)
# Нормализация данных (источник 1)
normalize <- function(x) {
return ((x - min(x)) / (max(x) - min(x)))
}
iris_norm <- as.data.frame(lapply(iris[1:4], normalize))
# Разделение на обучающую и тестовую выборки (источник 1)
ind <- sample(2, nrow(iris), replace = TRUE, prob = c(0.7, 0.3))
train_data <- iris_norm[ind == 1, ]
test_data <- iris_norm[ind == 2, ]
train_labels <- iris[ind == 1, 5]
test_labels <- iris[ind == 2, 5]
# Построение модели KNN (k=3) (источник 1)
knn_pred <- knn(train = train_data,
test = test_data,
cl = train_labels,
k = 3)
# Оценка модели (источник 2)
CrossTable(x = test_labels,
y = knn_pred,
prop.chisq = FALSE)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 44
##
##
## | knn_pred
## test_labels | setosa | versicolor | virginica | Row Total |
## -------------|------------|------------|------------|------------|
## setosa | 15 | 0 | 0 | 15 |
## | 1.000 | 0.000 | 0.000 | 0.341 |
## | 1.000 | 0.000 | 0.000 | |
## | 0.341 | 0.000 | 0.000 | |
## -------------|------------|------------|------------|------------|
## versicolor | 0 | 11 | 3 | 14 |
## | 0.000 | 0.786 | 0.214 | 0.318 |
## | 0.000 | 0.846 | 0.188 | |
## | 0.000 | 0.250 | 0.068 | |
## -------------|------------|------------|------------|------------|
## virginica | 0 | 2 | 13 | 15 |
## | 0.000 | 0.133 | 0.867 | 0.341 |
## | 0.000 | 0.154 | 0.812 | |
## | 0.000 | 0.045 | 0.295 | |
## -------------|------------|------------|------------|------------|
## Column Total | 15 | 13 | 16 | 44 |
## | 0.341 | 0.295 | 0.364 | |
## -------------|------------|------------|------------|------------|
##
##
# Матрица ошибок и точность (источник 2)
cm <- table(Факт = test_labels, Прогноз = knn_pred)
accuracy <- sum(diag(cm)) / sum(cm)
print(paste("Точность (Diagonal mark):", round(accuracy, 3)))
## [1] "Точность (Diagonal mark): 0.886"
# Загрузка пакета (источник 3)
library(e1071)
# Линейный классификатор с перекрестной проверкой (источник 3, с. 172)
svm_model <- svm(Species ~ .,
data = iris,
type = "C-classification",
kernel = "linear",
cross = 10)
# Результаты (источник 3)
print(paste("Средняя точность CV:", round(100 - svm_model$tot.accuracy, 2), "%"))
## [1] "Средняя точность CV: 4 %"
summary(svm_model)
##
## Call:
## svm(formula = Species ~ ., data = iris, type = "C-classification",
## kernel = "linear", cross = 10)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: linear
## cost: 1
##
## Number of Support Vectors: 29
##
## ( 2 15 12 )
##
##
## Number of Classes: 3
##
## Levels:
## setosa versicolor virginica
##
## 10-fold cross-validation on training data:
##
## Total Accuracy: 96
## Single Accuracies:
## 93.33333 93.33333 93.33333 100 100 93.33333 93.33333 100 93.33333 100
# Загрузка пакета (источник 3)
library(vegan)
## Загрузка требуемого пакета: permute
# Расчет PCA (источник 3, с. 49)
pca <- rda(iris[, 1:4], scale = TRUE)
# Ординационная диаграмма
plot(pca,
main = "PCA для данных Iris",
type = "n",
display = "sites")
points(pca,
col = as.integer(iris$Species),
pch = 16)
ordihull(pca,
groups = iris$Species,
col = 1:3,
lty = 2)
legend("topright",
legend = levels(iris$Species),
col = 1:3,
pch = 16)

# Выводы (источник 3)
print("Доля объясненной дисперсии:")
## [1] "Доля объясненной дисперсии:"
summary(pca)$cont$importance[, 1:2]
## PC1 PC2
## Eigenvalue 2.9184978 0.9140305
## Proportion Explained 0.7296245 0.2285076
## Cumulative Proportion 0.7296245 0.9581321