张飞软硬开源基于STM32 BLDC直流无刷电机驱动器开发视频套件,👉戳此立抢👈

为何基于决策树的模型经久不衰?何时使用基于决策树的模型?

论智 2018-10-09 08:55 次阅读
编者按:保险业数据科学家Alan Marazzi用R语言展示了基于决策树的模型的强大和简洁之处。 这是一篇基于决策树的模型的简明介绍,尽量使用非技术术语,同时也给出了模型的R语言实现。由于这篇文章已经够长了,因此我们省略了一些代码。不过别担心,你可以在配套的GitHub仓库中找到完整代码:https://github.com/alanmarazzi/trees-forest 为何基于决策树的模型经久不衰 决策树是一组通常用于分类的机器学习算法。因为它们简单有效,所以也是初学者首先学习的算法之一。你大概很难在最新的机器学习论文和研究上看到它们,但在真实世界项目中,基于决策树的模型仍被广泛使用。 之所以得到如此广泛的使用,主要原因之一是它们的简单性和可解释性。下面是一棵预测天气是否多云的简单决策树。 这一方法让我们可以通过传入数据预测某个变量,不过,大概更重要的是我们可以推断预测因子之间的关系。这意味着我们可以从底部开始,看看哪些因素导致了多云。 比如,如果风很小,看起来要下雨了,那说明是多云。对简单模型而言,这些规则可以被人类所学习和应用,或者我们可以生成一份清单以辅助决策过程。通过可视化决策树,我们可以理解机器是如何工作的,为何将某些日子分类为多云,将另一些日子分类为非多云。 尽管这看起来挺微不足道的,但在许多情形下,我们需要知道模型为何做出某些预测。考虑一个预测是否接受胸痛患者的模型。在测试了许多高级模型之后,医生想要搞清楚算法为什么让某些处以危险之中的患者回家。所以他们在数据上运行了一个基于决策树的模型,结果发现算法认为患有哮喘的胸痛病人风险很小。 这是一个巨大的错误。医生非常清楚哮喘和胸痛必须立刻治疗,这意味着哮喘和胸痛的病人会马上得到收治。你发现问题所在了吧?用于建模的数据认为这类病人风险很小,是因为所有这类病人都得到了治疗,所以极少有人在此之后死亡。 何时使用基于决策树的模型 如前所述,当可解释性很重要时,决策树非常好,即使它可能仅用于理解预测哪里出错了。实际上,基于决策树的模型可以变得非常复杂,在损失可解释性的同时,增加准确性。这里存在着一个权衡。 另一个使用决策树的理由是它们非常容易理解和解释。在有一些强预测因子的情形下,决策树可以用来创建可以同时为机器和人类使用的模型。我刚想到的一个例子是预测顾客是否最终会购买某物的决策树模型。 评测也是这些方法大放异彩之处:你很快会发现,用于分类时,即使是相当简单的基于决策树的模型,也很难被大幅超过。我个人经常在要处理的数据集上运行随机森林(后文会介绍这一算法),接着尝试战胜它。 R语言配置 在开始之前,你可能需要先配置一下R环境。 安装如下包: trees_packages <- c("FFTrees",    "evtree",    "party",    "randomForest",    "intubate",    "dplyr")install.packages(trees_packages) 这些是在R语言中使用基于决策树的模型和数据处理的主要包,但它们不是唯一的。任何你打算使用的基于决策树的模型,几乎都有几十个包可以用,不信的话可以上Crantastic搜索一番。 现在是植树时刻!我决定使用Titanic数据集,机器学习社区最著名的数据集之一。你可以从Kaggle(c/titanic)或GitHub(alanmarazzi/trees-forest)获取这一数据集。我将直接从清洗数据和建模开始讲起,如果你在数据下载、加载上需要帮助,或者缺乏头绪,可以参考我之前的文章Data Science in Minutes或者GitHub仓库中的完整代码。 预备数据 首先,我们看下要处理的数据是什么样子的: 我真心不喜欢有大写字母姓名的数据集,很幸运,我们可以用tolower()函数,一行代码转换为小写字母: names(titanic) <- tolower(names(titanic)) 接着,将sex和embarked变量转换为因子(类别变量): titanic$sex <- as.factor(titanic$sex)titanic$embarked <- as.factor(titanic$embarked) 建模时最重要的步骤之一是处理缺失值(NA)。许多R模型可以自动处理缺失值,但大多数只不过是直接移除包含缺失值的观测。这意味着可供模型学习的训练数据变少了,这几乎一定会导致准确率下降。 有各种填充NA的技术:填充均值、中位数、众数,或使用一个模型预测它们的值。我们的例子将使用线性回归替换数据集中年龄变量的缺失值。 乍看起来这个想法有点吓人,有点怪异,你可能会想:“你说的是,为了改进我的模型,我应该使用另一个模型?!”但其实并没有看起来这么难,特别是如果我们使用线性回归的话。 首先让我们看下年龄变量中有多少NA: mean(is.na(titanic$age))[1] 0.1986532 将近20%的乘客没有年龄记录,这意味着如果我们不替换缺失值,直接在数据集上运行模型的话,我们的训练数据只有714项,而不是891项。 是时候在数据上跑下线性回归了: age_prediction <- lm(age ~ survived + pclass + fare, data = titanic)summary(age_prediction) 我们干了什么?我们告诉R求解如下线性等式,找出恰当的α、βn的值。 age = α + β1∗survived + β2∗pclass + β3∗fare 然后我们在创建的模型上调用summary()函数,查看线性回归的结果。R会给出一些统计数据,我们需要查看这些数据以了解数据的情况: Call:lm(formula = age ~ survived + pclass + fare, data = titanic)Residuals:    Min      1Q  Median      3Q     Max -37.457  -8.523  -1.128   8.060  47.505 Coefficients:            Estimate Std. Error t value Pr(>|t|)    (Intercept) 54.14124    2.04430  26.484  < 2e-16 ***survived    -6.81709    1.06801  -6.383 3.14e-10 ***pclass      -9.12040    0.72469 -12.585  < 2e-16 ***fare        -0.03671    0.01112  -3.302  0.00101 ** ---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 13.03 on 710 degrees of freedom  (177 observations deleted due to missingness)Multiple R-squared:  0.1993,    Adjusted R-squared:  0.1959 F-statistic:  58.9 on 3 and 710 DF,  p-value: < 2.2e-16 上面第一行(Call)提示我们是哪个模型产生了这一结果,第二行显示了残差,之后是系数。这里我们可以查看系数的估计值,它们的标准差,t值和p值。之后是一些其他统计数据。我们看到R实际上移除了含NA的数据(177 observations deleted due to missingness)。 现在我们可以使用这个模型来填充NA了。我们使用predict()函数: titanic$age[is.na(titanic$age)] <- predict(age_prediction,    newdata = titanic[is.na(titanic$age),]) 逻辑回归基准 是否幸存这样的二元分类问题,逻辑回归很难战胜。我们将使用逻辑回归预测泰坦尼克幸存者,并将这一结果作为基准。 别担心,在R中进行逻辑回归非常直截了当。我们引入dplyr和intubate库,然后调用glm()函数运行逻辑回归。glm()接受三个参数,predictors为预测因子,例如年龄、舱等,response为结果变量,这里我们传入survived,family指定返回结果的类别,这里我们传入binomial。 library(dplyr) # 数据处理library(intubate) # 建模工作流# btbt_glb是 %>% 版本的glm函数logi <- titanic %>%    select(survived, pclass, sex, age, sibsp) %>%    ntbt_glm(survived ~ ., family = binomial)summary(logi) 下面让我们查看下逻辑回归模型做出的预测: # 收集训练数据上的预测logi_pred <- predict(logi, type = "response")# 预测值在0和1之间,我们将其转换为`survived`或`not`survivors_logi <- rep(0, nrow(titanic))survivors_logi[logi_pred > .5] <- 1# 这将成为我们的基准table(model = survivors_logi, real = titanic$survived) 上面的混淆矩阵给出了模型在训练数据上的结果:预测572人死亡(0),319人幸存(1)。矩阵的对角线表明,480项和250项预测正确,而预测死亡的92人实际上幸存了,预测幸存的69人实际上未能幸存。 对这样开箱即用的模型而言,82%的预测精确度已经相当不错了。但是我们想在未见数据上测试一下,所以让我们载入测试集,试下模型在测试集上的效果。 test <- read.csv(paste0("https://raw.githubusercontent.com/",    "alanmarazzi/trees-forest/master/data/test.csv"),    stringsAsFactors = FALSE,    na.strings = "")# 和训练集一样,清洗下数据names(test) <- tolower(names(test))test$sex <- as.factor(test$sex) 下面在测试数据上预测幸存率: test_logi_pred <- predict(logi, test, type = "response")surv_test_logi <- data.frame(PassengerId = test$passengerid,    Survived = rep(0, nrow(test)))surv_test_logi$Survived[test_logi_pred > .5] <- 1write.csv(surv_test_logi, "results/logi.csv", row.names = FALSE) 我们将结果保存为csv,因为测试数据没有标签,我们并不知道预测是否正确。我们需要将结果上传到Kaggle以查看结果。最终模型做出了77.5%的正确预测。 快速和低成本决策树 终于可以开始植树了!我们将尝试的第一个模型是快速和低成本决策树。这基本上是最简单的模型。我们将使用R的FFTrees包。 # 临时复制下数据集,因为FFTrees包里也包含titanic变量titanicc <- titaniclibrary(FFTrees)titanic <- titaniccrm(titanicc) 载入包,我们只需在选中的变量上应用FFTrees。 fftitanic <- titanic %>%    select(age, pclass, sex, sibsp, fare, survived) %>%    ntbt(FFTrees, survived ~ .) 模型需要跑一会儿,因为要训练和测试不止一棵FFTree。最终得到的结果是一个FFTree对象,包含了所有测试过的FFTree: fftitanic[1] "An FFTrees object containing 8 trees using 4 predictors {sex,pclass,fare,age}"[1] "FFTrees AUC: (Train = 0.84, Test = --)"[1] "My favorite training tree is #5, here is how it performed:"                        trainn                      891.00p(Correct)               0.79Hit Rate (HR)            0.70False Alarm Rate (FAR)   0.16d-prime                  1.52 我们看到,算法使用最多4个预测因子测试了8棵树,表现最佳的是5号树。接着我们看到了这棵树的一些统计数据。这些输出很有帮助,但可视化方法能够更好地帮助我们理解发生了什么: plot(fftitanic,     main = "Titanic", decision.names = c("Not Survived", "Survived")) 这一张图中有大量信息,从上往下依次为:观测数目、分类数目、决策树、诊断数据。让我们重点关注决策树。 决策树的第一个节点考虑sex变量:如果是女性(sex != male),我们将直接退出决策树,预测幸存。粗暴,但相当有效。如果是男性,将通过第二个节点pclass。这里,如果是三等舱,我们将退出决策树,预测死亡。接着,如果船费超过£ 26.96(fare),预测幸存。最后一个节点考虑的是age(年龄):如果年龄大于21.35岁,预测死亡。 在图表的Performance(表现)区域,我们最关心左侧的混淆矩阵,我们可以对比之前逻辑回归得到的混淆矩阵。 此外,我们也可以查看下右侧的ROC曲线。FFTrees包在数据上自动运行逻辑回归和CART(另一种基于决策树的模型),以供比较。仔细看图,我们看到,代表逻辑回归的圆圈基本上完全被5号树的圆圈盖住了,意味着这两个模型表现相当。 现在我们分类测试数据,并提交结果至Kaggle。如同我之前说过的那样,这些决策树极为简单。我上面解释决策树如何工作时,解释每一个节点的句子中都有“如果”,这意味着我们可以依照同样的结构创建一个基于清单的分类器,或者,我们甚至可以记住这些规则,然后手工分类。 ffpred <- ifelse(test$sex != "male", 1,                 ifelse(test$pclass > 2, 0,                        ifelse(test$fare < 26.96, 0,                               ifelse(test$age >= 21.36, 0, 1))))ffpred[is.na(ffpred)] <- 0 只需4个嵌套的ifelse语句,我们就可以分类整个数据集。我们只有2个NA,所以我决定将它们分类为“未幸存”。接着我们只需将csv格式的结果上传到Kaggle,看看模型表现如何。 我们的4个if-else语句表现只比基准差了1%. 考虑到模型的简单性,这是非常出色的成绩。 聚会时分 party包使用条件推理树,比FFTrees更复杂的决策树。简单来说,条件推理树在决定分割节点时,不仅考虑重要性,还考虑数据分布。虽然条件推理树更复杂,但使用起来很简单,加载包后只需使用ctree函数即可创建决策树。 library(party)partyTitanic <- titanic %>%    select(age, pclass, sex, sibsp, fare, survived) %>%    ntbt(ctree, as.factor(survived) ~ .) 运行模型后,我们可以调用这个包的绘图函数可视化得到的决策树,plot(ctree_relust)。这里我们不在乎其他花里胡哨的东西,只在意最终得到的决策树。所以会使用一些可选参数让输出整洁一点。 plot(partyTitanic, main = "Titanic prediction", type = "simple",     inner_panel = node_inner(partyTitanic,                              pval = FALSE),     terminal_panel = node_terminal(partyTitanic,                                    abbreviate = TRUE,                                    digits = 1,                                    fill = "white")) 不幸的是较大的树占用更多空间,如果再加上一些节点,图就基本上看不清了。将这棵树和上面那棵FFTree比较一下,我们看到现在这棵树更复杂:之前我们直接预测每个男性死亡,现在这个模型尝试将男性分为多种情况。 增加的复杂性降低了15%的训练误差。和上面的FFTree相比,这是一项改进。 train_party <- Predict(partyTitanic)table(tree = train_party, real = titanic$survived) 不过,很遗憾,我们下面将学到机器学习最重要的一课。事实上,在测试集上的分类正确率只有73.7%! 你也许会问,这怎么可能?我们刚看到的是过拟合现象。模型考虑的一些变量最终看来其实是噪声。结果在训练集上改善了,但在未见数据上的表现变差了。有多种应对这一问题的方式,比如剪枝。剪枝的意思是削减分支,比如通过降低树的最大深度达成。剪枝搭配交叉验证,很可能改善测试数据上的结果。 集成模型 目前为止,我们开发的都是单个学习者,意味着我们通过一个模型找到解决方案。另一系列的机器学习算法是集成,通过许多所谓的弱小学习者创建的模型。背后的理论是通过使用许多学习者(在我们的例子中是决策树),结合他们的选择,我们能得到良好的结果。 集成模型因模型创建方法、组合结果方式的不同而不同。可能看起来有点杂乱,但部分集成方法通常是开箱即用的,是一个很好的优化结果的选择。 集成的目的是为了减少方差。比如,我们上面在训练集上得到了良好的结果,但在测试集上的误差率却很大。如果我们有不同的训练集,不同的模型,那么各自会有不同的偏差,集成之后就能得到更好的结果。 我们将查看三种不同的集成算法:Bagging、随机森林、Boosting。 Bagging bagging的主要思路相当简单:如果我们在不同的训练集上训练许多较大的决策树,我们将得到许多高方差、低偏差的模型。平均每棵树的预测,我们就能得到方差和偏差相对较低的分类。 你可能已经发现一个问题,我们并没有许多训练集。为了应对这一问题,我们通过bootstrap方法创建这些训练集。bootstrap不过是一种有放回的重复取样方法。 x <- rnorm(100) # 生成随机向量# 定义固定取样函数boot_x <- function(x, size) {    sample(x, size, replace = TRUE)}# 循环取样,直到取满需要的样本bootstrapping <- function(x, reps, size) {    y <- list()    for (i in seq_len(reps)) {        y[[i]] <- boot_x(x, size)    }    y}# 结果是一个列表z <- bootstrapping(x, 500, 20) 为了在泰坦尼克数据上运行bagging,我们可以使用randomForest包。这是因为bagging和随机森林差不多,唯一的区别是在创建决策树时考虑多少预测因子。bagging中,我们考虑数据集中的每个预测因子,我们可以通过设置mtry参数做到这一点。 library(randomForest)# 如果你希望重现结果,别忘了设置一样的随机数种子set.seed(123)# 创建bagging模型titanic_bag <- titanic %>%    select(survived, age, pclass, sex, sibsp, fare, parch) %>%    ntbt_randomForest(as.factor(survived) ~ ., mtry = 6) 注意,这里我们将survived作为因子(as.factor)传入,这样就可以使函数创建分类树,而不是回归树(是的,决策树同样可以用于回归)。 bagging默认创建500棵树,如果你想要增加更多树,可以传入ntree参数,设定一个更高的数值。 上面的代码有一个问题,直接跳过NA,不作预测。为了在避免进一步特征工程的前提下,生成符合Kaggle要求的结果,我决定将测试集中的NA用中位数替换。不幸的是,这个问题限制了预测能力,结果是66.5%的正确预测率。 随机森林 随机森林是最著名的机器学习算法之一,原因是它开箱即用的效果好到没道理。随机森林几乎和bagging一样,只不过使用较弱的学习者,创建决策树时只考虑有限数量的预测因子。 你可能会问使用全部预测因子和仅使用部分预测因子有什么区别。答案是使用所有预测因子时,在不同的bootstrap取样的数据集上创建决策树时,前两个分割很可能是一样的,因为创建决策树时考虑的是预测因子的重要性。所以使用bagging创建的500棵树会很相似,相应地,做出的预测也会很相似。 为了限制这一行为,我们使用随机森林,通过mtry参数限制预测因子。我们使用交叉验证决定“最好”的参数值,或者尝试一些经验法则,比如ncol(data)/3和sqrt(ncol(data)),不过在这个例子中我将mtry参数值定为3. 我建议你试验不同的值,然后查看发生了什么,以更好地理解随机森林算法。 set.seed(456)titanic_rf <- titanic %>%    select(survived, age, pclass, sex, sibsp, fare, parch) %>%    ntbt_randomForest(as.factor(survived) ~ ., mtry = 3, n.trees = 5000) 结果是74.6%,比bagging要好不少(译者注:这里的比较不是很公平,因为之前bagging只用了500棵树,而这里随机森林用了5000棵树,感兴趣的读者可以试下统一数量后再做比较),但还是比逻辑回归差一点。 随机森然有很多实现,也许我们可以尝试下party包,用下条件推断树构成的随机森林。 set.seed(415)titanic_rf_party <- titanic %>%    select(survived, age, pclass, sex, sibsp, fare, parch) %>%    ntbt(cforest, as.factor(survived) ~ .,            controls = cforest_unbiased(ntree = 5000, mtry = 3)) 如你所见,代码和之前差不多,但是结果是不是差不多呢? 这个结果差不多可以算是和逻辑回归打了个平手。 Boosting 和之前“奋发”学习的算法不同,boosting缓慢学习。实际上,为了避免过拟合,bagging和随机森林需要创建几千棵决策树,然后平均所有预测。boosting的方式与此不同:创建一棵树,结果基于第一棵树的结果创建另一棵树,以此类推。 boosting比其他基于决策树的算法学得慢,这有助于防止过拟合,但也要求我们小心地调整学习速度。从下面的代码中,我们能看到,boosting的参数和随机森林比较相似。 library(gbm)set.seed(999)titanic_boost <- titanic %>%    select(survived, age, pclass, sex, sibsp, fare, parch) %>%    ntbt(gbm, survived ~ .,         distribution = "bernoulli",         n.trees = 5000,         interaction.depth = 3) 我们使用gbm包中的同名函数(ntbt),并指定distribution参数为bernoulli(伯努利分布),告诉函数这是一个分类问题。n.trees参数指定创建决策树的数目,interaction.depth指定树的最大深度。 76%,和逻辑回归、随机森林、FFTrees的结果差不多。 我们学到了 复杂模型 > 简单模型 == 假。 逻辑回归和FFTrees很难战胜,而且我们只需一点特征工程就可以进一步提升简单模型的表现。 特征工程 > 复杂模型 == 真。 特征工程是一项艺术。它是数据科学家最强大的武器之一,我们可以使用特征工程改进预测。 创建模型 == 乐! 数据科学家很有意思。尽管R有时会让人有点沮丧,但总体而言学习R回报丰厚。如果你希望进一步了解细节,或者想要一个逐步的指南,你可以访问文章开头提到的GitHub仓库,里面有完整的代码。 如果你喜欢这篇文章,请留言、转发。你也可以订阅我的博客rdisorder.eu
原文标题:别迷失在森林里 文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。
收藏 人收藏
分享:

