ともにゃん的データ分析ブログ

勉強したことの備忘録とかね

【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)
}

kaggleのtitanicで0.81340を出した話

はじめに

みんな大好き(?)kaggleのtitanicコンペ

Titanic: Machine Learning from Disaster | Kaggle

で0.81340のスコアを出したので色々まとめてみましたという記事です。

このコンペはtitanic号が沈没したときのデータを使用して、乗客が生存したか死亡したかを予測するモデル構築し、そのモデルの予測精度を競うコンペです。
一般に80%の精度を超えると良いとされているコンペのようですので、この記事がそこを目指している方々への参考となればよいかと思います。

続きを読む

ハミルトニアン・モンテカルロ(HMC)法のざっくりとした解説とPythonによる実装

ベイズモデリングが流行っている中で多くのRユーザーはStanを使って解析をしているんではないかと思います。そして、Stanはハミルトニアンモンテカルロ(HMC)法と呼ばれる方法で事後分布からのサンプルを得ています。色々と解説記事はありますが、超ざっくりとHMCの原理をメモとして残しておくことにします。

ここで、基本的に私はHMCを伊庭先生のハミルトン4.pdf - Google ドライブこの資料で勉強したので、伊庭先生の資料を読めば私のこの記事は必要ないことをあらかじめ断っておきます((´^ω^)
なんでこれでいいの?という疑問は伊庭先生の資料で解決することでしょう((´^ω^)

続きを読む