2016-06-12 6 views
4

기계 학습 모델/통계 모델 (회귀 분석, 의사 결정 트리, K는 클러스터링, Naive Bayes, 스코어 카드를 의미 함)를 작성하고 실행하는 방법/선형/로지스틱 회귀 분석 및 GBM, GLM) Java/JVM 기반 응용 프로그램 (생산).Java/JVM 기반 애플리케이션에서 모델을 학습하는 기계에 적합하고 채점하는 방법

Google은 JDBC, 파일, HDFS, SQL 등의 데이터 처리, 결합 및 집계 등과 같은 기계 학습을위한 준비 단계의 대부분을 수행 할 수있는 ETL 정렬 Java 기반 제품을 보유하고 있습니다 기능 엔지니어링을 위해) 이제 기계 학습/통계 모델링을 사용하여 웹 로그 분석 기능을 추가하려고합니다.

지금 우리는 R 및 Python (및 Knime)을 사용하여 PMML 형식으로 작성된 모델에 점수를 매기 위해 JPMML- 평가기를 사용하지만 별도의 연결되지 않은 세 단계가 필요합니다. - 1- 자바에서 데이터 준비를위한 첫 단계/JVM 응용 프로그램에서 CSV 파일 또는 DB에 샘플링 데이터 (교육 및 테스트) 데이터 저장 - 2 R 및 Python (및 Knime)에서 모델 학습 모델을 만들고 PMML 4.2 형식으로 내보내기 - 3 가져 오기/Java 기반 응용 프로그램에 PMML을 배포하고 JPMML 평가기를 사용하여 프로덕션 환경에서 실행합니다.

일반적으로 프로덕션 환경에서 일반적으로 배우는 것이 기계 학습의 일반적인 문제입니다. JAVA가 Python이나 R보다 선호됩니다. Python이나 Scikit 기반 기계를 작성하고 실행할 수있는 더 나은 방법을 제안 해 주실 수 있습니까? JVM 기반 애플리케이션의 모델. 세 이하 (

1 전화 내부적으로 python scikit script를 호출하는 자바 프로그램 - : 당신의 성능과 가용성을 손상시키지 않고 단계 # 2 더 완벽하게 JVM 기반 응용 프로그램에서 # 3를 달성하기 위해 생각 무엇

후드)를 create a model in PMML으로 변경 한 다음 JPMML 평가기를 사용합니다. 사용자에게 그가 단일 JVM 기반 응용 프로그램 (더 나은 유용성)에 있다고 가장합니다. 모든 기능이 jpmml-sklearn에서 지원되는 것은 아니므로 PMML을 사용하는 데있어 제한 사항과 단점이 무엇인지 확실하지 않습니다. 2 내부적으로 파이썬 스크립트를 호출하고 외부 파이썬 환경에서 모델 생성 및 실행을 수행하고 모델/결과를 파일/csv 또는 메모리 DB (또는 헤즐리 캐스트와 같은 캐시)로 직렬화 한 Java 프로그램을 호출합니다. 부모 자바 응용 프로그램에서 결과 등을 가져올 것입니다. 저는 Sci-kit 모델을 실행하기 위해 자이 썬을 사용할 수 없다는 것을 조사했습니다. 3- Jpy (Java에서 Embed Python 포함)를 사용하여 Cpython을 JVM에 포함 할 수 있습니까? Sci-kit 모델을 사용해 본 사람이 있습니까?

또는 JVM 기반 응용 프로그램에서 Mahout 또는 weka - java 기반 기계 학습 라이브러리를 사용하도록 탐색해야합니다. (윈도우와 비 윈도우 플랫폼을 모두 지원해야합니다.)

나는 또한 자바 기반의 H2Oai를 탐색 중입니다. 아무도 그것을 시도하지 않습니다.

답변

0

