日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

机器学习算法-随机森林之决策树R 代码从头暴力实现(2)

發(fā)布時(shí)間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习算法-随机森林之决策树R 代码从头暴力实现(2) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前文(機(jī)器學(xué)習(xí)算法 - 隨機(jī)森林之決策樹(shù)初探(1))講述了決策樹(shù)的基本概念、決策評(píng)價(jià)標(biāo)準(zhǔn)并手算了單個(gè)變量、單個(gè)分組的Gini impurity。是一個(gè)基本概念學(xué)習(xí)的過(guò)程,如果不了解,建議先讀一下再繼續(xù)。

本篇通過(guò) R 代碼(希望感興趣的朋友能夠投稿這個(gè)代碼的Python實(shí)現(xiàn))從頭暴力方式自寫(xiě)函數(shù)訓(xùn)練決策樹(shù)。之前計(jì)算的結(jié)果,可以作為正對(duì)照,確定后續(xù)函數(shù)結(jié)果的準(zhǔn)確性。

訓(xùn)練決策樹(shù) - 確定根節(jié)點(diǎn)的分類閾值

Gini impurity可以用來(lái)判斷每一步最合適的決策分類方式,那么怎么確定最優(yōu)的分類變量和分類閾值呢?

最粗暴的方式是,我們用每個(gè)變量的每個(gè)可能得閾值來(lái)進(jìn)行決策分類,選擇具有最低Gini impurity值的分類組合。這不是最快速的解決問(wèn)題的方式,但是最容易理解的方式。

定義計(jì)算Gini impurity的函數(shù)

data <- data.frame(x=c(0,0.5,1.1,1.8,1.9,2,2.5,3,3.6,3.7),y=c(1,0.5,1.5,2.1,2.8,2,2.2,3,3.3,3.5),color=c(rep('blue',3),rep('red',2),rep('green',5)))data## x y color ## 1 0.0 1.0 blue ## 2 0.5 0.5 blue ## 3 1.1 1.5 blue ## 4 1.8 2.1 red ## 5 1.9 2.8 red ## 6 2.0 2.0 green ## 7 2.5 2.2 green ## 8 3.0 3.0 green ## 9 3.6 3.3 green ## 10 3.7 3.5 green

首先定義個(gè)函數(shù)計(jì)算每個(gè)分支的Gini_impurity。

