Tribuo는 다중 클래스 분류, 회귀, 클러스터링, 이상 탐지 및 다중 레이블 분류를 제공하는 Java의 기계 학습 라이브러리입니다. Tribuo는 널리 사용되는 ML 알고리즘의 구현을 제공하고 다른 라이브러리를 래핑하여 통합 인터페이스를 제공합니다. Tribuo에는 데이터를 로드, 기능화 및 변환하는 데 필요한 모든 코드가 포함되어 있습니다. 또한 지원되는 모든 예측 유형에 대한 평가 클래스가 포함되어 있습니다. 개발은 Oracle Labs의 Machine Learning Research Group이 주도합니다. 우리는 커뮤니티 기여를 환영합니다.
모든 트레이너는 OLCUT 구성 시스템을 사용하여 구성할 수 있습니다. 이를 통해 사용자는 xml 또는 json 파일에서 트레이너를 정의하고 반복적으로 모델을 구축할 수 있습니다. 제공된 각 Trainer에 대한 구성 예는 각 패키지의 config 폴더에서 찾을 수 있습니다. 이러한 구성 파일은 적절한 OLCUT 구성 종속성을 사용하여 json 또는 edn으로 작성할 수도 있습니다. 모델과 데이터 세트는 Java 직렬화를 사용하여 직렬화 가능합니다.
모든 모델 및 평가에는 모델 또는 평가의 생성 시간, 데이터의 ID 및 이에 적용된 모든 변환은 물론 트레이너의 하이퍼파라미터를 기록하는 직렬화 가능한 출처 객체가 포함됩니다. 평가의 경우 이 출처 정보에는 사용된 특정 모델도 포함됩니다. 출처 정보는 JSON으로 추출하거나 Java 직렬화를 사용하여 직접 직렬화할 수 있습니다. 프로덕션 배포의 경우 출처 정보를 수정하고 해시로 대체하여 외부 시스템을 통해 모델 추적을 제공할 수 있습니다. 많은 Tribuo 모델을 다른 언어, 플랫폼 또는 클라우드 서비스에 배포하기 위해 ONNX 형식으로 내보낼 수 있습니다.
Tribuo는 Java 8+에서 실행되며 최신 릴리스와 함께 LTS 버전의 Java에서 테스트합니다. Tribuo 자체는 순수 Java 라이브러리이며 모든 Java 플랫폼에서 지원됩니다. 그러나 일부 인터페이스에는 네이티브 코드가 필요하므로 네이티브 라이브러리 지원이 있는 경우에만 지원됩니다. 우리는 Windows 10, macOS 및 Linux(RHEL/OL/CentOS 7+)에서 x86_64 아키텍처를 테스트합니다. 이는 우리가 인터페이스하는 기본 라이브러리에 대해 지원되는 플랫폼이기 때문입니다. 다른 플랫폼에 관심이 있고 기본 라이브러리 인터페이스(ONNX Runtime, TensorFlow 및 XGBoost) 중 하나를 사용하려는 경우 해당 라이브러리 개발자에게 문의하는 것이 좋습니다. 모델 카드 및 재현성 패키지에는 Java 17이 필요하므로 tribuo-all
Maven Central 배포의 일부가 아닙니다.
분류, 클러스터링, 회귀, 이상 탐지, TensorFlow, 문서 분류, 열 형식 데이터 로딩, 외부 교육 모델 작업 및 구성 시스템의 예를 포함한 튜토리얼 노트북을 튜토리얼에서 찾을 수 있습니다. 이는 IJava Jupyter 노트북 커널을 사용하고 Java 17이 필요한 모델 카드 및 재현성 튜토리얼을 제외하고 Java 10 이상에서 작동합니다. 튜토리얼의 코드를 다시 Java 8로 변환하려면 대부분의 경우 var
키워드를 적절한 유형으로 바꾸면 됩니다. .
Tribuo에는 광범위한 예측 작업에 적합한 여러 알고리즘의 구현이 포함되어 있습니다.
연산 | 구현 | 메모 |
---|---|---|
배깅 | 트리뷰오 | 모든 Tribuo 트레이너를 기본 학습자로 사용할 수 있습니다. |
랜덤 포레스트 | 트리뷰오 | 분류와 회귀 모두에 대해 |
추가 나무 | 트리뷰오 | 분류와 회귀 모두에 대해 |
K-NN | 트리뷰오 | 여러 병렬 백엔드와 단일 스레드 백엔드에 대한 옵션이 포함되어 있습니다. |
신경망 | 텐서플로우 | Tribuo 래퍼를 통해 TensorFlow에서 신경망을 훈련합니다. ONNX 인터페이스 또는 TF 인터페이스를 사용하여 모델을 배포할 수 있습니다. |
앙상블과 K-NN은 조합 함수를 사용하여 출력을 생성합니다. 이러한 결합기는 예측 작업에 따라 다르지만 앙상블 및 K-NN 구현은 작업에 구애받지 않습니다. 우리는 다중 클래스 분류, 다중 라벨 분류 및 회귀 작업을 위한 투표 및 평균 결합기를 제공합니다.
Tribuo에는 다음을 위한 구현 또는 인터페이스가 있습니다.
연산 | 구현 | 메모 |
---|---|---|
선형 모델 | 트리뷰오 | SGD를 사용하고 모든 그래디언트 최적화를 허용합니다. |
인수분해 기계 | 트리뷰오 | SGD를 사용하고 모든 그래디언트 최적화를 허용합니다. |
카트 | 트리뷰오 | |
SVM-SGD | 트리뷰오 | Pegasos 알고리즘의 구현 |
Adaboost.SAMME | 트리뷰오 | 모든 Tribuo 분류 트레이너를 기본 학습자로 사용할 수 있습니다. |
다항식 나이브 베이즈 | 트리뷰오 | |
정규화된 선형 모델 | Lib선형 | |
SVM | LibSVM 또는 LibLinear | LibLinear는 선형 SVM만 지원합니다. |
그래디언트 부스팅 의사결정 트리 | XGBoost |
Tribuo는 또한 서열 분류 작업을 위한 선형 체인 CRF를 제공합니다. 이 CRF는 Tribuo의 그래디언트 최적화 도구를 사용하여 SGD를 통해 교육됩니다.
Tribuo에는 분류 작업에 적용할 수 있는 정보 이론적 특징 선택 알고리즘 세트가 있습니다. 기능 입력은 자동으로 동일한 너비 저장소로 구분됩니다. 현재 여기에는 상호 정보 최대화(MIM), 조건부 상호 정보 최대화(CMIM), 최소 중복 최대 관련성(mRMR) 및 공동 상호 정보(JMI) 구현이 포함됩니다.
분류기 예측을 설명하기 위해 LIME 알고리즘이 구현되어 있습니다. Tribuo의 구현에서는 설명자(예: 회귀 트리, 올가미 등)로 희소 모델을 사용하는 것과 함께 텍스트와 표 형식 데이터의 혼합을 허용하지만 이미지는 지원하지 않습니다.
Tribuo의 회귀 알고리즘은 기본적으로 다차원적입니다. 다차원 출력을 생성하기 위해 단일 차원 구현이 래핑됩니다.
연산 | 구현 | 메모 |
---|---|---|
선형 모델 | 트리뷰오 | SGD를 사용하고 모든 그래디언트 최적화를 허용합니다. |
인수분해 기계 | 트리뷰오 | SGD를 사용하고 모든 그래디언트 최적화를 허용합니다. |
카트 | 트리뷰오 | |
올가미 | 트리뷰오 | LARS 알고리즘 사용 |
탄력적 넷 | 트리뷰오 | 좌표 하강 알고리즘 사용 |
정규화된 선형 모델 | Lib선형 | |
SVM | LibSVM 또는 LibLinear | LibLinear는 선형 SVM만 지원합니다. |
그래디언트 부스팅 의사결정 트리 | XGBoost |
Tribuo에는 클러스터링을 위한 인프라가 포함되어 있으며 두 가지 클러스터링 알고리즘 구현도 제공합니다. 우리는 시간이 지남에 따라 추가 알고리즘을 구현할 것으로 예상합니다.
연산 | 구현 | 메모 |
---|---|---|
HDBSCAN* | 트리뷰오 | 클러스터와 이상값을 발견하는 밀도 기반 알고리즘 |
K-평균 | 트리뷰오 | 순차 및 병렬 백엔드와 K-Means++ 초기화 알고리즘을 모두 포함합니다. |
Tribuo는 이상 탐지 작업을 위한 인프라를 제공합니다. 시간이 지남에 따라 새로운 구현이 추가될 것으로 예상됩니다.
연산 | 구현 | 메모 |
---|---|---|
단일 클래스 SVM | LibSVM | |
단일 클래스 선형 SVM | Lib선형 |
Tribuo는 Tribuo의 다중 클래스 분류 알고리즘을 다중 레이블 분류 알고리즘으로 변환하는 래퍼와 함께 다중 레이블 분류를 위한 인프라를 제공합니다. 시간이 지남에 따라 더 많은 다중 레이블별 구현을 추가할 것으로 예상됩니다.
연산 | 구현 | 메모 |
---|---|---|
독립 래퍼 | 트리뷰오 | 각 레이블에 대해 별도의 분류기를 생성하여 다중 클래스 분류 알고리즘을 다중 레이블 분류 알고리즘으로 변환합니다. |
분류자 체인 | 트리뷰오 | Tribuo의 다중 클래스 분류 알고리즘을 사용하여 분류기 체인 및 무작위 분류기 체인 앙상블을 제공합니다. |
선형 모델 | 트리뷰오 | SGD를 사용하고 모든 그래디언트 최적화를 허용합니다. |
인수분해 기계 | 트리뷰오 | SGD를 사용하고 모든 그래디언트 최적화를 허용합니다. |
자체적인 기계 학습 알고리즘 구현 외에도 Tribuo는 JVM에서 널리 사용되는 ML 도구에 대한 공통 인터페이스도 제공합니다. 새로운 인터페이스 기여에 관심이 있다면 GitHub 이슈를 열어주세요. 그러면 그것이 Tribuo에 어떻게 적용되는지 논의할 수 있습니다.
현재 다음과 같은 인터페이스가 있습니다.
바이너리는 Maven Central에서 groupId org.tribuo
사용하여 사용할 수 있습니다. TensorFlow, ONNX Runtime 및 XGBoost(네이티브 라이브러리)에 대한 바인딩을 포함하여 Tribuo의 모든 Java 8 호환 구성 요소를 가져오려면 다음을 사용하세요.
메이븐:
< dependency >
< groupId >org.tribuo</ groupId >
< artifactId >tribuo-all</ artifactId >
< version >4.3.1</ version >
< type >pom</ type >
</ dependency >
또는 Gradle에서:
implementation ( " org.tribuo:tribuo-all:4.3.1@pom " ) {
transitive = true // for build.gradle (i.e., Groovy)
// isTransitive = true // for build.gradle.kts (i.e., Kotlin)
}
tribuo-all
종속성은 Java 17이 필요한 모델 카드 및 재현성 프로젝트를 제외한 모든 Tribuo 하위 프로젝트에 의존하는 pom입니다.
대부분의 Tribuo는 순수 Java이므로 크로스 플랫폼이지만 일부 인터페이스는 네이티브 코드를 사용하는 라이브러리에 연결됩니다. 이러한 인터페이스(TensorFlow, ONNX Runtime 및 XGBoost)는 게시된 각 바이너리에 대해 지원되는 플랫폼에서만 실행되며 Tribuo는 어떤 바이너리가 제공되는지 제어할 수 없습니다. 특정 플랫폼에 대한 지원이 필요한 경우 해당 프로젝트의 관리자에게 문의하세요. 4.1 릴리스부터 이러한 기본 패키지는 모두 Windows, macOS 및 Linux용 x86_64 바이너리를 제공합니다. macOS ARM64(예: Apple Silicon)용 각 패키지를 컴파일하는 것도 가능하지만 Maven Central에는 TensorFlow 또는 XGBoost용 해당 플랫폼에 사용할 수 있는 바이너리가 없습니다. 4.3 릴리스부터 Tribuo는 이제 macOS ARM64 및 Linux aarch64 플랫폼에 대한 지원을 포함하는 ONNX Runtime 버전에 의존합니다. ARM 플랫폼에서 개발할 때 Tribuo의 pom.xml
에서 arm
프로필을 선택하여 기본 라이브러리 테스트를 비활성화할 수 있습니다.
각 Tribuo 모듈마다 개별 jar이 게시됩니다. 특정 프로젝트에 필요한 모듈에만 의존하는 것이 바람직합니다. 이렇게 하면 코드가 TensorFlow와 같은 대규모 종속성을 불필요하게 가져오는 것을 방지할 수 있습니다.
Tribuo는 Apache Maven v3.5 이상을 사용하여 빌드합니다. Tribuo는 Java 8+와 호환되며 최신 릴리스와 함께 LTS 버전의 Java에서 테스트합니다. 빌드하려면 간단히 mvn clean package
실행하세요. 모든 Tribuo의 종속성은 Maven Central에서 사용할 수 있어야 합니다. 문제가 있는 경우 빌드 관련 문제에 대한 문제를 제출하세요. 하지만 먼저 Maven에 대한 프록시 설정이 누락되었는지 확인하세요. 이는 빌드 실패의 일반적인 원인이고 우리가 통제할 수 없는 부분이기 때문입니다. Java 16 이하를 사용하여 빌드하는 경우 모델 카드 및 재현성 패키지가 비활성화됩니다.
개발은 "-SNAPSHOT"이 추가된 다음 Tribuo 릴리스의 버전 번호가 있는 main
브랜치에서 이루어집니다. vA.B.0
메이저 및 마이너 릴리스는 main
브랜치에 태그가 지정 vA.BX-release-branch
모든 포인트 릴리스(예: vA.B.1
, vA.B.2
등) 해당 주/부 릴리스 이후에 발생합니다. 해당 포인트 릴리스는 특정 릴리스 브랜치에 태그가 지정됩니다. 예를 들어 v4.0.2
v4.0.X-release-branch
에 태그가 지정됩니다.
우리는 기여를 환영합니다! 우리의 기여 지침을 참조하세요.
여기에 보관된 토론 메일링 리스트 [email protected]이 있습니다. 실시간 채팅을 위한 다양한 옵션을 조사 중입니다. 나중에 다시 확인하세요. 버그 보고서, 기능 요청 또는 기타 문제가 있는 경우 Github 문제를 제출하세요.
책임 있는 보안 취약점 공개 프로세스에 대해서는 보안 가이드를 참조하세요.
Tribuo는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다.