# 꽃 이름 감별사

Python 3.12 이상·Cursor가 필요합니다. 패키지 설치에는 인터넷이 필요하지만 실행 시 별도 다운로드·API 호출은 없습니다. scikit-learn에 내장된 Iris의 네 가지 숫자 특징으로 품종을 분류합니다.

ZIP을 풀고 train.py가 있는 learning-lab 폴더를 Cursor에서 여세요. 설치 전에 example/report.html을 브라우저로 열어 결과를 먼저 볼 수도 있습니다. 예시 보고서는 고정 설정으로 미리 실행한 결과입니다.

## 실행

```powershell
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe train.py
Start-Process .\output\report.html
```

py가 없으면 python --version을 확인하고 첫 명령의 py를 python으로 바꾸세요. 가상환경 활성화는 필요 없습니다. 보고서 경로는 명령 마지막에도 출력됩니다. 실행은 종료되며 웹 서버는 띄우지 않습니다.

## 두 시나리오와 네 모델

- A: 원본 학습 정답으로 깊이 2·깊이 제한 없음 트리를 학습합니다.
- B: 학습 정답의 일부만 다른 품종으로 바꾸고 같은 두 트리를 학습합니다.
- 150건 중 학습 105건·평가 45건을 클래스 비율을 유지하며 분리합니다. 평가 정답은 바꾸거나 학습에 사용하지 않습니다.
- 분할·모델·오류 시드는 42입니다. 오류 생성기는 NumPy default_rng이며 오류 행을 중복 없이 선택한 뒤 각 레이블을 다른 품종으로 바꿉니다.
- --noise 기본값 0.2, 오류 수는 floor(학습 건수 × 비율)입니다. 기본값은 21건입니다.
- 보고서의 학습 점수는 ‘받은 정답 기준’과 ‘원본 정답 기준’을 구별합니다. B에서 학습 점수가 높다고 실제 품종을 잘 아는 것은 아닙니다.
- 복잡한 모델이 반드시 나쁘거나 좋다고 정하지 않습니다. 실제 계산값으로 비교하세요.

## 결과 파일

output/report.html은 성능 비교, 모델·오분류 필터, 오류 레이블 목록을 보여줍니다.

output/data.csv는 row_id, split(train/test/unused), 특징 네 개(cm), original_label, scenario_b_label, label_changed를 포함합니다. output/predictions.csv는 평가 행 45건 × 모델 4개 = 180개 예측을 담습니다. output/results.json에는 설정·버전·분할 ID·점수·모든 입력과 예측이 들어 있습니다.

같은 출력 폴더로 재실행하면 이 네 파일을 덮어씁니다. 원본 Iris와 학습된 모델은 디스크에 수정·저장하지 않습니다. 학습 모델은 프로그램 실행 중 메모리에만 존재합니다.

## 선택 실험

```powershell
.\.venv\Scripts\python.exe train.py --noise 0.3 --output output-noise30
.\.venv\Scripts\python.exe train.py --train-per-class 3 --output output-small
.\.venv\Scripts\python.exe train.py --noise 0 --output output-no-noise
```

--noise는 0~1의 유한한 숫자, --train-per-class는 1~35 정수입니다. 품종별 3건 실험은 학습 자료 9건만 쓰고 평가 45건은 그대로 유지합니다. 나머지 행은 unused입니다. 9건의 오류 20%는 소수점 이하를 버려 1건입니다. 정확도가 반드시 떨어질 것이라고 예상하지 말고 결과를 관찰하세요.

평가 결과를 계속 보며 설정을 고르면 평가 데이터에도 맞추게 됩니다. 실제 모델 선택에는 별도 검증 데이터나 교차검증과 최종 평가가 필요합니다.

## 문제 해결

- 설치 실패: Python 3.12 이상, 인터넷 연결, .venv의 Python으로 설치했는지 확인하세요.
- CSV 저장 실패: Excel 등에서 열어 둔 결과 파일을 닫고 폴더 권한을 확인하세요.
- 보고서가 예전 결과: train.py 마지막 출력 경로를 확인하고 브라우저를 새로고침하세요.
- 점수가 다름: 난수 생성기·오류 적용 순서·라이브러리 버전·학습 건수도 함께 비교하세요.

데이터 출처: https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html

교육 자료: https://ax-team-logbook.vercel.app/week-25/learning-guide
