Бинаризация одного набора данных из пар ключ-значение другого набора данных - PullRequest
0 голосов
/ 19 апреля 2020

Я работаю над домашним заданием, с которым у меня возникли значительные проблемы. Концептуально я хочу взять текстовый файл десяти категорий в 5000 записях и преобразовать в двоичную форму все уникальные функции в этом наборе данных (выходит на 232). Затем я хочу создать массив numpy из этого, который будет матрицей 5000 x 232 только с 0 и 1. Затем я хочу применить это к тестовому набору данных с 1000 записями. Однако этот набор тестовых данных имеет несколько функций (не столбцов), которых не было в оригинале. Я не могу создать новую двоичную матрицу 1000 x 232, потому что не могу придумать способ игнорировать новые данные.

Набор данных выглядит так:

45, Federal-gov, Bachelors, Married-civ-spouse, Adm-clerical, White, Male, 45, United-States, <=50K
33, Private, 5th-6th, Married-spouse-absent, Transport-moving, Other, Male, 20, El-Salvador, <=50K
19, Private, Some-college, Never-married, Transport-moving, White, Male, 40, United-States, <=50K

Пока что я прочитал оба файла и преобразовал их в объекты карты, а затем создал словарь пар (ключ, значение), которые представляют собой эквиваленты столбца: значения. Затем он был применен к набору данных, чтобы создать набор данных всех чисел c, где с каждой из записей был связан список из десяти чисел. Однако попытка сделать то же самое со вторым набором данных не сработала.

Это код, который я использовал до сих пор:

import numpy as np

train = map(lambda s: s.strip().split(", "), open('income.train.txt').readlines())
dev = map(lambda s: s.strip().split(", "), open('income.dev.txt').readlines())

mapping = {}
new_train = []

for row in train:
     new_row = []
     for j, x in enumerate(row):
         feature = (j, x)
         if feature not in mapping:
             mapping[feature] = len(mapping)
         new_row.append(mapping[feature])
     new_train.append(new_row)

Все до этого момента работает, следующий бит это то, что выдает ошибку.

new_dev = []
for row in dev:
    new_row = []
    for j, x in enumerate(row):
        feature = (j,x)
        if feature not in mapping:
            feature = (None, None)
        new_row.append(mapping[feature])
    new_dev.append(new_row)

Это работает, пока не будет достигнуто значение, которого не было в словаре сопоставления (я знаю это, поскольку существует частичный набор данных new_dev, который имеет первые 125 записей, поэтому 126-я является первой с новым значением). Полученная ошибка всегда связана со строкой feature = (None, None) (KeyError: (None, None)). Я попробовал несколько других вариантов (только один None, (0,0) и т. Д. c.), Но все безрезультатно.

Мне было очень трудно набрать asp, и я я уверен, что упускаю что-то простое, любая помощь очень ценится.

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