评论

相关推荐

一位网友便利用StyleGAN耗时5天创作出了999幅抽象派画作!

StyleGAN是英伟达提出的一种用于生成对抗网络的替代生成器体系结构,该结构借鉴了样式迁移学习的成....
的头像 新智元 发表于 04-19 14:44 116次 阅读
一位网友便利用StyleGAN耗时5天创作出了999幅抽象派画作!

决策树和随机森林模型

我们知道决策树容易过拟合。换句话说,单个决策树可以很好地找到特定问题的解决方案,但如果应用于以前从未....
的头像 新智元 发表于 04-19 14:38 76次 阅读
决策树和随机森林模型

如果把中学生的英语阅读理解选择题让AI来做,会做出什么水平?

与仅就问题感知或选择性文章表示进行计算的现有方法不同,DCMN能够计算文章感知问题表示和文章感知答案....
的头像 新智元 发表于 04-19 10:49 208次 阅读
 如果把中学生的英语阅读理解选择题让AI来做,会做出什么水平?

自然语言基础技术之命名实体识别相对全面的介绍

早期的命名实体识别方法基本都是基于规则的。之后由于基于大规模的语料库的统计方法在自然语言处理各个方面....
的头像 人工智能头条 发表于 04-17 10:12 698次 阅读
自然语言基础技术之命名实体识别相对全面的介绍

