와인데이터 - 일반분할
# 📌 1. Wine 데이터 - 일반 Train/Test Split & 다양한 모델 학습
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.metrics import accuracy_score
# 데이터 불러오기
wine_data = pd.read_csv("datasets/winequality-white.csv", sep=";")
# X (특성)과 y (타겟) 분리
X_wine = wine_data.drop(columns=["quality"])
y_wine = wine_data["quality"]
# 데이터 정규화
scaler = StandardScaler()
X_wine_scaled = scaler.fit_transform(X_wine)
# Train/Test Split
X_train_w, X_test_w, y_train_w, y_test_w = train_test_split(X_wine_scaled, y_wine, test_size=0.2, random_state=42)
# 모델 학습 및 평가
# Logistic Regression
log_reg = LogisticRegression(max_iter=1000, random_state=42)
log_reg.fit(X_train_w, y_train_w)
y_pred_log_reg = log_reg.predict(X_test_w)
print("Wine Data Logistic Regression Accuracy:", accuracy_score(y_test_w, y_pred_log_reg))
# Decision Tree
dt = DecisionTreeClassifier(max_depth=3, random_state=42)
dt.fit(X_train_w, y_train_w)
y_pred_dt = dt.predict(X_test_w)
print("Wine Data Decision Tree Accuracy:", accuracy_score(y_test_w, y_pred_dt))
# SVM
svm = SVC(kernel="linear", probability=True, random_state=42)
svm.fit(X_train_w, y_train_w)
y_pred_svm = svm.predict(X_test_w)
print("Wine Data SVM Accuracy:", accuracy_score(y_test_w, y_pred_svm))
# Random Forest
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train_w, y_train_w)
y_pred_rf = rf.predict(X_test_w)
print("Wine Data Random Forest Accuracy:", accuracy_score(y_test_w, y_pred_rf))
# XGBoost
xgb = XGBClassifier(n_estimators=50, learning_rate=0.1, max_depth=3, random_state=42, use_label_encoder=False, eval_metric="logloss")
xgb.fit(X_train_w, y_train_w)
y_pred_xgb = xgb.predict(X_test_w)
print("Wine Data XGBoost Accuracy:", accuracy_score(y_test_w, y_pred_xgb))
# LightGBM
lgbm = LGBMClassifier(n_estimators=50, learning_rate=0.1, max_depth=-1, random_state=42)
lgbm.fit(X_train_w, y_train_w)
y_pred_lgbm = lgbm.predict(X_test_w)
print("Wine Data LightGBM Accuracy:", accuracy_score(y_test_w, y_pred_lgbm))
와인데이터 - k-fold분할
# 📌 Wine 데이터 - K-Fold 교차 검증 후 모델 학습 및 평가 (옵션 설명 포함)
import pandas as pd
from sklearn.model_selection import KFold, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
# 1️⃣ 데이터 불러오기
wine_data = pd.read_csv("datasets/winequality-white.csv", sep=";")
# 2️⃣ X (특성)과 y (타겟) 분리
X_wine = wine_data.drop(columns=["quality"])
y_wine = wine_data["quality"]
# 3️⃣ 데이터 정규화
scaler = StandardScaler()
X_wine_scaled = scaler.fit_transform(X_wine)
# 4️⃣ K-Fold 설정 (5-Fold)
kf = KFold(n_splits=5, shuffle=True, random_state=42)
# 5️⃣ Logistic Regression 모델 교차 검증
log_reg = LogisticRegression(max_iter=1000, random_state=42)
log_reg_kf = cross_val_score(
estimator=log_reg, # 사용할 모델
X=X_wine_scaled, # 입력 데이터 (특성)
y=y_wine, # 타겟 데이터 (정답)
cv=kf, # 교차 검증 방법 (5-Fold)
scoring="accuracy" # 평가 지표 (정확도)
)
print("Wine Data Logistic Regression K-Fold Accuracy Scores:", log_reg_kf)
print("Wine Data Logistic Regression K-Fold Mean Accuracy:", log_reg_kf.mean())
# 6️⃣ Decision Tree 모델 교차 검증
dt = DecisionTreeClassifier(max_depth=3, random_state=42)
dt_kf = cross_val_score(dt, X_wine_scaled, y_wine, cv=kf, scoring="accuracy")
print("Wine Data Decision Tree K-Fold Accuracy Scores:", dt_kf)
print("Wine Data Decision Tree K-Fold Mean Accuracy:", dt_kf.mean())
# 7️⃣ SVM 모델 교차 검증
svm = SVC(kernel="linear", probability=True, random_state=42)
svm_kf = cross_val_score(
svm, X_wine_scaled, y_wine,
cv=kf,
scoring="accuracy"
)
print("Wine Data SVM K-Fold Accuracy Scores:", svm_kf)
print("Wine Data SVM K-Fold Mean Accuracy:", svm_kf.mean())
# 8️⃣ Random Forest 모델 교차 검증
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf_kf = cross_val_score(rf, X_wine_scaled, y_wine, cv=kf, scoring="accuracy")
print("Wine Data Random Forest K-Fold Accuracy Scores:", rf_kf)
print("Wine Data Random Forest K-Fold Mean Accuracy:", rf_kf.mean())
# 9️⃣ XGBoost 모델 교차 검증
xgb = XGBClassifier(n_estimators=50, learning_rate=0.1, max_depth=3, random_state=42,
use_label_encoder=False, eval_metric="logloss")
xgb_kf = cross_val_score(
xgb, X_wine_scaled, y_wine,
cv=kf,
scoring="accuracy"
)
print("Wine Data XGBoost K-Fold Accuracy Scores:", xgb_kf)
print("Wine Data XGBoost K-Fold Mean Accuracy:", xgb_kf.mean())
# 🔟 LightGBM 모델 교차 검증
lgbm = LGBMClassifier(n_estimators=50, learning_rate=0.1, max_depth=-1, random_state=42)
lgbm_kf = cross_val_score(
lgbm, X_wine_scaled, y_wine,
cv=kf,
scoring="accuracy"
)
print("Wine Data LightGBM K-Fold Accuracy Scores:", lgbm_kf)
print("Wine Data LightGBM K-Fold Mean Accuracy:", lgbm_kf.mean())
"""
✅ cross_val_score 옵션 설명 ✅
- estimator: 사용할 모델 (예: LogisticRegression(), RandomForestClassifier() 등)
- X: 입력 데이터 (특성 행렬)
- y: 정답 데이터 (타겟 벡터)
- cv: 교차 검증 방법 (ex: KFold(n_splits=5))
- scoring: 평가 지표 (예: "accuracy"=정확도, "f1"=F1 점수, "roc_auc"=AUC 점수 등)
- n_jobs: 병렬 처리 개수 (-1은 모든 코어 사용, 기본값은 1)
- verbose: 실행 과정 출력 여부 (기본값 0, 높일수록 상세 출력)
"""
심장병데이터 - 일반분할
# 📌 Heart 데이터 - 일반 Train/Test Split 후 다양한 모델 학습 및 평가
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.metrics import accuracy_score
# 1️⃣ 데이터 불러오기
heart_data = pd.read_csv("datasets/heart.csv")
# 2️⃣ X (특성)과 y (타겟) 분리
X_heart = heart_data.drop(columns=["output"]) # 'output' 열 제거
y_heart = heart_data["output"] # 'output' 열을 타겟 변수로 설정
# 3️⃣ 데이터 정규화 (모델 성능 향상을 위해)
scaler = StandardScaler()
X_heart_scaled = scaler.fit_transform(X_heart)
# 4️⃣ Train/Test Split (80:20 비율로 데이터 분할)
X_train_h, X_test_h, y_train_h, y_test_h = train_test_split(X_heart_scaled, y_heart, test_size=0.2, random_state=42)
# 5️⃣ Logistic Regression 모델 학습 및 평가
log_reg = LogisticRegression(max_iter=1000, random_state=42)
log_reg.fit(X_train_h, y_train_h)
y_pred_log_reg = log_reg.predict(X_test_h)
print("Heart Data Logistic Regression Accuracy:", accuracy_score(y_test_h, y_pred_log_reg))
# 6️⃣ Decision Tree 모델 학습 및 평가
dt = DecisionTreeClassifier(max_depth=3, random_state=42)
dt.fit(X_train_h, y_train_h)
y_pred_dt = dt.predict(X_test_h)
print("Heart Data Decision Tree Accuracy:", accuracy_score(y_test_h, y_pred_dt))
# 7️⃣ SVM 모델 학습 및 평가
svm = SVC(kernel="linear", probability=True, random_state=42)
svm.fit(X_train_h, y_train_h)
y_pred_svm = svm.predict(X_test_h)
print("Heart Data SVM Accuracy:", accuracy_score(y_test_h, y_pred_svm))
# 8️⃣ Random Forest 모델 학습 및 평가
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train_h, y_train_h)
y_pred_rf = rf.predict(X_test_h)
print("Heart Data Random Forest Accuracy:", accuracy_score(y_test_h, y_pred_rf))
# 9️⃣ XGBoost 모델 학습 및 평가
xgb = XGBClassifier(n_estimators=50, learning_rate=0.1, max_depth=3, random_state=42,
use_label_encoder=False, eval_metric="logloss")
xgb.fit(X_train_h, y_train_h)
y_pred_xgb = xgb.predict(X_test_h)
print("Heart Data XGBoost Accuracy:", accuracy_score(y_test_h, y_pred_xgb))
# 🔟 LightGBM 모델 학습 및 평가
lgbm = LGBMClassifier(n_estimators=50, learning_rate=0.1, max_depth=-1, random_state=42)
lgbm.fit(X_train_h, y_train_h)
y_pred_lgbm = lgbm.predict(X_test_h)
print("Heart Data LightGBM Accuracy:", accuracy_score(y_test_h, y_pred_lgbm))
심장병데이터 - k-fold분할
# 📌 Heart 데이터 - K-Fold 교차 검증 후 다양한 모델 학습 및 평가
import pandas as pd
from sklearn.model_selection import KFold, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
# 1️⃣ 데이터 불러오기
heart_data = pd.read_csv("datasets/heart.csv")
# 2️⃣ X (특성)과 y (타겟) 분리
X_heart = heart_data.drop(columns=["output"]) # 'output' 열 제거
y_heart = heart_data["output"] # 'output' 열을 타겟 변수로 설정
# 3️⃣ 데이터 정규화 (모델 성능 향상을 위해)
scaler = StandardScaler()
X_heart_scaled = scaler.fit_transform(X_heart)
# 4️⃣ K-Fold 설정 (5-Fold)
kf = KFold(n_splits=5, shuffle=True, random_state=42)
# 5️⃣ Logistic Regression 모델 교차 검증
log_reg = LogisticRegression(max_iter=1000, random_state=42)
log_reg_kf = cross_val_score(log_reg, X_heart_scaled, y_heart, cv=kf, scoring="accuracy")
print("Heart Data Logistic Regression K-Fold Accuracy Scores:", log_reg_kf)
print("Heart Data Logistic Regression K-Fold Mean Accuracy:", log_reg_kf.mean())
# 6️⃣ Decision Tree 모델 교차 검증
dt = DecisionTreeClassifier(max_depth=3, random_state=42)
dt_kf = cross_val_score(dt, X_heart_scaled, y_heart, cv=kf, scoring="accuracy")
print("Heart Data Decision Tree K-Fold Accuracy Scores:", dt_kf)
print("Heart Data Decision Tree K-Fold Mean Accuracy:", dt_kf.mean())
# 7️⃣ SVM 모델 교차 검증
svm = SVC(kernel="linear", probability=True, random_state=42)
svm_kf = cross_val_score(svm, X_heart_scaled, y_heart, cv=kf, scoring="accuracy")
print("Heart Data SVM K-Fold Accuracy Scores:", svm_kf)
print("Heart Data SVM K-Fold Mean Accuracy:", svm_kf.mean())
# 8️⃣ Random Forest 모델 교차 검증
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf_kf = cross_val_score(rf, X_heart_scaled, y_heart, cv=kf, scoring="accuracy")
print("Heart Data Random Forest K-Fold Accuracy Scores:", rf_kf)
print("Heart Data Random Forest K-Fold Mean Accuracy:", rf_kf.mean())
# 9️⃣ XGBoost 모델 교차 검증
xgb = XGBClassifier(n_estimators=50, learning_rate=0.1, max_depth=3, random_state=42,
use_label_encoder=False, eval_metric="logloss")
xgb_kf = cross_val_score(xgb, X_heart_scaled, y_heart, cv=kf, scoring="accuracy")
print("Heart Data XGBoost K-Fold Accuracy Scores:", xgb_kf)
print("Heart Data XGBoost K-Fold Mean Accuracy:", xgb_kf.mean())
# 🔟 LightGBM 모델 교차 검증
lgbm = LGBMClassifier(n_estimators=50, learning_rate=0.1, max_depth=-1, random_state=42)
lgbm_kf = cross_val_score(lgbm, X_heart_scaled, y_heart, cv=kf, scoring="accuracy")
print("Heart Data LightGBM K-Fold Accuracy Scores:", lgbm_kf)
print("Heart Data LightGBM K-Fold Mean Accuracy:", lgbm_kf.mean())
주요 옵션 설명
1️⃣ pd.read_csv(filepath, sep=";", encoding="utf-8")
- filepath: 불러올 CSV 파일 경로 지정
- sep=";": 데이터의 구분자 지정 (기본값은 , 이지만, 데이터에 따라 ;나 \t를 사용할 수도 있음)
- encoding="utf-8": 파일의 인코딩을 지정 (한글 데이터의 경우 encoding="cp949"를 사용할 수도 있음)
2️⃣ train_test_split(X, y, test_size=0.2, random_state=42)
- X: 입력 데이터 (특성)
- y: 타겟 데이터 (정답 레이블)
- test_size=0.2: 80%는 훈련 데이터, 20%는 테스트 데이터로 분리
- random_state=42: 실행할 때마다 같은 결과를 보장 (랜덤성을 고정)
3️⃣ StandardScaler().fit_transform(X)
- 데이터를 표준화(정규화)하여 평균이 0, 표준편차가 1이 되도록 변환
- fit_transform(X): X 데이터를 기준으로 스케일링 적용 후 변환
4️⃣ LogisticRegression(max_iter=1000, random_state=42)
- max_iter=1000: 최적의 모델을 찾기 위해 최대 1000번 반복
- random_state=42: 실행할 때마다 같은 결과를 보장
5️⃣ DecisionTreeClassifier(max_depth=3, random_state=42)
- max_depth=3: 트리의 최대 깊이를 3으로 제한 (너무 깊어지면 과적합 위험 증가)
- random_state=42: 실행할 때마다 같은 결과를 보장
6️⃣ SVC(kernel="linear", probability=True, random_state=42)
- kernel="linear": 선형 SVM 사용 (비선형일 경우 "rbf", "poly" 선택 가능)
- probability=True: 예측 시 확률 값 제공 (속도는 느려지지만 확률 예측이 필요할 경우 사용)
- random_state=42: 실행할 때마다 같은 결과를 보장
7️⃣ RandomForestClassifier(n_estimators=100, random_state=42)
- n_estimators=100: 100개의 결정 트리를 생성하여 예측
- random_state=42: 실행할 때마다 같은 결과를 보장
8️⃣ XGBClassifier(n_estimators=50, learning_rate=0.1, max_depth=3, random_state=42, use_label_encoder=False, eval_metric="logloss")
- n_estimators=50: 50개의 트리를 사용하여 학습
- learning_rate=0.1: 학습 속도를 조절 (값이 너무 크면 과적합, 너무 작으면 학습 속도가 느림)
- max_depth=3: 트리의 최대 깊이
- random_state=42: 실행할 때마다 같은 결과를 보장
- use_label_encoder=False: 경고 메시지 방지 (XGBoost 1.3 이후 필요)
- eval_metric="logloss": 손실 함수(예측의 정확도 평가 방법) 설정
9️⃣ LGBMClassifier(n_estimators=50, learning_rate=0.1, max_depth=-1, random_state=42)
- n_estimators=50: 50개의 트리를 사용하여 학습
- learning_rate=0.1: 학습 속도 조절
- max_depth=-1: 트리의 깊이를 자동으로 설정
- random_state=42: 실행할 때마다 같은 결과를 보장
🔟 KFold(n_splits=5, shuffle=True, random_state=42)
- n_splits=5: 데이터를 5개로 나누어 교차 검증 수행
- shuffle=True: 데이터를 섞은 후 분할 (데이터 순서에 따른 편향 방지)
- random_state=42: 실행할 때마다 같은 결과를 보장
1️⃣1️⃣ cross_val_score(estimator, X, y, cv=5, scoring="accuracy")
- estimator: 사용할 모델 (예: LogisticRegression(), RandomForestClassifier())
- X: 입력 데이터 (특성)
- y: 정답 데이터 (타겟)
- cv=5: 5-Fold 교차 검증 적용
- scoring="accuracy": 정확도를 평가 지표로 사용 ("f1", "roc_auc"도 가능)
1️⃣2️⃣ model.fit(X_train, y_train)
- X_train: 훈련 데이터
- y_train: 정답 데이터
- 주어진 모델을 학습시키는 함수
1️⃣3️⃣ model.predict(X_test)
- X_test: 테스트 데이터
- 학습된 모델을 사용해 예측값을 반환
1️⃣4️⃣ accuracy_score(y_test, y_pred)
- y_test: 실제 정답값
- y_pred: 모델이 예측한 값
- 정확도를 계산하여 출력 (1에 가까울수록 정확함)
🌟 정리
1. 데이터 불러오기 및 전처리
- pd.read_csv(): CSV 파일 불러오기
- train_test_split(): 데이터 분할
- StandardScaler().fit_transform(): 데이터 정규화
2. 모델 학습 및 평가
- LogisticRegression(), DecisionTreeClassifier(), SVC(), RandomForestClassifier(), XGBClassifier(), LGBMClassifier()
- model.fit(): 모델 학습
- model.predict(): 모델 예측
- accuracy_score(): 모델 정확도 평가
3. K-Fold 교차 검증
- KFold(): K-Fold 설정
- cross_val_score(): 교차 검증 수행
이제 위 함수들을 이해하고 직접 사용하면서 머신러닝 모델을 쉽게 다룰 수 있습니다! 🚀
'파이썬' 카테고리의 다른 글
12-3. 머신러닝 분류모델 총정리(이패스 신성진 김용재 와 함께하는 AI모델링) (0) | 2025.03.18 |
---|---|
13. 모델평가 (모델성능비교) (0) | 2025.03.18 |
12-2. 머신러닝 지도학습 (0) | 2025.03.18 |
11. 시각화 (0) | 2025.03.18 |
10. 탐색적 데이터 분석 (0) | 2025.03.18 |