使用树函数时出现“强制引入的NA”错误

时间:2019-02-19 14:21:33

标签: r machine-learning tree

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

这是我的数据样本。我试图根据前两列"ACTIVITY_X""ACTIVITY_Y"的值对不同的事件进行分类(我有8种不同的事件类别):

> 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"数据不可用并且我只有{{1} }和"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()

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

3 个答案:

答案 0 :(得分:0)

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

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

x = tree(Binary ~ . , data)

强制性引入的不适用

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

class(data$Binary)
"character"

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

class(data$Binary)
"factor"

此转换后,运行树函数不再产生错误。

答案 1 :(得分:0)

对此主题有些陈旧的评论,但是我认为R的较旧版本会在分配时自动分配因子,我认为这会更好。

答案 2 :(得分:-1)

是的,将变量从其他类(例如二进制,字符等)更改为因子,谢谢.. !!!

data$saleCAT <- as.factor(data_cat) 
> class(train_data$saleCAT)

[1]“字符”

 Sub CopyDataBetweenWorkbooks()

    Dim wbSource As Workbook
    Dim shTarget As Worksheet
    Dim shSource As Worksheet
    Dim strFilePath As String
    Dim strPath As String

    ' Initialize some variables and
    ' get the folder path that has the files
    Set shTarget = ThisWorkbook.Sheets("6")
    strPath = GetPath
    Filename = InputBox("What is the name of this File")
    FileCount = InputBox("How many file are you looking for")
    ' Make sure a folder was picked.
    If Not strPath = vbNullString Then

        ' Get all the files from the folder
        'strfile = Dir$(strPath & "*.xlsx", vbNormal)

        'Do While Not strfile = vbNullString
            For FileNumber = 1 To FileCount Step 1

                strfile = Filename & FileNumber & ".xlsx"

                ' Open the file and get the source sheet
                Set wbSource = Workbooks.Open(strPath & strfile)
                Set shSource = wbSource.Sheets("Points")


                'Copy the data
                Call CopyData(shSource, shTarget)

            'Close the workbook and move to the next file.
                wbSource.Close False
                'strfile = Dir$()
            Next 'FileNumber
        'Loop
    End If

End Sub

[1]“因素”