[ML] Logistic Regression (๋ก์ง์คํฑ ํ๊ท)
์ด๋ฒ์ Logistic Regression (๋ก์ง์คํฑ ํ๊ท)์ ๋ฐํ์ฌ ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
Logistic Regression (๋ก์ง์คํฑ ํ๊ท)
๋ก์ง์คํฑ ํ๊ท(Logistic Regression)๋ ์ฃผ๋ก ์ด์ง ๋ถ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํต๊ณ์ ๋ชจ๋ธ์ ๋๋ค.
์ ๋ ฅ๋ ๋ ๋ฆฝ ๋ณ์๋ค์ ์ ํ ๊ฒฐํฉ์ ํตํด ์ข ์ ๋ณ์(์ด์ง ๋ณ์)์ ๋ฐ์ ํ๋ฅ ์ ์์ธกํฉ๋๋ค.
๋ก์ง์คํฑ ํ๊ท์ ์ฃผ์ ํน์ง
- ๋ถ๋ฅ ์๊ณ ๋ฆฌ์ฆ: ์ด์ง ๋ถ๋ฅ ๋ฌธ์ ๋ฅผ ์ฃผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ๋ค์ค ํด๋์ค ๋ถ๋ฅ ๋ฌธ์ ์์๋ ํ์ฅํ ์ ์์ต๋๋ค.
- ํ๋ฅ ์ถ๋ ฅ: ์์ธก ๊ฒฐ๊ณผ๋ฅผ 0๊ณผ 1 ์ฌ์ด์ ํ๋ฅ ๊ฐ์ผ๋ก ์ถ๋ ฅํฉ๋๋ค.
- ์ ํ ํ๊ท์์ ์ฐจ์ด์ : ์ ํ ํ๊ท๋ ์ฐ์์ ์ธ ๊ฐ์ ์์ธกํ์ง๋ง, ๋ก์ง์คํฑ ํ๊ท๋ ์ด์ง ๊ฐ์ ์์ธกํฉ๋๋ค.
๋ก์ง์คํฑ ํ๊ท์ ๊ธฐ๋ณธ ์๋ฆฌ
๊ทธ๋ฌ๋ฉด, Logistic Regression (๋ก์ง์คํฑ ํ๊ท)์ ๊ธฐ๋ณธ ์๋ฆฌ๋ ๋ฌด์์ด ์์๊น์? ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
1. ์ ํ ๋ชจ๋ธ
๋ก์ง์คํฑ ํ๊ท๋ ์ ๋ ฅ ๋ณ์ (X)์ ๊ฐ์ค์น (W)์ ์ ํ ๊ฒฐํฉ์ ํตํด ์์ธก ๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ์ด ์ ํ ๊ฒฐํฉ์ ์๋์ ์์๊ณผ ๊ฐ์ด ํํ๋ฉ๋๋ค.
์ฌ๊ธฐ์ (b)๋ ํธํฅ(bias)์ ๋๋ค. ์ด (z) ๊ฐ์ ๋ก์ง์คํฑ ํจ์์ ์ ๋ ฅ๋์ด ํ๋ฅ ๋ก ๋ณํ๋ฉ๋๋ค.
2. ๋ก์ง์คํฑ ํจ์ (์๊ทธ๋ชจ์ด๋ ํจ์)
์ ํ ๊ฒฐํฉ์ ๊ฒฐ๊ณผ (z)๋ฅผ ๋ก์ง์คํฑ ํจ์์ ์ ์ฉํ์ฌ 0๊ณผ 1 ์ฌ์ด์ ํ๋ฅ ๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ๋ก์ง์คํฑ ํจ์๋ ์๋์ ์์๊ณผ ๊ฐ์ด ์ ์๋ฉ๋๋ค.
์ด ํจ์๋ ์ ๋ ฅ ๊ฐ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ถ๋ ฅ์ด 0์์ 1๋ก ๋ถ๋๋ฝ๊ฒ ๋ณํํ๋ S์ ํํ์ ๊ณก์ ์ ๊ฐ์ง๋๋ค.
3. Decision Border (๊ฒฐ์ ๊ฒฝ๊ณ)
์ถ๋ ฅ ํ๋ฅ ์ด 0.5๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฅํฉ๋๋ค. ์ฆ, ์ถ๋ ฅ ํ๋ฅ ์ด 0.5 ์ด์์ด๋ฉด ์์ฑ ํด๋์ค(1)๋ก, 0.5 ๋ฏธ๋ง์ด๋ฉด ์์ฑ ํด๋์ค(0)๋ก ๋ถ๋ฅํฉ๋๋ค.
์ด ๊ฒฐ์ ๊ฒฝ๊ณ๋ ์ ํ์ ์ผ๋ก ์ค์ ๋์ง๋ง, ๋ฐ์ดํฐ์ ํน์ฑ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์กฐ์ ๋ ์ ์์ต๋๋ค.
๋ก์ง์คํฑ ํ๊ท์ ์ฅ์ , ๋จ์
๋ก์ง์คํฑ ํ๊ท์ ์ฅ์
- ํด์ ์ฉ์ด์ฑ: ๋ก์ง์คํฑ ํ๊ท์ ์ถ๋ ฅ์ด ํ๋ฅ ์ด๊ธฐ ๋๋ฌธ์, ๊ฒฐ๊ณผ๋ฅผ ํด์ํ๋ ๊ฒ์ด ์ฉ์ดํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํน์ ์ ๋ ฅ์ ๋ํด 0.8์ ํ๋ฅ ๋ก ์์ฑ ํด๋์ค์ ์ํ๋ค๊ณ ํด์ํ ์ ์์ต๋๋ค.
- ํจ์จ์ฑ: ๊ณ์ฐ ๋น์ฉ์ด ๋ฎ๊ณ , ๋๋์ ๋ฐ์ดํฐ์ ์์๋ ๋น ๋ฅด๊ฒ ํ์ตํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๋ ์ ๋ฆฌํฉ๋๋ค.
๋ก์ง์คํฑ ํ๊ท์ ๋จ์
- ์ ํ ๊ฒฐ์ ๊ฒฝ๊ณ: ๋ก์ง์คํฑ ํ๊ท๋ ์ ๋ ฅ ๋ณ์์ ์ข ์ ๋ณ์ ๊ฐ์ ๊ด๊ณ๊ฐ ์ ํ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ๋น์ ํ ๋ฐ์ดํฐ์์๋ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋คํญ ํ๊ท๋ ์ปค๋ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํ์ํ ์ ์์ต๋๋ค.
- ์ด์ง ๋ถ๋ฅ ์ ํ: ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก์ง์คํฑ ํ๊ท๋ ์ด์ง ๋ถ๋ฅ์ ์ ํฉํฉ๋๋ค. ๋ค์ค ํด๋์ค ๋ถ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์ํํธ๋งฅ์ค ํ๊ท์ ๊ฐ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํ์ฅํ ์ ์์ต๋๋ค. ๋ค์ค ํด๋์ค ๋ก์ง์คํฑ ํ๊ท๋ ๊ฐ ํด๋์ค์ ๋ํด ๋ณ๋์ ๋ก์ง์คํฑ ํจ์๋ฅผ ํ์ตํ์ฌ ๋ค์ค ํด๋์ค๋ฅผ ๋์์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ก์ง์คํฑ ํ๊ท์ ํ์ฉ
๋ก์ง์คํฑ ํ๊ท๋ ์๋ฃ ์ง๋จ, ๋ง์ผํ ๋ถ์, ์ ์ฉ ์ ์ ์์ธก ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ํ์ฉ๋ฉ๋๋ค.
์ด ๋ชจ๋ธ์ ๊ฐ๋จํ๋ฉด์๋ ํจ๊ณผ์ ์ธ ์์ธก ์ฑ๋ฅ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์, ๋ง์ ๋ฐ์ดํฐ ๊ณผํ์์ ๋ถ์๊ฐ๋ค์ด ์ ํธํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ก์ง์คํฑ ํ๊ท Example Code
๊ทธ๋ฌ๋ฉด, ๋ก์ง์คํฑ ํ๊ท (Logistic Regression)๋ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๋ ๊ฑธ๊น์? ํ๋ฒ ์์ ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, ConfusionMatrixDisplay
import matplotlib.pyplot as plt
# ์ ๋ฐฉ์ ๋ฐ์ดํฐ์
๋ก๋
cancer = load_breast_cancer()
X, y = cancer.data, cancer.target
# ๋ฐ์ดํฐ์
์ ํ์ต ์ธํธ์ ํ
์คํธ ์ธํธ๋ก ๋ถํ
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# ๋ฐ์ดํฐ ํ์คํ
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# ๋ก์ง์คํฑ ํ๊ท ๋ชจ๋ธ ํ์ต
log_reg = LogisticRegression(max_iter=10000)
log_reg.fit(X_train, y_train)
# ์์ธก ๋ฐ ํ๊ฐ
y_pred = log_reg.predict(X_test)
print(classification_report(y_test, y_pred))
precision recall f1-score support
0 0.98 0.95 0.96 43
1 0.97 0.99 0.98 71
accuracy 0.97 114
macro avg 0.97 0.97 0.97 114
weighted avg 0.97 0.97 0.97 114
# ํผ๋ ํ๋ ฌ ์๊ฐํ
ConfusionMatrixDisplay.from_estimator(log_reg, X_test, y_test)
plt.title("Logistic Regression Confusion Matrix")
plt.show()