맥진(脈診) 센서 데이터를 활용하여 한의학의 한열(寒熱) 및 허실(虛實) 체질을 자동으로 분류하는 머신러닝 프로젝트입니다.
- 좌수(左手) 맥진 신호 분석을 통한 객관적 체질 진단 보조 시스템 개발
- 전통적인 맥진의 정량화 및 자동화
- 샘플 수: 100명
- 원본 특성: 99개 맥진 측정 지표
- 혈압 및 순환계 지표
- 맥파 형태 및 진폭
- 시간 및 주파수 특성
- 에너지 및 변동성 지표
- 분류 태스크:
- 한열(寒熱): 한증(寒證) vs 열증(熱證)
- 허실(虛實): 허증(虛證) vs 실증(實證)
특성 간 상관관계 분석을 통한 중복 제거:
- 완전 중복 특성 제거 (상관계수 = 1.0)
- 고상관 특성 제거 (상관계수 > 0.95)
- 저분산 특성 제거
- 결과: 99개 → 73개 특성
다각도 평가를 통한 중요 특성 선별:
- F-test: 통계적 유의성 기반
- Mutual Information: 정보량 기반
- Random Forest Importance: 모델 기반 중요도
- RFE (Recursive Feature Elimination): 재귀적 제거
투표 방식: 4가지 방법 중 2개 이상 선택한 특성만 채택
결과: 73개 → 39개 특성
- 성능 비교 방법: 특성 개수별 교차 검증 성능 측정
- SFS (Sequential Feature Selection): Forward 방식으로 최적 조합 탐색
- 두 방법의 공통 선택 특성 추출
- 최종 선택: 8개 핵심 특성
MeanResp_Left- 평균 호흡수Cardiac Output_left- 심박출량H5_left- 5번째 맥파 피크W_R_Left- 맥파 폭ECO(%)_Left- 에너지 효율T4_R_Left- 4번째 시간 특성T5_R_Left- 5번째 시간 특성STD_PR_R_Left- 맥박 변동성
추후 실험 시 변동 가능
과적합 방지 및 정직한 성능 평가를 위한 이중 교차 검증:
- 외부 5-fold CV: 일반화 성능 평가
- 내부 3-fold CV: 하이퍼파라미터 튜닝
- 데이터 누수(Data Leakage) 완전 차단
-
Logistic Regression
- L1/L2 정규화
- GridSearchCV로 최적 하이퍼파라미터 탐색
-
Random Forest
- 앙상블 기반 비선형 모델
- 트리 깊이 및 샘플 수 최적화
-
SVM (Support Vector Machine)
- RBF 및 Linear 커널 비교
- C 및 gamma 파라미터 조정
-
Gradient Boosting
- 순차적 앙상블 학습
- Learning rate 및 subsample 최적화
-
MLP (Multi-Layer Perceptron)
- 얇은 신경망 구조 (1-hidden layer, 16 neurons)
- Dropout, BatchNorm, L2 정규화로 과적합 방지
- Early Stopping 적용
.
├── 좌수_특성.csv # 맥진 특성 데이터
├── 좌수_한열_레이블.csv # 한열 레이블
├── 좌수_허실_레이블.csv # 허실 레이블
├── model.py # 전통적 ML 모델 학습 (LR, RF, SVM, GB)
├── mlp.py # 신경망 모델 학습
└── README.md # 프로젝트 설명서
- 특성 축소: 99개 → 8개 (91% 감소)
- 정규화: L1/L2, Dropout, Weight Decay
- Nested CV: 데이터 누수 완전 차단
- Early Stopping: 과학습 자동 중단
- 샘플:특성 비율 최적화: 12.5:1 (100 샘플 / 8 특성)
- Random seed 고정 (42)
- Stratified K-Fold로 클래스 균형 유지
- 동일한 전처리 파이프라인
- 각 CV fold마다 독립적으로 스케일링
- Test set은 transform만 적용
- 특성 선택도 train set에서만 수행
- 많은 특성보다 핵심 특성이 중요
- 8개가 12개보다 성능 우수 (과적합 감소)
- 다양한 방법의 교집합이 가장 안정적
- 단일 방법은 과적합 가능성
- Gradient Boosting: 비선형 패턴 학습에 강함
- Logistic Regression: 안정적이고 해석 가능
- MLP: 복잡도 제어 시 경쟁력 있음
- 샘플 100개는 딥러닝에 제한적
- 얇은 구조 + 강한 정규화 필수
- 언어: Python 3.8+
- 데이터 처리: pandas, numpy
- 머신러닝: scikit-learn
- 딥러닝: PyTorch
- 시각화: matplotlib, seaborn
- 허실(虛實) 분류 모델 개발
- 우수(右手) 맥진 데이터 통합
이 프로젝트는 학술 연구 목적으로 제작되었습니다.
버그 리포트, 기능 제안, 코드 개선은 언제나 환영합니다!
프로젝트 관련 문의사항이 있으시면 Issue를 등록해주세요.