Gini_impurity <- function(branch){# print(branch)len_branch <- length(branch)if(len_branch==0){return(0)}table_branch <- table(branch)wrong_probability <- function(x, total) (x/total*(1-x/total))return(sum(sapply(table_branch, wrong_probability, total=len_branch))) }

測(cè)試下,沒(méi)問(wèn)題。

Gini_impurity(c(rep('a',2),rep('b',3)))## [1] 0.48

再定義一個(gè)函數(shù),計(jì)算每次決策的總Gini impurity.

Gini_impurity_for_split_branch <- function(threshold, data, variable_column, class_column, Init_gini_impurity=NULL){total = nrow(data)left <- data[data[variable_column]<threshold,][[class_column]]left_len = length(left)left_table = table(left)left_gini <- Gini_impurity(left)right <- data[data[variable_column]>=threshold,][[class_column]]right_len = length(right)right_table = table(right)right_gini <- Gini_impurity(right)total_gini <- left_gini * left_len / total + right_gini * right_len /totalresult = c(variable_column,threshold, paste(names(left_table), left_table, collapse="; ", sep=" x "),paste(names(right_table), right_table, collapse="; ", sep=" x "),total_gini)names(result) <- c("Variable", "Threshold", "Left_branch", "Right_branch", "Gini_impurity")if(!is.null(Init_gini_impurity)){Gini_gain <- Init_gini_impurity - total_giniresult = c(variable_column, threshold, paste(names(left_table), left_table, collapse="; ", sep=" x "),paste(names(right_table), right_table, collapse="; ", sep=" x "),Gini_gain)names(result) <- c("Variable", "Threshold", "Left_branch", "Right_branch", "Gini_gain")}return(result) }

測(cè)試下,跟之前計(jì)算的結(jié)果一致:

as.data.frame(rbind(Gini_impurity_for_split_branch(2, data, 'x', 'color'), Gini_impurity_for_split_branch(2, data, 'y', 'color')))## Variable Threshold Left_branch Right_branch Gini_impurity ## 1 x 2 blue x 3; red x 2 green x 5 0.24 ## 2 y 2 blue x 3 green x 5; red x 2 0.285714285714286

暴力決策根節(jié)點(diǎn)和閾值

基于前面定義的函數(shù),遍歷每一個(gè)可能的變量和閾值。

首先看下基于變量x的計(jì)算方法:

uniq_x <- sort(unique(data$x)) delimiter_x <- zoo::rollmean(uniq_x,2) impurity_x <- as.data.frame(do.call(rbind, lapply(delimiter_x, Gini_impurity_for_split_branch, data=data, variable_column='x', class_column='color'))) print(impurity_x)## Variable Threshold Left_branch Right_branch Gini_impurity ## 1 x 0.25 blue x 1 blue x 2; green x 5; red x 2 0.533333333333333 ## 2 x 0.8 blue x 2 blue x 1; green x 5; red x 2 0.425 ## 3 x 1.45 blue x 3 green x 5; red x 2 0.285714285714286 ## 4 x 1.85 blue x 3; red x 1 green x 5; red x 1 0.316666666666667 ## 5 x 1.95 blue x 3; red x 2 green x 5 0.24 ## 6 x 2.25 blue x 3; green x 1; red x 2 green x 4 0.366666666666667 ## 7 x 2.75 blue x 3; green x 2; red x 2 green x 3 0.457142857142857 ## 8 x 3.3 blue x 3; green x 3; red x 2 green x 2 0.525 ## 9 x 3.65 blue x 3; green x 4; red x 2 green x 1 0.577777777777778

再包裝2個(gè)函數(shù),一個(gè)計(jì)算單個(gè)變量為決策節(jié)點(diǎn)的各種可能決策的Gini impurity, 另一個(gè)計(jì)算所有變量依次作為決策節(jié)點(diǎn)的各種可能決策的Gini impurity。

Gini_impurity_for_all_possible_branches_of_one_variable <- function(data, variable, class, Init_gini_impurity=NULL){uniq_value <- sort(unique(data[[variable]]))delimiter_value <- zoo::rollmean(uniq_value,2)impurity <- as.data.frame(do.call(rbind, lapply(delimiter_value, Gini_impurity_for_split_branch, data=data, variable_column=variable, class_column=class,Init_gini_impurity=Init_gini_impurity)))if(is.null(Init_gini_impurity)){decreasing = F} else {decreasing = T}impurity <- impurity[order(impurity[[colnames(impurity)[5]]], decreasing = decreasing),]return(impurity) }Gini_impurity_for_all_possible_branches_of_all_variables <- function(data, variables, class, Init_gini_impurity=NULL){one_split_gini <- do.call(rbind, lapply(variables,Gini_impurity_for_all_possible_branches_of_one_variable, data=data, class=class,Init_gini_impurity=Init_gini_impurity))if(is.null(Init_gini_impurity)){decreasing = F} else {decreasing = T}one_split_gini[order(one_split_gini[[colnames(one_split_gini)[5]]], decreasing = decreasing),] }

測(cè)試下:

Gini_impurity_for_all_possible_branches_of_one_variable(data, 'x', 'color')## Variable Threshold Left_branch Right_branch Gini_impurity ## 5 x 1.95 blue x 3; red x 2 green x 5 0.24 ## 3 x 1.45 blue x 3 green x 5; red x 2 0.285714285714286 ## 4 x 1.85 blue x 3; red x 1 green x 5; red x 1 0.316666666666667 ## 6 x 2.25 blue x 3; green x 1; red x 2 green x 4 0.366666666666667 ## 2 x 0.8 blue x 2 blue x 1; green x 5; red x 2 0.425 ## 7 x 2.75 blue x 3; green x 2; red x 2 green x 3 0.457142857142857 ## 8 x 3.3 blue x 3; green x 3; red x 2 green x 2 0.525 ## 1 x 0.25 blue x 1 blue x 2; green x 5; red x 2 0.533333333333333 ## 9 x 3.65 blue x 3; green x 4; red x 2 green x 1 0.577777777777778

兩個(gè)變量的各個(gè)閾值分別進(jìn)行決策,并計(jì)算Gini impurity,輸出按Gini impurity由小到大排序后的結(jié)果。根據(jù)變量x和閾值1.95(與上面選擇的閾值2獲得的決策結(jié)果一致)的決策可以獲得本步?jīng)Q策的最好結(jié)果。

