#machine-learning #deep-learning #conv-neural-network #weka
Вопрос:
Набор данных Kaggle и ссылка на код
Я пытаюсь решить вышеуказанную проблему с Kaggle и хочу экспортировать предварительно обработанный csv, чтобы построить модель на weka, но когда я пытаюсь сохранить ее в csv, я теряю измерение, я хочу сохранить всю информацию в этом csv.
пожалуйста, помогите мне с соответствующим кодом или любым ресурсом.
Спасибо
print (scaled_x)
|x |y |z |label
|1.485231 |-0.661030 |-1.194153 |0
|0.888257 |-1.370361 |-0.829636 |0
|0.691523 |-0.594794 |-0.936247 |0
Fs=20
frame_size = Fs*4 #80
hop_size = Fs*2 #40
def get_frames(df, frame_size, hop_size):
N_FEATURES = 3
frames = []
labels = []
for i in range(0,len(df )- frame_size, hop_size):
x = df['x'].values[i: i frame_size]
y = df['y'].values[i: i frame_size]
z = df['z'].values[i: i frame_size]
label = stats.mode(df['label'][i: i frame_size])[0][0]
frames.append([x,y,z])
labels.append(label)
frames = np.asarray(frames).reshape(-1, frame_size, N_FEATURES)
labels = np.asarray(labels)
return frames, labels
x,y = get_frames(scaled_x, frame_size, hop_size)
x.shape, y.shape
((78728, 80, 3), (78728,))
Ответ №1:
Согласно размещенной вами ссылке, данные представляют собой данные акселерометра/гироскопа серии times, отобранные с частотой 20 Гц, с меткой для каждого образца. Они хотят объединить временные ряды в кадры (при этом соответствующая метка является наиболее распространенной меткой в течение данного кадра).
Так frame_size
же как и количество выборок в кадре, и hop_size
это количество перемещений скользящего окна вперед на каждой итерации. Другими словами, с тех пор кадры перекрываются на 50% hop_size = frame_size / 2
.
Таким образом, в конце вы получаете 3D-массив из 78728 кадров длиной 80, с 3 значениями ( x
, y
, z
) каждое.
ПРАВКА: Чтобы ответить на ваш новый вопрос о том, как экспортировать в формате CSV, вам нужно «выровнять» массив 3D-кадров в 2D-массив, поскольку именно это представляет CSV. Существует несколько различных способов сделать это, но я думаю, что проще всего объединить последние два измерения, чтобы каждая строка представляла собой кадр, состоящий из 240 значений (80 выборок по 3 координаты в каждой). Затем объедините метки в качестве последнего столбца.
x_2d = np.reshape(x, (x.shape[0], -1))
full = np.concatenate([x, y], axis=1)
import pandas as pd
df = pd.DataFrame(full)
df.to_csv("frames.csv")
Если вам также нужны правильные имена столбцов:
columns = []
for i in range(1, x.shape[1] 1):
columns.extend([f"{i}_X", f"{i}_Y", f"{i}_Z"])
columns.append("label")
df = pd.DataFrame(full, columns=columns)
Комментарии:
1. спасибо за объяснение. просто хотел знать, почему мы получаем разные формы данных в переменных x и y? в чем разница между этими 2 переменными?
2. x-это фактические данные кадра, а y-массив меток, поэтому y-это только 1D.
3. Кроме того, вы отредактировали вопрос так, что теперь это другой вопрос. Вместо этого вы должны добавить информацию в нижнюю часть вопроса, чтобы люди не путались.
4. да @Аарон, поскольку вы предоставили решение, я могу продолжить, но потом застрял, на самом деле, мне просто нужен один файл данных в формате csv, а не два файла данных, т. е. x и y, есть ли способ экспортировать всю информацию в один файл csv?