PCA类在降维和数据重构的简单用法

sklearn.decomposition.SparsePCA和sklearn.decomposit....
的头像 人工智能爱好者社区 发表于 04-17 09:57 650次 阅读
PCA类在降维和数据重构的简单用法

Preferred Networks在GTC大会上介绍了他们的家庭清洁机器人

它可以利用该公司开发的卷积神经网络对物体进行检测,绘制出房间里物体的位置。此外,它还可以把物品放回原....
的头像 英伟达NVIDIA中国 发表于 04-15 15:34 166次 阅读
Preferred Networks在GTC大会上介绍了他们的家庭清洁机器人

西安交通大学人工智能与机器人研究所公开全球首个五维驾驶场景理解数据集

在BLVD数据集中,定义了三种参与者,包括车辆、行人和骑行者,其中骑行者包括骑自行车的人和摩托车的人....
的头像 智车科技 发表于 04-10 18:01 1061次 阅读
西安交通大学人工智能与机器人研究所公开全球首个五维驾驶场景理解数据集

AI做数学的能力不及高中生水平?

DeepMind在这篇论文中引入了一个由许多不同类型的数学问题组成的数据集,对于模型来说,优于缺乏上....
的头像 人工智能 发表于 04-09 11:22 391次 阅读
AI做数学的能力不及高中生水平?

