如何将输出作为是或否而不是阈值?

Posted

技术标签:

【中文标题】如何将输出作为是或否而不是阈值?【英文标题】:How to get output as Yes or No instead of Thershold values? 【发布时间】:2020-06-15 23:49:34 【问题描述】:

我已经编写了我的逻辑,并且我还以 thershold values 的形式获得了输出。但我需要 Yes Or No 的形式。我用于预测的数据集属性也是 Yes/No 。但它仍然会抛出 Thershold 值。是 -> 有风险的人 否 -> 安全的人 这是我的服务器代码。

credfraudframe <- data.frame(credfrauddata$Credit.Score,credfrauddata$Annual.Income,credfrauddata$Current.Loan.Amount,credfrauddata$Number.of.Open.Accounts,credfrauddata$Current.Credit.Balance,credfrauddata$Maximum.Open.Credit,credfrauddata$Bankruptcies)
  credfraudfit <- randomForest(Bankruptcies ~ Credit.Score+Annual.Income+Current.Loan.Amount+Number.Of.Open.Accounts+Current.Credit.Balance+Maximum.Open.Credit,
                               data=credfraudframe,na.action = na.roughfix)

  cred_reactive1 <- eventReactive(input$eligibility,
    usercredcs <- input$uicscred
  )  
  cred_reactive2 <- eventReactive(input$eligibility,
    userannualinc <- input$uiannualincome
  )
  cred_reactive3 <- eventReactive(input$eligibility,
    userlamt <- input$uilamt
  )
  cred_reactive4 <- eventReactive(input$eligibility,
    usernoopenacc <- input$uiopenacc
  )
  cred_reactive5 <- eventReactive(input$eligibility,
    usercurrcredbal <- input$uicurrcredbal
  )
  cred_reactive6 <- eventReactive(input$eligibility,
    usermaxopencred <- input$uiopencred
  )
  credfraudrv <- reactiveValues(usercredcs = NULL,
                                userannualinc = NULL,
                                userlamt = NULL,
                                usernoopenacc = NULL,
                                usercurrcredbal = NULL,
                                usermaxopencred = NULL)

  observeEvent(input$eligibility,
    req(input$uicscred, input$uiannualincome, input$uilamt, input$uiopenacc,input$uicurrcredbal,input$uiopencred)
    credfraudrv$usercredcs <- input$uicscred
    credfraudrv$userannualinc <- input$uiannualincome
    credfraudrv$userlamt <- input$uilamt
    credfraudrv$usernoopenacc <- input$uiopenacc
    credfraudrv$usercurrcredbal <- input$uicurrcredbal
    credfraudrv$usermaxopencred <- input$uiopencred
  
  )
  credfraudpred <-reactive(
    predict(credfraudfit,
            newdata=data.frame(Credit.Score=credfraudrv$usercredcs,
                               Annual.Income=credfraudrv$userannualinc,
                               Current.Loan.Amount=credfraudrv$userlamt,
                               Number.Of.Open.Accounts=credfraudrv$usernoopenacc,
                               Current.Credit.Balance =credfraudrv$usercurrcredbal,
                               Maximum.Open.Credit=credfraudrv$usermaxopencred))
  )

  output$text2 <- renderText(
    paste("Is this Customer Risky ",credfraudpred())
  )

我已将我的“输出”变量用作 Bankruptcies,它也是字符格式(是或否)

当我提交检查资格时,它会抛出一些阈值作为输出

这就是我得到的 .. 我需要它是的 -> 客户是有风险的人 否 -> 客户是安全的人 请帮我解决这个问题。在哪一部分我必须编辑我的代码以获得所需的格式(是/否)

【问题讨论】:

判断一个人是否有风险的阈值是多少?你需要自己决定。 predict 函数正在返回概率。 【参考方案1】:

在此代码之前,您需要指定哪些条件有风险,哪些没有风险:

  output$text2 <- renderText(
    paste("Is this Customer Risky ",credfraudpred())
  )

例如,在这段代码之前,你可以放:

if credfraudpred() > 0.1 
credfraudlabel = 'Yes, the customer is a risky person'
 else 
credfraudlabel = 'No, the customer is not a risky person'

然后,您可以更改代码以将 credfraudpred 替换为 credfraudlabel

  output$text2 <- renderText(
    paste("Is this Customer Risky: ",credfraudlabel)
  )

【讨论】:

我认为预测值不能> 1。 我只是以 1 为例 - 必须有一个阈值来区分风险与非风险,并且应该在代码中使用。 是的,但概率不能超过 1。所以最好将其更改为 0.1 或 0 到 0.999 之间的任何值......“作为一个更好的例子”。 :) 也许添加 (): if credfraudpred() &gt; 1 但请阅读我的 cmets。 超级酷 .. 非常感谢你们两个提供这段代码。它给了我想要的输出..非常感谢您的及时帮助..

以上是关于如何将输出作为是或否而不是阈值?的主要内容,如果未能解决你的问题,请参考以下文章

如果嵌套查询在 SQL Server 中是不是有结果,如何返回是或否?

感知机

如何将计数器设置为是或否无线电,提交时递增?

如何根据正则表达式查询将是或否值插入标志列

是或否:MVC 中的模型是不是应该包含应用程序逻辑?

使用jquery是或否投票将数据插入mysql