Learn Julia(11): 선형 회귀에 대한 나의 첫 경험

Python에서 기계 학습 작업을 수행하는 데 익숙하지만 Julia에서 기계 학습 개발 작업을 시도한 적이 없습니다. 기계 학습을 위해 Julia에 이미 성숙한 도구가 있다는 것을 알고 있지만 Julia 기본 사항을 더 잘 이해하기 위해 몇 가지 기본 연습을 스스로 수행해야 한다고 생각합니다. 그래서 나는 오늘 오후에 간단한 선형 회귀 실험을 시도했습니다.

먼저 Julia에서 최적화 문제(LP, QP, SQP 등)를 해결하는 방법을 알아야 합니다. 구글 덕분에 간단한 검색으로 Optim 모듈에 대해 금방 알게 되었습니다. Julia에서 처음으로 차트 플롯을 수행한 것도 이 연습을 위한 것입니다. 아래는 이 선형 회귀 실험에서 제가 그린 차트입니다.



이제 이 연습의 코드를 공유하고 싶습니다.

using Random
using Optim
using Plots

## function for generating samples
# n: number of the sample
# b0 b1: linear params
# err: noise level
# seed: seed for random

function get_simple_regression_samples(n, b0=-0.3, b1=0.5, err=0.08, seed=nothing)
    if seed!=nothing
        Random.seed!(seed)
    end
    trueX =  Random.rand(Float64, n)*2 
    trueX =  trueX.- 1.0
    trueT = (b1*trueX).+b0
    return (trueX, trueT+randn(n)*err)
end


# now we obtain a batch of our sample points and print them
(x, y) = get_simple_regression_samples(20)
println("x: $x")
println("y: $y")

# plot the samples as scatter points
gr() # Set the backend to GR
#  plot our samples using GR
display(plot(x,y ,seriestype=:scatter, title="Sample points"))


## now do the linear regression stuff
#  a is the two coefficients that we want to get , ideal solution should be (0.5, -0.3)
#  func(a):  (Y_estim - y).T * (Y_estim - y)  where Y_estim = (a1*x+a2)
func(a) = sum(((a[1]*x).+a[2] - y) .* ((a[1]*x).+a[2] - y))

# pass the function and the initial vector to optimization solver
res = optimize(func, [1.0,1.0])

# get the solution that minimizes the func
sol = Optim.minimizer(res)
println(sol)

# get the minimized value of the func
minval = Optim.minimum(res)
println(minval)



그런 다음 이 스크립트를 실행하고 솔루션을 얻었습니다.


샘플을 생성하기 위한 실제 계수는 [0.5, -0.3]이고 내 스크립트는 이를 [0.52368, -0.29784]로 해결했습니다. 아주 멋진!

좋은 웹페이지 즐겨찾기