Создание набора данных Mulitlabel-Classification с помощью make_classification - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь построить задачу классификации по нескольким меткам, используя sklearn. Для моего исследования важно знать, какая функция важна (чувствительна) к какому классу - вот почему я не могу использовать функцию make_multilabel_classification, предоставляемую sklearn. Я придумал следующее решение, но я не совсем уверен, что этот подход правильный:

1) Сначала я создал два набора данных для двоичной классификации (1 информативная функция и 1 неинформативная функция для каждого набора данных)

import numpy as np
from sklearn.datasets import make_classification
from sklearn.preprocessing import MultiLabelBinarizer

df = make_classification(100,2,1,0,0,shuffle=False, n_clusters_per_class=1, n_classes=2, class_sep=1, random_state=12)
df2 = make_classification(100,2,1,0,0,shuffle=False, n_clusters_per_class=1, n_classes=2, class_sep=1, random_state=35)

2) Я объединил наборы данных в набор данных с несколькими метками:

#Shuffle the second dataset (only rows!). This need to be done, since the generated dataframes are ordered in the
# same way. Normally this can be archieved by setting shuffle = True, but this operation shuffels not only
# the samples (rows) but also the features (columns).
df2Shuffeled = np.concatenate((df2[0],df2[1].reshape(-1,1)),axis=1)
np.random.shuffle(df2Shuffeled)
df2Label = df2Shuffeled[:,-1].reshape(1,-1)

#Combine the datasets:
dfCombinded = np.concatenate((df[0],df2Shuffeled[:,:-1]),axis=1)
df2Label = df2Label + int(2)
labelCombined = np.vstack((df[1],df2Label[0]))

#Transform the labels to a multilabel problem:
labelList = []
for i in range(0,100):
    labelList.append([labelCombined[0,i], labelCombined[1,i]])
binerizer = MultiLabelBinarizer()
binLabel = binerizer.fit_transform(labelList)

В объединенном наборе данных функция 0 и функция 2 относятся к «информативным» характеристикам, а характеристика 1 и характеристика 3 относятся к «униформативным». Я знаю, что создал сценарий, в котором всегда преобладают два класса. Один из df и один из df2 , поэтому не будет случая вроде [1, 1, 0, 0] или [1, 0, 0, 0],. .. возможные комбинации будут только: [1, 0, 1, 0], [1, 0, 0, 1], [0, 1, 0, 1], [0, 1, 1, 0], что отлично работает для моих нужд.

В чем я не совсем уверен: случайно ли я создаю кросс-корреляции, комбинируя наборы данных? Возможно ли, что соответствующая функция из df также актуальна для задачи классификации в df2 ? Кроме того, возможно ли, что нерелевантная функция из df может случайно оказаться актуальной для второй задачи классификации ( df2 )?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...