当前位置:首页 » 操作系统 » 周笔算法

周笔算法

发布时间: 2023-02-26 18:19:23

❶ 基于R语言的梯度推进算法介绍

基于R语言的梯度推进算法介绍

通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法。通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Boosting算法,这是因为和其他方法相比,它在产生类似的结果时往往更加节约时间。

Boosting算法有很多种,比如梯度推进(Gradient Boosting)、XGBoost、AdaBoost、Gentle Boost等等。每一种算法都有自己不同的理论基础,通过对它们进行运用,算法之间细微的差别也能够被我们所察觉。如果你是一个新手,那么太好了,从现在开始,你可以用大约一周的时间来了解和学习这些知识。

在本文中,笔者将会向你介绍梯度推进算法的基本概念及其复杂性,此外,文中还分享了一个关于如何在R语言中对该算法进行实现的例子。

快问快答

每当谈及Boosting算法,下列两个概念便会频繁的出现:Bagging和Boosting。那么,这两个概念是什么,它们之间究竟有什么区别呢?让我们快速简要地在这里解释一下:

Bagging:对数据进行随机抽样、建立学习算法并且通过简单平均来得到最终概率结论的一种方法。

Boosting:与Bagging类似,但在样本选择方面显得更为聪明一些——在算法进行过程中,对难以进行分类的观测值赋予了越来越大的权重。

我们知道你可能会在这方面产生疑问:什么叫做越来越大?我怎么知道我应该给一个被错分的观测值额外增加多少的权重呢?请保持冷静,我们将在接下来的章节里为你解答。

从一个简单的例子出发

假设你有一个初始的预测模型M需要进行准确度的提高,你知道这个模型目前的准确度为80%(通过任何形式度量),那么接下来你应该怎么做呢?

有一个方法是,我们可以通过一组新的输入变量来构建一个全新的模型,然后对它们进行集成学习。但是,笔者在此要提出一个更简单的建议,如下所示:

Y= M(x) + error

如果我们能够观测到误差项并非白噪声,而是与我们的模型输出(Y)有着相同的相关性,那么我们为什么不通过这个误差项来对模型的准确度进行提升呢?比方说:

error = G(x) + error2

或许,你会发现模型的准确率提高到了一个更高的数字,比如84%。那么下一步让我们对error2进行回归。

error2 = H(x) + error3

然后我们将上述式子组合起来:

Y = M(x) + G(x) + H(x) + error3

这样的结果可能会让模型的准确度更进一步,超过84%。如果我们能像这样为三个学习算法找到一个最佳权重分配,

Y = alpha * M(x) + beta * G(x) + gamma * H(x) + error4

那么,我们可能就构建了一个更好的模型。

上面所述的便是Boosting算法的一个基本原则,当我初次接触到这一理论时,我的脑海中很快地冒出了这两个小问题:

1.我们如何判断回归/分类方程中的误差项是不是白噪声?如果无法判断,我们怎么能用这种算法呢?

2.如果这种算法真的这么强大,我们是不是可以做到接近100%的模型准确度?

接下来,我们将会对这些问题进行解答,但是需要明确的是,Boosting算法的目标对象通常都是一些弱算法,而这些弱算法都不具备只保留白噪声的能力;其次,Boosting有可能导致过度拟合,所以我们必须在合适的点上停止这个算法。

试着想象一个分类问题

请看下图:

从最左侧的图开始看,那条垂直的线表示我们运用算法所构建的分类器,可以发现在这幅图中有3/10的观测值的分类情况是错误的。接着,我们给予那三个被误分的“+”型的观测值更高的权重,使得它们在构建分类器时的地位非常重要。这样一来,垂直线就直接移动到了接近图形右边界的位置。反复这样的过程之后,我们在通过合适的权重组合将所有的模型进行合并。

算法的理论基础

我们该如何分配观测值的权重呢?

通常来说,我们从一个均匀分布假设出发,我们把它称为D1,在这里,n个观测值分别被分配了1/n的权重。

