Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Сингулярне розкладання (SVD) | Лінійна алгебра та операції з матрицями
Вступ до SciPy

Сингулярне розкладання (SVD)

Свайпніть щоб показати меню

Сингулярне розкладання (SVD) — це математичний метод, який допомагає зрозуміти та спростити складні дані. Уявіть, що у вас є велика таблиця чисел — SVD дозволяє розбити цю таблицю на три менші, легші для розуміння частини. Кожна частина розкриває різні аспекти початкових даних, такі як основні закономірності або важливі характеристики.

Мета SVD — надати сенс складній інформації. Розділяючи матрицю (таблицю чисел) на простіші компоненти, ви можете:

  • Визначати найважливіші тенденції або ознаки у ваших даних;
  • Видаляти шум або неактуальні деталі, які можуть ускладнювати аналіз;
  • Зменшувати обсяг інформації, яку потрібно зберігати чи обробляти, що робить обчислення швидшими та ефективнішими;
  • Виявляти приховані зв’язки або структури, які неочевидні на перший погляд.

SVD використовується в багатьох сучасних технологіях і наукових галузях. Наприклад:

  • У стисненні зображень SVD допомагає зменшити розмір файлів фотографій без втрати ключових деталей;
  • У обробці музики та мовлення допомагає зменшити фоновий шум і покращити якість сигналу;
  • У рекомендованих системах, наприклад, на стрімінгових сервісах, SVD знаходить закономірності у ваших вподобаннях для пропозиції нового контенту;
  • У обробці природної мови допомагає групувати схожі теми або значення у великих текстових колекціях.

Розуміння SVD надає потужний інструмент для роботи з даними незалежно від вашого досвіду. Це дозволяє отримувати цінні інсайти, спрощувати інформацію та підвищувати ефективність сучасних цифрових систем.

12345678910111213
import numpy as np from scipy.linalg import svd # Create a sample matrix A = np.array([[3, 1, 1], [-1, 3, 1]]) # Compute the Singular Value Decomposition U, s, VT = svd(A) print("U matrix:\n", U) print("Singular values:", s) print("VT matrix:\n", VT)
Опис коду
expand arrow

Цей код демонструє, як виконати сингулярне розкладання (SVD) за допомогою SciPy у Python:

  • Спочатку імпортуються необхідні бібліотеки: numpy для створення та обробки масивів і scipy.linalg.svd для виконання SVD;
  • Створюється приклад матриці A у вигляді масиву розміром 2x3;
  • Функція svd розкладає матрицю A на три компоненти: U, s та VT. Тут U містить ліві сингулярні вектори, s — сингулярні значення, а VT — праві сингулярні вектори (транспоновані);
  • Код виводить кожен із цих компонентів у консоль, щоб ви могли побачити результати розкладання.

Цей приклад допомагає зрозуміти, як розкласти матрицю на її фундаментальні частини, що корисно для аналізу даних, стиснення та виявлення закономірностей у ваших даних.

12345678910111213141516171819202122
import numpy as np from scipy.linalg import svd # Original matrix A = np.array([[3, 1, 1], [-1, 3, 1]]) # Full SVD U, s, VT = svd(A) # Reconstruct the original matrix from all singular values S_full = np.zeros((U.shape[1], VT.shape[0])) np.fill_diagonal(S_full, s) A_reconstructed = np.dot(U, np.dot(S_full, VT)) print("Reconstructed matrix (all singular values):\n", A_reconstructed) # Truncate to keep only the largest singular value S_truncated = np.zeros_like(S_full) S_truncated[0, 0] = s[0] A_truncated = np.dot(U, np.dot(S_truncated, VT)) print("Reconstructed matrix (truncated):\n", A_truncated)
Опис коду
expand arrow

Цей код демонструє, як використовувати сингулярний розклад (SVD) для розкладу матриці та її відновлення з використанням усіх або лише деяких її сингулярних значень. Ось що відбувається крок за кроком:

  1. Створення початкової матриці: Матриця A визначається за допомогою NumPy. Це вихідна точка для SVD.
  2. Повний SVD: Функція svd з SciPy розкладає A на три матриці: U, s та VT. Вони представляють ліві сингулярні вектори, сингулярні значення та праві сингулярні вектори відповідно.
  3. Відновлення з усіма сингулярними значеннями: Створюється діагональна матриця S_full із сингулярних значень, і матриці (U, S_full, VT) перемножуються для відновлення початкової матриці. Це показує, що SVD може ідеально відновити матрицю, якщо використати всі сингулярні значення.
  4. Трукація для апроксимації: Створюється нова діагональна матриця S_truncated, у якій зберігається лише найбільше сингулярне значення (інші встановлюються в нуль). Перемноження U, S_truncated та VT дає апроксимацію початкової матриці. Цей крок демонструє зменшення розмірності: використовуючи менше сингулярних значень, матриця спрощується, зберігаючи її найважливіші характеристики.
  5. Вивід результату: Код виводить як повністю відновлену матрицю, так і трунковану версію, що дозволяє порівняти ефекти зменшення розмірності. Трункована матриця зберігає основну структуру, але втрачає деякі деталі, що ілюструє використання SVD для стиснення даних і виділення ознак.

SVD особливо цінний для зменшення розмірності. Зберігаючи лише найбільші сингулярні значення та відповідні вектори, можна апроксимувати початкову матрицю з набагато меншою кількістю вимірів. Цей процес видаляє шум і надлишкову інформацію, спрощуючи візуалізацію та обробку даних, зберігаючи при цьому їх найважливіші характеристики. На практиці це означає можливість стискати набори даних, прискорювати алгоритми машинного навчання та виявляти приховану структуру даних.

1. Які три матриці отримують у результаті SVD?

2. Як SVD може використовуватися для стиснення даних?

3. Яка функція SciPy використовується для сингулярного розкладу?

question mark

Які три матриці отримують у результаті SVD?

Виберіть правильну відповідь

question mark

Як SVD може використовуватися для стиснення даних?

Виберіть правильну відповідь

question mark

Яка функція SciPy використовується для сингулярного розкладу?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 5

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 2. Розділ 5
some-alt