model op• 데이터 종류: shapemodel × points → measurement
• 호출: import fullseye as fs; fs.ledger.shape_mahalanobis(model, shape, align: 'bool' = True, cumulative: 'float' = 0.99, n_modes: 'int' = 0)(구현을 직접 호출하려면 import shapestats; shapestats.shape_mahalanobis(model, shape, align: 'bool' = True, cumulative: 'float' = 0.99, n_modes: 'int' = 0), 원장에서 가져오려면 opsshapestat.get("shape_mahalanobis"))
모델 관점에서 그 형상이 얼마나 이상한지. → float.
sqrt(sum(score_i^2 / variance_i)) 를 앞쪽 몇 개로 한정해 더한다.
★ 전 성분을 더해서는 안 된다. K 개체의 군에서 나오는 주성분은 K-1 개지만, 뒤쪽은 분산이 수치적인 0 까지 떨어진다. 실측(K=12, N=80, 참 모드는 2 개)의 분산: 3.2e-02, 5.6e-03, 4.0e-05, 6.7e-13, 9.7e-14, 9.9e-17, …, 1.0e-31. 이 꼬리로 나누면 값이 의미를 잃는다:
========== =========== ==================
사용 개수 군 내 개체 0.5 부풂 주입
========== =========== ==================
1 0.428 1.821
2 0.885 2.617
3 1.035 18.134
5 1.373 1393035.060
11(전부) 46613.636 9.3e+13
========== =========== ==================
5 개에서 군 내 개체가 1.37 인데 이탈은 100 만, 11 개에서는 군 내조차 46614. "이상도"가 아니라 "수치 0 으로 나눈 횟수"를 재고 있다.
그래서 기본값은 누적 기여율 cumulative(0.99)까지의 성분만을 쓴다. 위의 군에서는 2 개(0.99895)가 선택되어, 군 내 0.885 / 이탈 2.617 로 순순히 나열된다. n_modes 를 양수로 주면 그 개수로 고정한다(비교를 위해 개수를 맞추고 싶을때 쓴다). 어느 쪽을 썼는지에 따라 값이 바뀌므로, 보고할 때는 개수도 함께.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• shapestat_landmark_tour — py -3.11 examples/shapestat_landmark_tour.py
measurement 를 입력으로 받는 것)—
model)shape_pca · shape_project · shape_reconstruct · shape_explained_variance · shape_synthesize
*Provenance: shapestats.py — SHAPESTAT 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.