一种不同于双线性插值的上采样方法

我们可以看到,该网络将传统的非线性插值替换成 DUpsample,同时在 feature fuse ....
的头像 电子发烧友网工程师 发表于 04-08 14:47 210次 阅读
一种不同于双线性插值的上采样方法

最新的研究中,研究者仅需要音频信息就生成了人脸

图片判别器(Image Discriminator Network):判别器由几层步长为 2,ker....
的头像 电子发烧友网工程师 发表于 04-08 14:41 136次 阅读
最新的研究中,研究者仅需要音频信息就生成了人脸

为什么要使用预训练模型?一些顶级的预训练模型介绍

多用途模型是自然语言处理领域的热门话题。这些模型为机器翻译、问答系统、聊天机器人、情绪分析等我们感兴....
的头像 新智元 发表于 04-08 14:24 356次 阅读
为什么要使用预训练模型?一些顶级的预训练模型介绍

研究人员共同提出了一种面向目标检测任务的新模块Res2Net

由于单独的Res2Net模块对于整体网络结构没有特定的要求,Res2Net模块的多尺度表示能力也和C....
的头像 新智元 发表于 04-08 09:26 523次 阅读
研究人员共同提出了一种面向目标检测任务的新模块Res2Net

完成一个简单的端到端的机器学习模型需要几步?