variables <- c('x', 'y') Gini_impurity_for_all_possible_branches_of_all_variables(data, variables, class="color")## Variable Threshold Left_branch Right_branch Gini_impurity ## 5 x 1.95 blue x 3; red x 2 green x 5 0.24 ## 3 x 1.45 blue x 3 green x 5; red x 2 0.285714285714286 ## 31 y 1.75 blue x 3 green x 5; red x 2 0.285714285714286 ## 4 x 1.85 blue x 3; red x 1 green x 5; red x 1 0.316666666666667 ## 6 x 2.25 blue x 3; green x 1; red x 2 green x 4 0.366666666666667 ## 41 y 2.05 blue x 3; green x 1 green x 4; red x 2 0.416666666666667 ## 2 x 0.8 blue x 2 blue x 1; green x 5; red x 2 0.425 ## 21 y 1.25 blue x 2 blue x 1; green x 5; red x 2 0.425 ## 51 y 2.15 blue x 3; green x 1; red x 1 green x 4; red x 1 0.44 ## 7 x 2.75 blue x 3; green x 2; red x 2 green x 3 0.457142857142857 ## 71 y 2.9 blue x 3; green x 2; red x 2 green x 3 0.457142857142857 ## 61 y 2.5 blue x 3; green x 2; red x 1 green x 3; red x 1 0.516666666666667 ## 8 x 3.3 blue x 3; green x 3; red x 2 green x 2 0.525 ## 81 y 3.15 blue x 3; green x 3; red x 2 green x 2 0.525 ## 1 x 0.25 blue x 1 blue x 2; green x 5; red x 2 0.533333333333333 ## 11 y 0.75 blue x 1 blue x 2; green x 5; red x 2 0.533333333333333 ## 9 x 3.65 blue x 3; green x 4; red x 2 green x 1 0.577777777777778 ## 91 y 3.4 blue x 3; green x 4; red x 2 green x 1 0.577777777777778

  • https://victorzhou.com/blog/intro-to-random-forests/

  • https://victorzhou.com/blog/gini-impurity/

  • https://stats.stackexchange.com/questions/192310/is-random-forest-suitable-for-very-small-data-sets

  • https://towardsdatascience.com/understanding-random-forest-58381e0602d2

  • https://www.stat.berkeley.edu/~breiman/RandomForests/reg_philosophy.html

  • https://medium.com/@williamkoehrsen/random-forest-simple-explanation-377895a60d2d

往期精品(點(diǎn)擊圖片直達(dá)文字對(duì)應(yīng)教程)

后臺(tái)回復(fù)“生信寶典福利第一波”或點(diǎn)擊閱讀原文獲取教程合集

?

(請(qǐng)備注姓名-學(xué)校/企業(yè)-職務(wù)等)

總結(jié)

以上是生活随笔為你收集整理的机器学习算法-随机森林之决策树R 代码从头暴力实现(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产欧美精品国产国产专区 | 欧美大片在线 | 免费观看黄一级视频 | 97人妻精品一区二区三区免 | 亚洲欧美色图 | aaaa毛片| 欧美精品在线播放 | 一卡二卡三卡四卡五卡 | 国产福利一区二区三区在线观看 | 国产精品视频一区二区三 | 国产视频91在线 | 少妇av一区 | 国产精品理伦片 | 四虎成人在线视频 | 久久三级网 | 老司机午夜免费精品视频 | 日韩精品视频免费看 | 亚洲乱码国产乱码精品精大量 | 久久亚洲av无码西西人体 | 欧美丰满美乳xxⅹ高潮www | 国产在线拍揄自揄拍 | 日本亚洲欧洲色 | 色哟哟免费视频 | 男人天堂最新网址 | 女人18毛片一区二区三区 | 伊人久久五月 | 欧洲女性下面有没有毛发 | 在线视频黄 | 亚洲午码 | 老牛嫩草二区三区观影体验 | 色婷综合 | 欧美黄片一区二区三区 | 名校风暴在线观看免费高清完整 | 成人免费黄色网址 | 国产h在线| 欧美黄色特级片 | 中文字幕第315页 | 天天视频污 | 国产自在线| 国产成人 综合 亚洲 | 国产丝袜自拍 | 在线观看福利网站 | 欧美69囗交视频 | 国产精品久久久久久久裸模 | avtt亚洲| 欧美日韩一区二区在线播放 | 综合伊人| 九九热综合| 美女啪啪av | 欧美bbbbbbbbbbbb精品 | 九九久久九九久久 | 国产精品福利一区二区三区 | 国产无套免费网站69 | 日本高清无吗 | av亚洲在线 | 国产亚洲精品电影 | 四季av国产一区二区三区 | 日韩欧美国产中文字幕 | 97超碰人人草 | 国产精品1区2区3区4区 | 日本最黄网站 | 国产精品国产三级国产普通话对白 | 亚洲精品视频一区 | 久久久老熟女一区二区三区91 | 久久艹这里只有精品 | 久久午夜夜伦鲁鲁片 | 狠狠爱天天干 | 国产人妻777人伦精品hd | 亚洲精品永久免费 | 欧美黄片一区二区三区 | 91精品影视 | 国产一区二区视频在线观看 | 中文字幕一区二区三区四区不卡 | 国产成人免费在线观看 | 亚欧精品在线 | 成人动漫一区 | aaa级黄色片 | 91社区在线播放 | 国产精品va无码一区二区 | 最新中文字幕在线视频 | 在线观看av一区二区 | 国产精品久久久久毛片软件 | 99精品视频在线看 | 91免费版黄| 少妇久久久久久被弄高潮 | 精品人妻天天爽夜夜爽视频 | 中文字幕一区在线观看 | 二区在线视频 | 午夜日韩欧美 | 亚洲欧美日韩国产一区 | 99热精品在线观看 | 噼里啪啦动漫高清在线观看 | 国产在线视频你懂得 | 国产色婷婷一区二区三区竹菊影视 | www.国产视频.com | 欧美日韩一区二区在线视频 | 国产精品自产拍在线观看 | 国产综合在线播放 | 小宵虎南在线观看 |