Como usar Java recuperado Python, modelo de R treinando?

No setor industrial, muitas vezes usamos Python ou R para treinar off-line modelo, o uso de desenvolvimento de aplicações Java Web para fazer online - Este modelo envolve o uso da linguagem Java para invocar Python ou treinamento cross-R.

PMML

PMML é uma abreviatura de Predictive Model Markup Language, traduzidas para chinês é "Predictive Model Markup Language". É uma linguagem padrão baseado em XML para expressar modelo de mineração de dados, vários modelos podem ser usados para aplicação de câmbio.

Em outras palavras, define um padrão, diferentes línguas podem ser aplicadas em conformidade com esta norma. O princípio de detalhes internos PMML, nós chegar ao fundo aqui, interessados podem se referir a: http: //dmg.org/pmml/v4-3/GeneralStructure.html.

O que fazer PMML

Depois de introduzir o conceito de PMML é longo, pode ainda muito ignorante, não é claro o propósito. Sob primeiro a chegar relativamente formalmente, a sua utilidade: para PMML, uma aplicação que é fácil de modelo de desenvolvimento uso em um sistema, e só através do envio de um arquivo de configuração XML pode ser usado por um outro modelo de implementação de aplicativo em outro sistema. Que podemos modelo do trem Python ou R, o modelo virou arquivo PMML, em seguida, usar Java para criar programas Java baseados em arquivo PMML.

Olhar para uma imagem sobre o uso de PMML:

Esta informação imagem para eles abaixo:

  • Todo o processo é dividido em duas partes: offline e online.
  • parte desligada do processo é para provar as obras de recursos e treinamento, para gerar um modelo. Python é geralmente usado na sklearn parte desligada, R faísca ML ou para treinar o modelo.
  • Parte obtido de acordo com a linha de pesquisa está os dados da amostra, e esses dados usando o recurso off-line funciona da mesma maneira para processar, e em seguida, usando o modelo avaliado. Geral on-line alguns comum Java, C ++ para desenvolver.
  • parte off-line e on-line parte através da conexão PMML, que é o treinamento off-line após um bom modelo, exportar o modelo em arquivo PMML, carregar a parte online do arquivo PMML gerado modelo de avaliação correspondente.

Podemos ver, PMML é a chave para se conectar off-line e on-line Links, general de exportação de arquivo PMML PMML e carregar os arquivos precisa fazer em cada aplicação em separado idioma. Felizmente, Deus tem um monte de grandes implementos estes podem ser encontrados: https: //github.com/jpmml.

ligação efectiva

Formação e exportação PMML

Nós ainda estamos aqui por sklearn treinamento de um modelo aleatório Floresta, vamos precisar da ajuda de modelos sklearn treinados sklearn2pmml exportados como arquivo PMML. Se você não sklearn2pmml, digite o seguinte comando para instalar:

pip instalar --user git + https: //github.com/jpmml/sklearn2pmml.git

Nós olhamos como usar sklearn2pmml.

de sklearn.datasets load_iris importação

de RandomForestClassifier importação sklearn.ensemble

de importação sklearn2pmml PMMLPipeline, sklearn2pmml

íris = load_iris ()

# Criar trama de dados com um nome característico

iris_df = pd.DataFrame (iris.data, colunas = iris.feature_names)

# Criar um gasoduto modelo

iris_pipeline = PMMLPipeline (<

 ( "Classificador", RandomForestClassifier ())

>)

# Modelo de treinamento

iris_pipeline.fit (iris_df, iris.target)

# Modelo Exportar para arquivo RandomForestClassifier_Iris.pmml

sklearn2pmml (iris_pipeline, "RandomForestClassifier_Iris.pmml")

Após a exportação for bem sucedida, vamos ver um arquivo PMML no diretório atual: RandomForestClassifier_Iris.pmml.

Introduzido e PMML avaliado

Depois de gerar o arquivo PMML, então o que precisamos fazer é usar importação de arquivo PMML (carga) Java. Com um terceiro Java aqui dependem: PMML-avaliador. Nós precisamos adicionar o seguinte dependência no arquivo pom.xml:

< dependência >

  < groupId > org.jpmml < / GroupId >

  < artifactId > PMML-avaliador < / ArtifactId >

  < versão > 1.4.1 < / Versão >

< / Dependência >

< dependência >

  < groupId > org.jpmml < / GroupId >

  < artifactId > PMML-avaliador-extensão < / ArtifactId >

  < versão > 1.4.1 < / Versão >

< / Dependência >

Introduzido e código de arquivo PMML avaliada é a seguinte:

importação org.dmg.pmml.FieldName;

importação org.dmg.pmml.PMML;

importação org.jpmml.evaluator * .;

importação org.jpmml.model.PMMLUtil;

importação org.xml.sax.SAXException;

importação javax.xml.bind.JAXBException;

importação java.io.FileInputStream;

importação java.io.FileNotFoundException;

importação Java.io.IOException;

importação java.io.InputStream;

importação java.util.ArrayList;

importação java.util.HashMap;

importação java.util.List;

importação java.util.Map;

