Уменьшение размерности в машинном обучении
Уменьшение размерности используется для уменьшения размеров набора данных и ускорения последующего алгоритма машинного обучения. Он удаляет шум и избыточные функции, и это улучшает общую производительность алгоритма. В этой статье я познакомлю вас с уменьшением размерности в машинном обучении и его реализацией с использованием Python.
Что такое уменьшение размерности?
В реальных задачах наборы данных, для которых мы используем алгоритмы машинного обучения, содержат миллионы образцов для каждой функции, что очень замедляет процесс обучения модели и найти хорошее решение будет очень трудно. В таких ситуациях мы должны использовать концепцию уменьшения размерности, что означает уменьшение размеров набора данных.
Уменьшение размерности набора данных приводит к потере информации, поэтому, хотя это и ускоряет процесс обучения модели машинного обучения, но оно может ухудшить производительность модели. Поэтому, если процесс обучения идет очень медленно, вы должны попытаться сначала обучить свою модель, не уменьшая размеры в исходном наборе данных.
Хотя в некоторых случаях он отфильтровывает шум и другие ненужные данные, и это дает повышение производительности вашей модели. Помимо повышения производительности и ускорения процесса, уменьшение размерности также очень полезно для визуализации данных.
Уменьшение размерности с помощью Python
У нас есть различные алгоритмы машинного обучения, позволяющие уменьшить размерность набора данных. Анализ главных компонентов (PCA) – самый популярный алгоритм для уменьшения размеров набора данных. Он работает, определяя ближайшую к данным гиперплоскость, а затем проецирует на нее данные.
PCA можно использовать для значительного уменьшения размерности большинства наборов данных, даже если наборы данных сильно нелинейны, потому что этот алгоритм может, по крайней мере, избавиться от ненужных измерений. Теперь давайте посмотрим, как реализовать PCA для уменьшения размерности с помощью Python:
import numpy as np np.random.seed(4) m = 60 w1, w2 = 0.1, 0.3 noise = 0.1 angles = np.random.rand(m) * 3 * np.pi / 2 - 0.5 X = np.empty((m, 3)) from sklearn.decomposition import PCA pca = PCA(n_components = 2) X2D = pca.fit_transform(X) print(X2D)
Результат:
[[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.62642607e+255 -6.02307143e+255]
[-9.62421024e+255 -6.02303580e+255]
[-1.52883585e+256 3.45985862e+257]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002625e+255 -6.02312930e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002619e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[ 5.73820464e+257 3.35548554e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]]
Понимание PCA:
Для каждого главного компонента алгоритм находит единичный вектор с центром в нуле, указывающий в направлении главных компонентов. PCA предполагает, что набор данных сосредоточен вокруг источника, алгоритм PCA, предоставляемый Scikit-Learn, позаботится о центрировании набора данных, но если вы планируете реализовать этот алгоритм самостоятельно без использования Scikit-Learn, не забудьте сначала центрировать данные.
Вот как можно реализовать PCA без использования Scikit-Learn для уменьшения размерности с помощью Python:
#PCA without Scikit-Learn X_centered = X - X.mean(axis=0) U, s, Vt = np.linalg.svd(X_centered) c1 = Vt.T[:, 0] c2 = Vt.T[:, 1] m, n = X.shape S = np.zeros(X_centered.shape) S[:n, :n] = np.diag(s) np.allclose(X_centered, U.dot(S).dot(Vt)) W2 = Vt.T[:, :2] X2D = X_centered.dot(W2) print(X2D)
Результат:
[[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.62642607e+255 -6.02307143e+255]
[-9.62421024e+255 -6.02303580e+255]
[-1.52883585e+256 3.45985862e+257]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002625e+255 -6.02312930e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002619e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[ 5.73820464e+257 3.35548554e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]
[-9.63002624e+255 -6.02312929e+255]]
Надеюсь, вам понравилась эта статья о том, что такое уменьшение размерности в машинном обучении и его реализация с использованием Python.