У меня есть набор данных изображений 48x48 в пикселях со значениями (0,255) и меткой 0 или 1 (эмоция, если человек на фотографии злится или нет).Формат выглядит следующим образом:
label, pixels
0, '44 55 194 ... 93 174 244'
Моя задача - создать модель для классификации с использованием алгоритма ближайшего соседа.
Поскольку задача должна быть довольно простойЯ не должен делать функцию извлечения.Поэтому я решил просто найти соотношение пикселей с меткой.
Сначала я загрузил набор данных в Pandas, оттуда я читаю строковые значения (вектор пикселей - просто строка) и сохраняю их в массив.
ys = df.emotion
pixels_str = df.values[:,1]
row_num = pixels_str.shape[0]
row_length = 48*48
xs = np.zeros((row_num,row_length))
for row in range(row_num):
xs[row] = np.fromstring(pixels_str[row], dtype=np.float, sep=' ')
оттуда я нормализовал значения
stdScaler = StandardScaler()
x_normed = stdScaler.fit_transform(xs)
и вычислил корреляцию
focus_col = ["emotion"]
correlations = df.corr().filter(focus_col).drop(focus_col)
#show top 250 correlated pixels
correlations.abs().sort_values(kind="quicksort",by=['emotion']).iloc[::-1][:250]
, и я собирался использовать их, скажем, 250 пикселейВ качестве моих возможностей для расчета модели.Однако у меня есть еще 7 таких файлов (с разными значениями и эмоциями), и преобразование строк в векторы и вычисление корреляции было мучительно долгим.
Есть ли лучший, более быстрый способ вычисления этих значений?Или извлечь ценные пиксели, с помощью которых я могу создать свою модель?