3-1. 값을 예측하고 싶어? 회귀!
☑️ 1. 회귀 분석 개요
✔️ 회귀 분석? 종속변수(Y) - 하나 이상의 독립변수(X) 간 관계 추정, 연속형 종속변수를 예측하는 통계/머신러닝 기법
✔️ 지도학습
- 회귀 결과값 연속형 (숫자 값)
- 분류 결과값 이산형 (클래스 라벨)
✔️ 사용하는 이유
- 미래 값 예측 판매량, 주가, 온도 등 실수값 예측에 사용
- 인과 관계 해석(통계 관점) 특정 독립변수가 종속변수에 미치는 영향 해석
- 데이터 기반 의사결정 추세(trend) 파악, 자원배분 등
✔️ 희귀모델 대표적 활용 사례
- 경제 주식 가격 예측, 판매량 예측
- 건강 혈압, 콜레스테롤 수치 예측
- 제조업
불량률, 생산량 예측 (ex. 온도, 습도, 기계 속도 등의 데이터 이용)
생산 설비에 부착된 센서(온도, 진동, 소음 등)에서 수집된 데이터 바탕으로 장비 고장 시점을 사전에 예측
☑️ 2. 회귀 모델 평가 방법 ⭐ 중요
MSE Mean Squared Error |
RMSE Root Mean Squared Error |
MAE Mean Absolute Error |
R² 결정계수 |
|
|
|
|
☑️ 3. 선형 회귀 ( Linear Regression )
✔️ 개념
가정 독립변수(X)와 종속변수(Y)가 선형적(=일차 방정식 형태)로 관계 맺고 있다
장점 해석 간단, 쉬운 구현
단점 데이터가 선형이 아닐 경우 예측력 down
✔️ 회귀식 ( 일차 방정식 )
β0: 절편(intercept)
βi: 각 독립변수의 회귀계수(coefficient) = 가중치
✔️ 예시
데이터 | 모델 |
X=공부 시간(시간), Y=시험 점수 ex) (1시간, 40점), (2시간, 50점), (3시간, 60점), (4시간, 70점)... |
Y^ = 30 + 10 * X 1시간 공부 → 40점, 2시간 공부 → 50점, ... |
⭐ 선형 회귀 모델 학습 과정
1️⃣ 가중치 (회귀계수) 초기화
2️⃣ 손실함수 (Loss Function) 설정 주로 MSE(Mean Sqaured Error) 사용
3️⃣ 최적화 가중치 업데이트
- 최소자승법 수학적인 방법
- 경사하강법 Gradient Descent (SGDRegressor)
4️⃣ 학습 완료 후 β0,β1,…를 얻어서 새로운 입력 값에 대한 예측 수행
⭐ 선형 회귀 코드 (들어가기 전에)
데이터 로드
load_diabetes() 당뇨병 예측용 데이터셋 로드
X 특성(독립변수)들 - 대문자
y 타겟(종속변수) - 소문자
학습/테스트 데이터 분리
train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 )
test_size = 0.2 80%는 학습용, 20%는 테스트용
random_state=42 고정하면 재현 가능성을 높일 수 있음
LinearRegression 모델 학습 및 예측
.fit() 메서드로 학습
.predict() 테스트 세트에 대한 예측 수행
mean_squared_error / r2_score로 예측 성능을 평가
SGDRegressor 모델 학습 및 예측
확률적 경사하강법 기반의 SGDRegressor 모델
max_iter=1000, tol=1e-3 등의 파라미터는 데이터와 상황에 따라 조정 가능
mean_squared_error / r2_score로 예측 성능을 평가
⭐ 선형 회귀 코드 (선형회귀 모델)
import numpy as np
import pandas as pd
from sklearn.datasets import load_diabetes
from sklearn.liner_model import LinearRegression, SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squarred_error, r2_score
--------------------
★ 1. 데이터 로드
--------------------
diabetes = load_diabetes()
X = diabetes.data ★ X 대문자
y = diabetes.target ★ y 소문자
print(X.shape) 출력 (442, 10)
print(y.shape) 출력 (442,)
--------------------
★ 2. 학습/테스트 데이터 분리
--------------------
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
print(X_train.shape) 출력 (353, 10)
print(X_test.shape) 출력 (353,)
print(y_train.shape) 출력 (89, 10)
print(y_test.shape) 출력 (89,)
--------------------
★ 3. 선형회귀 LinearRegression 모델
--------------------
lin_reg = LinearRegression() 객체생성
lin_reg.fit(X_train, y_train)
출력 LinearRegression 파랑색네모칸
--------------------
★ 4. 예측
--------------------
y_pred_lin = lin_reg.predict(X_test) 객체에 predict함수
--------------------
★ 5. 성능 측정 MSE, r2_score
--------------------
mse_lin = mean_squared_error(y_test, y_pred_lin)
r2_lin = r2_score(y_test, y_pred_lin)
--------------------
★ 6. 평균 비율 오차
--------------------
def MPE(y_true, y_pred):
return np.mean((y_true - y_pred) / y_true) * 100
--------------------
★ 7. 결과 확인 및 해석 : 아래 사진 및 본문
--------------------
print("[LinearRegression 결과]")
print("가중치(coefficient):", lin_reg.coef_) 가중치 .coef_ 언더바
print("절편(intercept):", lin_reg.intercept_) 절편 .intercept_ 언더바
print("MSE:", mse_lin) MSE
print("R2 점수:", r2_lin) r2_lin
print("평균 비율 오차 : ", MPE(y_test, y_pred_lin)) MPE (함수 직접 정의)
💡 선형 회귀 코드 (선형회귀 모델) - 해석
✔️ 가중치 : 각 숫자는 입력 변수(특성) 별로 예측값에 미치는 영향력을 나타냄
- - - 양수 : 해당 변수 증가 = 예측값 증가 / 음수 : 반대
- - - 예) s5 (736.20), s3 (-931.49) 등은 절대값이 크므로 당뇨병 진행 예측에 중요한 역할을 함
✔️ 절편 151.35
- - - 모든 입력 변수가 0일 때 모델이 예측하는 기본값
✔️ MSE (Mean Squared Error, 평균 제곱 오차) 2900.19
- - - 예측값과 실제값 차이(오차)의 제곱 평균
- - - 값 작을수록 모델 예측이 실제값에 가까움 = 여러 모델의 MSE를 비교해 더 작은 값이 더 좋은 성능을 의미
✔️ R² 점수 (설명력) 0.45
- - - 의미 : 모델이 전체 데이터 변동성의 약 45%를 설명
- - - 1에 가까울수록 설명력 높음, 0이면 예측력 없음
✔️ MPE (평균 비율 오차) -12.89
- - - 의미 : 예측값이 실제값보다 평균적으로 약 12.9% 낮게 나옴
- - - 음수 : 다소 낮게 예측하는 경향 있음
⭐ 선형 회귀 코드 (SGDRegressor 모델)
import numpy as np
import pandas as pd
from sklearn.datasets import load_diabetes
from sklearn.liner_model import LinearRegression, SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squarred_error, r2_score
--------------------
★ 1. 데이터 로드
--------------------
diabetes = load_diabetes()
X = diabetes.data ★ X 대문자
y = diabetes.target ★ y 소문자
print(X.shape) 출력 (442, 10)
print(y.shape) 출력 (442,)
--------------------
★ 2. 학습/테스트 데이터 분리
--------------------
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
print(X_train.shape) 출력 (353, 10)
print(X_test.shape) 출력 (353,)
print(y_train.shape) 출력 (89, 10)
print(y_test.shape) 출력 (89,)
--------------------
★ 3. SGDRegressor 모델
--------------------
sgd_reg = SGDRegressor(max_iter = 6000, tol = 1e-3, random_state = 42)
sgd_reg.fit(X_train, y_train)
결과 SGDRegressor 파랑색 창
--------------------
★ 4. 예측
--------------------
y_pred_sgd = sgd_reg.predict(X_test)
--------------------
★ 5. 성능 측정 MSE, r2_score
--------------------
mse_sgd = mean_squared_error(y_test, y_pred_sgd)
r2_sgd = r2_score(y_test, y_pred_sgd)
--------------------
★ 6. 평균 비율 오차
--------------------
def MPE(y_true, y_pred):
return np.mean((y_true - y_pred) / y_true) * 100
--------------------
★ 7. 결과 출력 및 해석
--------------------
print("[SGDRegressor 결과]")
print("가중치(coefficient):", sgd_reg.coef_) 가중치.coef_
print("절편(intercept):", sgd_reg.intercept_) 절편 .intercept_
print("MSE:", mse_sgd) MSE
print("R2 점수:", r2_sgd) r2_score
print("평균 비율 오차 : ", MPE(y_test, y_pred_sgd)) MPE (함수 직접 정의)
💡 선형 회귀 코드 (SGDRegressor 모델) - 해석
✔️ 가중치 : 각 숫자는 입력 변수(특성) 별로 예측값에 미치는 영향력을 나타냄
- - - 양수 : 해당 변수 증가 = 예측값(당뇨병 진행도) 증가 / 음수 : 반대
- - - 예) 'bmi', 'bp', 's5', 's6' 등은 양의 계수로 예측값을 높이고, 'sex', 's2', 's3' 등은 음의 계수로 예측값을 낮춥
✔️ 절편 151.51
- - - 모든 입력 변수가 0일 때 모델이 예측하는 기본값
✔️ MSE (Mean Squared Error, 평균 제곱 오차) 2863.81
- - - 예측값과 실제값 차이(오차)의 제곱 평균
- - - 값 작을수록 모델 예측이 실제값에 가까움 = 여러 모델의 MSE를 비교해 더 작은 값이 더 좋은 성능을 의미
✔️ R² 점수 (설명력) 0.45
- - - 의미 : 모델이 전체 데이터 변동성의 약 45%를 설명
- - - 1에 가까울수록 설명력 높음, 0이면 예측력 없음
✔️ MPE (평균 비율 오차) -14.91
- - - 의미 : 예측값이 실제값보다 평균적으로 약 14.9% 낮게 나옴
- - - 음수 : 다소 낮게 예측하는 경향 있음
☑️ 4. 다항 회귀 ( Polynomial Regression )
✔️ 개념
비선형적인 관계를 다항식(polynomial) 형태로 모델링
✔️ 회귀식 ( 고차항 )
β0: 절편(intercept)
βi: 각 독립변수의 회귀계수(coefficient) = 가중치
단순 선형항(X)뿐만 아니라 X^2, X^3,... 같은 고차항을 추가해 비선형 패턴 학습 가능
✔️ 예시
제조 공정 온도와 반응률 관계가 곡선 형태인 경우
건강 데이터에서 나이와 특정 지표(근육량 등)이 단순 선형보다 곡선 형태로 나타나는 경우
✔️ 주의
과적합 (overfitting) 고차항을 무작정 늘리면 훈련 데이터 과도하게 맞춰짐 = 일반화가 잘 되지 않는 상황 발생 - feat) '앙상블' 참고
따라서 모델 복잡도와 일반화 성능 간 균형 중요
⭐ 다항 회귀 코드 (들어가기 전에)
데이터 생성 (make_friedman1)
n_samples=1000 1000개 샘플 / n_features=5 5개 특성 생성 / noise=1.0 타겟 값에 약간의 랜덤 잡음 추가
학습/테스트 데이터 분리
train_test_split 70% 데이터로 학습, 30% 데이터로 테스트
random_state=42 매번 코드를 실행해도 같은 결과가 재현되도록 함
단순 선형회귀 모델 학습 및 예측
비선형성을 고려하지 않고 LinearRegression만 적용했을 때의 성능을 MSE, R^2, MPE로 측장
다항회귀 (Polynomial Regression)
PolynomialFeatures(degree=2) 2차 항까지 고려, 다시 선형회귀를 적용하는 파이프라인을 구성
비선형 패턴을 어느 정도 학습할 수 있으므로, 단순 선형회귀보다 더 좋은 성능이 기대(물론 과적합 위험도 존재)
결과 비교
MSE, R^2 등을 비교하여 단순 선형회귀 대비 다항회귀가 Friedman1 데이터셋에서 어떤 차이를 보이는지 확인
만약 더 높은 차수(예: 3차, 4차)를 적용하거나, 다른 비선형 모델(예: 랜덤 포레스트, SVM 회귀 등)을 사용하면 성능이 달라질 수 있음
⭐ 다항 회귀 코드
import numpy as np
import pandas as pd
from sklearn.datasets import make_friedman1
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
from sklearn.liner_model import LinearRegression
from sklearn.metrics import mean_squarred_error, r2_score
from sklearn.pipeline import Pipeline
--------------------
★ 1. 비선형 데이터 생성 (make_friedman1)
n_samples 샘플 개수
n_features 특성 개수
noise 잡음 크기
--------------------
X, y = make_friedman1(n_samples = 1000, n_features = 5, noise = 1.0, random_state = 42)
print(X.shape) 출력 (1000, 5)
print(y.shape) 출력 (1000)
--------------------
★ 2. 학습/테스트 데이터 분리
--------------------
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)
print(X_train.shape) 출력 (700, 5)
print(y_train.shape) 출력 (700,)
print(X_test.shape) 출력 (300, 5)
print(y_test.shape) 출력 (300,)
--------------------
★ 3. 단순 선형회귀 모델 (비교용)
--------------------
lin_reg = LinearRegression()
lin_reg = fit(X_train, y_train)
y_pred_lin = lin_reg.predict(X_test)
mse_lin = mean_squared_error(y_test, y_pred_lin)
r2_lin = r2_score(y_test, y_pred_lin)
def MPE(y_true, y_pred):
return np.mean((y_true - y_pred) / y_true) * 100
print("[단순 선형회귀 결과]")
print("MSE:", mse_lin) 결과 MSE: 5.730...
print("R2:", r2_lin) 결과 R2 : 0.770...
print("평균 비율 오차 : ", MPE(y_test, y_pred_lin)) 결과 평균 비율 오차 : -1.672...
--------------------
★ 4. Polynomial Regression (찐)
--------------------
☆ 모델
poly_model = Pipeline([
("poly", PolynomialFeatures(degree = 2, niclude_bias = False)),
("lin_reg", LinearRegression())
])
☆ 훈련 및 예측
poly_model.fit(X_train, y_train)
y_pred_poly = poly_model.predict(X_test)
☆ 성능 측정
mse_poly = mean_squared_error(y_test, y_pred_poly)
r2_poly = r2_score(y_test, y_pred_poly)
☆ 평균 비율 오차
def MPE(y_true, y_pred):
return np.mean((y_true - y_pred) / y_true) * 100
☆ 결과 확인
print("[다항회귀(2차) 결과]")
print("MSE:", mse_poly) 결과 MSE: 2.553...
print("R2:", r2_poly) 결과 R2 : 0.897...
print("평균 비율 오차 : ", MPE(y_test, y_pred_poly)) 평균 비율 오차 : -1.688...
💡 다항 회귀 코드 - 해석
단순 선형회귀 | 다항회귀 |
MSE: 5.730 평균 제곱 오차(Mean Squared Error) 예측값과 실제값의 차이의 제곱 평균 값이 낮을수록 예측이 실제값에 가깝다는 뜻 R2: 0.770 결정계수(R²) 모델이 데이터의 변동성 중 약 77%를 설명 1에 가까울수록 설명력 좋음 평균 비율 오차: -1.672 예측값이 실제값보다 평균적으로 약 1.67% 낮게 나왔다는 뜻 음수, 예측이 실제보다 다소 낮게 나오는 경향이 있음을 의미 |
MSE: 2.554 단순 선형회귀보다 MSE가 크게 감소 모델이 데이터의 비선형적 특성을 더 잘 포착, 예측 정확도 높아짐 R2: 0.898 결정계수가 0.898로, 약 89.8%의 변동성을 설명 단순 선형회귀보다 설명력이 크게 향상 1에 가까울수록 설명력 좋음 평균 비율 오차: -1.689 예측값이 실제값보다 평균적으로 약 1.69% 낮게 나옴 단순 선형회귀와 비슷한 수준의 편향을 보이지만, 오차 자체는 더 작아짐! |
다항회귀(2차)는 단순 선형회귀보다 비선형적 데이터 구조를 더 잘 반영 예측 오차(MSE)가 크게 감소 설명력(R²)이 크게 증가 평균 비율 오차는 두 모델 모두 음수로, 예측값이 실제값보다 약간 낮게 나오는 경향 |
☑️ 5. 고급 회귀 기법 - Lasso & Ridge Regression
선형 회귀에 규제(Regularization) 항을 추가 = 과적합 방지
Lasso 라쏘 회귀 | Ridge 릿지 회귀 |
패널티 = 가중치 절댓값합(L1 Norm)을 페널티로 추가 효과: 가중치를 0으로 만들어 변수 선택 효과 (Feature Selection) 효과 |
패널티 = 가중치 제곱합(L2 Norm)을 페널티로 추가 효과: 가중치가 너무 커지지 않도록 방지 (가중치 값을 부드럽게 줄임) |
⭐ 릿지회귀 & 라쏘회귀 코드 (들어가기 전에)
데이터 로드
fetch_california_housing() 캘리포니아 주택 가격 예측용 데이터
X는 특성 행렬(8개 특성), y는 주택 가격(타겟)
학습/테스트 데이터 분리
train_test_split 전체 데이터의 80% 학습용, 20% 테스트용으로 분리
random_state=42로 고정하여 재현 가능성 높임
Ridge 회귀 L2 규제항을 포함하는 Ridge 모델
alpha가 클수록 규제 강도가 세어져, 모델 가중치(계수)들의 크기를 더욱 제약
학습 후, 예측 결과에 대해 MSE와 R^2 점수를 계산
Lasso 회귀 L1 규제항을 사용하는 Lasso 모델입니다.
alpha가 클수록 일부 가중치가 정확히 0으로 수렴(특성 선택 효과)
마찬가지로 MSE, R^2를 통해 성능 평가
⭐ 릿지회귀 & 라쏘회귀 코드
import numpy as np
import pandas as pd
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.liner_model import Ridge, Lasso
from sklearn.metrics import mean_squarred_error, r2_score
--------------------
★ 1. 데이터 로드
--------------------
housing = fetch_california_housing()
X = housing.data
y = housing.target
print(X.shape) 출력 (20640, 8)
print(y.shape) 출력 (20640,)
--------------------
★ 2. 학습/테스트 데이터 분리
--------------------
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
print(X_train.shape) 출력 (16512, 8)
print(y_train.shape) 출력 (16512,)
print(X_test.shape) 출력 (4128, 8)
print(y_test.shape) 출력 (4128,)
--------------------
★ 3. Ridge 회귀
alpha = 1.0 (규제 세기) 조절 가능
--------------------
ridge_reg = Ridge(alpha = 1.0, random_state = 42)
ridge_reg.fit(X_train, y_train)
☆ 예측
y_pred_ridge = ridge_reg.predict(X_test)
☆ 성능 평가
mse_ridge = mean_squared_error(y_test, y_pred_ridge)
r2_ridge = r2_score(y_test, y_pred_ridge)
☆ 평균 비율 오차
def MPE(y_true, y_pred):
return np.mean((y_true - y_pred) / y_true) * 100
☆ 결과 출력 및 확인
print("[Ridge 회귀 결과]")
print(" 가중치(coefficient):", ridge_reg.coef_)
print(" 절편(intercept):", ridge_reg.intercept_)
print(" MSE:", mse_ridge)
print(" R^2 점수:", r2_ridge)
print("평균 비율 오차 : ", MPE(y_test, y_pred_ridge))
print()
--------------------
★ 4. Lasso 회귀
alpha = 0.1 정도로 조금 낮춰 볼 수 있음(기본값 = 1.0)
alpha가 너무 크면 가중치가 0이 되어 과소적합 위험
--------------------
lasso_reg = Lasso(alpha = 0.1, random_state = 42, max_iter = 10000)
lasso_reg.fit(X_train, y_train)
☆ 예측
y_pred_lasso = lasso_reg.predict(X_test)
☆ 성능 평가
mse_lasso = mean_squared_error(y_test, y_pred_lasso)
r2_lasso = r2_score(y_test, y_pred_lasso)
☆ 평균 비율 오차
def MPE(y_true, y_pred):
return np.mean((y_true - y_pred) / y_true) * 100
☆ 결과 출력 및 확인
print("[Lasso 회귀 결과]")
print(" 가중치(coefficient):", lasso_reg.coef_)
print(" 절편(intercept):", lasso_reg.intercept_)
print(" MSE:", mse_lasso)
print(" R^2 점수:", r2_lasso)
print("평균 비율 오차 : ", MPE(y_test, y_pred_lasso))
✔️ alpha는 위 릿지/라소 회귀식의 람다 역할 (규제하는 덩어리 앞 가중치임)
✔️ Lasso 에 0값들 나옴 = 해당 변수들은 예측에 도움이 전혀 안 된다는 것
☑️ 6. 실습 문제
아래의 당뇨병 X, y 데이터를 가지고 릿지와 라쏘 회귀를 진행하고 라쏘 회귀를 진행할 때 가중치가 0이 나오는 변수가 있다면 그 변수는 어떤 변수인지 이름을 쓰시오
- 이미 데이터 전처리가 다 이루어진 sklearn 데이터셋이기 때문에 별도의 전처리는 필요 없음
- 다만, train데이터와 test 데이터를 나누는 과정은 필요
- 어떤 변수인지 이름을 찾는 것은 아래 데이터 프레임에서 확인
- random_state를 설정해야 하는 경우가 있으면 42로 설정
import numpy as np
import pandas as pd
from sklearn.datasets import load_diabetes
from sklearn.linear_model import Ridge, Lasso
from sklearn.model_selection import train_test_split
from sklearn.matrics import mean_squared_error, r2_score
--------------------
1. 데이터 로드
--------------------
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
print(X.shape) (442, 10)
print(Y.shape) (442,)
--------------------
1+. 데이터 시각화
--------------------
☆ 특성 이름(컬럼명) 가져오기
feature_names = diabetes.features_names 결과 Feature names: ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
☆ DataFrame 생성
df = pd.DataFrame(X, columns = feature_names)
df['target'] = y
df
--------------------
2. 학습/테스트 데이터 분리
--------------------
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
print(X_train.shape) (353, 10)
print(y_train.shape) (353,)
print(X_test.shape) (89, 10)
print(y_test.shape) (89,)
--------------------
3. Ridge 회귀
--------------------
ridge_reg = Ridge(alpha = 1.0, random_state = 42)
ridge_reg.fit(X_train, y_train)
y_pred_ridge = ridge_reg.predict(X_test)
mse_ridge = mean_squred_error(y_test, y_pred_ridge)
r2_ridge = r2_score(y_test, y_pred_ridge)
def MPE(y_true, y_pred):
return np.mean((y_true - y_pred) / y_true) * 100
print("[Ridge 회귀 결과]")
print(" 가중치(coefficient):", ridge_reg.coef_) 가중치(coefficient): [ -11.46 -239.75 519.14 324.39 -743.37 432.58 153.97 51.15 589.46 83.12]
print(" 절편(intercept):", ridge_reg.intercept_) 절편(intercept): 152.82
print(" MSE:", mse_ridge) MSE: 2935.04
print(" R^2 점수:", r2_ridge) R^2 점수: 0.453
print("평균 비율 오차 : ", MPE(y_test, y_pred_ridge)) 평균 비율 오차 : -17.82
--------------------
4. Lasso 회귀
--------------------
lasso_reg = Lasso(alpha = 0.1, random_state = 42, max_iter = 10000)
lasso_reg.fit(X_train, y_train)
y_pred_lasso = lasso_reg.predict(X_test)
mse_lasso = mean_squared_error(y_test, y_pred_lasso)
r2_lasso = r2_score(y_test, y_pred_lasso)
print("[Lasso 회귀 결과]")
print(" 가중치(coefficient):", lasso_reg.coef_) 가중치(coefficient): [ 0. -0. 515. 295. -0. 0. 0. 66. 464. 71.]
print(" 절편(intercept):", lasso_reg.intercept_) 절편(intercept): 152.44
print(" MSE:", mse_lasso) MSE: 2973.40
print(" R^2 점수:", r2_lasso) R^2 점수: 0.447
print("평균 비율 오차 : ", MPE(y_test, y_pred_lasso)) 평균 비율 오차 : -18.06
print()
--------------------
5. Lasso에서 가중치 = 0 변수 찾기
--------------------
zero_coef_idx = np.where(lasso_reg.coef == 0)[0]
zero_coef_features = [feature_names[i] for i in zero_coef_idx]
print("Lasso에서 가중치가 0이 된 변수:", zero_coef_features)
Lasso에서 가중치가 0이 된 변수: ['age', 'sex', 's1', 's2', 's3']
'머신러닝' 카테고리의 다른 글
[실무에 쓰는 머신러닝 기초] 5. 앙상블 기법 (0) | 2025.07.03 |
---|---|
[실무에 쓰는 머신러닝 기초] 4. 분류 (2) | 2025.07.02 |
[실무에 쓰는 머신러닝 기초] 2. 데이터 전처리 (9) | 2025.07.01 |
[실무에 쓰는 머신러닝 기초] 1. 머신러닝이란? (16) | 2025.06.30 |
[머신러닝 라이브 세션] 1회차 (2) | 2025.06.30 |