나는 내 문제에 대한 적절한 해결책을 발견했다.오픈 소스를 사용하여 확장 가능한 기계 학습을 위해 Java로 개발 된 H2O.ai을 사용하고 있습니다. Java (Restful API), Python, R 및 Scala로 API를 제공합니다. 분류, 회귀, 클러스터링 등을위한 클래스 알고리즘이 최상이며, Spark 클러스터가있는 경우 Apache Hadoop 및 Spark (탄산수)와 완벽하게 통합됩니다. 또한 다층 피드 포워드 인공 신경망을 기반으로하는 심층 학습 알고리즘을 제공합니다. 나는 Java 바인딩 API/Rest API를 사용하고 있으며 때로는 저수준 H2o API (h2o 3 노드 클러스터 관리 용)를 사용하고 있습니다.

회귀 분석, 분류, 클러스터링, 연관성 규칙 마이닝, 기능 선택 등을 제공하는 통계 컴퓨터 인텔리전스 및 학습 엔진이라고 불리는 또 다른 Java 기반 대안을 발견했습니다. 누구나 이와 유사한 Java 기반 ML 라이브러리 ?

0

HDFS 백엔드가있는 ETL이있는 경우 클러스터에 Spark를 배치하고 Spark의 MLib 기계 학습 알고리즘을 사용하는 것이 좋습니다. 그들은 위에서 언급 한 방법을 지원합니다.

작업 할 데이터의 크기 (행, 열, 유형)에 대한 정보를 알려주십시오. Java는 ML에 권장되는 goto-language가 아니지만 Scala는 JVM 바이트 코드로 컴파일되며 java와 비슷한 구문을 사용합니다 (Java API가있는 것 외에).

개념 증명을 작성하는 경우 Java가 좋지만 큰 데이터 작업을 계획하고 있다면 실제로 확장되지 않습니다.

+0

데이터가 Spark/Hadoop 설정에 충분하지 않습니다. 일반적으로 50에서 1GB 사이입니다 (행이 수백 개). 지금 당장은 Java 기반 인 [H2o, ai] (https://www.h2o.ai)를 사용하고 있습니다. 따라서 Java 기반 제품과 잘 호환됩니다. 그러나 ML 알고리즘 (SVM 없음)이 제한되어 있습니다. 결국, 자바 기반 응용 프로그램에서 파이썬 (또는 R)을 호출하여 다양한 ML 알고리즘을 활용하고 싶습니다. –

+0

데이터 크기가 50MB에서 1GB 사이 인 것을 의미합니다. –

+0

데이터 크기가 주어지면 Python이나 R에서 ML을 구현하는 것이 쉽지 않을 것입니다. R이나 Python을 Java는 데이터를 섭취 가능한 형식 (예 : CSV)으로 직렬화하고 Python 또는 R에서 처리를 실행하기 위해 시스템 호출 (일괄 처리/배시)을 만듭니다. 이는 교차 플랫폼 컴파일을 지원해야하는 필요성과 관련이 있습니다. – lohithbb

1

파이썬 플러그인에 IntelliJ IDEA를 사용합니다. 이 방법은 하나의 동일한 프로젝트에서 자바와 파이썬 코드를 가지고 있습니다. 데이터는 데이터베이스에 있습니다. .java 또는 .py 파일이 현재 편집기에 있는지 여부에 관계없이 연결은 항상 표시되고 액세스 가능합니다. 구성 목록에서 Python 스크립트, Java 응용 프로그램, 메이븐 목표 등을 가질 수 있습니다. 따라서 Python과 Java 코드를 함께 (Java에서 Python 스크립트를 호출하여) 혼합 할 필요가 없다고 생각합니다. 그것은 완전히 불필요합니다. 1. (일반적으로 SQL을) 데이터를 준비 2. 실행 파이썬 스크립트, 특정 데이터베이스 테이블 출력으로 구성 팬더 데이터 프레임에 transformators의 파이프 라인을 적용

내 워크 플로우 (하게 IntelliJ IDEA의 모든)입니다 PMML. 3. 자바 애플리케이션에서 scikit-learn 모델을 사용하십시오.