선형 모델: 회귀와 분류
선형 회귀 및 로지스틱 회귀 모델을 학습시킵니다.
선형 모델: 회귀와 분류은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
선형 회귀
LinearRegression은 최소제곱 오차를 최소화하여 직선(또는 초평면)을 적합합니다.
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
X, y = make_regression(n_samples=200, n_features=5, noise=10, random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LinearRegression().fit(X_tr, y_tr)
print("RMSE:", mean_squared_error(y_te, model.predict(X_te))**0.5)모델 계수
적합한 후 coef_(특성 가중치)와 intercept_를 확인합니다.
from sklearn.linear_model import LinearRegression
import numpy as np
X = np.array([[1],[2],[3]])
y = np.array([2, 4, 6])
model = LinearRegression().fit(X, y)
print("Coef:", model.coef_) # [2.]
print("Intercept:", model.intercept_) # ~0Ridge 및 Lasso 회귀
Ridge(L2)와 Lasso(L1)는 과적합을 방지하기 위해 정규화를 추가합니다. alpha는 정규화 강도를 조절합니다.
from sklearn.linear_model import Ridge, Lasso
from sklearn.datasets import make_regression
X, y = make_regression(n_features=20, noise=15, random_state=0)
ridge = Ridge(alpha=1.0).fit(X, y)
lasso = Lasso(alpha=0.1).fit(X, y)
print("Ridge coef[:5]:", ridge.coef_[:5])
print("Lasso coef[:5]:", lasso.coef_[:5]) # some are 0 (sparse)로지스틱 회귀
LogisticRegression은 이진 또는 다중 클래스 문제를 위한 선형 분류기입니다. 이름과 달리 클래스 확률을 예측합니다.
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = LogisticRegression().fit(X_tr, y_tr)
print("Accuracy:", accuracy_score(y_te, model.predict(X_te)))다중 클래스 로지스틱 회귀
multi_class="multinomial"로 설정하거나, 3개 이상의 클래스에는 기본 일대다 방식을 사용합니다.
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
model = LogisticRegression(max_iter=200).fit(X, y)
print("Classes:", model.classes_) # [0 1 2]
print("Accuracy:", model.score(X, y))선형 모델의 특성 스케일링
선형 모델에서는 항상 특성을 스케일링해야 하며, 특히 정규화를 사용할 때 더욱 중요합니다. 스케일링하지 않은 특성은 정규화 페널티를 서로 크게 다르게 보이게 합니다.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
pipe = Pipeline([
("scale", StandardScaler()),
("clf", LogisticRegression())
])
pipe.fit(X_tr, y_tr)
print(pipe.score(X_te, y_te))학습 곡선
학습 곡선은 학습 데이터가 많아질수록 모델 성능이 어떻게 향상되는지 보여 줍니다. 과소적합과 과적합을 진단하는 데 유용합니다.
from sklearn.model_selection import learning_curve
import numpy as np
train_sizes, train_scores, val_scores = learning_curve(
LogisticRegression(), X, y, cv=5,
train_sizes=np.linspace(0.1, 1.0, 5)
)
print("Val mean:", val_scores.mean(axis=1))회귀의 R² 점수
r2_score는 설명되는 분산의 비율을 측정합니다. 1.0은 완벽한 값이고, 0은 모델이 평균을 예측하는 것보다 나을 것이 없다는 뜻입니다.
from sklearn.metrics import r2_score
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
X, y = make_regression(noise=20, random_state=0)
model = LinearRegression().fit(X, y)
print("R²:", r2_score(y, model.predict(X)))다항 특성
PolynomialFeatures를 사용하면 선형 모델로 비선형 관계를 적합할 수 있습니다.
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LinearRegression
import numpy as np
X = np.array([[1],[2],[3],[4],[5]])
y = np.array([1, 4, 9, 16, 25]) # y = x^2
pipe = Pipeline([
("poly", PolynomialFeatures(degree=2)),
("lr", LinearRegression())
])
pipe.fit(X, y)
print(pipe.predict([[6]])) # ~36SGDClassifier 및 SGDRegressor
확률적 경사 하강법은 표준 해법이 너무 느린 매우 큰 데이터셋에도 확장할 수 있습니다.
from sklearn.linear_model import SGDClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=100_000, random_state=0)
pipe = Pipeline([("sc", StandardScaler()), ("sgd", SGDClassifier())])
pipe.fit(X, y)
print(pipe.score(X, y))정규화 경로
RidgeCV/LassoCV를 사용하여 alpha를 격자 범위에서 변화시키면, 교차 검증을 통해 최적의 alpha를 자동으로 선택합니다.
from sklearn.linear_model import RidgeCV, LassoCV
from sklearn.datasets import make_regression
X, y = make_regression(n_features=20, noise=10, random_state=0)
ridge = RidgeCV(alphas=[0.1, 1, 10]).fit(X, y)
print("Best alpha:", ridge.alpha_)빠른 확인
Ridge 회귀와 Lasso 회귀의 핵심적인 차이점은 무엇입니까?
복습
회귀에는 LinearRegression을, 분류에는 LogisticRegression을 사용합니다. 정규화가 필요하면 Ridge/Lasso를 추가합니다. 특성은 항상 스케일링해야 합니다. 비선형 문제에는 PolynomialFeatures를 사용합니다. 회귀는 r2_score로, 분류는 accuracy_score로 평가합니다.
자주 묻는 질문
“선형 모델: 회귀와 분류” 강의는 무료인가요?
네 — “선형 모델: 회귀와 분류” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“선형 모델: 회귀와 분류”에서 뭘 배우나요?
선형 회귀 및 로지스틱 회귀 모델을 학습시킵니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“선형 모델: 회귀와 분류” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.