julia0.3でランダムフォレスト

12
JuliaTokyo #1 Julia 0.3でランダムフォレスト @gepuro

Upload: atsushi-hayakawa

Post on 14-Jun-2015

3.215 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Julia0.3でランダムフォレスト

JuliaTokyo #1Julia 0.3でランダムフォレスト

@gepuro

Page 2: Julia0.3でランダムフォレスト

自己紹介

@gepuro生息地: 電通大

専攻: 信頼性工学

よく使う手法: 生存時間解析

言語: R、たまにPython

Juliaを触ってた時間は、

24時間もない。

Page 3: Julia0.3でランダムフォレスト

DecisionTree.jl

● bensadeghiさんが開発○ 他には、

■ MineSweeperSolver.jl■ METADATA.jl■ pyplot.jl

○ なども開発に関わっている。

● MITライセンス● 決定木はID3 algorithmで実装されている。

CARTで実装されたランダムフォレストは、@bicycle1885さんが開発している。https://github.com/bicycle1885/RandomForests.jl

Page 4: Julia0.3でランダムフォレスト

「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11http://www.slideshare.net/hamadakoichi/introduction-torandomforest-tokyor

Page 5: Julia0.3でランダムフォレスト

パッケージの追加

Pkg.add("DecisionTree")

Page 6: Julia0.3でランダムフォレスト

パッケージの読み込み

using DecisionTreeusing RDatasets

irisデータを利用出来るようにするために、RDatasetsも読み込みました。

Page 7: Julia0.3でランダムフォレスト

データの準備

iris = dataset("datasets", "iris")features = array(iris[:, 1:4])labels = array(iris[:, 5])

Page 8: Julia0.3でランダムフォレスト

モデルの構築と予測

# モデルの構築, 引数(木の変数の数, 木の数)model = build_forest(labels, features, 2, 10)

#予測

apply_forest(model, features)

Page 9: Julia0.3でランダムフォレスト

クロスバリデーション

accuracy = nfoldCV_forest(labels, features, 2, 10, 3)

何分割するかMean Accuracy: 0.94666666666666673-element Array{Float64,1}: 0.92 0.94 0.98

出力結果

Page 10: Julia0.3でランダムフォレスト

ソースコードを覗いてみる(分類)function build_forest(labels::Vector, features::Matrix, nsubfeatures::Integer, ntrees::Integer, partialsampling=0.7)

partialsampling = partialsampling > 1.0 ? 1.0 : partialsamplingNlabels = length(labels)Nsamples = int(partialsampling * Nlabels)forest = @parallel (vcat) for i in [1:ntrees]

inds = rand(1:Nlabels, Nsamples) build_tree(labels[inds], features[inds,:], nsubfeatures)

endreturn Ensemble([forest])

end

● バージョン0.2の頃に合わせているのか、データの持ち方がVectorとMtrixになってる。● arrayとの違いはなんだろうか?● 引数は、nsubfeatrues, ntrees, partialsamplingの3つ● partialsamplingは、指定しなくても動作する● 並列処理に対応しているっぽい

Page 11: Julia0.3でランダムフォレスト

ソースコードを覗いてみる(回帰)function build_forest{T<:FloatingPoint,U<:Real}(labels::Vector{T},features::Matrix{U}, nsubfeatures::Integer, ntrees::Integer, maxlabels=0.5, partialsampling=0.7)

partialsampling = partialsampling > 1.0 ? 1.0 : partialsamplingNlabels = length(labels)Nsamples = int(partialsampling * Nlabels)forest = @parallel (vcat) for i in [1:ntrees]

inds = rand(1:Nlabels, Nsamples) build_tree(labels[inds], features[inds,:], maxlabels, nsubfeatures)

endreturn Ensemble([forest])

end

● Javaでいうオーバーライドが出来るのかな?● 関数を宣言した直後に型を指定?● パラメータにmaxlabelsが追加されている。葉あたりの平均サンプル数を指定する

Page 12: Julia0.3でランダムフォレスト

参考

● bensadeghi/DecisionTree.jl https://github.com/bensadeghi/DecisionTree.jl● 「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 -

#TokyoR #11 http://www.slideshare.net/hamadakoichi/introduction-torandomforest-tokyor