π¬ 'νλ'λ ν¬λ μ΄μ νμ΄μ€ν¬λ¦½νΈ λμ κΈ°μ μ€μλ§μ λλ€.
μ§λ κ²μκΈμμ μ°μ¬λλ κΈμ
λλ€.
https://itadventure.tistory.com/558
νλ(16) - νμ΄μ€ν¬λ¦½νΈμ νΉμ’μ~μ μΌλ‘ λ¨Έμ λ¬λ!
π³ 'νλ'λ ν¬λ μ΄κ° λμ νκ³ μλ νμ΄μ€ν¬λ¦½νΈ λμ κΈ°μ μ€μλ§μ λλ€. μ§λ κ²μκΈμμ μ°μ¬λλ κΈμ λλ€. : https://itadventure.tistory.com/557 νλ!(15) - λΌμνκ·μ 4μ°¨λ°©μ μκΉμ§ πΏ 'νλ'λ
itadventure.tistory.com
μ§λ κ²μκΈμμλ μΉλΈλΌμ°μ μμ μκ³ λ¦¬μ¦ μ’
λ₯μ μνκ°μ μ νμμμ μλ μ΅μ
μ μ ννμ¬
κ²°κ³Ό κ·Έλνλ₯Ό λμΆνλ λΆλΆμ μ΄ν΄λ³΄μλλ°μ.
νμ΄μ€ν¬λ¦½νΈμ μλ°μ€ν¬λ¦½νΈ, μΉν΄μ§ μ μμκΉμ?
μ΄λ² μκ°μλ, ν΄λΉ λͺ¨λμ λΆλ¬μ μ¬μ©νλ λ°©λ²μ λν΄ μμ보λλ‘ νκ² μ΅λλ€.
λλμ΄ νμ΄μ€ν¬λ¦½νΈμ μλ°μ€ν¬λ¦½νΈμ μ½λΌλ³΄~, νλ ₯νμ¬ μνΈ μμ©νλ λΆλΆμ μμλμ΅λλ€.
μ§λ μκ°μ μ€λͺ
λλ Έλ€μνΌ νμ΄μ€ν¬λ¦½νΈλ μΉλΈλΌμ°μ λ΄λΆμ μΌλ‘ νμ΄μ¬μ μλνκ³ μλλ°μ.
μ΄ νμ΄μ¬μ μΉ μ΄μ
λΈλ¦¬ λ°©μλΌλ κΈ°μ λ‘ μλνκΈ° λλ¬Έμ μΌλ°μ μΌλ‘ μλ°μ€ν¬λ¦½νΈ λ°©λ²μΌλ‘λ μ κ·ΌνκΈ° μ΄λ ΅μ΅λλ€.
κ·Έλ λ€λ©΄ λ°©λ²μ΄ μμκΉμ? λ¬Όλ‘ ~ μμ§μ. μλλΌλ©΄ μ΄ κΈμ μΈ μ΄μ μ‘°μ°¨ μκ² μ§μ? :)
λλ¨ν μ΄λ €μ΄ κ²λ μλλλ€. νμ΄μ€ν¬λ¦½νΈμ λ°©λ²μ΄ μ΄λ―Έ λ§λ ¨λμ΄ μκΈ° λλ¬Έμ΄μ§μ.
μλ°μ€ν¬λ¦½νΈμ νμ΄μ¬μ΄ μ½κ² λ§λκΈ° μν΄μλ λ€μ 2κ°μ λͺ¨λμ΄ νμν©λλ€.
from js import document
from pyodide import create_proxy
첫λ²μ§Έ λνλ¨ΌνΈ λͺ¨λ
첫λ²μ§Έ, document λ μΉνμ΄μ§μ λ¬Έμλ₯Ό κ΄λ¦¬νλλ°μ. λ(DOM)μ΄λΌκ³ λ λΆλ¦½λλ€.
μΉνμ΄μ§μ λ€μκ³Ό κ°μ΄ μμ΄λ(id)κ° 'algorithm'μ΄λΌλ μ νμμκ° μλ€λ©΄,
<select id="algorithm">
<option value="">μκ³ λ¦¬μ¦μ μ ννμΈμ</option>
<option value="λ¦Ώμ§">λ¦Ώμ§ νκ· (Ridge Regression)</option>
<option value="λΌμ">λΌμ νκ· (Lasso Regression)</option>
</select><br/>
νμ΄μ€ν¬λ¦½νΈμμ μ΄ μ νμμμ κ°μ μμλ΄κΈ° μν΄μλ μλ μμ±μ νμΈνλ©΄ λ©λλ€.
λ¬Όλ‘ document λͺ¨λμ κ²½μ°ν΄μ νμΈνλ κ²μ΄μ§μ.
document.getElementById("algorithm").value
κΈ°λ³Έμ μΌλ‘ document λͺ¨λμ μ μΈνμ§ μμλ μ¬μ© κ°λ₯ν©λλ€λ§,
νμ¬ νμ΄μ€ν¬λ¦½νΈκ° μνλ²μ μ΄κ³ μΆν λ²μ μ΄ λ°λλ©΄ κ°μκΈ° μλ μ μμ΄
κΈ°λ³Έμ μΌλ‘ μ μΈνκ³ λ€μ΄κ°λ κ±Έλ‘ νκ² μ΅λλ€.
λλ²μ§Έ, νλ‘μ λͺ¨λ
λλ²μ§Έ λͺ¨λμ create_proxy λͺ¨λμ
λλ€.
'proxy' λ μμ΄μ¬μ μμ μμκΆ, λλ¦¬μΈ λ±μ λ»μ μ°Ύμλ³Ό μ μλλ°μ.
μ¬κΈ°μλ μΉλΈλΌμ°μ μμ λ°μνλ μλ°μ€ν¬λ¦½νΈ μ΄λ²€νΈλ₯Ό νμ΄μ€ν¬λ¦½νΈλ‘ μ°κ²°ν΄μ£Όλ κ²μ μλ―Έν©λλ€.
κ·Έλμ λ³΄ν΅ μ νμμμμ 무μΈκ°λ₯Ό μ νν κ²½μ° μλμ κ°μ μλ°μ€ν¬λ¦½νΈ μ΄λ²€νΈκ° λ°μμ΄ λλλ°μ. ( λΉ¨κ°μ )
<select id="algorithm" onchange="μ΄λ²€νΈν¨μ()">
μμ μλ°μ€ν¬λ¦½νΈλ μ΄κ²λ³΄λ€λ μ½κ° κ³ μ€~κΈμ€λ° λ°©λ²μ μλλ€.
λ³΄ν΅ μλμ κ°μ΄ μ¬μ©νμ§μ.
let e1 = document.getElementById('algorithm');
e1.addEventListener('change', function(event){
: // μλν μλ°μ€ν¬λ¦½νΈ μμ€
});
νμ΄μ€ν¬λ¦½νΈλ μλμ κ°μ΄ μ¬μ©ν©λλ€. λ§€μ° λΉμ·νμ§μ? :)
e1 = document.getElementById("algorithm")
e1.addEventListener("change", create_proxy(μ΄λ²€νΈν¨μ))
μ΄ λ μ΄λ²€νΈ ν¨μλ μλ°μ€ν¬λ¦½νΈκ° μλ νμ΄μ¬ ν¨μμ΄μ΄μΌ νꡬμ.
μλμ κ°μ ννλ‘ ν¨μλ₯Ό μ μΈν΄μ£Όλ©΄ λ©λλ€.
λ€μ νλΌλ―Έν° (event)κ° λ°λΌ λΆμ΄μΌ νλ€λ μ λ§ μ§μΌμ£Όλ©΄ λμ§μ.
def μ΄λ²€νΈν¨μ(event):
: # μλν μ½λ
μ λ΄μ©μ μ΄λκΉμ§λ <pyscript> νκ·Έ μμμμ λ°©λ²μ΄κ³ create_proxy λͺ¨λμ ν΅ν΄ μ¬μ©ν μ μμ΅λλ€.
μ€μ μ μ©
μ΄μ 2κ°μ λͺ¨λμ μ¬μ©λ²μ μμμΌλ μ€μ μ μ©κ³Όμ μ μμλ³ΌκΉμ?
μ νμμλ 2κ°λ₯Ό μ¬μ©ν ν λ°μ.
κ°κ° μκ³ λ¦¬μ¦ μ’
λ₯λ₯Ό μ ννλ μ ν μμμ, μκ³ λ¦¬μ¦μ κ³Όμ ν©μ λ°©μ§ν μνκ°μ μ ννλ μ ν μμμ
λλ€.
μ΄ μ νμμκ° μ νλ λλ§λ€ λ¨Έμ λ¬λμΌλ‘ λ°μ΄ν°λ₯Ό λ€μ νλ ¨νκ³ , κ·Έλνλ λ€μ 그리λλ‘ ν ν
λ°μ.
κ°κ°μ idκ°μ "algorithm", "alpha_value"μ λλ€. HTML μμ€λ μλμ κ°κ΅¬μ.
μκ³ λ¦¬μ¦ μ ν :
<select id="algorithm">
<option value="">μκ³ λ¦¬μ¦μ μ ννμΈμ</option>
<option value="λ¦Ώμ§">λ¦Ώμ§ νκ· (Ridge Regression)</option>
<option value="λΌμ">λΌμ νκ· (Lasso Regression)</option>
</select><br/>
μνκ° μ ν :
<select id="alpha_value">
<option value="0.001">0.001</option>
<option value="0.01">0.01</option>
<option value="0.1">0.1</option>
<option value="1">1</option>
<option value="10">10</option>
<option value="100">100</option>
</select><br/>
κ·Έλ¦¬κ³ μ΄ μ νμμλ₯Ό μ νν λλ§λ€ 'κ·Έλνν¨μ'λ₯Ό νΈμΆνλλ‘ νμ΄μ€ν¬λ¦½νΈλ₯Ό ꡬμ±ν©λλ€.
# μλ°μ€ν¬λ¦½νΈμ ν΅μ
from js import document
from pyodide import create_proxy
e1 = document.getElementById("algorithm")
e1.addEventListener("change", create_proxy(κ·Έλνν¨μ))
e2 = document.getElementById("alpha_value")
e2.addEventListener("change", create_proxy(κ·Έλνν¨μ))
μ΄μ κ·Έλνν¨μλ₯Ό ꡬννλ©΄ λλλ°μ.
κ·Έλνν¨μ λ΄ csv νμΌμ λΆλ¬μ€λ λΆλΆλΆν° μμν΄μ λͺ¨λ μμ€λ₯Ό λ€ λ£μ΄λ λ©λλ€λ§,
μ¬κΈ°μλ νλ²λ§ μ€νν΄λ λλ λΆλΆμ 미리 μ€νν΄λ²λ¦¬κ³ ,
κ·Έλνν¨μμμλ λ³κ²½λκ±°λ νμλ‘ μλν΄μΌ νλ λΆλΆλ§ μ€ννλλ‘ νκ² μ΅λλ€.
κΈ°λ³Έμ μΌλ‘ csv νμΌμ λΆλ¬μ λ°μ΄ν°λ₯Ό κ°κ³΅νλ λΆλΆμ λ¦Ώμ§λͺ¨λΈμ΄λ λΌμλͺ¨λΈμ΄λ λκ°μ΅λλ€. κ·Έλ¦¬κ³ κ·Έλν λͺ¨λμ λΆλ¬μ νκΈ ν°νΈλ₯Ό μ μ©νλ λΆλΆλ λμΌνκΈ° λκΈ° λλ¬Έμ,
ν΄λΉ λΆλΆμ μ νμμμ 무κ΄νκ² 1λ²λ§ μνν©λλ€.
<py-script>
import pandas as pd
from pyodide.http import open_url
from common import *
import numpy as np
from datetime import datetime
:
:
:
# κ°λ³ ν°νΈ μ μ©
NanumMyengjo = fm.FontProperties(
fname='./NANUMMYEONGJO.TTF'
)
NanumMyengjoBold = fm.FontProperties(
fname='./NANUMMYEONGJOBOLD.TTF'
)
μ΄μ μ νμμλ₯Ό μ νν λ μλν 'κ·Έλνν¨μ'λ₯Ό μ μΈν©λλ€.
def κ·Έλνν¨μ(event):
κ·Έλ¦¬κ³ μ νν μκ³ λ¦¬μ¦μ΄ 무μμΈμ§, μνκ°μ΄ μΌλ§μΈμ§λ₯Ό λ°μμ€λλ°μ.
μ΄ λλ document λͺ¨λμ μ¬μ©ν©λλ€.
μκ³ λ¦¬μ¦ = document.getElementById("algorithm").value
μνκ° = float(document.getElementById("alpha_value").value)
μ νλ μκ³ λ¦¬μ¦μ λ°λΌ κ°κΈ° λ€λ₯Έ μ²λ¦¬λ₯Ό νλλ‘ νκ² μ΅λλ€.
λ¦Ώμ§μ λΌμμ λν μ²λ¦¬λ₯Ό λλμ΄ μνν ν
λ°μ.
if μκ³ λ¦¬μ¦=='λ¦Ώμ§':
: # λ¦Ώμ§ μκ³ λ¦¬μ¦μΌ λ μ²λ¦¬ν μ½λ
else:
: # κ·Έ μΈ μκ³ λ¦¬μ¦μΌ γ
μ²λ¦¬ν μ½
λ¦Ώμ§ μκ³ λ¦¬μ¦μΌ λλ λ¦Ώμ§ λͺ¨λΈμ μ μν΄ νλ ¨μ νκ³ ,
if μκ³ λ¦¬μ¦=='λ¦Ώμ§':
#=====================================
# λ¦Ώμ§λͺ¨λΈ
λ¦Ώμ§λͺ¨λΈ = Ridge(alpha=μνκ°)
λ¦Ώμ§λͺ¨λΈ.fit(νλ ¨μ©λ°μ΄ν°_κ°κ³΅, νλ ¨μ©λͺ©ν)
νλ ¨μ μ=λ¦Ώμ§λͺ¨λΈ.score(νλ ¨μ©λ°μ΄ν°_κ°κ³΅, νλ ¨μ©λͺ©ν)
ν
μ€νΈμ μ=λ¦Ώμ§λͺ¨λΈ.score(ν
μ€νΈλ°μ΄ν°_κ°κ³΅, ν
μ€νΈλͺ©ν)
:
νλ ¨μ©λͺ©νμμΈ‘ = λ¦Ώμ§λͺ¨λΈ.predict(νλ ¨μ©λ°μ΄ν°_κ°κ³΅)
ν
μ€νΈλͺ©νμμΈ‘ = λ¦Ώμ§λͺ¨λΈ.predict(ν
μ€νΈλ°μ΄ν°_κ°κ³΅)
λΌμ μκ³ λ¦¬μ¦μΌ λλ λΌμ λͺ¨λΈμ μ μν΄μ νλ ¨μ νλλ°μ.
else:
#=====================================
# λΌμλͺ¨λΈ
λΌμλͺ¨λΈ = Lasso(alpha=μνκ°)
λΌμλͺ¨λΈ.fit(νλ ¨μ©λ°μ΄ν°_κ°κ³΅, νλ ¨μ©λͺ©ν)
νλ ¨μ μ=λΌμλͺ¨λΈ.score(νλ ¨μ©λ°μ΄ν°_κ°κ³΅, νλ ¨μ©λͺ©ν)
ν
μ€νΈμ μ=λΌμλͺ¨λΈ.score(ν
μ€νΈλ°μ΄ν°_κ°κ³΅, ν
μ€νΈλͺ©ν)
:
νλ ¨μ©λͺ©νμμΈ‘ = λΌμλͺ¨λΈ.predict(νλ ¨μ©λ°μ΄ν°_κ°κ³΅)
ν
μ€νΈλͺ©νμμΈ‘ = λΌμλͺ¨λΈ.predict(ν
μ€νΈλ°μ΄ν°_κ°κ³΅)
νλ ¨ μ μμ ν
μ€νΈ μ μλ₯Ό νννκΈ° μν΄ print() ν¨μλ₯Ό μ°λ λμ ,
ν΄λΉ μμλ€μ νμν HTML νκ·Έλ₯Ό 미리 μ€λΉν΄λλ©΄,
νλ ¨μ μ : <span id="train_score" style=''></span><br/>
ν
μ€νΈμ μ : <span id="test_score" style=''></span><br/>
μλμ²λΌ document λͺ¨λμ ν΅ν΄ λ΄μ©μ μ§μ κ°±μ ν μ μμ΅λλ€.
κ·Έλ¬λ©΄ μ μκ° 2, 3λ² νλ©΄μ νμλ μΌλ μμ΅λλ€.
if μκ³ λ¦¬μ¦=='λ¦Ώμ§':
:
document.getElementById("train_score").innerHTML=νλ ¨μ μ
document.getElementById("test_score").innerHTML=ν
μ€νΈμ μ
:
else:
:
document.getElementById("train_score").innerHTML=νλ ¨μ μ
document.getElementById("test_score").innerHTML=ν
μ€νΈμ μ
:
κ·Έλνλ₯Ό 그리λ μμΉ λν μ μν μ μλλ°μ.
μμ μ¬μ μ HTML νκ·Έλ₯Ό λ§λ ¨ν΄ λκ³ ,
<div id="graph"></div>
κ·Έλνλ₯Ό 그리λ λΆλΆμ μλμ κ°μ΄ λ³κ²½ν΄μ£Όλ©΄ λ©λλ€.
κ·Έλ¬λ©΄ κ·Έλν λν 2, 3λ² νμλ μΌμ΄ μμ΅λλ€.
<λ³κ²½μ >
fig
<λ³κ²½ν>
pyscript.write("graph",fig)
μμ λ‘μ΄ UI μ μ©
κ·Έλ¦¬κ³ HTML μ css μ€νμΌ μνΈλ₯Ό μ νμ©νμ€ μ μλ€λ©΄
μλμ²λΌ μ°μΈ‘ μλ¨μ κ·Έλνλ₯Ό νμνλ λ±μ λ°©λ²μΌλ‘ μμ λ‘κ² νλ©΄μ ꡬμ±νμ€ μ μμ΅λλ€.
μ΅μ’
μμ€μλ μμ§λ§ μλ νκ·Έλ₯Ό <body> μλ λ£μ΄μ£Όμλ©΄
κ·Έλνκ° μ°μΈ‘ μλ¨μ λ± κ³ μ λμ΄ νμλ©λλ€.
<style>
#graph {
position:fixed;
right:20px;
top:20px;
border:1px solid;
width:1000px;
height:500px;
}
</style>
μ°Έκ³ λ‘ μ΄ κΈμ μ΅μ’
μμ€λ μ§λ κ²μκΈμ μ°Έμ‘°ν΄ μ£ΌμΈμ.
https://itadventure.tistory.com/558
λ§λ¬΄~리
μ΄μμΌλ‘ νμ΄μ€ν¬λ¦½νΈμμ μ보카λλ‘ λ¨Έμ λ¬λνλ λ°©λ²μ λν΄ μ΄ν΄λ³΄μλλ°μ.
μ΄λ²μκ°μλ νΉν νμ΄μ€ν¬λ¦½νΈμ μλ°μ€ν¬λ¦½νΈκ° μ°λνλ λΆλΆμ λν΄ μ΄ν΄λ³΄μμ΅λλ€.
μ무μͺΌλ‘ νμνμ λΆκ» λμμ΄ λμ
¨μμ§μ :)
λ°©λ¬Έν΄μ£Όμλ λͺ¨λ λΆλ€κ» λ κ°μ¬λ립λλ€.
μ μ΅νμ
¨λ€λ©΄ κ³΅κ° νλ°©, λκΈμ κ΅Ώμ‘!
κ°μ¬ν©λλ€~
λ€μ κ²μκΈ : https://itadventure.tistory.com/560
νλ(18) - λλ€κ³ μμ΄ μ΄λ―Έμ§ λΆλ¬μ€κΈ°
β» 'νλ'λ ν¬λ μ΄μ 'νμ΄μ€ν¬λ¦½νΈ λμ κΈ°'μ μ€μλ§μ λλ€. μ§λ κ²μκΈμμ μ°μ¬λλ κΈμ λλ€. : https://itadventure.tistory.com/559 νλ(17) - μλ°μ€ν¬λ¦½νΈμ νμ΄μ€ν¬λ¦½νΈ, μμ‘λ€! π¬ 'νλ'λ
itadventure.tistory.com
'μ½λ©κ³Ό μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νλ(19) - νμ΄μ€ν¬λ¦½νΈ λμμ μ¬μ! κ·Όλ° λ λλ €μ γ .. (0) | 2022.09.05 |
---|---|
νλ(18) - λλ€κ³ μμ΄ μ΄λ―Έμ§ λΆλ¬μ€κΈ° (8) | 2022.08.29 |
νλ(16) - νμ΄μ€ν¬λ¦½νΈμ νΉμ’μ~μ μΌλ‘ λ¨Έμ λ¬λ! (9) | 2022.08.19 |
νμ΄μ¬3 - κΈ°μ΄μμ½ (PDF 3νμ΄μ§) (6) | 2022.08.15 |
νλ!(13) - μ? μΈκ³΅μ§λ₯ μ μ€μ¨μ΄?! - νκ· κ°κ²© μΆκ° (4) | 2022.08.08 |