Spark ML’de sınıflandırma algoritmalarını kullanırken iki tip değişkeniniz vardır: Sürekli Değişkenler ve Kategori Değişkenleri. Sürekli değişkenler, değerin kendisinin ve değişimlerinin (artma veya azalma) sizin için önemli olduğu değişkenlerdir. Kategori değişkenleri ise sınıfsal değişkenlerdir. (maksimum x farklı değer alabilirler.)
Algoritmanızı geliştirirken sürekli değişkenler ve kategori değişkenlerini birbirinden ayırmanız gerekmektedir. Bunun için Spark ML’de VectorIndexer sınıfı kullanılır.
İlk olarak kategori değişkenlerinizi bir Vector’de tutarsınız:
1 2 3 4 5 6 |
val categoricalFeatureAssembler = new VectorAssembler().setInputCols( Array( "feature1", "feature2", "feature3", )).setOutputCol("categoricalFeatures") |
Ardından maksimum alacakları değer çeşitliliğine göre VectorIndexer sınıfını kullanarak bu değerlerinizi index’ler ve maksimum değer sayısını Indexer’a parametre olarak verebilirsiniz.
1 2 3 4 |
val featureIndexer = new VectorIndexer() .setInputCol("categoricalFeatures") .setOutputCol("indexedFeatures") .setMaxCategories(5) |
Bu alanlar artık kategori değerleri olarak index’lenmiştir ve Spark Pipeline’ına ekleyebilirsiniz:
1 2 3 4 5 |
val model = new Pipeline().setStages(Array( categoricalAssembler, featureIndexer, myClassifier)) .fit(myDataFrame) |
Referans:
https://spark.apache.org/docs/latest/ml-features.html#vectorindexer