小组信息 私有 隐藏 

cid:41:privileges:topics:read

  • RE: 项目创意收集大赛

    昨天走在路上经过一片小树林,一阵秋风吹过落叶萧下,久违的激起了我的浪漫主义情怀,想着:如果能在枫林中央一片满地落叶金黄中弹钢琴会是一件多么幸福的事情啊。闭上眼睛想象了一下,感觉这段时间刷题带来的心理伤痛和反胃感似乎瞬间被抚平了。。

    大概是这种感觉↓(请自行脑补秋景)
    0_1478648899427_111.jpeg

    不过话说回来,找一片理想的树林再把琴搬进去所带来的伤痛(物理上的)可能和刷题也差不多。所以从性价比上来说,这种脑洞的实现一定是要靠VR的。不禁回想起四年前刚来美帝的时候,在考虑未来想要涉足的技术时有过两个比较宏大的设想。

    其一:Personal Artificial Intellegence。这个想法来自《奇点临近》和《Halo》,核心是将人类智能和机器智能结合。一种可能的实现方式:每个人都机械化自己身体的一部分并搭载独立的人工智能,通过神经接口连接人类意识和人工智能意识。担心人工智能一旦拥有自我意识就会叛乱?那么如果机器的自我意识和宿主人类的意识是一体的话似乎就没什么问题了。
    如果不幸AI complete无药可救了,机器不可能具有意识了。那么我们也至少可以通过神经接口让人类的思维可以顺畅的访问由“无意识”AI控制的计算资源,来无限的提升记忆能力、逻辑与计算能力、空间思维能力等。

    其二:随身系统/虚拟环境。这俩其实是工具虚拟化在AR和VR两种不同实现方式下的不同表现。
    随身系统:每天背着电脑到处跑是不是觉得各种不方便呢?特别是我这种经常背两台机器或者是厚重的游戏本的人。简单粗暴的解决方案就是:背一台主机就够了!作为交互界面的显示屏由AR眼镜替代,鼠标和键盘输入通过手部动作捕捉来实现。这样的话,走在大街上就能随时使用电脑了。

    虚拟环境:最初设想这个的动机是想强化多任务能力(不,你其实只是想装X),不光要随时随地能用电脑,还要在静下来专心工作的时候能够高效的多任务。现实中的解决方案简单粗暴:多屏。像这样↓
    0_1478651629318_22222.jpg
    然而这样硬件成本太高且占用了太多的空间。使用VR来构建一个这样的环境显然是更加经济合理的。想像一下自己被无数显示器360度环绕的感觉。并且由于VR的沉浸式环境,不会受到太多外界的物理干扰,context-switching会更加顺畅。如果再加上精确动作捕捉支持的虚拟键盘的话,就可以构成一个完全虚拟化的工作环境。
    哦,对了,别忘了你还是需要一张实实在在的转椅来让沉浸环境符合大脑直觉的

    除了工作环境以外,VR也可以提供其它虚拟环境,比如开头说的谜之林间空地钢琴师。除了自嗨的环境以外当然也不能忘了社交。说起来,我记得有公司已经开始做《星际迷航》的VR社交游戏了

    //===================================以上是脑洞=================================================
    //==================================以下回到现实================================================

    设想一按照我的感觉应该至少是十年之后的事了。不过设想二已经极其接近现实了。想想四年前rift dk1都还只是极少部分开发人员在玩,现在vive已经捆绑steam杀到了。不过设想二还有几个需要解决的问题:

    1. 精确的手部动作捕捉和符合直觉的力反馈体验。现在大部分动作捕捉好像都是基于摄像头超声波之类的。要让虚拟键盘/钢琴有更好的体验,力反馈必不可少,这一点是摄像头等技术提供不了的。个人认为体感手套(动作捕捉手套 + 力反馈系统)还是有必要的。
    2. VR/AR对电脑性能要求还是太高。我的游戏本使用的显卡是gtx970m,不算太糟糕的配置,但是运行大型的VR游戏还是感觉力不从心。想要很好的支持VR可能还是需要中高端的台式机。
    3. VR设备本身的性能还需要有质的飞跃才行。Oculus Rift DK2 单眼分辨率960 * 1080,按照我的体验来说,画面的颗粒感特别强,能清楚的看到每一个像素点。消费者版本的vive的单眼分辨率是1080*1200,可以预期在实际体验上比dk2并不会有太大提升。今年年初的时候我看到过一个VR虚拟windows桌面的应用,然而因为dk2的分辨率是在太磕碜而没法愉快的玩耍。

    //==============================================================================================

    所以我们能做什么呢?

    • 体感手套 (这个CS专业就牡蛎了,也许EE和机械工程专业的同学?)
    • 如何在VR眼镜中投影多个屏幕(我见过把VR眼镜当外接显示器用,在视野里显示一个屏幕的,能不能分更多的屏???)
    • 虚拟环境/场景构建程序(目测有大量的unity和建模工作)
    • 泥萌还有什么脑洞?

    抛砖引玉贡献一下脑洞,求轻喷

    发布在 太阁x微项目
  • 项目创意收集大赛

    “That would just say things and do them without having any idea how. Were gonna put a man on the moon. How are we gonna do it? When we gonna do it? Why are we doing this? No idea. We just did stuff – Crazy but great.”
    by Jerry Seinfield

    传统出租房子的做法是在Craigslist网站发帖子。“但我们不想这么干,因为在Craigslist发千篇一律的帖子会显得冷冰冰的,于是我们打算自己动手建一个网站。” 于是,Brian Chesky与Joe Gebbia创办了Airbnb。

    “当时市场上没什么好电动汽车” ,于是,Musk创办了Tesla。

    Crazy maker总是能带给我们无数的惊喜。去异想天开,去拿着hacker的精神去实践,去诠释一切的可能性。

    0_1478458188387_0714_leadership-800x480.jpg

    被leetcode虐成狗的同学们, 还在为简历焦头烂额的同学,让我们脑洞大开一下,告诉我们你疯狂的,甜蜜的项目创意,一起来参加我们的项目创意征集大赛吧! 你不仅有机会获得太阁coupon和会员奖励,还能遇见知心的小伙伴,组队完成你们自己的项目!

    本次的活动由太阁社区项目组主办。太阁项目组一直都是社区的重要部分。我们以Github和讨论群为聚集地,分享心得,实践技术,结交志同道合的好友。半年以来已经有几百位小伙伴参与过我们的项目挑战,我们已经完成了许多高质量的项目。

    优秀项目展示

    爬虫项目是目前为止完成效果最好的项目之一,我们来看看由文哲大师制作的github社区排行榜吧!

    https://github.com/BitTigerInst/Github-Ranking-Crawler

    via GIPHY

    为了让热爱网课的同学们,按需找到心仪的课程,huaweidong,lizkGitHub,sccds三位同学制作出十佳课网站。

    https://github.com/BitTigerInst/CourseWebCrawler

    via GIPHY

    接下来,看看wjcdenis,hanyu2, haolin29 利用meteorjs搭建的应用商店:

    https://github.com/z502185331/BitTiger-AppStore

    via GIPHY

    最后我们来看一个利用最新的VR技术做出来的炫酷3D版俄罗斯方块:

    https://github.com/BitTigerInst/AR-3D-Tetris

    via GIPHY

    参与方式
    在本帖下回复你的创意
    活动奖励
    一等奖:一周vip or 三张课程coupon
    二等奖:两天vip or 二张课程coupon
    三等奖:一张课程coupons
    评分标准
    以点赞数量排序

    发布在 太阁x微项目
  • 【10.27】在科技领域,如何成功转型做business

    “我对Business感兴趣,我该不该转型?”
    “我走现在这条路,到底适不适合?”

    你可能也在寻找人生导师给你建议。

    可是没有经过思考的问题,都不是真正的问题。

    本次太阁直播,邀请了来自GoPro的魏锴,为我们解读Business的各个领域,各个方向需要什么知识和技能,分享自己如何从理工科背景成功转行的recruiting故事,以及在GoPro的工作经历。
    这里没有心灵鸡汤,有的是一位学长的直言不讳。

    我们希望,讲座之后,

    你能对科技领域的business有更深刻的认识

    清楚应该提升什么硬技能

    例如数据处理,根据实际问题建模

    如何提升软实力

    如何掌握行业趋势,提高沟通技巧,如何有效networking

    慢慢学会该怎样思考自己的未来

    是否要转行,如何发现自己的优势,如何成功转行

    没有适用一辈子的锦囊妙计,但你可以做自己一辈子的人生导师。

    讲座大纲

    • What is business?
    • How to transfer to business function?
    • For students-知识储备
    • For students-path
    • For professionals
    • My recruiting story
    • 为什么要转行?
    • 如何确定未来的方向?
    • 如何实现成功转行?
    • My time at GoPro
    • Skills Desired

    嘉宾介绍

    魏锴
    2007年毕业于北理机电工程学院,加入中国航天空间技术研究院。2012年于CMU商学院读取MBA学位,毕业后加入GoPro总部从事市场方向的管理工作,任GoPro Competitive Insights Manager. 并经营个人公众号:头上有棵树。(id: treeonhead)。不求闻达于网红,但求旧事不忘,细水长流。

    讲座时间

    美西时间:10月26日(周三)7:30pm-8:30pm

    美东时间:10月26日(周三)10:30pm-11:30pm

    北京时间:10月27日(周四)10:30am-11:30am

    发布在 太阁x直播
  • 【学习笔记】The Analytics Edge 第四周:分类回归树与随机森林

    分类回归树与随机森林

    本周的课程以预测美国最高法院的判决为例展示了如何在R中使用分类回归树以及随机森林算法。数据集为1994年至2001年间的大法官Justice Steven对于下级法院的审判结果是否驳回(1=Reverse 0=affirm),以及案件相关的属性。属性包括:
    Circuit court of origin(1-11th, DC,FED)
    Issue area(civil right, taxation)
    Type of petitioner, type of respondant (US, an employer)
    Ideological direction of lower court decision(conservative or liberal)
    Whether petitioner argued that a law/practice was unconstitutional

    数据集下载地址:https://d37djvu3ytnwxt.cloudfront.net/assets/courseware/v1/80dfa0ae5eb3fa2013a34507cd58fabb/asset-v1:MITx+15.071x_3+1T2016+type@asset+block/stevens.csv

    这个问题可以使用逻辑回归来预测,但是这样会难以解释模型中的哪个因子对结果的影响更大,并且不便于对新的案例进行预测。因此使用分类回归树(CART)这个更容易解释的模型。

    一个简单的CART例子如下:
    0_1474856179329_cart1.jpg
    0_1474856278295_cart2.jpg

    在树上的每一个节点处做出判断选择子节点,直到叶子节点为止:
    如果x<60则判定为红色(split 1)
    否则,如果y>=20则判定为灰色(split 2)
    否则,如果x<85则判定为红色(split 3)
    否则,判定为灰色

    ps: R中使用minbucket参数来控制分枝数量。

    Classification And Regression Trees
    首先导入数据

    stevens = read.csv(“stevens.csv”)
    str(stevens)

    接着讲数据划分为训练集和测试集

    library(caTools)
    set.seed(3000)
    spl = sample.split(stevens$Reverse, SplitRatio = 0.7)
    Train = subset(stevens, spl==TRUE)
    Test = subset(stevens, spl==FALSE)

    导入包

    install.packages(“rpart”)
    library(rpart)
    install.packages(“rpart.plot”)
    library(rpart.plot)

    建立模型, method=”class”申明建立的模型是分类树,minbucket限制了树的大小以防止过拟合

    StevensTree = rpart(Reverse ~ Circuit + Issue + Petitioner + Respondent + LowerCourt + Unconst, data = Train, method=“class”, minbucket=25)

    打印出分类树

    prp(StevensTree)
    0_1474856303672_cart3.jpg

    使用建立好的模型做出预测、并计算预测准确率

    PredictCART = predict(StevensTree, newdata = Test, type = “class”)
    table(Test$Reverse, PredictCART)
    PredictCART
    0 1
    0 41 36
    1 22 71

    (41+71)/(41+36+22+71)
    [1] 0.6588235

    最后使用ROC来评估一下模型

    library(ROCR)
    PredictROC = predict(StevensTree, newdata = Test)
    pred = prediction(PredictROC[,2], Test$Reverse)
    perf = performance(pred, “tpr”, “fpr”)
    plot(perf)
    0_1474856325541_cart4.jpg

    Random Forests
    随机森林(Random Forests)可以被用来提高CART预测的准确性,副作用是让模型不再容易被人理解。随机森林会从数据集中随机选取数据来建立多棵树。由于数据可以被重复选取,所以虽然取自同一个数据集,但是建立的多棵树是不同的。
    随机森林有两个变量需要人为选择:
    nodesize:一个数据子集所需的数据个数的下限(minbucket)
    Ntree:需要多少棵树

    导入包

    install.packages(“randomForest”)
    library(randomForest)

    将reverse变量转换为random forest可以接受的factor类型变量:

    Train$Reverse = as.factor(Train$Reverse)
    Test$Reverse = as.factor(Test$Reverse)

    训练模型并作出预测

    StevensForest = randomForest(Reverse ~ Circuit + Issue + Petitioner + Respondent + LowerCourt + Unconst, data = Train, ntree=200, nodesize=25 )
    PredictForest = predict(StevensForest, newdata = Test)

    计算一下预测的准确度

    table(Test$Reverse, PredictForest)
    PredictForest
    0 1
    0 40 37
    1 19 74
    (40+74)/(40+37+19+74)
    [1] 0.6705882

    使用随机森林的时候需要人为决定两个变量的值。为了选取这两个值,我们需要交叉验证(k-fold cross-validation)。具体来说,将一个训练数据集分成k份(比如5份),交替选取其中的k-1份(4份)训练模型,剩下的一份测试模型。记录每一种数据集组合下变量不同取值最后得到的预测结果,取均值后得到一条预测结果随变量变化的曲线。最后根据这条曲线来决定变量的取值。

    0_1474856347650_cart5.jpg

    0_1474856362447_cart6.jpg

    0_1474856376349_cart7.jpg

    除此以外,随机森林中还有一个变量cp (Complexity Parameter)来衡量模型的好坏(overfitting vs. underfitting)。

    安装交叉验证所需的包

    install.packages(“caret”)
    library(caret)
    install.packages(“e1071”)
    library(e1071)

    决定交叉验证的k值

    numFolds = trainControl( method = “cv”, number = 10 )

    决定测试cp的范围

    cpGrid = expand.grid( .cp = seq(0.01,0.5,0.01))

    交叉验证

    train(Reverse ~ Circuit + Issue + Petitioner + Respondent + LowerCourt + Unconst, data = Train, method = “rpart”, trControl = numFolds, tuneGrid = cpGrid )
    0_1474856431781_cart8.jpg
    0_1474856443944_cart9.jpg

    最终结果显示为 cp = 0.18, 因此我们使用0.18来建立新的CART

    StevensTreeCV = rpart(Reverse ~ Circuit + Issue + Petitioner + Respondent + LowerCourt + Unconst, data = Train, method=“class”, cp = 0.18)

    计算下准确率,发现上升到70%了

    PredictCV = predict(StevensTreeCV, newdata = Test, type = “class”)
    table(Test$Reverse, PredictCV)
    PredictCV
    0 1
    0 59 18
    1 29 64
    (59+64)/(59+18+29+64)
    [1] 0.7235294

    发布在 数据科学&数据工程课程
  • 微信群分享文章链接清单

    本帖整理了到目前为止微信群聊中分享过的文章的链接

    发布在 R 资源分享区
  • 板块介绍

    R语言是一种在数据统计和分析领域被广泛使用的语言。在很多领域,比如生物信息,拥有大量成熟的包来帮助用户快速解决问题。R语言本身也非常易学易用,更重要的是,它是免费的!免费的!免费的!(SAS和MATLAB哭晕在厕所)
    本版块分为两个子版块:

    • QA板块用于总结微信群聊中R语言相关的问答,以及待解决问题。大家也可以在这个板块提出自己的问题,对于待解决问题和以解答问题,也欢迎大家在回帖中提出自己的见解。
    • R资源分享区用于集中与R相关的技术文章、新闻等相关信息,欢迎分享自己找到的资源
    发布在 R 讨论
  • 小豆芽背后苹果打着什么主意?

    随着iphone 7 以及ios 10一同面世的Airpods无线耳机一再传出槽点。比如,因该耳机外型犹如电动牙刷上半部分,160美金约合1100人民币的美丽价格,一不小心进掉进马桶里,早高峰人下车了耳机没下车… 诸如此类,不禁让小编产生好奇,苹果是哪来的自信味这个看似功能不友好的小豆芽高调定价,这背后埋伏着什么还未被大众感知的可能性?

    0_1474478911128_Picture1.png

    首先我们要引入一个词“Contextual Artificial Intelligence”,小编初译成“语境人工智能”或“情景人工智能”。据国外评论报道,无线耳机的推出将带动语境人工智能整个平台业务的发展,性能更稳定持久的语境人工智能产品能和人对话,并完成人们提出的口令。毫无疑问,这个商业平台的发展最先得益的就是苹果Siri,然后扩展到其他开发商和创业公司。

    此话怎讲?其实大部分人都不知道,早在今年苹果开发者大会上,公司就把SiriKit的兼容性分享给大家了,并支持多个种类的app 给Siri提供服务,也就是说这些app要通过Siri接受人们的语音指令,然后完成运行。说起来容易做起来难,这对小小的耳机机身有着很高的硬件要求。

    0_1474479168411_Picture2.png

    • 两个机身分别含有独立电池和芯片(官方取名W1)

    • 双加速计和传感器来探测是否塞进了人体的耳朵

    • 麦克风、接收天线

    0_1474479686318_Picture3.png

    两只耳机装进小盒子里就可连接充电,因为W1芯片的存在,连接耳机和设备变成非常容易。以至于苹果官方都不使用“Pair配对”,而是“Connect连接”来进行市场推销,以区分开现有的蓝牙技术等。值得一提的是,芯片不仅简化了连接外来设备,还负责管理电量延长待机时间的功能。对了,官方介绍耳机充满一次电的使用时间是5小时,小盒子又可以额外给耳机充电24小时。根据可靠消息,其实小耳机的电量还是挺耐用的,因为你不用的时候,将他装进小盒子里就能自动蓄电。

    0_1474479189368_Picture4.png
    0_1474479696118_Picture5.png

    用Airpods小豆芽连接非苹果设备也很容易,按一下它身后的按键,搜索蓝牙、确认连接,就能像使用正常耳机那样享受音乐了。既然是耳机,那么音质处理和控制怎么样呢?

    据说,音质是杠杠的好呀!外国人用了“Solid”这个词来形容。重低音貌似很爽?原因是设计让耳机会将耳朵塞得很紧,几乎隔绝外界杂音。好消息!据外国小哥真实体验,塞着耳机又跑又跳相当的嗨,还是没掉!他的解释是,没有了之前的线向下拉扯,耳机又被托在耳蜗里稳稳地。

    和小耳机互动起来也是相当灵活自如。塞进耳朵,耳机就会自动传出开启的提示音,脱离耳朵就会自动关闭,单独使用一只耳机和同时使用两只,都是一样的效果,两个耳机可独立工作。双击按钮就会启动Siri,然后开始你的指令咯。其实小编和大家有一样的concern… 只有一个按钮,且就用来启动Siri,也就是说要调节音量,或者切歌都要先和Siri打招呼….感觉大家都还需要一段时间来适应无线小豆芽和Siri万能小秘呢~~是我,估计还是要掏荷包自己操作手机变音量…Pia!这是土豪的玩具,你不需要!

    0_1474479701630_Picture6.png

    本文作者:Jialu Li

    发布在 太阁x博客
  • 【学习笔记】The Analytics Edge 第三周:逻辑回归模型的建立与使用

    这周的课程以预测医疗保险质量的好坏为例介绍了如何在R中使用逻辑回归。
    符号定义如下:
    因变量:“质量差”定义为y,y = 1表示质量差, y = 0 表示质量好。
    P(y = 1) 表示“质量差”的概率,P(y = 0) = 1 - P(y = 1)
    自变量: x1, x2, x3,…, xk
    逻辑回归函数:
    0_1474327439681_logistic.jpg

    对于医疗数据集“quality.csv”(https://d37djvu3ytnwxt.cloudfront.net/assets/courseware/v1/cbb7baaf6c8a0559bb6a4549ad194ab8/asset-v1:MITx+15.071x_3+1T2016+type@asset+block/quality.csv)
    首先导入数据:

    quality = read.csv(“quality.csv”)

    使用table查看一下质量好坏的分布

    table(quality$PoorCare)
    0 1
    98 33

    这里可以构建一个简单的base model (分类问题中的标准base model是频率最高的数据的个数除以所有数据的个数):
    98/131
    [1] 0.7480916

    Base model的准确率大致为75%, 意味着我们训练模型的准确率要超过75%才行。

    这一周课程的数据并没有默认分类为训练数据和测试数据,因此需要自己来对数据集进行分类。在R中可以借助额外的库来帮助我们随机将数据划分为训练数据和测试数据。为此我们首先需要安装和导入库:

    install.packages(“caTools”)
    library(caTools)

    设置随机数的种子:(种子可以自己选择,课程使用的是88)

    set.seed(88)

    随机划分数据(splitratio = 0.75 表示在划分出的两组数据集中PoorCare = 0的数据都占到75%):

    split = sample.split(quality$PoorCare, SplitRatio = 0.75)
    split
    [1] TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE
    [13] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
    [25] FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
    [37] FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE
    [49] FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
    [61] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE
    [73] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
    [85] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
    [97] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE
    [109] TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE
    [121] FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE FALSE

    根据随机换分的结果,将原本的数据集分成两组分、分别存到两个变量中:
    qualityTrain = subset(quality, split == TRUE)
    qualityTest = subset(quality, split == FALSE)

    建立逻辑回归模型:

    QualityLog = glm(PoorCare ~ OfficeVisits + Narcotics, data=qualityTrain, family=binomial)
    summary(QualityLog)

    0_1474327598724_CALL.jpg

    summary里的AIC这个参数和线性回归里的R^2参数一样,是衡量模型好坏的参数。对于同一组数据,AIC越小的模型越好。

    接着就可以尝试一下,使用建立好的模型对训练数据集做出预测:(type=“response”表示返回结果为概率)

    predictTrain = predict(QualityLog, type=“response”)
    summary(predictTrain)
    Min. 1st Qu. Median Mean 3rd Qu. Max.
    0.06623 0.11910 0.15970 0.25250 0.26760 0.98460
    tapply(predictTrain, qualityTrain$PoorCare, mean)
    0 1
    0.1894512 0.4392246

    在实际进行分类的时候,我们需要预测的结果要么是0、要么是1。这是就需要为模型选取一个阈值。当概率大于等于阈值时判定“质量差”,小于阈值时判定“质量好”。阈值的大小会对模型的两个属性“sensitivity” 和 “specificity”产生影响。
    0_1474327635077_confusion.jpg
    Sensitivity = TP / (TP + FN)
    Specificity = TN / (TN + FP)
    一个高阈值的模型通常sensitivity较低而Specificity较高,反之亦然。
    在R中可以对分类结果使用不同的阈值:

    table(qualityTrain$PoorCare, predictTrain > 0.5)
    FALSE TRUE
    0 70 4
    1 15 10

    计算下sensitivity:

    10/25
    [1] 0.4
    计算下specificity:
    70/74
    [1] 0.9459459

    使用阈值0.7:

    table(qualityTrain$PoorCare, predictTrain > 0.7)

    FALSE TRUE
    0 73 1
    1 17 8
    计算sensitivity:

    8/25
    [1] 0.32
    计算specificity:”
    73/74
    [1] 0.9864865

    使用阈值0.2:

    table(qualityTrain$PoorCare, predictTrain > 0.2)

    FALSE TRUE
    0 54 20
    1 9 16
    计算sensitivity:

    16/25
    [1] 0.64
    计算specificity:
    54/74
    [1] 0.7297297

    为了确定到底应该使用哪个阈值,我们可以使用ROC(Receiver Operator Characteristic) curve来帮助做出判断:
    0_1474327782323_roc1.jpg
    如果更关注高specificity或者低false positive rate,就选择能最大化true positive rate并保持false positive rate较低的阈值。(比如上图中的(0.1, 0.5)左右的位置)
    反之亦然,比如图中的(0.3, 0.8)左右的位置。
    在R中为了确定具体的阈值,我们需要首先创建一个ROC曲线:

    install.packages(“ROCR”)
    library(ROCR)

    ROCRpred = prediction(predictTrain, qualityTrain$PoorCare)
    ROCRperf = performance(ROCRpred, “tpr”, “fpr”)
    plot(ROCRperf)
    0_1474327833092_roc1.jpg

    创建一个带标签的ROC曲线以方便我们选取阈值:

    plot(ROCRperf, colorize=TRUE, print.cutoffs.at=seq(0,1,by=0.1), text.adj=c(-0.2,1.7))
    0_1474327845920_roc2.jpg
    如上图所示,(0.1, 0.5)处的阈值大致为0.3, 而(0.3, 0.8) 处的阈值大致为0.2

    发布在 数据科学&数据工程课程

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待