Проблема кластеризации графиков PCA с данными захвата движения временных рядовPython

Программы на Python
Ответить
Anonymous
 Проблема кластеризации графиков PCA с данными захвата движения временных рядов

Сообщение Anonymous »

Подробности:
Я использую PCA для уменьшения размерности набора данных временных рядов данных захвата движения рук и сталкиваюсь с неожиданным поведением кластеризации. Ниже приведены подробности моего процесса и проблемы, с которой я столкнулся.

Контекст:
У меня есть набор данных. записей движений рук, снятых с помощью умной перчатки с четырьмя датчиками на каждом пальце. Каждый датчик предоставляет:
  • Значения положения: X, Y, Z
  • >Значения вращения: X, Y, Z, W
Данные записывались в отдельные файлы, каждый из которых содержал 10 повторений жеста. Эти повторы позже были сегментированы на отдельные файлы (1 повторение на файл), помечены и объединены в один большой набор данных.
После кодирования меток и масштабирования данных я применил PCA для уменьшения размерности. с помощью следующего кода:

Код: Выделить всё

# PCA for dimensionality reduction
pca_components = 3
pca = PCA(n_components=pca_components)
x_train_pca = pca.fit_transform(x_train_scaled)
Чтобы визуализировать результаты, я создал сводный график PCA, где каждый сегмент данных представлен как одна точка. Цель — увидеть кластеры по 10 баллов для каждого жеста. Вот код, суммирующий результаты PCA:

Код: Выделить всё

# 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()
А вот метод, который я использую для построения сводных данных PCA:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»