2017-01-12 7 views
0

스파크 ml 파이프 라인에서 새롭고 보이지 않는 라벨을 처리하기 위해 가장 빈번한 대체 작업을 사용하고 싶습니다. 파이프 라인은 스파크 ml 파이프 라인 핸들 보이지 않는 라벨

  • 벡터 어셈블러
  • 추정 예를 들어, 각 범주 컬럼에 대해 가장 빈번한 항목을
  • stringIndexer 내용 전처리 3 단계

    1. 구성되는 경우 랜덤 포레스트

    가정은 (1), (2,3) 및 (4,5) 별도의 배관

    • I 맞게 기차 및 테스트 데이터를 변환 한 수를 구성한다. 이 모든 유모 값은 즉 맞는 친절뿐만 아니라 4,5
    • 그런 다음 나는

      val fittedLabels = pipeline23.stages collect { case a: StringIndexerModel => a } 
      val result = categoricalColumns.zipWithIndex.foldLeft(validationData) { 
          (currentDF, colName) => 
           currentDF 
           .withColumn(colName._1, when(currentDF(colName._1) isin (fittedLabels(colName._2).labels: _*), currentDF(colName._1)) 
            .otherwise(lit(null))) 
          }.drop("replace") 
      

      하는 새로운 대체하기 위해 다음과 같은

    사용할 수 있습니다

  • 2,3
  • 을 전가, 처리 된 의미 null

    • 이 의도적으로 도입 널 (null)와/보이지 않는 라벨은 가장 빈번한으로 전가된다 입력자

    그러나이 설정은 매우 추합니다. (단일 파이프 라인을 제공 할 수 없음)

    새 값을 null로 처리하는 Transformer를 빌드하려면 파이프 라인의 장착 레이블에 어떻게 액세스합니까?

    새로운 값을 처리하는 더 좋은 방법이 있습니까? 가장 빈번한 대체가 괜찮다고 가정합니다. 즉 약 90 개의 열만있는 데이터 세트의 경우 매우 적은 수의 열만 보이지 않는 레이블을 포함합니다.

    답변

    0

    마지막으로이 기능이 파이프 라인에 있어야 제대로 작동한다는 것을 알았습니다. 즉, 새로운 PipelineStage 구성 요소가 추가적으로 필요합니다.