步骤1:假设一个α(t);

步骤2:得到弱分类器h(t);

步骤3:更新总体分布,

其中,

步骤4:再次运用新的总体分布去得到下一个分类器;

觉得步骤3中的数学很可怕吗?让我们来一起击破这种恐惧。首先,我们简单看一下指数里的参数,α表示一种学习率,y是实际的回应值(+1或-1),而h(x)则是分类器所预测的类别。简单来说,如果分类器预测错了,这个指数的幂就变成了1 *α, 反之则是-1*α。也就是说,如果某观测值在上一次预测中被预测错误,那么它对应的权重可能会增加。那么,接下来该做什么呢?

步骤5:不断重复步骤1-步骤4,直到无法发现任何可以改进的地方;

步骤6:对所有在上面步骤中出现过的分类器或是学习算法进行加权平均,权重如下所示:

案例练习

最近我参加了由Analytics Vidhya组织的在线hackathon活动。为了使变量变换变得容易,在complete_data中我们合并了测试集与训练集中的所有数据。我们将数据导入,并且进行抽样和分类。

library(caret)rm(list=ls())setwd("C:Usersts93856DesktopAV")library(Metrics)complete <- read.csv("complete_data.csv", stringsAsFactors = TRUE)train <- complete[complete$Train == 1,]score <- complete[complete$Train != 1,]set.seed(999)ind <- sample(2, nrow(train), replace=T, prob=c(0.60,0.40))trainData<-train[ind==1,]testData <- train[ind==2,]set.seed(999)ind1 <- sample(2, nrow(testData), replace=T, prob=c(0.50,0.50))trainData_ens1<-testData[ind1==1,]testData_ens1 <- testData[ind1==2,]table(testData_ens1$Disbursed)[2]/nrow(testData_ens1)#Response Rate of 9.052%

接下来,就是构建一个梯度推进模型(Gradient Boosting Model)所要做的:

fitControl <- trainControl(method = "repeatedcv", number = 4, repeats = 4)trainData$outcome1 <- ifelse(trainData$Disbursed == 1, "Yes","No")set.seed(33)gbmFit1 <- train(as.factor(outcome1) ~ ., data = trainData[,-26], method = "gbm", trControl = fitControl,verbose = FALSE)gbm_dev <- predict(gbmFit1, trainData,type= "prob")[,2]gbm_ITV1 <- predict(gbmFit1, trainData_ens1,type= "prob")[,2]gbm_ITV2 <- predict(gbmFit1, testData_ens1,type= "prob")[,2]auc(trainData$Disbursed,gbm_dev)auc(trainData_ens1$Disbursed,gbm_ITV1)auc(testData_ens1$Disbursed,gbm_ITV2)

在上述案例中,运行代码后所看到的所有AUC值将会非常接近0.84。我们随时欢迎你对这段代码进行进一步的完善。在这个领域,梯度推进模型(GBM)是最为广泛运用的方法,在未来的文章里,我们可能会对GXBoost等一些更加快捷的Boosting算法进行介绍。

结束语

笔者曾不止一次见识过Boosting算法的迅捷与高效,在Kaggle或是其他平台的竞赛中,它的得分能力从未令人失望,当然了,也许这要取决于你能够把特征工程(feature engineering)做得多好了。

以上是小编为大家分享的关于基于R语言的梯度推进算法介绍的相关内容,更多信息可以关注环球青藤分享更多干货

❷ 名字的五行与笔画怎么算

《周易》有云:穷则变,变则通,通则久,命理为一生定数,风水则是变数,知命而乐,知运而通。所谓“菩萨畏因、凡夫畏果”天道循环,命理批测、风水堪舆均能为您锦上添花,而不能雪中送炭!要正确认识风水作用,不懂的人如看天书,懂的人如获至宝。本篇文章继续和明通一起来了解传承5000年的文化,诚挚希望能帮助到迷茫、困惑的您,为您的生活锦上添花,在您的人生中做一盏明灯。

