R如何将预测转换为N列向量

时间:2015-08-30 07:13:59

标签: r machine-learning

我正在尝试将每个预测转换为N列向量。即 说我的预测集是3个级别的因子,我想将每个预测写为3的向量。

我的当前输出是

Id Prediction
1  Prediction 1 
2  prediction 2 
3  prediction 3

以及我想要实现的目标

Id  Prediction1 Prediction2 Predication3
1    0               0               1
2    1               0               0  

在R中实现这一目标的简单方法是什么?

4 个答案:

答案 0 :(得分:1)

看起来你想要执行所谓的"一个热编码"通过引入虚拟变量来预测因子变量。一种方法是使用caret包。

假设您有这样的数据框:

> df <- data.frame(Id = c(1, 2, 3, 4), Prediction = c("Prediction 3", "Prediction 1", "Prediction 2", "Prediction 3"))
> df
  Id   Prediction
1  1 Prediction 3
2  2 Prediction 1
3  3 Prediction 2
4  4 Prediction 3

首先确保已安装并加载插入符号包。

> install.packages('caret')
> library(caret) 

然后,您可以使用插入符的dummyVars()函数来创建虚拟变量。

> dummies <- dummyVars( ~ Prediction, data = df, levelsOnly = TRUE)

dummyVars()的第一个参数,一个公式,告诉它​​为日期帧df中的预测因子生成虚拟变量。 (levelsOnly = TRUE从列名中剥离变量名,只留下级别,在这种情况下看起来更好。)

然后可以将虚拟变量传递给predict()函数以生成具有一个热编码因子的矩阵。

> encoded <- predict(dummies, df)
> encoded
  Prediction 1 Prediction 2 Prediction 3
1            0            0            1
2            1            0            0
3            0            1            0
4            0            0            1

然后,您可以使用编码变量而不是原始因子变量创建新数据框:

> data.frame(Id = df$Id, encoded)
  Id Prediction.1 Prediction.2 Prediction.3
1  1            0            0            1
2  2            1            0            0
3  3            0            1            0
4  4            0            0            1

这种技术很容易归结为数值和分类变量的混合。这是一个更为一般的例子:

> df <- data.frame(Id = c(1,2,3,4), Var1 = c(3.4, 2.1, 6.0, 4.7), Var2 = c("B", "A", "B", "A"), Var3 = c("Rainy", "Sunny", "Sunny", "Cloudy"))
> dummies <- dummyVars(Id ~ ., data = df)
> encoded <- predict(dummies, df)
> encoded
  Var1 Var2.A Var2.B Var3.Cloudy Var3.Rainy Var3.Sunny
1  3.4      0      1           0          1          0
2  2.1      1      0           0          0          1
3  6.0      0      1           0          0          1
4  4.7      1      0           1          0          0

所有数值变量保持不变,而所有分类变量都被编码。这种情况很有用的典型情况是为机器学习算法准备数据,该算法只接受数值变量,而不是分类变量。

答案 1 :(得分:0)

您可以使用以下内容:

as.numeric(data[1,][2:4])

其中“1”是您要转换为矢量的行号。

答案 2 :(得分:0)

采取WhiteViking的开始和使用表函数似乎工作。

> df <- data.frame(Id = c(1, 2, 3, 4), Prediction = c("Prediction 3",    "Prediction 1", "Prediction 2", "Prediction 3"))
> df
  Id   Prediction
1  1 Prediction 3
2  2 Prediction 1
3  3 Prediction 2
4  4 Prediction 3
> table(df$Id, df$Prediction)

    Prediction 1 Prediction 2 Prediction 3
1            0            0            1
2            1            0            0
3            0            1            0
4            0            0            1

答案 3 :(得分:0)

我会使用reshape函数