DataFrame
の特定の列にカテゴリ情報が含まれていると宣言するにはどうすればよいですか?DataFrameのColumnを列挙型で使用するにはどうすればいいですか
私はデータベースからロードしたSpark SQL DataFrame
を持っています。このDataFrame
の列の多くはカテゴリ情報を持っていますが、ロング(プライバシー用)としてエンコードされています。
私はspark-mlにこの列が数値であっても情報が実際にはCategoricalであることを伝えたいと思っています。カテゴリのインデックスにはいくつかの穴があり、それは受け入れられます。 (例:列の値が[1,0,0,4]の場合があります)
StringIndexer
が存在することを知っていますが、特に多くの列があるため、エンコードとデコードの面倒を避けることをお勧めしますこの動作をしています。
私は、次の
train = load_from_database()
categorical_cols = ["CategoricalColOfLongs1",
"CategoricalColOfLongs2"]
numeric_cols = ["NumericColOfLongs1"]
## This is what I am looking for
## this step detects the min and max value of both columns
## and adds metadata to indicate this as a categorical column
## with (1 + max - min) categories
categorizer = ColumnCategorizer(columns = categorical_cols,
autoDetectMinMax = True)
##
vectorizer = VectorAssembler(inputCols = categorical_cols +
numeric_cols,
outputCol = "features")
classifier = DecisionTreeClassifier()
pipeline = Pipeline(stages = [categorizer, vectorizer, classifier])
model = pipeline.fit(train)