2016-08-04 3 views
1

로그 파일을 기반으로 의사 결정 트리를 작성하려고합니다. 일부 기능 세트에는 수천 개의 고유 한 값이 포함되어 있습니다. Java에서 파이프 라인과 데이터 프레임의 새로운 관용구를 사용하려고합니다. 필자는 각 범주의 기능 열에 대해 여러 StringIndexer 파이프 라인 단계를 사용하여 파이프 라인을 작성했습니다. 그런 다음 VectorAssembler를 사용하여 기능 벡터를 만듭니다. 결과 데이터 프레임은 VectorAssembler 단계 이후에 완벽하게 보입니다. 나는 노멀 라이저를 사용하여이 문제를 해결할 수 있습니다스파크 MLLib 2.0 파이프 라인의 범주 형 기능

DecisionTree requires maxBins (= 32) to be at least as large as the number of values in each categorical feature, but categorical feature 5 has 49 values. Considering remove this and other categorical features with a large number of values, or add more training examples.

: 내 파이프 라인은 약

같은

StringIndexer-> StringIndexer-> StringIndexer-> VectorAssembler-> DecisionTreeClassifier

그러나 나는 다음과 같은 오류가 보인다 하지만 원래의 기능 값을 사용하여 DSL 의사 결정 트리를 생성해야하므로 의사 결정 트리는 내 필요에 사용할 수 없습니다. 전체 파이프 라인이 함께 실행되기 때문에 수동으로 maxBins를 설정할 수 없습니다. 결과 결정 트리에 StringIndexer가 값을 생성하도록하고 싶습니다 (예 : Feature 5 < = 132). 또한, 그다지 중요하지는 않지만 기능에 대한 고유 한 이름을 지정할 수 있기를 원합니다 (예 : '기능 5'대신 '도메인 5')

답변

0

DecisionTree 알고리즘은 하나의 maxBins 값을 사용하여 걸릴 분할 수입니다. 기본값은 (= 32)입니다. maxBins는 범주 형 기능의 최대 범주 수보다 크거나 같아야합니다. 기능 5에는 49 가지 값이 있으므로 maxBins를 49 이상으로 늘려야합니다.

DecisionTree 알고리즘에는 몇 가지 하이퍼 매개 변수가 있으며 데이터에 맞게 조정하면 정확도가 향상 될 수 있습니다. 하이퍼 파라미터 그리드를 자동으로 테스트하고 최상의 것을 선택하는 Spark Cross Validation 프레임 워크를 사용하여이 튜닝을 수행 할 수 있습니다. 여기

나는 두 가지 필요 3 maxBins [49, 52, 55] 아웃 켜지고

dt = DecisionTreeClassifier(maxDepth=2, labelCol="indexed") 
paramGrid = ParamGridBuilder().addGrid(dt.maxBins, [49, 52, 55]).addGrid(dt.maxDepth, [4, 6, 8]).addGrid(rf.impurity, ["entropy", "gini"]).build() 
pipeline = Pipeline(stages=[labelIndexer, typeIndexer, assembler, dt]) 
+0

파이썬 시험의 예이다 : 큰 범주의 많은 수의 카운트보다 작은 값으로 설정 MaxCategories와 VectorIndexer 기능 및 DecisionTreeClassifier의 maxBins를 가장 많은 수의 범주 형 기능 수보다 큰 값으로 설정합니다. 모든 기능이 범주 적이기 때문에 처음에는 MAX_INT가 지정되어 "DecisionTreeMetadata : DecisionTree reduce maxBins ..."라는 경고가 생성되었습니다. 두 값을 DataFrame의 샘플 수로 설정하면 충분합니다. – Mike

+0

모든 기능이 범주화되어 있으므로, VectorIndexer를 사용해도 안전하지만 계속 교육 기능이 지속되면주의하십시오. VectorIndexer는 연속 및 범주 중 선택을 maxCategories 매개 변수를 기반으로합니다. 그것은 지속적인 기능을 범주화 할 수 있습니다. 이 답변 또는 다른 사람이 문제를 해결 한 경우이를 수락 한 것으로 표시하십시오. 감사합니다 – igorsf

+0

후속 조치 주셔서 감사합니다. VectorIndexer는 실제로 실수였습니다. 파이프 라인은 일련의 문자열 인덱서, 벡터 어셈블러, 마지막으로 .setMaxBins 호출을 사용하는 DecisionTreeClassifier로 구성됩니다. 올바르게 지적했듯이 믹스에서 지속적인 기능이 있다면 문제가 될 수 있습니다. 다른 사람들이 어떻게 이것을 처리하는지 궁금합니다. 많은 수의 값을 갖는 범주 형 특징과 상대적으로 더 적은 수의 특징 값을 갖는 연속 형 특징을 갖는 것이 쉽게 생각할 수 있습니다. – Mike

관련 문제