完成了下载数据,图像分割和处理,就可以训练模型了。接下来,我们对数据进行卷积神经网络(CNN)训练。....
的头像 电子发烧友网工程师 发表于 04-04 17:34 577次 阅读
完成一个简单的端到端的机器学习模型需要几步?

探讨一些可用于解释机器学习模型的不同技术

下图则阐述了在需要清晰简单的模型可解释性时,通常首选白盒模型 (具有线性和单调函数) 的原因。图的上....
的头像 电子发烧友网工程师 发表于 04-04 17:30 490次 阅读
探讨一些可用于解释机器学习模型的不同技术

TableBank:高质量的标注表格数据集

通常每个Word文档都有一个对应的Office XML源代码文件,在代码中对应表格的位置,可以对其进....
的头像 电子发烧友网工程师 发表于 04-04 17:19 466次 阅读
TableBank:高质量的标注表格数据集

Python爬取394452条《都挺好》弹幕数据,发现弹幕比剧还精彩?

发送条数在3条及以内的用户数占比达到了83.73%,他们累计贡献了133331条弹幕,占到弹幕总数的....
的头像 电子发烧友网工程师 发表于 04-04 17:04 511次 阅读
Python爬取394452条《都挺好》弹幕数据,发现弹幕比剧还精彩?

