Я пытаюсь разгадать загадку с массивом данных и замаскированным массивом.
Контекст Я пытаюсь найти несколько методов, которые помогут мне в машинном обучении.Моей целью является создание простого информационного блока для добавления в него новой информации.Я хочу, чтобы эти функции были простыми в использовании.
Задача Это функция, которая использует то, что я назвал моделью, и может выполнять преобразование из данных.Затем я хочу установить эти новые данные на новый или существующий столбец.Я не использую функцию применения, потому что, если я делаю это, я теряю возможность извлекать несколько данных одновременно с паррализмом (поэтому я сначала извлекаю, а затем применяю «функции».
Здесьэто загадка, я хочу работать с маской, потому что без этой маски я не могу изменить исходный фрейм данных. Если вы удалите эту маску, если фрейм данных и функции имеют одинаковое количество строк, все в порядке. Теперь, если я добавлю эту маску,Кажется, что он принимается построчно и несоответствие размеров .... РЕДАКТИРОВАТЬ: я забыл сказать, что «особенности» соответствуют 2d массив Numpy.
Ошибка
ValueError: Должны иметь равные len ключи и значение при установке с помощью ndarray
Код
def transform(dataframe, tags, out, model, mask=None):
# Check mandatory fields
mandatory = ['datum']
if not isinstance(tags, dict) or not all(elem in mandatory for elem in tags.keys()):
raise Exception(f'Not a dict or missing tag: {mandatory}.')
# Mask creation (see pandas view / copy mechanism)
if mask is None:
mask = [True] * len(dataframe.index)
features = model.transform(dataframe.loc[mask, tags['datum']].to_numpy())
dataframe.loc[mask, out] = features.tolist()
return dataframe
Пример Данные могут быть примерно такими:
строка; данные; метка
0; [61953.017837947686, 9.505037089204054, 74,585 ...]; 0
1; [80832.69302693632, 9,524642547991316, 83,9228 ...]; 1
Модель может быть PCA от skучиться.Метод может быть примерно таким:
transform(dataframe, {'datum': 'Data'}, 'PCA', PCA(), mask=dataframe[dataframe['Label']==1)
Тогда вывод будет:
Row;Данные ;Этикетка ;PCA
0;[61953.017837947686, 9.505037089204054, 74,585 ...]; 0;[74,585 ...]
1;[80832.69302693632, 9.524642547991316, 83.9228 ...]; 1;[92.578 ...]
Текущее решение
mask = inputs[condition]
inputs['PCA'] = np.nan
inputs[mask] = Classification.transform(inputs[mask], {'datum': 'Data'}, wavelet, 'PCA')
def transform(dataframe, tags, model, out):
# Check mandatory fields
mandatory = ['datum']
if not isinstance(tags, dict) or not all(elem in mandatory for elem in tags.keys()):
raise Exception(f'Not a dict or missing tag: {mandatory}.')
features = model.transform(dataframe[tags['datum']].to_numpy())
dataframe[out] = features.tolist()
return dataframe
Спасибо за ответы!С наилучшими пожеланиями