Я использую PCA для уменьшения размерности набора данных временных рядов данных захвата движения рук и сталкиваюсь с неожиданным поведением кластеризации. Ниже приведены подробности моего процесса и проблемы, с которой я столкнулся.
Контекст:
У меня есть набор данных. записей движений рук, снятых с помощью умной перчатки с четырьмя датчиками на каждом пальце. Каждый датчик предоставляет:
- Значения положения: X, Y, Z
- >Значения вращения: X, Y, Z, W
После кодирования меток и масштабирования данных я применил PCA для уменьшения размерности. с помощью следующего кода:
Код: Выделить всё
# PCA for dimensionality reduction
pca_components = 3
pca = PCA(n_components=pca_components)
x_train_pca = pca.fit_transform(x_train_scaled)
Код: Выделить всё
# Convert PCA results into a DataFrame to associate labels
x_train_pca_df = pd.DataFrame(x_train_pca, columns=['PC1', 'PC2', 'PC3'])
x_train_pca_df['label'] = y_train_data
x_train_pca_df['segment'] = train_data['segment'].values.ravel()
# Calculate the mean of PC1 and PC2 for each dataset (to summarise each dataset as a point)
summary_train_points = x_train_pca_df.groupby(['label', 'segment']).mean().reset_index()
Код: Выделить всё
def plot_3d_pca_matplotlib(summary_points, title='3D PCA Plot'):
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# For each unique dataset (label), scatter the points and assign a legend entry
unique_labels = summary_points['label'].unique()
for label in unique_labels:
# Filter the data for the current label
filtered_data = summary_points[summary_points['label'] == label]
# Scatter plot for the current label's points
ax.scatter(filtered_data['PC1'],
filtered_data['PC2'],
filtered_data['PC3'],
label=label)
ax.set_xlabel('PCA Component 1')
ax.set_ylabel('PCA Component 2')
ax.set_zlabel('PCA Component 3')
ax.set_title(title)
ax.legend(title="Labels", loc="center left", bbox_to_anchor=(1.05, 0.7))
plt.subplots_adjust(left=0.05, right=0.75)
plt.show()
Когда я записываю новый набор данных для тех же жестов и построить график результатов PCA, я ожидаю увидеть кластеры из 20 точек (10 точек из исходных данных + 10 точек из новых данных) для каждого жеста.
Вместо этого PCA график показывает два отдельных кластера по 10 точек для каждый жест. Это говорит о том, что новые данные не совпадают с исходными данными в пространстве PCA, хотя жесты те же.
Вопрос:
Что может быть причиной такого разделения на отдельные кластеры для одних и тех же жестов?
Может ли это быть связано с:
- Процесс масштабирования?
- Несогласованная калибровка датчика?
- Необходимость выравнивания или дополнительной предварительной обработки данных перед применением PCA?
Подробнее здесь: https://stackoverflow.com/questions/792 ... pture-data
Мобильная версия