手把手教你使用Python实现机器学习算法

特征提取就是应用某种算法通过某种方式来量化数据的过程。比如,对于图像数据,我们可以采用计算直方图的方....
的头像 电子发烧友网工程师 发表于 04-04 16:49 618次 阅读
手把手教你使用Python实现机器学习算法

一个单路径One-Shot模型,以解决训练过程中面对的主要挑战

One-Shot 是一种新范式。它定义了超网络,并以相似的方式做权重复用。但是并没有将模型结构分布参....
的头像 电子发烧友网工程师 发表于 04-04 16:46 484次 阅读
一个单路径One-Shot模型,以解决训练过程中面对的主要挑战

关系型数据库最难的地方,就是建模

在关系型数据库里面,每个实体有自己的一张表(table),所有属性都是这张表的字段(field),表....
的头像 电子发烧友网工程师 发表于 04-04 14:29 295次 阅读
关系型数据库最难的地方,就是建模

介绍那些不为人知,却又好用到难以置信的R语言功能

几行R代码就可以生成一个可交互的网络应用。比方说如果使用R语言的flexdashboard包, 你只....
的头像 电子发烧友网工程师 发表于 04-04 13:47 211次 阅读
介绍那些不为人知,却又好用到难以置信的R语言功能

为什么要使用预训练模型?8种优秀预训练模型大盘点

正如我们在本文中所述,ULMFiT使用新颖的NLP技术取得了令人瞩目的成果。该方法对预训练语言模型进....
的头像 电子发烧友网工程师 发表于 04-04 11:26 490次 阅读
为什么要使用预训练模型?8种优秀预训练模型大盘点

亚马逊宣布:他们计划向公众公开“Topical Chat”数据集

该数据集是为参加Alexa Prize Socialbot Grand Challenge 3竞赛的....
的头像 电子发烧友网工程师 发表于 04-04 11:16 559次 阅读
亚马逊宣布:他们计划向公众公开“Topical Chat”数据集

麻省理工学院韩松团队新突破:直接针对目标硬件平台训练专用的卷积神经网络

“主要目标是实现人工智能在各种硬件平台上的普及,在特定硬件上提供“一键加速”的解决方案,帮助 AI ....
的头像 电子发烧友网工程师 发表于 04-04 10:46 574次 阅读
麻省理工学院韩松团队新突破:直接针对目标硬件平台训练专用的卷积神经网络

用Jetson Nano打造您的专属机器人

想知道制造它的全部材料清单吗? 包括Jetson Nano在内,一共只需要250美元。其中还包括一个....
的头像 英伟达NVIDIA中国 发表于 04-03 15:41 924次 阅读
用Jetson Nano打造您的专属机器人

标记训练集中的数据样本是开发机器学习应用的最大瓶颈之一

为了解决噪声等问题,Supert Drybell使用生成建模技术,以一种可证明一致的方式自动估计标记....
的头像 人工智能 发表于 04-02 16:24 357次 阅读
标记训练集中的数据样本是开发机器学习应用的最大瓶颈之一

机器学习从业者指出了一个明显的问题:你如何调试模型?

在这篇优秀的 Distill 文章《Four Experiments in Handwriting ....
的头像 通信信号处理研究所 发表于 04-01 15:17 285次 阅读
机器学习从业者指出了一个明显的问题:你如何调试模型?

面部识别技术成为整个AI行业最为常见的技术应用之一

随着社交网络的兴盛和自媒体的发展,普通人的照片也突然多了起来。研究人员默认这些照片是对所有人开放的,....
的头像 传感器技术 发表于 04-01 15:09 455次 阅读
面部识别技术成为整个AI行业最为常见的技术应用之一

简述基于神经网络的抽取式摘要方法

