Deep Karmaning

技術系の話から日常のことまで色々と書きます

Juliaで単回帰、重回帰、ロジスティック回帰を試してみる

概要

Juliaで単回帰、重回帰、ロジスティック回帰を試したのでメモです。

特にモデル自体にはなんの意味もなく、単にjulia上で単回帰、重回帰、ロジスティック回帰のやり方を試すだけの記事です。

実装

今回の全体のコードは以下です。

regression_julia.ipynb · GitHub

データ読み込み

まずはデータの読み込みです。

irisデータを読み込みます。

using RDatasets, DataFrames

iris_dataframe = dataset("datasets", "iris")

単回帰

適当に単回帰をやってみましょう。

コードは以下。

x = iris_dataframe[:, 1]
y = iris_dataframe[:, 2]

linreg(x, y)

結果は、

(3.4189468361038156, -0.06188479796414413)

とでました。

重回帰

重回帰も適当にやってみます。

コードは以下で、

using GLM

glm(@formula(SepalLength ~ SepalWidth + PetalLength + Species),
        iris_dataframe, Normal(), IdentityLink())

結果はこんな感じ。

StatsModels.DataFrameRegressionModel{GLM.GeneralizedLinearModel{GLM.GlmResp{Array{Float64,1},Distributions.Normal{Float64},GLM.IdentityLink},GLM.DensePredChol{Float64,Base.LinAlg.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

Formula: SepalLength ~ 1 + SepalWidth + PetalLength + Species

Coefficients:
                      Estimate Std.Error  z value Pr(>|z|)
(Intercept)            2.39039  0.262268  9.11429   <1e-19
SepalWidth            0.432217 0.0813898  5.31046    <1e-6
PetalLength           0.775629 0.0642457  12.0729   <1e-32
Species: versicolor  -0.955812  0.215199 -4.44154    <1e-5
Species: virginica     -1.3941  0.285661 -4.88026    <1e-5

ロジスティック回帰

最後にロジスティック回帰です。

まず適当にラベルを付けます。

iris_dataframe[:y] = map(x -> Int64(x), (iris_dataframe[:Species] .== "setosa") .| (iris_dataframe[:Species] .== "virginica"))

そしてロジスティック回帰を実行し、

glm(@formula(y ~ SepalLength + SepalWidth), iris_dataframe, Binomial(), LogitLink())

結果が、

StatsModels.DataFrameRegressionModel{GLM.GeneralizedLinearModel{GLM.GlmResp{Array{Float64,1},Distributions.Binomial{Float64},GLM.LogitLink},GLM.DensePredChol{Float64,Base.LinAlg.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

Formula: y ~ 1 + SepalLength + SepalWidth

Coefficients:
              Estimate Std.Error   z value Pr(>|z|)
(Intercept)   -8.09277   2.38853  -3.38818   0.0007
SepalLength  -0.129425  0.246911 -0.524177   0.6002
SepalWidth     3.21276  0.638106   5.03484    <1e-6

こんな感じでした。

まとめ

Juliaで単回帰、重回帰、ロジスティック回帰を試してみました。

実行方法をある程度理解することができました。

ただRに比べるとちょっと書きづらい気がします。また計算速度もRよりかかっている印象です。

それでは間違い等ありましたらご指摘お願いいたします。