预测准确率 100% 我也遇到过,和随机数种子及参数的选取有一定的关系。至于好不好这个就不好评价了,只能实践检验了。严格地说应该将数据分成三份,训练数据、验证数据和测试数据,如果验证数据得出的预测准确率是 100%,而测试数据的准确率不高,那么这个模型就有可能存在过拟合的问题。
---
title: "机器学习之KNN分类"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(warning = FALSE, message = FALSE)
```
# 数据准备
```{r}
# # 方法一
# set.seed(1234) # 设置随机数种子,方便重复性研究
# train = sample(nrow(iris), 0.7 * nrow(iris)) # 原数据的70%用来训练模型
# df_train = iris[train,] # 训练数据集
# df_validate = iris[-train,] # 验证数据集
# 方法二
set.seed(1234)
ind = sample(2, nrow(iris), replace = TRUE, prob = c(0.7, 0.3))
df_train = iris[ind == 1,]
df_validate = iris[ind == 2,]
```
# 加载相关R包
```{r}
library(class)
library(gmodels)
```
# 编写标准化函数
```{r}
# min-max标准化
normalize_mm = function(x) {
(x - min(x)) / (max(x) - min(x))
}
# z-分数标准化
normalize_z = function(x) {
(x - min(x)) / sd(x)
}
```
# 对数据进行标准化处理
```{r}
train_normalize = as.data.frame(lapply(df_train[, -5], normalize_mm))
train_label = iris[ind == 1, 5]
validate_normalize = as.data.frame(lapply(df_validate[, -5], normalize_mm))
validate_label = iris[ind == 2, 5]
```
# 训练和验证模型
```{r}
knn_pred = knn(
train = train_normalize,
cl = train_label,
test = validate_normalize,
k = 10
)
knn_perf = CrossTable(
validate_label, knn_pred,
dnn = c("Actural", "Predicted")
)
```