1. 程式人生 > >基於Kubernetes的機器學習微服務系統設計系列——(七)分類器微服務

基於Kubernetes的機器學習微服務系統設計系列——(七)分類器微服務

 內容提要

  分類器微服務主要實現如下分類選擇演算法:k-Nearest Neighbor(kNN)、Naïve Bayes(NB)、Support Vector Machine(SVM)、Normalized Vector(NLV)。

分類器類圖

  分類器服務主要類圖如下圖所示:

分類器服務主要類圖

部分程式碼實現

文字分類-訓練器抽象類

package com.robin.classifier;
import com.robin.log.RobinLogger; import java.util.logging.Logger; import org.codehaus.jettison.json.JSONObject; /** * <DT><B>描述:</B></DT> * <DD>文字分類-訓練器</DD> * * @version Version1.0 * @author Robin * @version <I> Date:2018-04-06</I> * @author <I> E-mail:
[email protected]
</I> */
public abstract class AbstractTrainer { // 日誌 protected static final Logger LOGGER = RobinLogger.getLogger(); // 訓練集JSON protected JSONObject trainSetJson; /** * 訓練器抽象類構造方法 * * @param trainSetJson */ public AbstractTrainer(JSONObject trainSetJson)
{ this.trainSetJson = trainSetJson; } /** * 訓練分類器抽象方法 */ public abstract void trains(); }

文字分類-分類器抽象類

package com.robin.classifier;

import com.robin.log.RobinLogger;
import java.util.HashMap;
import java.util.Map;

import java.util.logging.Logger;
import org.codehaus.jettison.json.JSONObject;

/**
 * <DT><B>描述:</B></DT>
 * <DD>文字分類-分類器抽象類</DD>
 *
 * @version Version1.0
 * @author Robin
 * @version <I> Date:2018-04-06</I>
 * @author  <I> E-mail:[email protected]</I>
 */
public abstract class AbstractClassifier {

    // 日誌記錄器
    protected static final Logger LOGGER = RobinLogger.getLogger();
    // 儲存分類結果的矩陣
    protected Map<String, HashMap<String, Integer>> matrixMap;
    // 測試集JSON
    protected JSONObject testSetJson;

    /**
     * 分類器構造方法
     *
     * @param testSetJson
     */
    public AbstractClassifier(JSONObject testSetJson) {
        this.testSetJson = testSetJson;
    }

    /**
     * 分類器分類抽象方法
     */
    public abstract void classifies();

    /**
     * 獲取分類簡單結果矩陣
     *
     * @return 簡單結果矩陣
     */
    public Map<String, HashMap<String, Integer>> getMatrixMap() {
        return matrixMap;
    }
    
}

請求JSON

  分類器微服務請求的JSON格式如下,紅框部分為配置引數。

響應JSON

  分類器微服務響應的JSON格式如下,紅框部分為分類結果。

DEBUG資訊

資訊:   NLV-500-MP-GLOBAL-OPEN-ROOT-2-INNER_PRODUCT
資訊:   ----Config----------------------------
資訊:   FeatureRange       : GLOBAL
資訊:   Dimension          : 500
資訊:   TestType           : OPEN
資訊:   AlgorithmName      : NLV
資訊:   FeatureName        : MP
資訊:   ----Args------------------------------
資訊:   RootIndex	       : 2
資訊:   SimilarityType	   : INNER_PRODUCT
資訊:   NormalizedType	   : ROOT
資訊:      
   -------------------- 分 類 結 果 混 淆 矩 陣 --------------------
   ---------------------------------------------------------------
   類別        人才    體育    資訊     娛樂    房產    汽車    總計 
   ---------------------------------------------------------------
   人才         64       0       0       1       4       1      70
   體育          0      97       0       1       0       2     100
   資訊          1       0     113       0       1       1     116
   娛樂          0       4       1      90       2       1      98
   房產          0       0       1       0      94       0      95
   汽車          1       0       0       0       1      84      86
   ---------------------------------------------------------------
   文字數       66     101     115      92     102      89     565
   ---------------------------------------------------------------
   召回率    96.97   96.04   98.26   97.83   92.16   94.38   95.94
   ---------------------------------------------------------------
   精準率    91.43   97.00   97.41   91.84   98.95   97.67   95.72
   ---------------------------------------------------------------
   F1評測    94.12   96.52   97.84   94.74   95.43   96.00   95.83
   ---------------------------------------------------------------

資訊:    Train time(ms)    : 9
資訊:    Classify time(ms) : 9
資訊:    MacroRecall(%)    : 95.94
資訊:    MacroPrecision(%) : 95.72
資訊:    Macro F1(%)       : 95.83
資訊:    Micro F1(%)       : 95.93
資訊:    Current time(ms)  : 1541671120162
資訊:   ==========================================================