将文本摘要建模为序列标注任务的关键在于获得句子的表示,即将句子编码为一个向量,根据该向量进行二分类任....
的头像 电子发烧友网工程师 发表于 04-01 10:23 331次 阅读
简述基于神经网络的抽取式摘要方法

讯飞人工智能研究院联合团队再次在SQuAD 2.0挑战赛中有了新突破

科大讯飞在机器阅读理解领域的实力已不言而喻,这次突破背后又有怎样的故事,“秘籍”何在?当机器学会做阅....
的头像 电子发烧友网工程师 发表于 03-29 15:54 2005次 阅读
讯飞人工智能研究院联合团队再次在SQuAD 2.0挑战赛中有了新突破

学习人工智能不得不了解的12个关键算法,如下

随着人工智能(AI)技术对各行各业有越来越深入的影响,我们也更多地在新闻或报告中听到“机器学习”、“....
发表于 03-29 15:04 44次 阅读
学习人工智能不得不了解的12个关键算法,如下

还在愁到哪里找到需要的机器学习数据集吗?

斯坦福问答数据集 (Stanford Question answer Dataset, SQuAD)....
的头像 新智元 发表于 03-29 11:45 228次 阅读
还在愁到哪里找到需要的机器学习数据集吗?

ICLR 2019论文解读:胶囊图神经网络的PyTorch实现

上图所示为CapsGNN的简化版本。它由三个关键模块组成:1)基本节点胶囊提取模块:GNN用于提取具....
的头像 新智元 发表于 03-29 10:11 322次 阅读
ICLR 2019论文解读:胶囊图神经网络的PyTorch实现

MIT韩松等人团队开发了一种高效的神经结构搜索算法

CNN 的架构由可调参的计算层 (称为 “过滤器”) 和过滤器之间可能的连接组成。过滤器处理正方形网....
的头像 新智元 发表于 03-29 08:53 548次 阅读
MIT韩松等人团队开发了一种高效的神经结构搜索算法

Solutions公司首次批准在巴布亚新几内亚开展商业无人机系统业务

 Insitu Commercial Solutions副总裁兼董事总经理Andrew Duggan....
的头像 无人机网 发表于 03-28 16:14 1113次 阅读
Solutions公司首次批准在巴布亚新几内亚开展商业无人机系统业务

Kaggle的座头鲸识别挑战比赛在最近落下帷幕

此外,我们采用智能翻转增强策略,极大地帮助创建了更多的训练数据。 具体地,对于属于相同的鲸鱼X,Y的....
的头像 电子发烧友网工程师 发表于 03-28 14:21 314次 阅读
Kaggle的座头鲸识别挑战比赛在最近落下帷幕

不是码农,也能看懂的AI机器算法学习原理

根据数据类型的不同,对一个问题的建模有不同的方式。 在机器学习或者人工智能领域,人们首先会考虑算法....
发表于 03-26 15:55 302次 阅读
不是码农,也能看懂的AI机器算法学习原理

快讯:未来的城市可以由仿生机器人合作建造

佐治亚理工学院(Georgia Tech)的一个团队开发了帮助严重运动障碍患者的辅助机器人。他们设计....
的头像 机器人大讲堂 发表于 03-26 09:42 1152次 阅读
快讯:未来的城市可以由仿生机器人合作建造

企业数字化转型趋势是“数据”引领业务变革,数据集中管控成为大势所趋

构建以“云”技术架构为支撑,以“共享服务”为建设方向的企业级数据治理平台,为企事业单位的信息系统建设....
的头像 电子发烧友网工程师 发表于 03-21 11:28 582次 阅读
企业数字化转型趋势是“数据”引领业务变革,数据集中管控成为大势所趋

基于单帧图像,云从科技3D人体技术创造最新世界纪录

传统的人体关键点检测技术往往以 2D 的人体骨骼关节点检测形式出现,即通过技术预测 RGB 图像中人....
的头像 电子发烧友网工程师 发表于 03-21 09:25 478次 阅读
基于单帧图像,云从科技3D人体技术创造最新世界纪录

Google AI的研究人员的最新研究提出一个全新概念:刚度(Stiffness)

