當前位置:首頁 » 操作系統 » 周筆演算法

周筆演算法

發布時間: 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