まぃふぇいばりっと

機械学習やってます.Julia大好きです.勉強したことの殴り書きです.

Julia言語 データをTrainとValidにsplitする.

Juliaで,n×m行列Xに,n次元の特徴量がm個格納されていて,これを,trainとvalidに分けたい. 要は,列をランダムにk個選んだn×k行列とn×(m-k)行列をつくりたい.

手っ取り早い方法がわかんないんだけど,いまのところ,暫定のマイベストプラクティスはこんな感じ.

using InvertedIndices
using StatsBase

function data_split(X, ratio)
    n, m = size(X)
    k = Int(floor(ratio*m))
    idxs = sample(1:m, k, replace=false, ordered=true)
    X_train = X[:, idxs]
    X_valid = X[:, Not(idxs)]
    return X_train, X_valid
end

教師データYも一緒にsplitしたいなら,こんな感じ.

using InvertedIndices
using StatsBase

function data_split(X, Y, ratio)
    n, m = size(X)
    k = Int(floor(ratio*m))
    idxs = sample(1:m, k, replace=false, ordered=true)
    X_train = X[:, idxs]
    Y_train = Y[:, idxs]
    X_valid = X[:, Not(idxs)]
    Y_valid = Y[:, Not(idxs)]
    return X_train, Y_train, X_valid, Y_valid
end

もっと良い方法があったら知りたい.