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よりかかっている印象です。
それでは間違い等ありましたらご指摘お願いいたします。