【Julia1.5】Kaggle 노트북에서 Julia를 사용한 타이타닉

15187 단어 JuliaxgboostKaggle

소개



2020년 7월에 다음 노트북이 공개되었습니다.
Kaggle 노트북에서 Julia를 움직이는 샘플입니다.
Julia Live on Kaggle ※ 필요 인터넷 설정 ON

상기의 노트북을 참고로 타이타닉의 분석과 제출까지를 실시해 보았습니다.
Titanic XGBoost using Julia-1.5.0

처리 개요는 다음과 같습니다. 전문은 "Titanic XGBoost using Julia-1.5.0 "을 참조하십시오.

Kaggle 노트북에 Julia 설치



Julia 실행 바이너리를 다운로드하여/usr/local 아래에 배치합니다.
%%bash

JULIA_VERSION="1.5.0"

JULIA_VER=`cut -d '.' -f -2 <<< "$JULIA_VERSION"`
BASE_URL="https://julialang-s3.julialang.org/bin/linux/x64"
URL="$BASE_URL/$JULIA_VER/julia-$JULIA_VERSION-linux-x86_64.tar.gz"
wget -nv $URL -O /tmp/julia.tar.gz
tar -x -f /tmp/julia.tar.gz -C /usr/local --strip-components 1
rm /tmp/julia.tar.gz

Julia 패키지 설치



"julia -e"로 패키지 설치('using Pkg; pkg"add XXXXXXXX"')를 명령행 실행합니다.
이번에는 DataFrames, CSV, XGBoost를 설치하고 있습니다.
%%bash

julia -e 'using Pkg; pkg"add DataFrames"'
julia -e 'using Pkg; pkg"add CSV"'
julia -e 'using Pkg; pkg"add XGBoost"'

PyJulia를 설치하고 매직 함수 설정



"%load_ext julia.magic"을 실행하면 아래에 설명된 매직 명령 "%%julia"를 사용할 수 있습니다.
!pip install --quiet julia
import julia
from julia.api import Julia
julia.install()
jl = Julia(compiled_modules=False)  # cannot use precompiled packages with pyjulia on linux :-(
%load_ext julia.magic

이후, 셀의 선두에서 「%%julia」를 실행하는 것으로, Julia 스크립트로의 실행이 가능하게 됩니다.

학습 데이터 로드


%%julia

using CSV, DataFrames

train_data = CSV.read("../input/titanic/train.csv")
head(train_data, 10)

설명 변수와 목적 변수(Survived)로 나누기


%%julia

X = select(train_data, Not(:Survived));
y = train_data[:Survived];

데이터 전처리



간단한 데이터 전처리 기능을 제공합니다.
높은 스코어를 목표로 하는 계의 노트북이 아니므로 적당합니다.
칼럼 삭제:「PassengerId」「Name」「Ticket」「Cabin」「Embarked」
라벨 인코딩:「Sex(male:0, female:1)」
'결손값: 「Age(결손값은 중앙값으로 치환)」 「Fare(결손값은 0으로 치환)」
%%julia

using Statistics

function preprocess_data(df)
    tempdf = deepcopy(df)

    select!(tempdf, Not(:PassengerId))
    select!(tempdf, Not(:Name))
    select!(tempdf, Not(:Ticket))
    select!(tempdf, Not(:Cabin))
    select!(tempdf, Not(:Embarked))

    recode!(tempdf[:Sex], "male" => "0");
    recode!(tempdf[:Sex], "female" => "1");
    tempdf.Sex = tryparse.(Int, tempdf.Sex)

    recode!(tempdf[:Age], missing => median(skipmissing(tempdf[:Age])));
    tempdf.Age = Array{Float64}(tempdf.Age)

    recode!(tempdf[:Fare], missing => 0.0);
    tempdf.Fare = Array{Float64}(tempdf.Fare)

    return tempdf
end
%%julia

X = preprocess_data(X)

학습 데이터와 테스트 데이터로 분할


%%julia

train_data_num = Int64(floor(nrow(X) * 0.75))

X_train = convert(Matrix, X[begin:train_data_num, :]);
y_train = y[begin:train_data_num];
X_test = convert(Matrix, X[train_data_num+1:end, :]);
y_test = y[train_data_num+1:end];

XGBoost 모델 훈련



파라미터는 적당합니다.
%%julia

using XGBoost

num_round = 500
xgb = xgboost(X_train, num_round, label=y_train, eta=1, max_depth=3, objective = "binary:logistic")

추론 데이터 로드


%%julia

test_data = CSV.read("../input/titanic/test.csv")

test_data = preprocess_data(test_data);
test_data = convert(Matrix, test_data);

추론 실시



추론 결과가 0.5보다 큰 값을 생존(1), 0.5 미만을 사망(0)으로 대체하고 있습니다.
%%julia

predictions = XGBoost.predict(xgb, test_data)

predictions[predictions .> 0.5] .= 1
predictions[predictions .<= 0.5] .= 0
predictions = Array{Int64}(predictions)

제출용 파일로 내보내기


%%julia

submission = CSV.read("../input/titanic/gender_submission.csv")
submission[2] = predictions
CSV.write("submission.csv", submission)

소감



셀마다 "%% julia"를 기재하는 것이 조금 번거롭습니다,,,

그리고, 여러가지 인스톨 하는 사정상, Kaggle 노트북의 인터넷 설정이 ON이 되어 있을 필요가 있기 때문에, 인터넷 설정 OFF가 필수의 콤페라든지에서는 사용할 수 없네요.
데이터 세트로서 여러가지 업로드해 두는 것도 시도했습니다만, 패키지의 오프라인 인스톨이 잘 가지 않고 포기하고 있습니다.

Kaggle 측에서 공식적으로 대응할 수 있다면 편합니다.

좋은 웹페이지 즐겨찾기