XGBoostの概要
XGBoostの凄さに最近気がついたので、もうちょっと詳しく知りたいと思って以下の論文を読みました。
XGBoost: A Scalable Tree Boosting System
せっかくなので、簡単にまとめてみたいと思います。。。と思っていたら結構な量になってしいました。
何か間違い等がありましたらコメントをしていただくか、@kefism へ連絡をしてくださると嬉しいです。
【R】データフレームにcharacterやfactorの列が含まれているときに、その列をすべてダミー変数化する関数
タイトル通りの関数を作りましたのでここに置いておきます。
データフレームに文字列が入ってて分析を回せない、、、その列だけ取り出してダミー化してまた結合してって面倒くせえ、、、ってときにお使いください。
{dummies}パッケージを使用していますのでご注意ください。
is.dropは、多重共線性等を気にしたときにTRUEとしてください。1列抜かれます。
convOnlyCharacters2Dummies <- function(data, is.drop = FALSE){ library(dummies) convDummies <- function(data, is.drop){ N <- ncol(data) row_names <- names(data) names_list <- c() new_data <- rep(NA, nrow(data)) for(n in 1:N){ unique_value <- sort(unique(data[,n])) dummied_data <- dummy(data[,n]) if(is.drop == TRUE){ new_data <- cbind(new_data, dummied_data[,-ncol(dummied_data)]) names_list <- c(names_list, paste(row_names[n], unique_value, sep = ".")[-ncol(dummied_data)]) } else { new_data <- cbind(new_data, dummied_data) names_list <- c(names_list, paste(row_names[n], unique_value, sep = ".")) } } new_data <- as.data.frame(new_data) names(new_data) <- c("temp", names_list) return(new_data[,-1]) } varnames <- names(data) todummiesnames <- c() for(name in varnames){ if(class(data[[name]]) == "character" || class(data[[name]]) == "factor"){ todummiesnames <- c(todummiesnames, name) } } dummies_df <- convDummies(data[, todummiesnames], is.drop) df <- cbind(data[, which(!(varnames %in% todummiesnames))], dummies_df) return(df) }
【R】ランダムフォレストを実行できるパッケージ{ranger}用の、変数の重要度を可視化する関数
タイトル通りの関数を作ったのでここに置いておきます。
可視化には{ggplot2}を使用しています。
# ranger_fitにrangerで構築したモデルを、topに表示したい変数の個数を指定します。 # topに値を指定しない場合は全変数の重要度を表示します。変数の数が多い時にご指定ください。 plotVarImp <- function(ranger_fit, top=NULL){ library(ggplot2) pd <- data.frame(Variable = names(ranger_fit$variable.importance), Importance = as.numeric(ranger_fit$variable.importance)) %>% arrange(desc(Importance)) if(is.null(top)){ pd <- arrange(pd, Importance) } else { pd <- arrange(pd[1:top,], Importance) } p <- ggplot(pd, aes(x=factor(Variable, levels=unique(Variable)), y=Importance)) + geom_bar(stat="identity") + xlab("Variables") + coord_flip() plot(p) }
【R】データフレームを渡すと欠損値のある列を抜いてくれる関数
タイトル通りの関数を作ったのでここに置いておきます。
# データフレーム df から欠損値のある列を除去する関数 removeNaCol <- function(df){ is_na <- apply(df, 2, function(x) sum(is.na(x))) > 0 return(df[,which(!is_na)]) }