Как удалить ловушку фиктивной переменной с помощью OneHotencoding

Вот мой код для извлечения и преобразования данных CSV:

Schema schema = new Schema.Builder()
            .addColumnsString("RowNumber")
            .addColumnInteger("CustomerId")
            .addColumnString("Surname")
            .addColumnInteger("CreditScore")
            .addColumnCategorical("Geography",Arrays.asList("France","Spain","Germany"))
            .addColumnCategorical("Gender",Arrays.asList("Male","Female"))
            .addColumnsInteger("Age","Tenure","Balance","NumOfProducts","HasCrCard","IsActiveMember","EstimatedSalary","Exited").build();
    TransformProcess transformProcess = new TransformProcess.Builder(schema)
                                            .removeColumns("RowNumber","Surname","CustomerId")
                                            .categoricalToInteger("Gender")
                                            .categoricalToOneHot("Geography").build();
    RecordReader reader = new CSVRecordReader(1,',');
    reader.initialize(new FileSplit(new ClassPathResource("Churn_Modelling.csv").getFile()));
    TransformProcessRecordReader transformProcessRecordReader = new TransformProcessRecordReader(reader,transformProcess);
    System.out.println("args = " + transformProcessRecordReader.next() + "");

Я только что попытался напечатать первую запись:

аргументы = [619, 1, 0, 0, 1, 42, 2, 0, 1, 1, 1, 101348,88, 1]

Например, три значения, за которыми следует 619 -> 1, 0, 0, я бы хотел сохранить 619, за которым следует 0, 0.

В основном я хотел бы сохранить первую категорию в качестве базовой категории, а другие прогнозируются из базовой категории, чтобы избежать каких-либо мультиколлинеарных отношений (ловушка фиктивных переменных)

Как я могу это сделать? Кто-нибудь может посоветовать по этому поводу?


person Rahul Raj    schedule 16.05.2018    source источник


Ответы (1)


Вы можете проверить окончательную схему преобразования с помощью transformProcess.finalSchema и удалить соответствующий второй столбец с помощью

TransformProcess transformProcess = ... same as before...
        .categoricalToOneHot("Geography")
        .removeColumns("Geography[France]")
        .build()
person Holger Brandl    schedule 16.05.2018
comment
Спасибо, Хольгер. Именно то, что я искал! - person Rahul Raj; 17.05.2018