선형 회귀: 기계 학습의 기초
La 선형 회귀 머신러닝의 가장 간단하고 기본적인 알고리즘입니다. 감독. 그 목표는 하나 이상의 독립 변수 사이의 선형 관계를 찾는 것입니다 (특성) 및 연속 종속 변수(대상)입니다. 단순함에도 불구하고 도구입니다. 매우 강력하며 훨씬 더 복잡한 알고리즘이 구축되는 기반을 나타냅니다.
수학적으로 단순 선형 회귀는 다음과 같은 관계를 모델링합니다. y = wx + b, 어디 w 무게(기울기) e는 b 편향(절편)입니다. 여러 기능의 경우 다음으로 확장됩니다. y = w1*x1 + w2*x2 + ... + wn*xn + b. 알고리즘은 다음의 값을 검색합니다. w e b 그 예측과 실제 값 사이의 오류를 최소화합니다.
이 기사에서 배울 내용
- 선형 회귀의 작동 방식과 수학적 공식화
- 최소제곱법(Least Squares)
- 분류 문제에 대한 로지스틱 회귀
- 경사하강법: 알고리즘 학습 방법
- scikit-learn을 사용하여 Python으로 완벽하게 구현
- 회귀 및 분류에 대한 평가 측정항목
비용 함수: 측정 오류
최적의 매개변수를 찾으려면 모델이 얼마나 많은지 측정하는 함수가 필요합니다. 틀렸어: 비용 함수 (또는 손실 함수). 선형 회귀의 경우 비용 함수 표준은 평균 제곱 오차(MSE), 이는 제곱의 평균을 계산합니다. 예측값과 실제값의 차이.
MSE는 제곱으로 인해 큰 오류에 더 많은 페널티를 적용합니다. 10개의 가중치 오류 오류 1보다 100배 더 큽니다. 이로 인해 모델이 이상값에 민감해집니다. 다음과 같은 대안 는 평균 절대 오차(MAE) 이상값에 대해서는 더 강력하지만 수학적으로는 덜 부드럽습니다.
import numpy as np
# Dataset semplice: area casa (m2) -> prezzo (migliaia euro)
X = np.array([50, 70, 80, 100, 120, 150])
y = np.array([150, 200, 220, 280, 330, 400])
# Calcolo parametri con metodo dei minimi quadrati (OLS)
n = len(X)
x_mean = np.mean(X)
y_mean = np.mean(y)
# w = sum((xi - x_mean)(yi - y_mean)) / sum((xi - x_mean)^2)
numerator = np.sum((X - x_mean) * (y - y_mean))
denominator = np.sum((X - x_mean) ** 2)
w = numerator / denominator
b = y_mean - w * x_mean
print(f"Peso (w): {w:.2f}") # ~2.5 (ogni m2 vale ~2500 euro)
print(f"Bias (b): {b:.2f}") # intercetta
# Predizione per una casa di 90 m2
prezzo_90 = w * 90 + b
print(f"Prezzo stimato per 90m2: {prezzo_90:.0f}k euro")
# Calcolo MSE
predictions = w * X + b
mse = np.mean((y - predictions) ** 2)
print(f"MSE: {mse:.2f}")
경사하강법: 알고리즘 학습 방법
Il 경사하강법 ML에서 가장 중요한 최적화 알고리즘입니다. 방정식을 분석적으로(최소 제곱법과 같이) 해결하는 대신 경사하강법은 다음을 찾습니다. 최적의 매개변수를 반복적으로 계산하여 비용 함수를 가장 많이 줄이는 방향으로 이동합니다.
이는 다음과 같이 작동합니다. 무작위 매개변수에서 시작하여 기울기(편도함수)를 계산합니다. 각 매개변수에 대한 비용 함수), 매개변수는 기울기의 반대 방향으로 업데이트됩니다. 그만큼 학습률 각 단계의 크기를 확인하세요. 너무 크면 알고리즘이 흔들립니다. 수렴하지 않고 너무 작고 수렴이 매우 느립니다.
import numpy as np
def gradient_descent(X, y, learning_rate=0.0001, epochs=1000):
"""Gradient descent per regressione lineare."""
w = 0.0 # peso iniziale
b = 0.0 # bias iniziale
n = len(X)
for epoch in range(epochs):
# Predizioni attuali
y_pred = w * X + b
# Calcolo gradienti (derivate parziali della MSE)
dw = (-2/n) * np.sum(X * (y - y_pred))
db = (-2/n) * np.sum(y - y_pred)
# Aggiornamento parametri
w -= learning_rate * dw
b -= learning_rate * db
if epoch % 200 == 0:
mse = np.mean((y - y_pred) ** 2)
print(f"Epoch {epoch}: MSE={mse:.2f}, w={w:.4f}, b={b:.4f}")
return w, b
# Uso
X = np.array([50, 70, 80, 100, 120, 150], dtype=float)
y = np.array([150, 200, 220, 280, 330, 400], dtype=float)
w_opt, b_opt = gradient_descent(X, y)
print(f"\nParametri ottimali: w={w_opt:.4f}, b={b_opt:.4f}")
로지스틱 회귀: 회귀에서 분류까지
이름에도 불구하고, 로지스틱 회귀 그것은 알고리즘이다 분류. 함수를 사용하여 선형 회귀 출력을 0과 1 사이의 확률로 변환합니다. 시그모이드: σ(z) = 1 / (1 + e^(-z)). 확률이 임계값을 초과하는 경우 (일반적으로 0.5), 샘플은 양성으로 분류되고 그렇지 않으면 음성으로 분류됩니다.
로지스틱 회귀의 비용 함수는 다음과 같습니다. 이진 교차 엔트로피 (또는 로그 손실), 이는 자신감이 있지만 잘못된 예측에 불이익을 줍니다. 여기서도 최적화를 위해 경사하강법이 사용됩니다. 매개변수. 로지스틱 회귀는 놀라울 정도로 효과적이며 기준선으로 사용됩니다. 많은 분류 문제에서
from sklearn.linear_model import LogisticRegression, LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import (
accuracy_score, precision_score, recall_score,
mean_squared_error, mean_absolute_error, r2_score
)
from sklearn.datasets import load_breast_cancer
import numpy as np
# --- CLASSIFICAZIONE con Regressione Logistica ---
data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Training
log_reg = LogisticRegression(max_iter=10000, random_state=42)
log_reg.fit(X_train, y_train)
# Valutazione
y_pred = log_reg.predict(X_test)
print("=== Regressione Logistica (Classificazione) ===")
print(f"Accuracy: {accuracy_score(y_test, y_pred):.3f}")
print(f"Precision: {precision_score(y_test, y_pred):.3f}")
print(f"Recall: {recall_score(y_test, y_pred):.3f}")
# Probabilità' di classe
probabilities = log_reg.predict_proba(X_test)[:5]
print(f"\nPrime 5 probabilità':\n{probabilities}")
# --- REGRESSIONE con Regressione Lineare ---
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
X_h, y_h = housing.data, housing.target
X_train_h, X_test_h, y_train_h, y_test_h = train_test_split(
X_h, y_h, test_size=0.2, random_state=42
)
lin_reg = LinearRegression()
lin_reg.fit(X_train_h, y_train_h)
y_pred_h = lin_reg.predict(X_test_h)
print("\n=== Regressione Lineare ===")
print(f"MSE: {mean_squared_error(y_test_h, y_pred_h):.3f}")
print(f"MAE: {mean_absolute_error(y_test_h, y_pred_h):.3f}")
print(f"R2: {r2_score(y_test_h, y_pred_h):.3f}")
결정 경계의 시각화
Il 결정 경계 특징 공간에서 클래스를 구분하는 경계입니다. 두 가지 특성을 갖는 로지스틱 회귀의 경우 직선입니다. 이를 시각화하면 어떻게 되는지 이해하는 데 도움이 됩니다. 모델은 결정을 내리고 실수를 합니다. 두 개 이상의 특징이 있으면 경계는 다음과 같습니다. 다차원 공간의 초평면이지만 개념은 동일하게 유지됩니다.
선형 회귀와 로지스틱 회귀: 선형 회귀는 연속 값을 예측합니다. (가격, 온도, 판매). 로지스틱 회귀는 클래스 멤버십 확률을 예측합니다. 잘못된 맥락에서 사용하는 것은 ML 초보자가 저지르는 가장 흔한 실수 중 하나입니다.
평가 지표
회귀를 위해 다음을 사용합니다. MSE (평균 제곱 오차), MAE (평균 절대 오차), RMSE (루트 MSE) e R² (계수 모델에 의해 설명되는 분산의 비율을 나타내는 결정).
분류의 경우: 정확성 (올바른 예측의 비율), 정도 (예측된 긍정 중 몇 개가 올바른지) 상기하다 (진짜 양성이 발견된 수) e F1-점수 (고조파 평균 정밀도와 재현율). 시리즈의 전용 기사에서 각 지표에 대해 더 자세히 살펴보겠습니다.
핵심 사항
- 선형 회귀는 MSE를 최소화하여 관계 y = wx + b를 찾습니다.
- 경사 하강법은 음의 경사 방향으로 매개변수를 반복적으로 최적화합니다.
- 학습률은 수렴 속도를 제어합니다. 너무 크거나 너무 작으면 문제가 발생합니다.
- 로지스틱 회귀는 시그모이드를 사용하여 선형 회귀를 분류로 변환합니다.
- 회귀 분석의 경우 MSE/MAE/R², 분류의 경우 정확도/정밀도/재현율/F1
- 이 두 가지 알고리즘은 더욱 발전된 기술이 구축되는 기반이 됩니다.