中国文字由点和线构成,而点横竖撇捺的笔画,就是蕴含五行之秘密。究竟如何计算名字的五行与笔划呢?相信很多朋友迷惑不解,今天就给朋友们说说。

1、名字的笔划数体现其相应的五行

根据周易五行与数字关系,3、8为木,2、7为火,5、0为土,4、9为金,1、6为水的原则。

凡汉字不含有各五行的部首、偏旁、字义等的,其五行的性质便由其笔画数确定:

尾数

3、8画的字五行属木,

2、7画的字五行属火,

5、0画的字五行属土,

4、9画的字五行属金,

1、6画的字五行属水。

如“文”字为四划,则文的五行为金。又如万字也为四划,故其五行也属金。余可以此类推。

2、周易五行的笔画数同现在词典的笔画数算法不同

首先,周易五行的笔画数同现在词典的笔画数算法稍为不同,它要求逢折算划,如上述的万字是四划等。

其次,名字的笔划算法应按干隆字典的笔画来计算,下面会详细介绍。

3、五行符合四柱八字喜用神的即为好名字

任何名字的好坏都要分析名字与人自身命理的喜忌关系,这是最重要的。

在起名或改名时,必须遵守的原则是文字五行的部首、偏旁、字义等的所属五行优于文字的笔画五行。起名时名字五行符合四柱八字喜用神的即为好名字,不必再为其进行所谓数理、五格等的吉凶推断。即名字五行优先于其他的所谓数理、五格等的起名方法。

4、笔画计算的一些特殊规定

因为中国的文字产生的根源本于自然造化之法则,是一种特殊的符号信息,其一点一划,均不能忽视,它的笔画数应按照干隆字典的笔画计算。以下是姓名学笔画计算的一些特殊规定:

首先,朋友们要知道汉字数字所对应的笔划:

一、1画二、2画三、3画四、4画五、5画

六、6画七、7画八、8画九、9画十、10画

其次,明通师傅提醒朋友们某些特殊部首的笔画数:

扌(手),提手旁,按手字计,为四画。

忄(心),竖心旁,按心字计,为四画。

氵(水),三点旁,按水字计,为四画。

犭(犬),犬字旁,按犬字计,为四画。

礻(示),半礼旁,按示字计,为五画。

王(玉),斜玉旁,按玉字计,为五画。

艹(草),草字头,按草字计,为六画。

衤(衣),衣字旁,按衣字计,为六画。

月(肉),肉字旁,按肉字计,为六画。

辶(走),走马旁,按走字计,为七画。

阝(邑),右耳旁,按邑字计,为七画。

阝(卓),左耳旁,按卓字计,为八画。

再次,朋友们要知道字的五行定义原则

属木的:本、术、榕、芸竺等。 属火的:灿、荧、炳、日、昆等。

属土的:圣、地、山、峰等。属金的:铜、钦、刚、剑等。属水的:浩、海、雪、霞等。

读明白了上述介绍,相信朋友们就更能清楚了解名字是如何计算出五行与笔划的。需要提醒朋友们的是,由于日本等邻国也使用部分汉字,因此,他们对于汉字的应用显然没有咱们老祖宗更清楚明白。比如,名字中的所谓五格,就是日本人的“发明”,但是,往往与咱们的五行数理不吻合,因此,可能五格数适用与日本人的名字,对中国人还是不那么合适,作为一种参考可以,但是,如果你非要按住不放,却把咱们老祖宗的五行放弃,那么,恐怕你是本未倒置了。

注:如果本篇文章帮助到各位缘主,可收藏并转发,积无量公德!

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:593
制作脚本网站 发布:2025-10-20 08:17:34 浏览:888
python中的init方法 发布:2025-10-20 08:17:33 浏览:582
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:765
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:684
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1013
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:255
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:114
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:806
python股票数据获取 发布:2025-10-20 07:39:44 浏览:713