Как использовать анализ главных компонентов (PCA) для анализа набора данных, состоящего из 300 образцов модельных данныхPython

Программы на Python
Ответить
Anonymous
 Как использовать анализ главных компонентов (PCA) для анализа набора данных, состоящего из 300 образцов модельных данных

Сообщение Anonymous »


У меня есть 300 образцов данных о температуре и высоте, каждый размером 20x300. Каждый из этих образцов был создан с использованием различных характеристик. Эти 300 температурных профилей меняются в зависимости от высоты, что усложняет визуализацию данных и определение того, какой образец из 300 вызывает максимальное изменение, а какой номер образца соответствует минимальному отклонению от номинального температурного профиля. Кроме того, мне нужно идентифицировать образцы, демонстрирующие схожий характер или температурный профиль. Я попытался использовать анализ главных компонентов, чтобы уменьшить размерность до двух компонентов, но не уверен, как интерпретировать данные и движусь ли я в правильном направлении. В приведенном ниже примере кода я воспроизвел данные о температуре и высоте из 300 выборок.

импортировать numpy как np импортировать matplotlib.pyplot как plt """ Создайте 300 выборок данных для высоты и температуры """ # Определить количество строк и столбцов количество_строк, количество_столбцов = 20, 300 # Создайте массив высот в диапазоне от 100 км до 500 км. высоты = np.linspace(100, 500, num_rows) # Повторите значения высоты во всех столбцах height_array = np.tile(altitudes, (num_columns, 1)).T # Параметры для создания температурных профилей height_midpoint = (altitudes.min() + heights.max()) / 2 температура_амплитуда, температура_частота = 250, 0,02 # Создайте синусоидальную волну для представления температуры в зависимости от высоты температуры = температура_амплитуда * np.sin(частота_температуры * (высота — средняя точка высоты)) + 750 # Создать случайный шум для небольших изменений температуры макс_вариация = 50 шум = np.random.uniform(-max_variation, max_variation, (num_rows, num_columns)) # Добавьте шум к температурам, чтобы создать температурные профили temp_array = температура[:, np.newaxis] + шум """ Анализ главных компонентов""" из sklearn.decomposition импорт PCA run_number = np.arange(1, 301).reshape(300, 1) ПКА = ПКА(2) Principal_comComponents = pca.fit_transform(temperature_array.T) печать (temperature_array.shape) печать(principal_comComponents.shape) # Создайте фигуру с двумя подграфиками рис, axs = plt.subplots(1, 3, figsize=(12, 5)) # Первый сюжет # График зависимости температуры от высоты для всех 300 профилей для меня в диапазоне (num_columns): sc1 = axs[0].plot(temperature_array[:, i], height_array[:, i], label=f'Profile {i+1}', альфа=0,8) # Постройте профиль номинальной температуры отмеченными линиями номинальная_температура = температура_амплитуда * np.sin(температура_частота * (высота - высота_средняя точка)) + 750 axs[0].plot(nominal_temperature, heights, 'k', linewidth=2, label='Nominal Profile', linestyle='--') # Установите метки и заголовок сюжета axs[0].set_ylabel('Высота (км)') axs[0].set_xlabel('Температура (K)') axs[0].set_title('Профили температуры и высоты') # Второй сюжет sc2 = axs[1].scatter(основные_компоненты[:, 0], главные_компоненты[:, 1], c=run_number.T,edgecolor='none', альфа=0,5, cmap=plt.cm.get_cmap('Акцент')) axs[1].set_xlabel('компонент 1') axs[1].set_ylabel('компонент 2') fig.colorbar(sc2, ax=axs[1]) # Третий сюжет sc3 = axs[2].plot(np.cumsum(pca.explained_variance_ratio_)) axs[2].set_xlabel('количество компонентов') axs[2].set_ylabel('кумулятивная объясненная дисперсия') plt.tight_layout()
Изображение

Ответить

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

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

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

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

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