ClassificationModel classe pública {

 Avaliador modelEvaluator privado;

 / **

 * Para gerar modelos de aprendizagem de máquina, passando o caminho do arquivo PMML

 *

 * @Param pmmlFileName PMML caminho de arquivo

 * /

 pública ClassificationModel (String pmmlFileName) {

 PMML PMML = nulo;

 try {

 if (pmmlFileName! = null) {

 InputStream é = novo FilelnputStream (pmmlFileName);

 PMML = PMMLUtil.unmarshal (é);

 try {

 is.close ();

 } Catch (IOException e) {

 System.out.println ( "InputStream perto de erro!");

 }

 ModelEvaluatorFactory modelEvaluatorFactory = ModelEvaluatorFactory.newInstance ();

 this.modelEvaluator = (avaliador) modelEvaluatorFactory.newModelEvaluator (PMML);

 modelEvaluator.verify ();

 System.out.println ( "modelo de carga sucesso!");

 }

 } Catch (SAXException e) {

 e.printStackTrace ();

 } Catch (JAXBException e) {

 e.printStackTrace ();

 } Catch (FileNotFoundException e) {

 e.printStackTrace ();

 }

 }

 // obtém o nome do modelo de recursos necessários

 Lista pública < corda >  getFeatureNames () {

 lista < corda >  featureNames = new ArrayList < corda > ();

 lista < inputField >  InputFields = modelEvaluator.getInputFields ();

 for (inputField inputField: InputFields) {

 featureNames.add (inputField.getName toString () ().);

 }

 voltar featureNames;

 }

 // Obter o nome do campo de destino

 Cordas GetTargetName pública () {

 . Retorno modelEvaluator.getTargetFields () get (0) .getName () toString () .;

 }

 // usar o modelo para gerar uma distribuição de probabilidade

 getProbabilityDistribution ProbabilityDistribution privada (Mapa < FieldName ,? >  argumentos) {

 mapa < FieldName ,? >  evaluateResult = modelEvaluator.evaluate (argumentos);

 NomeCampo nomeDoCampo = novo NomeCampo (GetTargetName ());

 retorno (ProbabilityDistribution) evaluateResult.get (nomeDoCampo);

 }

 // probabilidade prevista de diferentes categorias

 pública ValueMap < String, Number >  predictProba (Mapa < FieldName, Número >  argumentos) {

 ProbabilityDistribution probabilityDistribution = getProbabilityDistribution (argumentos);

 regresso probabilityDistribution.getValues ();

 }

 // previsões Categoria

 Objeto pública prever (Mapa < FieldName ,? >  argumentos) {

 ProbabilityDistribution probabilityDistribution = getProbabilityDistribution (argumentos);

 regresso probabilityDistribution.getPrediction ();

 }

 public static void main (String args) {

 ClassificationModel CLF = new ClassificationModel ( "RandomForestClassifier_Iris.pmml");

 lista < corda >  featureNames = clf.getFeatureNames ();

 System.out.println ( "feature:" + featureNames);

 // construir os dados a serem previstos

 mapa < FieldName, Número >  waitPreSample = new HashMap < > ();

 waitPreSample.put (novo NomeCampo ( "comprimento sépalas (cm)"), 10);

 waitPreSample.put (novo NomeCampo ( "largura sépalas (cm)"), 1);

 waitPreSample.put (novo NomeCampo ( "comprimento pétala (cm)"), 3);

 waitPreSample.put (novo NomeCampo ( "largura pétala (cm)"), 2);

 System.out.println ( "waitPreSample prever resultado:" + clf.predict (waitPreSample) .ToString ());

 System.out.printlnl ( "resultado waitPreSample predictProba:" + clf.predictProba (waitPreSample) .toString ());

 }

}

saída:

Carregar modelo de sucesso!

recurso:

waitPreSample prever resultado: 1

waitPreSample predictProba resultar: {0 = 0,0, 1 = 0,5, 2 = 0,5}

Você pode ver, o modelo de recursos necessários para: , A amostra final, previu pertencente ao número de destino de tipo 1, as amostras que pertencem a diferentes distribuição predição probabilidade de um número de destino, 0 = {0,0, 1 = 0,5, 0,5} = 2.

resumo

Para atingir cross-language chamando Java Python / R treinados modelo, usamos o padrão PMML, modelo PMML solidificar durante o arquivo e, em seguida, usar esse arquivo para gerar modelos para avaliar.

Autor: 1or0, com foco na aprendizagem de máquina.

Aviso: Este artigo é uma escola pública No. AI submissão, todos os outros direitos autorais.

"Ligue para ele!"

CSDN No. defender o conceito do público "e dez milhões de pessoas crescimento total de tecnologia", não só para "geeks manchetes", coluna "Chatteris" pela primeira vez uma perspectiva descrição técnica exclusiva da pessoa que se importa indústria de tecnologia, o foco do evento, mais "manchetes técnicos" coluna, ea cena na profundidade aplicação indústria de tecnologia quente da interpretação, de modo que todos os desenvolvedores manter o ritmo com as tendências da tecnologia, permanecem sentido vigilante da tecnologia cheiro, as tendências da indústria, a tecnologia é a cognição mais abrangente.

Se você tem novos insights sobre artigos de alta qualidade ou eventos da indústria quentes, insights, tendências tecnológicas, aplicação ou profundidade prática, programas de cena, entre em contato CSDN contribuir, entre em contato: Micro carta (guorui_1118, observe a contribuição + Nome + posição da empresa), caixa de correio (guorui@csdn.net).

Não tem de desvio! Qingdao Yinchuan Estrada será estendido para Songling Estrada
Anterior
A nova exposição espião cross-Kia SUV Geneva Motor Show / ou nomeado XCeed
Próximo