From ed91de2337e87202d7618057a00df9e2fef542eb Mon Sep 17 00:00:00 2001 From: vay4ie Date: Wed, 10 Jan 2024 16:12:48 +0200 Subject: [PATCH 1/5] Played w/ program & added different function support --- main.go | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index e39985b..23a5a7d 100644 --- a/main.go +++ b/main.go @@ -3,26 +3,33 @@ package main import ( "image" "log" + "math" "time" "github.com/hajimehoshi/ebiten/v2" ) -func f(x float64) float64 { return x*x + 5*x - 3 } -func df(x float64) float64 { return 2*x + 5 } +//FUNCTIONS + +//func f(x float64) float64 { return x*x + 3*x - 5 } + +func f(x float64) float64 { return math.Cos(x) } + +// func f(x float64) float64 { return math.Sin(x) } +//func f(x float64) float64 { return 0.1*(x*x) - math.Sqrt(97)*x + 10 } func main() { ebiten.SetWindowSize(640, 480) - ebiten.SetWindowTitle("Gradient descent") + ebiten.SetWindowTitle("Meh") img := make(chan *image.RGBA, 1) go func() { - p := Plot(-5, 0, 0.1, f) - x := 0.0 + p := Plot(-10, 10, 0.1, f) + x := 0.25 img <- p(x) - for i := 0; i < 50; i++ { - time.Sleep(30 * time.Millisecond) - x -= df(x) * 0.1 + for i := 0; d(f, x) != 0; i++ { + time.Sleep(500 * time.Millisecond) + x -= d(f, x) * 0.9 img <- p(x) } }() @@ -31,3 +38,18 @@ func main() { log.Fatal(err) } } + +// Isolated one-dimensional gradient descent function (not used) +func GradientDescent(f func(float64) float64) float64 { + x := 0.25 + for i := 0; d(f, x) != 0; i++ { + x -= d(f, x) * 0.9 + } + return x +} + +// Derivative +func d(f func(float64) float64, x float64) float64 { + h := 0.0001 + return (f(x+h) - f(x)) / h +} From da9d95ff28726a6b4ebf2d64e3893186a5dcd3ef Mon Sep 17 00:00:00 2001 From: vay4ie Date: Wed, 17 Jan 2024 20:11:42 +0200 Subject: [PATCH 2/5] Made linear regression w/o drawing Somehow overcame the core, but couldn't understand the drawing with plot --- app.go => Gradient_Descent/app.go | 0 go.mod => Gradient_Descent/go.mod | 0 go.sum => Gradient_Descent/go.sum | 0 Gradient_Descent/main.go | 33 +++++++ plot.go => Gradient_Descent/plot.go | 0 Linear_Regression/go.mod | 32 +++++++ Linear_Regression/go.sum | 120 ++++++++++++++++++++++++ Linear_Regression/linear_regression.png | Bin 0 -> 10327 bytes Linear_Regression/main.go | 80 ++++++++++++++++ main.go | 55 ----------- 10 files changed, 265 insertions(+), 55 deletions(-) rename app.go => Gradient_Descent/app.go (100%) rename go.mod => Gradient_Descent/go.mod (100%) rename go.sum => Gradient_Descent/go.sum (100%) create mode 100644 Gradient_Descent/main.go rename plot.go => Gradient_Descent/plot.go (100%) create mode 100644 Linear_Regression/go.mod create mode 100644 Linear_Regression/go.sum create mode 100644 Linear_Regression/linear_regression.png create mode 100644 Linear_Regression/main.go delete mode 100644 main.go diff --git a/app.go b/Gradient_Descent/app.go similarity index 100% rename from app.go rename to Gradient_Descent/app.go diff --git a/go.mod b/Gradient_Descent/go.mod similarity index 100% rename from go.mod rename to Gradient_Descent/go.mod diff --git a/go.sum b/Gradient_Descent/go.sum similarity index 100% rename from go.sum rename to Gradient_Descent/go.sum diff --git a/Gradient_Descent/main.go b/Gradient_Descent/main.go new file mode 100644 index 0000000..e39985b --- /dev/null +++ b/Gradient_Descent/main.go @@ -0,0 +1,33 @@ +package main + +import ( + "image" + "log" + "time" + + "github.com/hajimehoshi/ebiten/v2" +) + +func f(x float64) float64 { return x*x + 5*x - 3 } +func df(x float64) float64 { return 2*x + 5 } + +func main() { + ebiten.SetWindowSize(640, 480) + ebiten.SetWindowTitle("Gradient descent") + + img := make(chan *image.RGBA, 1) + go func() { + p := Plot(-5, 0, 0.1, f) + x := 0.0 + img <- p(x) + for i := 0; i < 50; i++ { + time.Sleep(30 * time.Millisecond) + x -= df(x) * 0.1 + img <- p(x) + } + }() + + if err := ebiten.RunGame(&App{Img: img}); err != nil { + log.Fatal(err) + } +} diff --git a/plot.go b/Gradient_Descent/plot.go similarity index 100% rename from plot.go rename to Gradient_Descent/plot.go diff --git a/Linear_Regression/go.mod b/Linear_Regression/go.mod new file mode 100644 index 0000000..abcf32d --- /dev/null +++ b/Linear_Regression/go.mod @@ -0,0 +1,32 @@ +module main.go + +go 1.21.1 + +require ( + gioui.org v0.4.2 // indirect + gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 // indirect + gioui.org/shader v1.0.8 // indirect + gioui.org/x v0.4.0 // indirect + git.sr.ht/~sbinet/gg v0.5.0 // indirect + github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect + github.com/andybalholm/stroke v0.0.0-20230904101225-24ef450bc62c // indirect + github.com/campoy/embedmd v1.0.0 // indirect + github.com/ebitengine/purego v0.5.1 // indirect + github.com/go-fonts/liberation v0.3.2 // indirect + github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea // indirect + github.com/go-pdf/fpdf v0.9.0 // indirect + github.com/go-text/typesetting v0.1.0 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/hajimehoshi/ebiten/v2 v2.6.3 // indirect + github.com/jezek/xgb v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect + golang.org/x/exp/shiny v0.0.0-20240112132812-db7319d0e0e3 // indirect + golang.org/x/image v0.15.0 // indirect + golang.org/x/mobile v0.0.0-20240112133503-c713f31d574b // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/text v0.14.0 // indirect + gonum.org/v1/plot v0.14.0 // indirect + rsc.io/pdf v0.1.1 // indirect +) diff --git a/Linear_Regression/go.sum b/Linear_Regression/go.sum new file mode 100644 index 0000000..10b8466 --- /dev/null +++ b/Linear_Regression/go.sum @@ -0,0 +1,120 @@ +gioui.org v0.4.2 h1:txwggR/n2YYAkhnwgTpqk/5h5Fy7SkI20hOrbwlOyGE= +gioui.org v0.4.2/go.mod h1:2atiYR4upH71/6ehnh6XsUELa7JZOrOHHNMDxGBZF0Q= +gioui.org/cpu v0.0.0-20210808092351-bfe733dd3334/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= +gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 h1:tNJdnP5CgM39PRc+KWmBRRYX/zJ+rd5XaYxY5d5veqA= +gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= +gioui.org/shader v1.0.8 h1:6ks0o/A+b0ne7RzEqRZK5f4Gboz2CfG+mVliciy6+qA= +gioui.org/shader v1.0.8/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= +gioui.org/x v0.4.0 h1:H6DofC86KoG51wgzeeA4ujZDDfcIa8vbL+jD9SpF/D8= +gioui.org/x v0.4.0/go.mod h1:YAoFl2lbeARk4LopDXHK1N7fBQJupPYDSm9maf6tFlM= +git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8= +git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/andybalholm/stroke v0.0.0-20230904101225-24ef450bc62c h1:hHefapU8Zg8roqjYi9V8CNFPD0z6tbDDSqNgBgY1O4U= +github.com/andybalholm/stroke v0.0.0-20230904101225-24ef450bc62c/go.mod h1:ccdDYaY5+gO+cbnQdFxEXqfy0RkoV25H3jLXUDNM3wg= +github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= +github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= +github.com/ebitengine/purego v0.5.0 h1:JrMGKfRIAM4/QVKaesIIT7m/UVjTj5GYhRSQYwfVdpo= +github.com/ebitengine/purego v0.5.0/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= +github.com/ebitengine/purego v0.5.1 h1:hNunhThpOf1vzKl49v6YxIsXLhl92vbBEv1/2Ez3ZrY= +github.com/ebitengine/purego v0.5.1/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= +github.com/go-fonts/liberation v0.3.2 h1:XuwG0vGHFBPRRI8Qwbi5tIvR3cku9LUfZGq/Ar16wlQ= +github.com/go-fonts/liberation v0.3.2/go.mod h1:N0QsDLVUQPy3UYg9XAc3Uh3UDMp2Z7M1o4+X98dXkmI= +github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea h1:DfZQkvEbdmOe+JK2TMtBM+0I9GSdzE2y/L1/AmD8xKc= +github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea/go.mod h1:Y7Vld91/HRbTBm7JwoI7HejdDB0u+e9AUBO9MB7yuZk= +github.com/go-pdf/fpdf v0.9.0 h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw= +github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y= +github.com/go-text/typesetting v0.1.0 h1:vioSaLPYcHwPEPLT7gsjCGDCoYSbljxoHJzMnKwVvHw= +github.com/go-text/typesetting v0.1.0/go.mod h1:d22AnmeKq/on0HNv73UFriMKc4Ez6EqZAofLhAzpSzI= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/hajimehoshi/ebiten/v2 v2.6.3 h1:xJ5klESxhflZbPUx3GdIPoITzgPgamsyv8aZCVguXGI= +github.com/hajimehoshi/ebiten/v2 v2.6.3/go.mod h1:TZtorL713an00UW4LyvMeKD8uXWnuIuCPtlH11b0pgI= +github.com/jezek/xgb v1.1.0 h1:wnpxJzP1+rkbGclEkmwpVFQWpuE2PUGNUzP8SbfFobk= +github.com/jezek/xgb v1.1.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= +github.com/jezek/xgb v1.1.1 h1:bE/r8ZZtSv7l9gk6nU0mYx51aXrvnyb44892TwSaqS4= +github.com/jezek/xgb v1.1.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o= +golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= +golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63 h1:3AGKexOYqL+ztdWdkB1bDwXgPBuTS/S8A4WzuTvJ8Cg= +golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0= +golang.org/x/exp/shiny v0.0.0-20240112132812-db7319d0e0e3 h1:NezsOJwoBjJ5AXH5QQCdxe+WsqLw+f/t8eo1Tacfhqs= +golang.org/x/exp/shiny v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:3F+MieQB7dRYLTmnncoFbb1crS5lfQoTfDgQy6K4N0o= +golang.org/x/image v0.12.0 h1:w13vZbU4o5rKOFFR8y7M+c4A5jXDC0uXTdHYRP8X2DQ= +golang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk= +golang.org/x/image v0.15.0 h1:kOELfmgrmJlw4Cdb7g/QGuB3CvDrXbqEIww/pNtNBm8= +golang.org/x/image v0.15.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= +golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57 h1:Q6NT8ckDYNcwmi/bmxe+XbiDMXqMRW1xFBtJ+bIpie4= +golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57/go.mod h1:wEyOn6VvNW7tcf+bW/wBz1sehi2s2BZ4TimyR7qZen4= +golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a h1:sYbmY3FwUWCBTodZL1S3JUuOvaW6kM2o+clDzzDNBWg= +golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a/go.mod h1:Ede7gF0KGoHlj822RtphAHK1jLdrcuRBZg0sF1Q+SPc= +golang.org/x/mobile v0.0.0-20240112133503-c713f31d574b h1:kfWLZgb8iUBHdE9WydD5V5dHIS/F6HjlBZNyJfn2bs4= +golang.org/x/mobile v0.0.0-20240112133503-c713f31d574b/go.mod h1:4efzQnuA1nICq6h4kmZRMGzbPiP06lZvgADUu1VpJCE= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE= +gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/Linear_Regression/linear_regression.png b/Linear_Regression/linear_regression.png new file mode 100644 index 0000000000000000000000000000000000000000..b2ccbeb1eef8274314b7aed53d81553867496b8e GIT binary patch literal 10327 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
    1i7{d^2eyG^ zJpr${WpRcUagOL=LLd?UiS$ciVo+@yI%VB251$`n{`98EOQ|_Wy(Eb0*xR5nwrX4dFc=mx0| zeuVozoD__!?6T8s*S7=kT4Z6QrGGHLcf;VJK%+i0zR49-UW#{gi_EA?YJ+?FQ^fAW z)7MykQzU59-d`=YdnVB>LxFK8FmtgtIC%W?BQBbjioS~5)HtXdB@~^k*{=^iZ@wL` z0_i9vHl;<9a2n(s%1oR;5&La0SvN#A6dr_uLg2k8NJ&5IZWtOF$Tg}>+TQyDd!fa^ zlEe;Z;{6lTZksTv*c|9ccKKpM+u<=tVAu=EyWY)z$r6*S(azIQ6-fasL`kxD#I&-+ zgy@5c3{{=G)R^At9Ju2P_R9}E+k=UVZ$9j~WZQ^#AM|C-gWMiZPe*>2?}9UHnIWC% z-}xDnMI2{_=Ny_u*iUlb(o(mrtWiw{muEgzCVW+2|Ws~0Y z*=x+#{<^K;~q(1^Gu8*?dS(3sfme+oSdBEW=nr< zU0tt}{k7y|T0j#O0yy%W2M_F<{I7!$O9c&dI>Ho_Ouo0qwH8GSq6O$Bd^|i>rly6(#cs#DU}H1Y#2YZar=nU0Id=O_Y^GwO zkSmCVpkoq?9MaO#CiC4!^Nw-*ild^W^nKda@FPe^saaW3QBi|!R{oNyAXdCakx)`r z88rFB+#W;_9qVfditGw36>V)RJw4haZf@=`AUe(QLdyo4G8vmj|Lu&2j}H~OecDzA$Cd3hN)J>}fu=YPq1*DkY;0`D$H(cu-#`fqdz9gS{N78~ z)XJ)VV8D3W>l$no8rfR=t7-U*OiaHfCnuYl-a3X19H1qPh z02b${6%iFx0fO$)>_mVt{1wH^!vn9h9w{{|mX(&4wwH}Dg~!8165yeu zbzT=Bet}pnaR1Yz4B#VS!t0ZDqA7uapnSeuA3Iw7od(bs74>Ir@H*&soSd9Usiwxp z$1xA);D!NpRAfX%%jBCnFR?)5FmSBb=~i=bGh8D{6!r3K&Tw8I8?LaSNilt_s-lvf zmBm07U=|B7-7_#?ZE3k$Sr0G&mGShRNoV}l!GV{n$b_f%@3ApfciW8#VRafOt>f*u z5OtFupus`_8U|Li_Q>Y` zO61VckWKATW^X%OZvjJJ?Di^x*W@BuLmy?lA^rh(6m};rK$waZdF7^}5@D$f;tvY- zeI>EdtTz*`tT1sh^(F|r5B&HcCh}`$3$&<%R-U%DHg(qL>gqA1y*Xin)ILscDkkGz zU7Q_&18vmA?u5cyAr44xz2W8J3Qtl8wbaqpHsoR)ZdbgtwOy<%mb??H>)g}Pv39sM z^Qfy$i-?HG$;pXZ9!3nHhNUQ(nwSjQVdbc_8kZO~m&05E1l{uT^4aa&Ti?#A7r$=Q z&e&J!dY$dH1rMh~R(|)!EgwN@=-%H-1rluY?w6I_aZVsoG|K9dSJO%vVQJj+_d;XzO zp-y%Y@7tMM!AzXeOKTlZ8YDd#3BnW?`S5@4EI3wt43lp|8HTGagMilh`de^AZEd3F zD?|#YxEtSgh?Y!~Ven7;{l|~ntgNgY9I$WSzgdzj9cgJWwm2FZWny9?WOdN{_l0F; zz@1J3(qtLX(KnwF(1N0hjf1l=KTk$Z?p*yw#1xl69D~!6ceJ;+1a2-sZ3T`&IfQ|3 z@MmTQf>}aB0^}G4g`l@@v6dv0E#b{~L05+;`s%z9`6%P=Ux9^1MGsxK>6Vm|E%`Aq z(9d_0E-c3?f5YVn=1*`R31(gqk&&Q*P6tuPV!K}s|M&kHO#DB#XuqIAATBOG(7#_+ Uf3fffE({`Mr4%Id#r1st531Inga7~l literal 0 HcmV?d00001 diff --git a/Linear_Regression/main.go b/Linear_Regression/main.go new file mode 100644 index 0000000..5506639 --- /dev/null +++ b/Linear_Regression/main.go @@ -0,0 +1,80 @@ +package main + +import ( + "fmt" +) + +type Line struct { + k float64 + b float64 +} + +func (l *Line) Training(x, y []float64, learningRate float64, epochs int) { + m := float64(len(x)) + + for epoch := 1; epoch <= epochs; epoch++ { + + // Making calculations + calculations := make([]float64, len(x)) + for i := range x { + calculations[i] = l.calculate(x[i]) + } + + // Calculating errors + errors := make([]float64, len(y)) + for i := range y { + errors[i] = calculations[i] - y[i] + } + + l.k -= learningRate * (1 / m) * twoSliceSum(errors, x) + l.b -= learningRate * (1 / m) * sliceSum(errors) + + loss := average(errors) + fmt.Printf("Epoch %d, Cost: %f\n", epoch, loss) + } +} + +func (l *Line) calculate(x float64) float64 { + return l.k*x + l.b +} + +func twoSliceSum(slice1, slice2 []float64) float64 { + result := 0.0 + for i := range slice1 { + result += slice1[i] * slice2[i] + } + return result +} + +func sliceSum(slice1 []float64) float64 { + result := 0.0 + for i := range slice1 { + result += slice1[i] + } + return result +} + +func average(s []float64) float64 { + return sliceSum(s) / float64(len(s)) +} + +func main() { + // Points + x := []float64{0, -0.5, 0.5, 1, 2.5} + y := []float64{1, 0, 2, 3, 6} + + //Line initialization + lr := Line{} + + // Training + learningRate := 0.01 + epochs := 1000 + + lr.Training(x, y, learningRate, epochs) + + fmt.Printf("Trained Coefficients: Slope=%.2f, Intercept=%.2f\n", lr.k, lr.b) + + newX := 6.0 + regression := lr.calculate(newX) + fmt.Printf("Regression for X=%.2f: %.2f\n", newX, regression) +} diff --git a/main.go b/main.go deleted file mode 100644 index 23a5a7d..0000000 --- a/main.go +++ /dev/null @@ -1,55 +0,0 @@ -package main - -import ( - "image" - "log" - "math" - "time" - - "github.com/hajimehoshi/ebiten/v2" -) - -//FUNCTIONS - -//func f(x float64) float64 { return x*x + 3*x - 5 } - -func f(x float64) float64 { return math.Cos(x) } - -// func f(x float64) float64 { return math.Sin(x) } -//func f(x float64) float64 { return 0.1*(x*x) - math.Sqrt(97)*x + 10 } - -func main() { - ebiten.SetWindowSize(640, 480) - ebiten.SetWindowTitle("Meh") - - img := make(chan *image.RGBA, 1) - go func() { - p := Plot(-10, 10, 0.1, f) - x := 0.25 - img <- p(x) - for i := 0; d(f, x) != 0; i++ { - time.Sleep(500 * time.Millisecond) - x -= d(f, x) * 0.9 - img <- p(x) - } - }() - - if err := ebiten.RunGame(&App{Img: img}); err != nil { - log.Fatal(err) - } -} - -// Isolated one-dimensional gradient descent function (not used) -func GradientDescent(f func(float64) float64) float64 { - x := 0.25 - for i := 0; d(f, x) != 0; i++ { - x -= d(f, x) * 0.9 - } - return x -} - -// Derivative -func d(f func(float64) float64, x float64) float64 { - h := 0.0001 - return (f(x+h) - f(x)) / h -} From 55f76755599b4ee805bf54f017e66c7d9b3b66b6 Mon Sep 17 00:00:00 2001 From: vay4ie Date: Thu, 25 Jan 2024 16:19:48 +0200 Subject: [PATCH 3/5] Deleted everything --- Gradient_Descent/app.go | 29 ------ Gradient_Descent/go.mod | 27 ------ Gradient_Descent/go.sum | 96 ------------------- Gradient_Descent/main.go | 33 ------- Gradient_Descent/plot.go | 60 ------------ Linear_Regression/go.mod | 32 ------- Linear_Regression/go.sum | 120 ------------------------ Linear_Regression/linear_regression.png | Bin 10327 -> 0 bytes Linear_Regression/main.go | 80 ---------------- 9 files changed, 477 deletions(-) delete mode 100644 Gradient_Descent/app.go delete mode 100644 Gradient_Descent/go.mod delete mode 100644 Gradient_Descent/go.sum delete mode 100644 Gradient_Descent/main.go delete mode 100644 Gradient_Descent/plot.go delete mode 100644 Linear_Regression/go.mod delete mode 100644 Linear_Regression/go.sum delete mode 100644 Linear_Regression/linear_regression.png delete mode 100644 Linear_Regression/main.go diff --git a/Gradient_Descent/app.go b/Gradient_Descent/app.go deleted file mode 100644 index 90cb206..0000000 --- a/Gradient_Descent/app.go +++ /dev/null @@ -1,29 +0,0 @@ -package main - -import ( - "image" - - "github.com/hajimehoshi/ebiten/v2" -) - -type App struct { - Img <-chan *image.RGBA - img *ebiten.Image -} - -func (app *App) Update() error { return nil } - -func (app *App) Draw(screen *ebiten.Image) { - select { - case img := <-app.Img: - app.img = ebiten.NewImageFromImage(img) - default: - } - if app.img != nil { - screen.DrawImage(app.img, nil) - } -} - -func (app *App) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) { - return outsideWidth, outsideHeight -} diff --git a/Gradient_Descent/go.mod b/Gradient_Descent/go.mod deleted file mode 100644 index fd11da7..0000000 --- a/Gradient_Descent/go.mod +++ /dev/null @@ -1,27 +0,0 @@ -module github.com/prog-1/gradient-descent - -go 1.21.1 - -require ( - github.com/hajimehoshi/ebiten/v2 v2.6.3 - gonum.org/v1/plot v0.14.0 -) - -require ( - git.sr.ht/~sbinet/gg v0.5.0 // indirect - github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect - github.com/campoy/embedmd v1.0.0 // indirect - github.com/ebitengine/purego v0.5.0 // indirect - github.com/go-fonts/liberation v0.3.1 // indirect - github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 // indirect - github.com/go-pdf/fpdf v0.8.0 // indirect - github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect - github.com/jezek/xgb v1.1.0 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63 // indirect - golang.org/x/image v0.12.0 // indirect - golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.12.0 // indirect - golang.org/x/text v0.13.0 // indirect -) diff --git a/Gradient_Descent/go.sum b/Gradient_Descent/go.sum deleted file mode 100644 index 3acb0f1..0000000 --- a/Gradient_Descent/go.sum +++ /dev/null @@ -1,96 +0,0 @@ -git.sr.ht/~sbinet/cmpimg v0.1.0 h1:E0zPRk2muWuCqSKSVZIWsgtU9pjsw3eKHi8VmQeScxo= -git.sr.ht/~sbinet/cmpimg v0.1.0/go.mod h1:FU12psLbF4TfNXkKH2ZZQ29crIqoiqTZmeQ7dkp/pxE= -git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8= -git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= -github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= -github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= -github.com/ebitengine/purego v0.5.0 h1:JrMGKfRIAM4/QVKaesIIT7m/UVjTj5GYhRSQYwfVdpo= -github.com/ebitengine/purego v0.5.0/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= -github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.3.1 h1:/cT8A7uavYKvglYXvrdDw4oS5ZLkcOU22fa2HJ1/JVM= -github.com/go-fonts/latin-modern v0.3.1/go.mod h1:ysEQXnuT/sCDOAONxC7ImeEDVINbltClhasMAqEtRK0= -github.com/go-fonts/liberation v0.3.1 h1:9RPT2NhUpxQ7ukUvz3jeUckmN42T9D9TpjtQcqK/ceM= -github.com/go-fonts/liberation v0.3.1/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY= -github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs= -github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM= -github.com/go-pdf/fpdf v0.8.0 h1:IJKpdaagnWUeSkUFUjTcSzTppFxmv8ucGQyNPQWxYOQ= -github.com/go-pdf/fpdf v0.8.0/go.mod h1:gfqhcNwXrsd3XYKte9a7vM3smvU/jB4ZRDrmWSxpfdc= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/hajimehoshi/ebiten/v2 v2.6.3 h1:xJ5klESxhflZbPUx3GdIPoITzgPgamsyv8aZCVguXGI= -github.com/hajimehoshi/ebiten/v2 v2.6.3/go.mod h1:TZtorL713an00UW4LyvMeKD8uXWnuIuCPtlH11b0pgI= -github.com/jezek/xgb v1.1.0 h1:wnpxJzP1+rkbGclEkmwpVFQWpuE2PUGNUzP8SbfFobk= -github.com/jezek/xgb v1.1.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b h1:r+vk0EmXNmekl0S0BascoeeoHk/L7wmaW2QF90K+kYI= -golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= -golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63 h1:3AGKexOYqL+ztdWdkB1bDwXgPBuTS/S8A4WzuTvJ8Cg= -golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0= -golang.org/x/image v0.12.0 h1:w13vZbU4o5rKOFFR8y7M+c4A5jXDC0uXTdHYRP8X2DQ= -golang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk= -golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57 h1:Q6NT8ckDYNcwmi/bmxe+XbiDMXqMRW1xFBtJ+bIpie4= -golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57/go.mod h1:wEyOn6VvNW7tcf+bW/wBz1sehi2s2BZ4TimyR7qZen4= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= -gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= -gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE= -gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/Gradient_Descent/main.go b/Gradient_Descent/main.go deleted file mode 100644 index e39985b..0000000 --- a/Gradient_Descent/main.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "image" - "log" - "time" - - "github.com/hajimehoshi/ebiten/v2" -) - -func f(x float64) float64 { return x*x + 5*x - 3 } -func df(x float64) float64 { return 2*x + 5 } - -func main() { - ebiten.SetWindowSize(640, 480) - ebiten.SetWindowTitle("Gradient descent") - - img := make(chan *image.RGBA, 1) - go func() { - p := Plot(-5, 0, 0.1, f) - x := 0.0 - img <- p(x) - for i := 0; i < 50; i++ { - time.Sleep(30 * time.Millisecond) - x -= df(x) * 0.1 - img <- p(x) - } - }() - - if err := ebiten.RunGame(&App{Img: img}); err != nil { - log.Fatal(err) - } -} diff --git a/Gradient_Descent/plot.go b/Gradient_Descent/plot.go deleted file mode 100644 index ebad8a9..0000000 --- a/Gradient_Descent/plot.go +++ /dev/null @@ -1,60 +0,0 @@ -package main - -import ( - "fmt" - "image" - "image/color" - "log" - - "gonum.org/v1/plot" - "gonum.org/v1/plot/plotter" - "gonum.org/v1/plot/vg" - "gonum.org/v1/plot/vg/draw" - "gonum.org/v1/plot/vg/vgimg" -) - -func Plot(xmin, xmax, xstep float64, f func(float64) float64) func(x float64) *image.RGBA { - var pts plotter.XYs - for x := xmin; x <= xmax; x += xstep { - pts = append(pts, plotter.XY{X: x, Y: f(x)}) - } - fn, err := plotter.NewLine(pts) - if err != nil { - log.Fatalf("Failed to NewLine: %v", err) - } - fn.Color = color.RGBA{B: 255, A: 255} - return func(x float64) *image.RGBA { - pts := plotter.XYs{{X: x, Y: f(x)}} - xScatter, err := plotter.NewScatter(pts) - if err != nil { - log.Fatalf("Failed to NewScatter: %v", err) - } - xScatter.Color = color.RGBA{R: 255, A: 255} - - labels, err := plotter.NewLabels(plotter.XYLabels{ - XYs: pts, - Labels: []string{fmt.Sprintf("x = %.2f", x)}, - }) - labels.Offset = vg.Point{X: -10, Y: 15} - if err != nil { - log.Fatalf("Failed to NewLabels: %v", err) - } - - p := plot.New() - p.Add( - plotter.NewGrid(), - fn, - xScatter, - labels, - ) - p.Legend.Add("f(x)", fn) - p.Legend.Add("x", xScatter) - p.X.Label.Text = "X" - p.Y.Label.Text = "Y" - - img := image.NewRGBA(image.Rect(0, 0, 640, 480)) - c := vgimg.NewWith(vgimg.UseImage(img)) - p.Draw(draw.New(c)) - return c.Image().(*image.RGBA) - } -} diff --git a/Linear_Regression/go.mod b/Linear_Regression/go.mod deleted file mode 100644 index abcf32d..0000000 --- a/Linear_Regression/go.mod +++ /dev/null @@ -1,32 +0,0 @@ -module main.go - -go 1.21.1 - -require ( - gioui.org v0.4.2 // indirect - gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 // indirect - gioui.org/shader v1.0.8 // indirect - gioui.org/x v0.4.0 // indirect - git.sr.ht/~sbinet/gg v0.5.0 // indirect - github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect - github.com/andybalholm/stroke v0.0.0-20230904101225-24ef450bc62c // indirect - github.com/campoy/embedmd v1.0.0 // indirect - github.com/ebitengine/purego v0.5.1 // indirect - github.com/go-fonts/liberation v0.3.2 // indirect - github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea // indirect - github.com/go-pdf/fpdf v0.9.0 // indirect - github.com/go-text/typesetting v0.1.0 // indirect - github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect - github.com/hajimehoshi/ebiten/v2 v2.6.3 // indirect - github.com/jezek/xgb v1.1.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect - golang.org/x/exp/shiny v0.0.0-20240112132812-db7319d0e0e3 // indirect - golang.org/x/image v0.15.0 // indirect - golang.org/x/mobile v0.0.0-20240112133503-c713f31d574b // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/text v0.14.0 // indirect - gonum.org/v1/plot v0.14.0 // indirect - rsc.io/pdf v0.1.1 // indirect -) diff --git a/Linear_Regression/go.sum b/Linear_Regression/go.sum deleted file mode 100644 index 10b8466..0000000 --- a/Linear_Regression/go.sum +++ /dev/null @@ -1,120 +0,0 @@ -gioui.org v0.4.2 h1:txwggR/n2YYAkhnwgTpqk/5h5Fy7SkI20hOrbwlOyGE= -gioui.org v0.4.2/go.mod h1:2atiYR4upH71/6ehnh6XsUELa7JZOrOHHNMDxGBZF0Q= -gioui.org/cpu v0.0.0-20210808092351-bfe733dd3334/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= -gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 h1:tNJdnP5CgM39PRc+KWmBRRYX/zJ+rd5XaYxY5d5veqA= -gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= -gioui.org/shader v1.0.8 h1:6ks0o/A+b0ne7RzEqRZK5f4Gboz2CfG+mVliciy6+qA= -gioui.org/shader v1.0.8/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= -gioui.org/x v0.4.0 h1:H6DofC86KoG51wgzeeA4ujZDDfcIa8vbL+jD9SpF/D8= -gioui.org/x v0.4.0/go.mod h1:YAoFl2lbeARk4LopDXHK1N7fBQJupPYDSm9maf6tFlM= -git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8= -git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= -github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/andybalholm/stroke v0.0.0-20230904101225-24ef450bc62c h1:hHefapU8Zg8roqjYi9V8CNFPD0z6tbDDSqNgBgY1O4U= -github.com/andybalholm/stroke v0.0.0-20230904101225-24ef450bc62c/go.mod h1:ccdDYaY5+gO+cbnQdFxEXqfy0RkoV25H3jLXUDNM3wg= -github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= -github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= -github.com/ebitengine/purego v0.5.0 h1:JrMGKfRIAM4/QVKaesIIT7m/UVjTj5GYhRSQYwfVdpo= -github.com/ebitengine/purego v0.5.0/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= -github.com/ebitengine/purego v0.5.1 h1:hNunhThpOf1vzKl49v6YxIsXLhl92vbBEv1/2Ez3ZrY= -github.com/ebitengine/purego v0.5.1/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= -github.com/go-fonts/liberation v0.3.2 h1:XuwG0vGHFBPRRI8Qwbi5tIvR3cku9LUfZGq/Ar16wlQ= -github.com/go-fonts/liberation v0.3.2/go.mod h1:N0QsDLVUQPy3UYg9XAc3Uh3UDMp2Z7M1o4+X98dXkmI= -github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea h1:DfZQkvEbdmOe+JK2TMtBM+0I9GSdzE2y/L1/AmD8xKc= -github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea/go.mod h1:Y7Vld91/HRbTBm7JwoI7HejdDB0u+e9AUBO9MB7yuZk= -github.com/go-pdf/fpdf v0.9.0 h1:PPvSaUuo1iMi9KkaAn90NuKi+P4gwMedWPHhj8YlJQw= -github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y= -github.com/go-text/typesetting v0.1.0 h1:vioSaLPYcHwPEPLT7gsjCGDCoYSbljxoHJzMnKwVvHw= -github.com/go-text/typesetting v0.1.0/go.mod h1:d22AnmeKq/on0HNv73UFriMKc4Ez6EqZAofLhAzpSzI= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/hajimehoshi/ebiten/v2 v2.6.3 h1:xJ5klESxhflZbPUx3GdIPoITzgPgamsyv8aZCVguXGI= -github.com/hajimehoshi/ebiten/v2 v2.6.3/go.mod h1:TZtorL713an00UW4LyvMeKD8uXWnuIuCPtlH11b0pgI= -github.com/jezek/xgb v1.1.0 h1:wnpxJzP1+rkbGclEkmwpVFQWpuE2PUGNUzP8SbfFobk= -github.com/jezek/xgb v1.1.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= -github.com/jezek/xgb v1.1.1 h1:bE/r8ZZtSv7l9gk6nU0mYx51aXrvnyb44892TwSaqS4= -github.com/jezek/xgb v1.1.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o= -golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= -golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63 h1:3AGKexOYqL+ztdWdkB1bDwXgPBuTS/S8A4WzuTvJ8Cg= -golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0= -golang.org/x/exp/shiny v0.0.0-20240112132812-db7319d0e0e3 h1:NezsOJwoBjJ5AXH5QQCdxe+WsqLw+f/t8eo1Tacfhqs= -golang.org/x/exp/shiny v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:3F+MieQB7dRYLTmnncoFbb1crS5lfQoTfDgQy6K4N0o= -golang.org/x/image v0.12.0 h1:w13vZbU4o5rKOFFR8y7M+c4A5jXDC0uXTdHYRP8X2DQ= -golang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk= -golang.org/x/image v0.15.0 h1:kOELfmgrmJlw4Cdb7g/QGuB3CvDrXbqEIww/pNtNBm8= -golang.org/x/image v0.15.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= -golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57 h1:Q6NT8ckDYNcwmi/bmxe+XbiDMXqMRW1xFBtJ+bIpie4= -golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57/go.mod h1:wEyOn6VvNW7tcf+bW/wBz1sehi2s2BZ4TimyR7qZen4= -golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a h1:sYbmY3FwUWCBTodZL1S3JUuOvaW6kM2o+clDzzDNBWg= -golang.org/x/mobile v0.0.0-20231127183840-76ac6878050a/go.mod h1:Ede7gF0KGoHlj822RtphAHK1jLdrcuRBZg0sF1Q+SPc= -golang.org/x/mobile v0.0.0-20240112133503-c713f31d574b h1:kfWLZgb8iUBHdE9WydD5V5dHIS/F6HjlBZNyJfn2bs4= -golang.org/x/mobile v0.0.0-20240112133503-c713f31d574b/go.mod h1:4efzQnuA1nICq6h4kmZRMGzbPiP06lZvgADUu1VpJCE= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE= -gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/Linear_Regression/linear_regression.png b/Linear_Regression/linear_regression.png deleted file mode 100644 index b2ccbeb1eef8274314b7aed53d81553867496b8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10327 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
      1i7{d^2eyG^ zJpr${WpRcUagOL=LLd?UiS$ciVo+@yI%VB251$`n{`98EOQ|_Wy(Eb0*xR5nwrX4dFc=mx0| zeuVozoD__!?6T8s*S7=kT4Z6QrGGHLcf;VJK%+i0zR49-UW#{gi_EA?YJ+?FQ^fAW z)7MykQzU59-d`=YdnVB>LxFK8FmtgtIC%W?BQBbjioS~5)HtXdB@~^k*{=^iZ@wL` z0_i9vHl;<9a2n(s%1oR;5&La0SvN#A6dr_uLg2k8NJ&5IZWtOF$Tg}>+TQyDd!fa^ zlEe;Z;{6lTZksTv*c|9ccKKpM+u<=tVAu=EyWY)z$r6*S(azIQ6-fasL`kxD#I&-+ zgy@5c3{{=G)R^At9Ju2P_R9}E+k=UVZ$9j~WZQ^#AM|C-gWMiZPe*>2?}9UHnIWC% z-}xDnMI2{_=Ny_u*iUlb(o(mrtWiw{muEgzCVW+2|Ws~0Y z*=x+#{<^K;~q(1^Gu8*?dS(3sfme+oSdBEW=nr< zU0tt}{k7y|T0j#O0yy%W2M_F<{I7!$O9c&dI>Ho_Ouo0qwH8GSq6O$Bd^|i>rly6(#cs#DU}H1Y#2YZar=nU0Id=O_Y^GwO zkSmCVpkoq?9MaO#CiC4!^Nw-*ild^W^nKda@FPe^saaW3QBi|!R{oNyAXdCakx)`r z88rFB+#W;_9qVfditGw36>V)RJw4haZf@=`AUe(QLdyo4G8vmj|Lu&2j}H~OecDzA$Cd3hN)J>}fu=YPq1*DkY;0`D$H(cu-#`fqdz9gS{N78~ z)XJ)VV8D3W>l$no8rfR=t7-U*OiaHfCnuYl-a3X19H1qPh z02b${6%iFx0fO$)>_mVt{1wH^!vn9h9w{{|mX(&4wwH}Dg~!8165yeu zbzT=Bet}pnaR1Yz4B#VS!t0ZDqA7uapnSeuA3Iw7od(bs74>Ir@H*&soSd9Usiwxp z$1xA);D!NpRAfX%%jBCnFR?)5FmSBb=~i=bGh8D{6!r3K&Tw8I8?LaSNilt_s-lvf zmBm07U=|B7-7_#?ZE3k$Sr0G&mGShRNoV}l!GV{n$b_f%@3ApfciW8#VRafOt>f*u z5OtFupus`_8U|Li_Q>Y` zO61VckWKATW^X%OZvjJJ?Di^x*W@BuLmy?lA^rh(6m};rK$waZdF7^}5@D$f;tvY- zeI>EdtTz*`tT1sh^(F|r5B&HcCh}`$3$&<%R-U%DHg(qL>gqA1y*Xin)ILscDkkGz zU7Q_&18vmA?u5cyAr44xz2W8J3Qtl8wbaqpHsoR)ZdbgtwOy<%mb??H>)g}Pv39sM z^Qfy$i-?HG$;pXZ9!3nHhNUQ(nwSjQVdbc_8kZO~m&05E1l{uT^4aa&Ti?#A7r$=Q z&e&J!dY$dH1rMh~R(|)!EgwN@=-%H-1rluY?w6I_aZVsoG|K9dSJO%vVQJj+_d;XzO zp-y%Y@7tMM!AzXeOKTlZ8YDd#3BnW?`S5@4EI3wt43lp|8HTGagMilh`de^AZEd3F zD?|#YxEtSgh?Y!~Ven7;{l|~ntgNgY9I$WSzgdzj9cgJWwm2FZWny9?WOdN{_l0F; zz@1J3(qtLX(KnwF(1N0hjf1l=KTk$Z?p*yw#1xl69D~!6ceJ;+1a2-sZ3T`&IfQ|3 z@MmTQf>}aB0^}G4g`l@@v6dv0E#b{~L05+;`s%z9`6%P=Ux9^1MGsxK>6Vm|E%`Aq z(9d_0E-c3?f5YVn=1*`R31(gqk&&Q*P6tuPV!K}s|M&kHO#DB#XuqIAATBOG(7#_+ Uf3fffE({`Mr4%Id#r1st531Inga7~l diff --git a/Linear_Regression/main.go b/Linear_Regression/main.go deleted file mode 100644 index 5506639..0000000 --- a/Linear_Regression/main.go +++ /dev/null @@ -1,80 +0,0 @@ -package main - -import ( - "fmt" -) - -type Line struct { - k float64 - b float64 -} - -func (l *Line) Training(x, y []float64, learningRate float64, epochs int) { - m := float64(len(x)) - - for epoch := 1; epoch <= epochs; epoch++ { - - // Making calculations - calculations := make([]float64, len(x)) - for i := range x { - calculations[i] = l.calculate(x[i]) - } - - // Calculating errors - errors := make([]float64, len(y)) - for i := range y { - errors[i] = calculations[i] - y[i] - } - - l.k -= learningRate * (1 / m) * twoSliceSum(errors, x) - l.b -= learningRate * (1 / m) * sliceSum(errors) - - loss := average(errors) - fmt.Printf("Epoch %d, Cost: %f\n", epoch, loss) - } -} - -func (l *Line) calculate(x float64) float64 { - return l.k*x + l.b -} - -func twoSliceSum(slice1, slice2 []float64) float64 { - result := 0.0 - for i := range slice1 { - result += slice1[i] * slice2[i] - } - return result -} - -func sliceSum(slice1 []float64) float64 { - result := 0.0 - for i := range slice1 { - result += slice1[i] - } - return result -} - -func average(s []float64) float64 { - return sliceSum(s) / float64(len(s)) -} - -func main() { - // Points - x := []float64{0, -0.5, 0.5, 1, 2.5} - y := []float64{1, 0, 2, 3, 6} - - //Line initialization - lr := Line{} - - // Training - learningRate := 0.01 - epochs := 1000 - - lr.Training(x, y, learningRate, epochs) - - fmt.Printf("Trained Coefficients: Slope=%.2f, Intercept=%.2f\n", lr.k, lr.b) - - newX := 6.0 - regression := lr.calculate(newX) - fmt.Printf("Regression for X=%.2f: %.2f\n", newX, regression) -} From 308c44353bde2c69bc8448832fc7a37d06b7ff14 Mon Sep 17 00:00:00 2001 From: vay4ie Date: Thu, 25 Jan 2024 16:21:04 +0200 Subject: [PATCH 4/5] Recreated linear regression --- app.go | 34 +++++++++++++++ go.mod | 33 +++++++++++++++ go.sum | 101 ++++++++++++++++++++++++++++++++++++++++++++ linearRegression.go | 57 +++++++++++++++++++++++++ main.go | 47 +++++++++++++++++++++ plot.go | 64 ++++++++++++++++++++++++++++ 6 files changed, 336 insertions(+) create mode 100644 app.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 linearRegression.go create mode 100644 main.go create mode 100644 plot.go diff --git a/app.go b/app.go new file mode 100644 index 0000000..894d3df --- /dev/null +++ b/app.go @@ -0,0 +1,34 @@ +package main + +import ( + "github.com/hajimehoshi/ebiten/v2" + "gonum.org/v1/plot" +) + +const ( + sW = 1250 + sH = 720 +) + +type App struct { + width, height int //screen width & height + plot *plot.Plot //global access to plot +} + +func (a *App) Update() error { + return nil +} + +func (a *App) Draw(screen *ebiten.Image) { + if a.plot != nil { //to avoid crash at the start + screen.DrawImage(PlotToImage(a.plot), &ebiten.DrawImageOptions{}) //drawing plot + } +} + +func (a *App) Layout(inWidth, inHeight int) (outWidth, outHeight int) { + return a.width, a.height +} + +func NewApp(width, height int) *App { + return &App{width: width, height: height} +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..113ff28 --- /dev/null +++ b/go.mod @@ -0,0 +1,33 @@ +module main.go + +go 1.21.1 + +require github.com/hajimehoshi/ebiten/v2 v2.6.3 + +require ( + gioui.org v0.2.0 // indirect + gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 // indirect + gioui.org/shader v1.0.6 // indirect + gioui.org/x v0.2.0 // indirect + git.sr.ht/~sbinet/gg v0.5.0 // indirect + github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect + github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0 // indirect + github.com/campoy/embedmd v1.0.0 // indirect + github.com/ebitengine/purego v0.5.0 // indirect + github.com/go-fonts/liberation v0.3.1 // indirect + github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 // indirect + github.com/go-pdf/fpdf v0.8.0 // indirect + github.com/go-text/typesetting v0.0.0-20230905121921-abdbcca6e0eb // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/jezek/xgb v1.1.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b // indirect + golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63 // indirect + golang.org/x/image v0.12.0 // indirect + golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect + gonum.org/v1/plot v0.14.0 // indirect + rsc.io/pdf v0.1.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..064640b --- /dev/null +++ b/go.sum @@ -0,0 +1,101 @@ +gioui.org v0.2.0 h1:RbzDn1h/pCVf/q44ImQSa/J3MIFpY3OWphzT/Tyei+w= +gioui.org v0.2.0/go.mod h1:1H72sKEk/fNFV+l0JNeM2Dt3co3Y4uaQcD+I+/GQ0e4= +gioui.org/cpu v0.0.0-20210808092351-bfe733dd3334/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= +gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 h1:tNJdnP5CgM39PRc+KWmBRRYX/zJ+rd5XaYxY5d5veqA= +gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= +gioui.org/shader v1.0.6 h1:cvZmU+eODFR2545X+/8XucgZdTtEjR3QWW6W65b0q5Y= +gioui.org/shader v1.0.6/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= +gioui.org/x v0.2.0 h1:/MbdjKH19F16auv19UiQxli2n6BYPw7eyh9XBOTgmEw= +gioui.org/x v0.2.0/go.mod h1:rCGN2nZ8ZHqrtseJoQxCMZpt2xrZUrdZ2WuMRLBJmYs= +git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8= +git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0 h1:uF5Q/hWnDU1XZeT6CsrRSxHLroUSEYYO3kgES+yd+So= +github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0/go.mod h1:ccdDYaY5+gO+cbnQdFxEXqfy0RkoV25H3jLXUDNM3wg= +github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= +github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= +github.com/ebitengine/purego v0.5.0 h1:JrMGKfRIAM4/QVKaesIIT7m/UVjTj5GYhRSQYwfVdpo= +github.com/ebitengine/purego v0.5.0/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= +github.com/go-fonts/liberation v0.3.1 h1:9RPT2NhUpxQ7ukUvz3jeUckmN42T9D9TpjtQcqK/ceM= +github.com/go-fonts/liberation v0.3.1/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY= +github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs= +github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM= +github.com/go-pdf/fpdf v0.8.0 h1:IJKpdaagnWUeSkUFUjTcSzTppFxmv8ucGQyNPQWxYOQ= +github.com/go-pdf/fpdf v0.8.0/go.mod h1:gfqhcNwXrsd3XYKte9a7vM3smvU/jB4ZRDrmWSxpfdc= +github.com/go-text/typesetting v0.0.0-20230905121921-abdbcca6e0eb h1:4GpJirtA8yY24aqbU3uppiXGYiVpWfLIrqc2NNKKk9s= +github.com/go-text/typesetting v0.0.0-20230905121921-abdbcca6e0eb/go.mod h1:evDBbvNR/KaVFZ2ZlDSOWWXIUKq0wCOEtzLxRM8SG3k= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/hajimehoshi/ebiten/v2 v2.6.3 h1:xJ5klESxhflZbPUx3GdIPoITzgPgamsyv8aZCVguXGI= +github.com/hajimehoshi/ebiten/v2 v2.6.3/go.mod h1:TZtorL713an00UW4LyvMeKD8uXWnuIuCPtlH11b0pgI= +github.com/jezek/xgb v1.1.0 h1:wnpxJzP1+rkbGclEkmwpVFQWpuE2PUGNUzP8SbfFobk= +github.com/jezek/xgb v1.1.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b h1:r+vk0EmXNmekl0S0BascoeeoHk/L7wmaW2QF90K+kYI= +golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= +golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63 h1:3AGKexOYqL+ztdWdkB1bDwXgPBuTS/S8A4WzuTvJ8Cg= +golang.org/x/exp/shiny v0.0.0-20230817173708-d852ddb80c63/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0= +golang.org/x/image v0.12.0 h1:w13vZbU4o5rKOFFR8y7M+c4A5jXDC0uXTdHYRP8X2DQ= +golang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk= +golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57 h1:Q6NT8ckDYNcwmi/bmxe+XbiDMXqMRW1xFBtJ+bIpie4= +golang.org/x/mobile v0.0.0-20230922142353-e2f452493d57/go.mod h1:wEyOn6VvNW7tcf+bW/wBz1sehi2s2BZ4TimyR7qZen4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE= +gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/linearRegression.go b/linearRegression.go new file mode 100644 index 0000000..c985142 --- /dev/null +++ b/linearRegression.go @@ -0,0 +1,57 @@ +package main + +import ( + "fmt" + "time" +) + +const ( + lrK = 0.0001 + lrB = 0.0001 + epochs = 10 +) + +//####################################################################### + +func loss(k, b float64, px, py []float64) float64 { + totalE := 0.0 // error + for i := range px { + x := px[i] + y := py[i] + totalE += (y - (k*x + b)) * 2 + } + totalE /= float64(len(px)) + + return totalE +} + +func inference(x, k, b float64) float64 { + return k*x + b +} + +func gradientDescent(k, b float64, px, py []float64) (float64, float64) { + dk, db := 0.0, 0.0 // gradients for coefficients + n := float64(len(px)) + for i := range px { + x := px[i] + y := py[i] + dk -= (2 / n) * (y - (k*x + b)) * x + db -= (2 / n) * (y - (k*x + b)) + } + k -= dk * lrK + b -= db * lrB + return k, b +} + +func (a *App) linearRegression(px, py []float64) (k, b float64) { + for epoch := 1; epoch <= epochs; epoch++ { + k, b = gradientDescent(k, b, px, py) + a.updatePlot(k, b, px, py) + fmt.Println("Epoch:", epoch, "Loss:", loss(k, b, px, py)) + time.Sleep(time.Second) + } + + return k, b +} + +//####################################################################### diff --git a/main.go b/main.go new file mode 100644 index 0000000..6952152 --- /dev/null +++ b/main.go @@ -0,0 +1,47 @@ +package main + +import ( + "log" + "math/rand" + + "github.com/hajimehoshi/ebiten/v2" +) + +const ( + numberOfPoints = 20 + pointMin, pointMax = 30, 70 //point distribution + lineMin, lineMax = 0, 100 //line lenght +) + +func main() { + + //####################### Linear Regression ######################### + + //Generating random points + px := make([]float64, numberOfPoints) + py := make([]float64, numberOfPoints) + for i := 0; i < numberOfPoints; i++ { + px[i] = (rand.Float64()*(pointMax-pointMin) + pointMin) + py[i] = (rand.Float64()*(pointMax-pointMin) + pointMin) + } + + //####################### Ebiten #################################### + + //Window + ebiten.SetWindowSize(sW, sH) + ebiten.SetWindowTitle("Linear Regression") + + //App instance + a := NewApp(sW, sH) + + // + go func() { + a.linearRegression(px, py) + }() + + //Running game + if err := ebiten.RunGame(a); err != nil { + log.Fatal(err) + } + +} diff --git a/plot.go b/plot.go new file mode 100644 index 0000000..1f99b98 --- /dev/null +++ b/plot.go @@ -0,0 +1,64 @@ +package main + +import ( + "image" + + "github.com/hajimehoshi/ebiten/v2" + "gonum.org/v1/plot" + "gonum.org/v1/plot/plotter" + "gonum.org/v1/plot/vg/draw" + "gonum.org/v1/plot/vg/vgimg" +) + +// Converting plot to ebiten.Image +func PlotToImage(p *plot.Plot) *ebiten.Image { + + img := image.NewRGBA(image.Rect(0, 0, sW, sH)) //creating image.RGBA to store the plot + + c := vgimg.NewWith(vgimg.UseImage(img)) //creating plot drawer for the image + + p.Draw(draw.New(c)) //drawing plot on the image + + return ebiten.NewImageFromImage(c.Image()) //converting image.RGBA to ebiten.Image (doing in Draw) + ///Black screen issue: was giving "img" instead of "c.Image()" in the function. +} + +// recreating plot with given data +func (a *App) updatePlot(k, b float64, px, py []float64) { + + p := plot.New() //initializing plot + + //################################################## + + //Line + + linePoints := plotter.XYs{ + {X: lineMin, Y: inference(lineMin, k, b)}, + {X: lineMax, Y: inference(lineMax, k, b)}, + } + + line, _ := plotter.NewLine(linePoints) //creating line + + p.Add(line) //adding line to the plot° + + //################################################## + + //Points + + var points plotter.XYs //initializing point plotter + + for i := 0; i < len(px); i++ { + points = append(points, plotter.XY{X: px[i], Y: py[i]}) //Saving all points in plotter + } + + scatter, _ := plotter.NewScatter(points) //creating new scatter from point data + + p.Add(scatter) //adding points to plot + + //################################################## + + //App + + a.plot = p //replacing old plot with new one + +} From d966cd93928efcd2e7370ffa871cf65e21c2431e Mon Sep 17 00:00:00 2001 From: vay4ie Date: Thu, 25 Jan 2024 16:35:45 +0200 Subject: [PATCH 5/5] Played with learning rate --- linearRegression.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/linearRegression.go b/linearRegression.go index c985142..815973e 100644 --- a/linearRegression.go +++ b/linearRegression.go @@ -6,9 +6,9 @@ import ( ) const ( + lrB = 0.1 lrK = 0.0001 - lrB = 0.0001 - epochs = 10 + epochs = 1000 ) //####################################################################### @@ -29,7 +29,7 @@ func inference(x, k, b float64) float64 { return k*x + b } -func gradientDescent(k, b float64, px, py []float64) (float64, float64) { +func gradientDescent(k, b float64, px, py []float64, epoch int) (float64, float64) { dk, db := 0.0, 0.0 // gradients for coefficients n := float64(len(px)) for i := range px { @@ -40,15 +40,20 @@ func gradientDescent(k, b float64, px, py []float64) (float64, float64) { } k -= dk * lrK b -= db * lrB + if epoch%100 == 0 { + fmt.Println("dk:", dk, "db:", db, "\n") + } return k, b } func (a *App) linearRegression(px, py []float64) (k, b float64) { for epoch := 1; epoch <= epochs; epoch++ { - k, b = gradientDescent(k, b, px, py) + if epoch%100 == 0 { + fmt.Println("Epoch:", epoch, "Loss:", loss(k, b, px, py)) + } + k, b = gradientDescent(k, b, px, py, epoch) a.updatePlot(k, b, px, py) - fmt.Println("Epoch:", epoch, "Loss:", loss(k, b, px, py)) - time.Sleep(time.Second) + time.Sleep(time.Millisecond) } return k, b