首页 > 解决方案 > 使用树函数时出现“强制引入的 NA”错误

问题描述

我一直在使用 KNN 算法对事件进行分类,但这并没有带来高精度的分类。一些同事告诉我tree (),R 中的函数(来自tree包)可以帮助解决这个问题。

这是我的数据示例。我正在尝试根据前两列的值对不同的事件(我有 8 种不同的事件类别)进行分类,"ACTIVITY_X"并且"ACTIVITY_Y"

> print(dataset)
     ACTIVITY_X ACTIVITY_Y     Event
  1:         19         21 Vigilance
  2:         20         14 Vigilance
  3:         34         35 Vigilance
  4:         18          5 Vigilance
  5:         23         27 Vigilance
 ---                                
426:          9         25 Vigilance
427:          0          0   Head-up
428:          0          0   Head-up
429:          3          3   Head-up
430:          0          0 Vigilance

理想情况下,我想在不同类别(抬头、警戒等)之间找到不同的阈值,这应该有助于在数据不可用且我只有数据时对它们进行"Event"分类。我想我应该将该函数用作:"ACTIVITY_X""ACTIVITY_Y"tree()

xtree <- tree(Head-up~ACTIVITY_X+ACTIVITY_Y,data=dataset)
plot(xtree)
title("Head_up")
text(xtree)

xtree <- tree(Vigilance~ACTIVITY_X+ACTIVITY_Y,data=dataset)
plot(xtree)
title("Vigilance")
text(xtree)

etc..

但是,我在运行分析时遇到了不同的错误,主要错误是"NAs introduced by coercion". 当我使用该rpart()函数时,这些错误是不存在的,这也是一种分类算法。

> xtree <- tree(Vigilance~ACTIVITY_X+ACTIVITY_Y,data=dataset)
Warning message:
In tree(Vigilance ~ ACTIVITY_X + ACTIVITY_Y, data = dataset) :
  NAs introduced by coercion
> plot(xtree)
Error in plot.tree(xtree) : cannot plot singlenode tree
> title("Vigilance")
Error in title("Vigilance") : plot.new has not been called yet
> text(xtree)
Error in text.tree(xtree) : cannot plot singlenode tree

任何帮助,将不胜感激。我对 R 很陌生,所以我希望这个问题仍然对其他用户感兴趣。

标签: rmachine-learningtree

解决方案


我有点不确定我的数据结构是否与您的相同,但错误对我来说是相同的:

Binary | X1  | X2
No     | 6.3 | 8.3
Yes    | 7.2 | 9.8
Yes    | 5.0 | 3.8

x = tree(Binary ~ . , data)

强制引入的 NA

对我来说,这个错误是因为数据集中的“二进制”变量是“字符”格式而不是所需的“因子”格式

class(data$Binary)
"character"

data$Binary = as.factor(data$Binary)

class(data$Binary)
"factor"

在此转换之后,运行树函数不再给出错误。


推荐阅读