R - 从分类转换为 KNN 的数字

R - convert from categorical to numeric for KNN

我正在尝试使用 R 的 Caret 包来使用从 UCI 机器学习(link 到 data)应用于 "abalone" 数据库的 KNN。但是当有分类值时,它不允许使用 KNN。 如何将分类值(在此数据库中:"M","F","I")分别转换为数值,例如 1,2,3

通过read.table读入数据时,第一列数据为因子。那么

data$iGender = as.integer(data$Gender) 

会起作用。如果他们是性格,绕道最简单:

data$iGender= as.integer(as.factor(data$Gender))

第一个答案似乎是个糟糕的主意。将 {"M","F","I"} 编码为 {1, 2, 3} 意味着 Infant = 3 * MaleMale = Female/2 等。

如果您使用公式方法,

KNN 通过 caret 确实允许分类值作为预测变量。否则你需要将它们编码为二进制 dummy variables

此外,展示您的代码并有一个可重现的示例会有很大帮助。

最大

在数据集中使用 kNN 算法的最简单方法之一,其中一个特征是分类的:如您提到的 "M"、"F" 和 "I" 如下: 就在您的 CVS 或 Excel 文件中,您的数据集存在,在右栏中继续并将 M 更改为 1,将 F 更改为 2,将 I 更改为 3。在这种情况下,您的数据集中有离散值,您可以轻松地使用 R.

使用 kNN 算法

You can simply read the file with stringsAsFactors = TRUE

例子

data_raw<-read.csv('...../credit-default.csv', stringsAsFactors = TRUE)

stringasfactors 将用数字替换 Char 数据类型

尝试使用 R 中的 knncat 包,它将分类变量转换为对应的数值。

Here's the link for the package