学习率的选择对学习函数的刚度特性有显著影响。高学习率会导致函数逼近在更大的距离上“更刚”(stiff....
的头像 新智元 发表于 03-21 09:14 270次 阅读
Google AI的研究人员的最新研究提出一个全新概念:刚度(Stiffness)

生成对抗网络GAN论文TOP 10,帮助你理解最先进技术的基础

这篇 GAN 论文来自 NVIDIA Research,提出以一种渐进增大(progressive ....
的头像 电子发烧友网工程师 发表于 03-20 15:16 439次 阅读
生成对抗网络GAN论文TOP 10,帮助你理解最先进技术的基础

神经协同过滤NCF原理及实战

上面的示例显示了MF因为使用一个简单的和固定的内积,来估计在低维潜在空间中用户-项目的复杂交互,从而....
的头像 电子发烧友网工程师 发表于 03-19 15:28 254次 阅读
神经协同过滤NCF原理及实战

基于弱监督学习创建大规模数据集

举个例子,如果我们想识别出与名人相关的内容,一方面可以使用现有的命名实体识别(NER)模型来标注出不....
的头像 将门创投 发表于 03-19 10:18 610次 阅读
基于弱监督学习创建大规模数据集

微软亚研院提出用于语义分割的结构化知识蒸馏

该文中作者将语义分割问题看为像素分类问题,所以很自然的可以使用衡量分类差异的逐像素(Pixel-wi....
的头像 电子发烧友网工程师 发表于 03-18 10:15 276次 阅读
微软亚研院提出用于语义分割的结构化知识蒸馏

GAN又开辟了新疆界,MirrorGAN有多强?

与基本图像生成问题相反,T2I生成以文本描述为条件,而不是仅从噪声开始。利用GAN的强大功能,业界已....
的头像 新智元 发表于 03-18 10:03 269次 阅读
GAN又开辟了新疆界,MirrorGAN有多强?

人工智能再次取得突破,超越人类!

针对这种“深度阅读理解”,云从科技与上海交通大学首创了一种P、Q、与A之间的匹配机制,称为Dual ....
的头像 电子发烧友网工程师 发表于 03-16 10:51 1093次 阅读
人工智能再次取得突破,超越人类!

一种通过编程方式生成训练数据的“弱监督”范式

ML 中的许多传统研究方法也同样受到对标记训练数据的需求的推动。我们首先将这些方法与弱监督方法 (w....
的头像 新智元 发表于 03-16 09:19 293次 阅读
一种通过编程方式生成训练数据的“弱监督”范式

Shadow Art: 颂扬中国皮影戏艺术的 AI 实验

在本文中,我们将探讨我们如何利用 TensorFlow.js 构建 Shadow Art。
的头像 TensorFlow 发表于 03-15 16:21 331次 阅读
Shadow Art: 颂扬中国皮影戏艺术的 AI 实验

100多万个视频短片数据集来啦!

但是,当对视频本身进行分类时,会遇到一系列独特的挑战。例如,描述某个东西正在“打开”(opening....
的头像 电子发烧友网工程师 发表于 03-15 09:52 316次 阅读
100多万个视频短片数据集来啦!

GBDT算法原理和模型训练

算法原理 再讲GBDT之前先给大家讲个故事,有一个年轻的阿姨今年50岁,现在我们不知道她的真实年龄,我们想通过他的皮肤、穿...
发表于 01-23 14:38 375次 阅读
GBDT算法原理和模型训练

如何在原理图中不显示s2p文件名

嗨,有人知道如何在原理图中不显示s2p文件名吗? 谢谢你:FLJ于2014年3月14日上午7点14分 以上来自于谷歌翻译 &nbs...
发表于 01-15 14:38 99次 阅读
如何在原理图中不显示s2p文件名

清洗误标注的开发集和测试集样本

在进行误差分析时,你可能会注意到一些开发集的样本被误标注(mislabeled )了。此处的“误标注”指的是图像在使用算法处理前,已...
发表于 12-19 09:48 327次 阅读
清洗误标注的开发集和测试集样本

建立开发集和测试集(总结)

• 被选择作为开发集和测试集的数据,应当与你未来计划获取并对其进行良好处理的数据有着相同的分布,而不一定和训练集的数据分布...
发表于 12-14 10:56 279次 阅读
建立开发集和测试集(总结)

何时修改开发集、测试集和指标

每当开展一个新项目时,我会尽快选好开发集和测试集,因为这可以帮团队制定一个明确的目标。 我通常会要求我的团队在不到一周...
发表于 12-14 10:54 295次 阅读
何时修改开发集、测试集和指标

通过开发集和度量指标加速迭代

对于当前面临的新问题,我们很难提前知道使用哪种方法会是最合适的,即使是一个经验丰富的机器学习研究员,通常也需要在尝试多种...
发表于 12-13 14:06 395次 阅读
通过开发集和度量指标加速迭代

开发集和测试集应该有多大?

开发集的规模应该尽可能的大,至少要能够区分出你所尝试的不同算法之间的性能差异。例如,如果分类器 A 的准确率为 90.0% ,而分...
发表于 12-10 10:23 355次 阅读
开发集和测试集应该有多大?

开发集和测试集应该服从同一分布

根据公司的核心市场分布情况,你将猫咪app的图像数据划分为“美国”、“中国”、“印度”和“其它地区”四个区域。在设立开发集和...
发表于 12-10 10:15 379次 阅读
开发集和测试集应该服从同一分布

深度学习中开发集和测试集的定义

继续分析我们之前提到的猫咪图片的案例:现在你负责运营一个移动端 app,用户会向这个app 上传许多不同内容的图片。而你希望这个...
发表于 11-30 16:58 554次 阅读
深度学习中开发集和测试集的定义

传感器校正以什么为标准?

如果你需要一个传感器来检测可燃气体或者别的什么气体的话,搜索一通之后,你最终一定能够找到MQ系列的气体传感器。这种貌似...
发表于 11-09 15:50 116次 阅读
传感器校正以什么为标准?