Под '''уменьшением размерностиМетод главных компонент''' (англ. ''dimensionality reductionPrincipal Components Analysis, PCA'') в машинном обучении подразумевается уменьшение числа признаков набора — один из основных способов уменьшить размерность данных, потеряв наименьшее количество информации. Изобретен К. Пирсоном (англ. Наличие Karl Pearson) <ref>[https://zenodo.org/record/1430636 Pearson, K. (1901). "On Lines and Planes of Closest Fit to Systems of Points in Space"]</ref> в нем признаков избыточных1901 г. Применяется во многих областях, неинформативных или слабо информативных может понизить эффективность моделитаких как распознавание образов, а после такого преобразования она упрощаетсякомпьютерное зрение, сжатие данных и т.п. Вычисление главных компонент сводится к вычислению собственных векторов и соответственно уменьшается размер набора собственных значений ковариационной матрицы исходных данных или к [[Сингулярное разложение|сингулярному разложению]] матрицы данных в памяти и ускоряется работа алгоритмов ML на нем. Уменьшение размерности может быть осуществлено методами выбора признаков Иногда метод главных компонент называют преобразованием Карунена-Лоэва (англ. ''feature selectionKarhunen-Loeve'') <ref>[http://fourier.eng.hmc.edu/e161/lectures/klt/node3.html Karhunen-Loeve Transform (KLT)]</ref> или выделения признаков преобразованием Хотеллинга (англ. ''feature extractionHotelling transform'').==Выбор признаков==Методы '''выбора признаков''' оставляют некоторое подмножество исходного набора признаков, избавляясь от признаков избыточных и слабо информативных. Основные преимущества этого класса алгоритмов:*Уменьшение вероятности [[переобучение|переобучения]];*Увеличение точности предсказания модели;*Сокращение времени обучения;*Увеличивается семантическое понимание модели.
Все методы выбора признаков можно разделить на 5 типов, которые отличаются алгоритмами выбора лишних признаков.===Фильтры=Формальная постановка задачи=='''Фильтры''' [[File:Pearson pca example.jpg|300px|thumb|right|Иллюстрация к работе К. Пирсона (англ. ''filter methods''1901) измеряют релевантность признаков : даны точки <tex> P_i</tex> на основе функции плоскости, <tex> p_i</tex> — расстояние от <tex> P_i</tex> до прямой <tex> AB</tex>. Ищется прямая <tex> AB</tex>, минимизирующая сумму <tex>\sum_i p_i^2</tex>]]Пусть имеется $\mun$ числовых признаков $f_j(x), j = 1, ... , и затем решают по правилу n$. Объекты обучающей выборки будем отождествлять с их признаковыми описаниями: $x_i \kappaequiv (f_1(x_i), ..., f_n(x_i)), i = 1, ..., l$. Рассмотрим матрицу $F$, какие признаки оставить в результирующем множествестроки которой соответствуют признаковым описаниям обучающих объектов:$$F_{l \times n} =\begin{pmatrix}f_1(x_1) & ... & f_n(x_1)\\... & ... & ...\\f_1(x_l) & ... & f_n(x_l)\end{pmatrix}=\begin{pmatrix}x_1\\...\\x_l\end{pmatrix}.$$
Фильтры могут быть:*Одномерные Обозначим через $z_i = (g_1(англx_i), ... ''univariate'', g_m(x_i) {{---}} функция )$ признаковые описания тех же объектов в новом пространстве $Z = \mu$ определяет релевантность одного признака по отношению к выходным меткам. В таком случае обычно измеряют "качество" каждого признака и удаляют худшие;*Многомерные (англ. ''multivariate'') mathbb{R}^{---m}} функция $\muменьшей размерности, $m < n$ определяет релевантность некоторого подмножества исходного множества признаков относительно выходных меток.:
Распространенными вариантами для $$G_{l \mu$ являются:times m} =\begin{pmatrix}*Коэффициент ранговой корреляции Спирмена <ref>[https://eng_1(x_1) & .wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient Определение коэффициента ранговой корреляции Спирмена]</ref>(англ. ''Spearman's rank correlation coefficient''): $p& g_m(x, yx_1)=\displaystyle \frac{... & ... & ...\\sum_{i, j}g_1(x_{ij}-\bar{x_j}x_l)& ... & g_m(y_i-\bar{y}x_l)}{\sqrt{\sum_end{i, jpmatrix}(x_{ij}-=\barbegin{x_jpmatrix})^2z_1\sum_i(y_i-\bar{y})^2}}$;*Information gain<ref>[https://en.wikipedia.org/wiki/Information_gain_in_decision_trees Определение information gain]</ref>: $IG(x, y)=.\displaystyle -\sum_{i=1}^kp(c_i)\log_2{(p(c_i))}+z_l\sum_end{i=1}^{n}p(t_i)\sum_{j=1}^kp(c_j|t_i)log_2{(p(c_j|t_i))pmatrix}.$$, и другие.
Преимуществом группы фильтров является простота вычисления релевантности признаков в наборе данныхПотребуем, но недостатком в таком подходе является игнорирование возможных зависимостей между признаками.===Оберточные методычтобы исходные признаковые описания можно было восстановить по новым описаниям с помощью некоторого линейного преобразования, определяемого матрицей $U ===[[File:Feature_selection_wrapper_rus.png|450px|thumb|right|Процесс работы оберточных методов]]'''Оберточные методы''' (англ. ''wrapper methods''u_{js}) находят подмножество искомых признаков последовательно, используя некоторый классификатор как источник оценки качества выбранных признаков, т.е. этот процесс является циклическим и продолжается до тех пор, пока не будут достигнуты заданные условия останова. Оберточные методы учитывают зависимости между признаками, что является преимуществом по сравнению с фильтрами, к тому же показывают большую точность, но вычисления занимают длительное время, и повышается риск [[переобучение|переобучения]]. _{n \times m}$:
Существует несколько типов оберточных методов: детерминированные, которые изменяют множество признаков по определенному правилу, а также рандомизированные, которые используют генетические алгоритмы для выбора искомого подмножества признаков. Среди детерминированных алгоритмов самыми простыми являются:*SFS $$\hat{f}_j(Sequential Forward Selectionx) = \sum_{s = 1}^{---m}} жадный алгоритм, который начинает с пустого множества признаков, на каждом шаге добавляя лучший из еще не выбранных признаков в результирующее множество;*SBS g_s(Sequential Backward Selectionx) u_{{---js}} алгоритм обратный SFS, который начинает с изначального множества признаков\; j = 1, и удаляет по одному или несколько худших признаков на каждом шаге..., n, \; x \in X,$$
Популярным оберточным методом является SVM-RFE (SVM-based Recursive Feature Elimination), который иногда также обозначается как встроенный <ref>[httpsили в векторной записи://benthamopen.com/FULLTEXT/TOBIOIJ-11-117/ C$\hat{x} = z U^T$. Embedded method]</ref>. Этот метод использует как классификатор [[Метод опорных векторов (SVM)| SVM]]<sup>[на 28.01.19 Восстановленное описание $\hat{x}$ не создан]</sup> и работает итеративно: начиная обязано в точности совпадать с полного множества признаков обучает классификатор, ранжирует признаки по весамисходным описанием $x$, которые им присвоил классификатор, убирает какое-то число признаков и повторяет процесс с оставшегося подмножества фичей, если не было достигнуто но их требуемое количествоотличие на объектах обучающей выборки должно быть как можно меньше при выбранной размерности $m$. Таким образомБудем искать одновременно и матрицу новых признаковых описаний $G$, этот метод очень похож на встроенныйи матрицу линейного преобразования $U$, потому что непосредственно использует знание того, как устроен классификатор.при которых суммарная невязка восстановленных описаний минимальна:
$$\Delta^2(G, U) =\sum_{i =1}^{l} \| \hat{x}_i - x_i \|^2 =Встроенные методы=\sum_{i ==[[File:Feature_selection_embedded_rus.png1}^{l} \|450pxz_i U^T - x_i \|thumb^2 = \|rightGU^T - F \|Процесс работы встроенных методов]]Группа '''встроенных методов''' (англ. ''embedded methods'') очень похожа на оберточные методы^2 \to \mathop{min}_{G, но для выбора признаков используется непосредственно структуру некоторого классификатора. В оберточных методах классификатор служит только для оценки работы на данном множестве признаков, тогда как встроенные методы используют какую-то информацию о признакахU}, которую классификаторы присваивают во время обучения. $$
Одним из примеров встроенного метода является реализация на [[Дерево решений и случайный лес| случайном лесе]]: каждому дереву на вход подаются случайное подмножество данных из датасета с каким-то случайным набор признаков, в процессе обучения каждое из деревьев решений производит "голосование" за релевантность его признаков, эти данные агрегируются, и на выходе получаются значения важности каждого признака набора данных. Дальнейший выбор нужных нам признаков уже зависит от выбранного критерия отборагде все нормы евклидовы.
Встроенные методы используют преимущества оберточных методов Будем предполагать, что матрицы $G$ и являются более эффективными$U$ невырождены: $rank \, при этом на отбор тратится меньше времениG = rank \, уменьшается риск [[переобучение|переобучения]]U = m$. Иначе существовало бы представление $\bar{G} \bar{U}^T = G U^T$ с числом столбцов в матрице $\bar{G}$, но тменьшим $m$.к. полученный набор признаков был отобран на основе знаний о классификатореПоэтому интересны лишь случаи, то есть вероятностькогда $m \leq rank \, что для другого классификатора это множество признаков уже не будет настолько же релевантнымF$.
==Решение=Другие методы===[[File:Feature_selection_ensemble_rus.png|thumb|Один из примеров процесса работы ансамблевых методов]]Есть и другие методы выбора признаков: '''гибридные''' (англ. ''hybrid methods'') и '''ансамблевые''' (англ. ''ensemble methods''). '''Гибридные методы''' комбинируют несколько разных методов выбора признаков, например, некоторое множество фильтров, а потом запускают оберточный или встроенный метод. Таким образом, гибридные методы сочетают в себе преимущества сразу нескольких методов, и на практике повышают эффективность выбора признаков.
'''Ансамблевые методы''' применяются больше для наборов данных с очень большим числом признаков. В данном подходе для начального множества признаков создается несколько подмножеств признаков, и эти группы каким-то образом объединяются, чтобы получить набор самых релевантных признаков. Это довольно гибкая группа методов, т.к. для нее можно применять различные способы выбора признаков и объединения их подмножествИсчерпывающее решение сформулированной задачи даёт следующая теорема.
<div style="clear:{{{1Теорема|both}}};"></div>statement = Если $m \leq rank \, F$, то минимум $\Delta^2(G, U)$ достигается, когда столбцы матрицы $U$ есть собственные векторы $F^T F$, соответствующие $m$ максимальным собственным значениям. При этом $G = F U$, матрицы $U$ и $G$ ортогональны.
|proof =Запишем необходимые условия минимума: <tex>\frac{\partial \Delta^2}{\partial G} ==Примеры кода scikit(G U^T -learnF) U =0;\\ \frac{\partial \Delta^2}{\partial U} =G^T (G U^T - F) =0.</tex> Пример кодаПоскольку искомые матрицы $G$ и $U$ невырождены, реализующего функцию оценки фильтра на основе коэффициента ранговой корреляцииотсюда следует: # Импорт библиотек import pandas as pd<tex> import numpy as npG = F U (U^T U)^{-1};\\ U = F^T G (G^T G)^{-1}. </tex> # Вспомогательная функция для расчета корреляции def correlationФункционал $\Delta^2(XG, YU)$ зависит только от произведения матриц $G U^T$, поэтому решение задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ определено с точностью до произвольного невырожденного преобразования $R:G U^T = (G R) (R^{-1} U^T)$. Распорядимся свободой выбора $R$ так, чтобы матрицы $U^T U$ и $G^T G$ оказались диагональными. Покажем, что это всегда возможно. return npПусть $\tilde{G} \tilde{U}^T$ {{---}} произвольное решение задачи.cov Матрица $\tilde{U}^T \tilde{U}$ симметричная, невырожденная, положительно определенная, поэтому существует невырожденная матрица $S_{m \times m}$ такая, что $S^{-1} \tilde{U}^T \tilde{U} (XS^{-1})^T = I_m$. Матрица $S^T \tilde{G}^T \tilde{G} S$ симметричная и невырожденная, поэтому существует ортогональная матрица $T_{m \times m}$ такая, что $T^T (S^T \tilde{G}^T \tilde{G} S) T = diag(\lambda_1, ..., Y\lambda_m) \equiv \Lambda$ {{---}} диагональная матрица. По определению ортогональности $T^T T = I_m$. Преобразование $R = S T$ невырождено. Положим $G = \tilde{G} R$, $U^T = R^{-1} \tilde{U}^T$. Тогда <tex>G^T G = T^T (S^T \tilde{G}^T \tilde{G} S) T = \Lambda;\\ U^T U = T^{-1} (S^{-1} \tilde{U}^T \tilde{U} (S^{-1})^T) (T^{-1})^T = (T^T T)^{-1} = I_m.</ nptex> В силу $G U^T = \tilde{G} \tilde{U}^T$ матрицы $G$ и $U$ являются решением задачи $\Delta^2(G, U) \to \mathop{min}_{G, U}$ и удовлетворяют необходимому условию минимума.sqrtПодставим матрицы $G$ и $U$ в <tex>G = F U (U^T U)^{-1};\\ U = F^T G (npG^T G)^{-1}. </tex> Благодаря диагональности $G^T G$ и $U^T U$ соотношения существенно упростятся: <tex>G = F U;\\ U \Lambda = F^T G.</tex> Подставим первое соотношение во второе, получим $U \Lambda = F^T F U$. Это означает, что столбцы матрицы $U$ обязаны быть собственными векторами матрицы $F^T F$, а диагональные элементы $\lambda_1, ..., \lambda_m$ - соответствующими им собственными значениями.var Аналогично, подставив второе соотношение в первое, получим $G \Lambda = F F^T G$, то есть столбцы матрицы $G$ являются собственными векторами $F F^T$, соответствующими тем же самым собственным значениям. Подставляя $G$ и $U$ в функционал $\Delta^2(XG, U) * np$, находим: <tex>\Delta^2(G, U) = \| F - G U^T \|^2 = tr \, (F^T - U G^t)(F - G U^T) = tr \, F^T (F - G U^T) = tr \, F^T F - tr \, F^T G U^T = \| F \|^2 - tr \, U \Lambda U^T = \| F \|^2 - tr \, \Lambda = \sum_{j = 1}^{n} \lambda_j - \sum_{j = 1}^{m} \lambda_j - \sum_{j = m + 1}^{n} \lambda_j,</tex> где $\lambda_1 , ..var., \lambda_n$ - все собственные значения матрицы $F^T F$. Минимум $\Delta^2$ достигается, когда $\lambda_1, ..., \lambda_m$ {{---}} наибольшие $m$ из $n$ собственных значений. Собственные векторы $u_1, ..., u_m$, отвечающие максимальным собственным значениям, называют ''главными компонентами''.}} ==Свойства== ===Связь с сингулярным разложением=== Если $m = n$, то $\Delta^2(Y)G, U)= 0$. В этом случае представление $F = G U^T$ является точным и совпадает с сингулярным разложением: $F = G U^T = V D U^T$, если положить $G = V D$ и $\Lambda = D^2$. При этом матрица $V$ ортогональна: $V^T V = I_m$.
# Сам фильтр на основе метрики ранговой корреляции # Аргументы X -- значения объектов датасета для какой-Если $m < n$, то фичи, Y -- метки этих объектов def measure_spearmans(X, Y): xr = pdпредставление $F \approx G U^T$ является приближённым.SeriesСингулярное разложение матрицы $G U^T$ получается из сингулярного разложения матрицы $F$ путём отбрасывания (Xобнуления)$n - m$ минимальных собственных значений.rank() yr = pd.Series(Y).rank() return correlation(xr, yr)
Пример кода, реализующего SVM-RFE wrapper: # Импорт библиотек import numpy as np import pandas as pd from sklearn import svm===Преобразование Карунена–Лоэва===
# X -- наш датасет, Y -- массив меток # N -- число признаков, которые хотим оставить, step -- сколько фичей удаляется на каждой итерации # Возвращает массив из булевых переменных размерностью 1x[число признаков], показывающий, отбрасываем признак или нет def RFE(X, Y, N, step Диагональность матрицы $G^T G = 10): # cache_size нужен\Lambda$ означает, если набор данных большойчто новые признаки $g_1, иначе можно опустить clfRFE = svm.SVC(kernel='linear', cache_size=1024) featureCount = X.shape[1] featureList = np.arange(0, featureCount ) included = np.full(featureCount, True) curCount = featureCount while curCount > N: actualFeatures = featureList[included] Xnew = X[:, actualFeatures] clfRFE.fit(Xnew, Y) curStep = min(step, curCount - N) elim = np.argsort(np.abs(clfRFE.coef_[0]))[:curStep] included[actualFeatures[elim]] = False curCount -= curStep return included==Выделение признаков==Другим способом уменьшить размерность входных данных является выделение признаков. Эти методы каким-то образом составляют g_m$ не коррелируют на объектах из уже исходных признаков новые, все также полностью описывающие пространство набора данных, но уменьшая его размерность и теряя в репрезентативности данных, тобучающей выборки.к. становится непонятно, за что отвечают новые признаки.Все методы feature extraction можно разделить на Ортогональное преобразование $U$ называют ''декоррелирующим'линейные'или преобразованием '' и '''нелинейные'Карунена–Лоэва''. Если $m = n$, то о прямое и обратное преобразование вычисляются с помощью одной и той же матрицы $U: F = G U^T$ и $G = F U$.
Одним из самых известных методов '''линейного''' выделения признаков является [[Метод главных компонент (PCA)| PCA]]<sup>[на 28.01.19 не создан]</sup> (Principal Component Analysis, рус. ''метод главных компонент''). Основной идеей этого метода является поиск такой гиперплоскости, на которую при ортогональной проекции всех признаков максимизируется дисперсия. Данное преобразование может быть произведено с помощью сингулярного разложения матриц и создает проекцию только на линейные многомерные плоскости, поэтому и метод находится в категории линейных.===Эффективная размерность===
К Главные компоненты содержат основную информацию о матрице $F$. Число главных компонент $m$ называют также ''эффективной размерностью'нелинейным''' методам, например, могут быть отнесены методы отображающие исходное пространство признаков на нелинейные поверхности или топологические многообразиязадачи. Одним из таких алгоритмов является [[Стохастическое вложение соседей с t-распределением |t-SNE]]<sup>[на 28На практике её определяют следующим образом.01.19 не создан]</sup> (t-distributed Stochastic Neighbor Embedding, рус. ''стохастическое вложение соседей с t-распределением''). Данный метод состоит из двух шагов: изначально строится распределение вероятностей по всем парам точек набора данных, каждая условная вероятность Все собственные значения матрицы $p_{j|i}F^T F$ которого означает насколько точка $X_j$ близка к точке $X_i$ при гауссовом распределении вокруг $X_iупорядочиваются по убыванию: $\lambda_1 \geq .. Данное распределение как метрику похожести использует евклидово расстояние. Алгоритм старается получить отображение из точек размерности $\mathbb{R}^kgeq \lambda_n \geq 0$ в меньшую размерность . Задаётся пороговое значение $\mathbb{R}^depsilon \in [0, 1]$, для этого вводится еще одно распределениедостаточно близкое к нулю, описывающее насколько точки из нового пространства похожи друг на другаи определяется наименьшее целое $m$, но используя при этом t-распределение Стьюдента с одной степенью свободы. Как метрику похожести двух распределений используется дивергенция Кульбака-Лейблера<ref>[https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence Дивергенция Кульбака-Лейблера]</ref>, и чтобы найти точки новой размерности котором относительная погрешность приближения матрицы $F$ не превышает $d\epsilon$ запускается градиентный спуск для минимизации этой величины. ===Пример кода scikit-learn===Пример выделения признаков с помощью PCA в scikit-learn: # Импорт библиотек from sklearn.decomposition import PCA from sklearn.model_selection import train_test_split
X $$E(m) = \frac{\| G U^T - F \|^2}{\| F \|^2} = \frac{\lambda_{m + 1} + ...+ \lambda_n}{\lambda_1 + . # загрузка X Y = ..+ \lambda_n} \leq \epsilon . # загрузка Y # Разделение данных на train и test Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, Y)$$
clf = ... # берем какой-то классификатор # Обучаем PCA для выделения 5 признаков pca = PCAВеличина $E(n_components=5m) pca$ показывает, какая доля информации теряется при замене исходных признаковых описаний длины $n$ на более короткие описания длины $m$.fitМетод главных компонент особенно эффективен в тех случаях, когда $E(Xtrainm) # Изменяем наши наборы данных под выбранные признаки Xtrain = pca$ оказывается малым уже при малых значениях $m$.transform(Xtrain) Xtest = pcaЕсли задать число $\epsilon$ из априорных соображений не представляется возможным, прибегают к ''критерию «крутого обрыва»''.transform На графике $E(Xtestm) # Обучаем классификатор и проверяем точность его работы clf.fit(Xtrain$ отмечается то значение $m$, Ytrain) print ("Scoreпри котором происходит резкий скачок: %.6f" % clf.score$E(Xtest, Ytestm - 1)\gg E(m) ===Пример на языке Scala===SBT зависимость: libraryDependencies '''+=''' "com.github.haifengl" '''%%''' "smile-scala" '''%''' "1.5.2"Пример уменьшение размерности используя smile.feature.GAFeatureSelection<ref>[https://haifengl.github.io/smile/feature.html#genetic-algorithm-feature-selection Smile$, при условии, Genetic Algorithm Based Feature Selection]</ref>: '''import '''smile.classification._ '''import '''smile.data._ '''import '''smile.feature.GAFeatureSelection '''import '''smile.read '''import '''smile.validationчто $E(m)$ уже достаточно мало.Accuracy
<span style="color:#3D9970>// Загрузка =Визуализация многомерных данных</span> '''val '''data = read.arff("data/weka/segment-test.arff", 19) '''val '''(x, y) = data.unzipInt '''val '''trainer = '''new '''GradientTreeBoost.Trainer(100) '''val '''measure = '''new '''Accuracy <span style="color:#3D9970>// Cоздание генетического алгоритма и его настройка.</span> '''val '''selector = '''new '''GAFeatureSelection <span style="color:#3D9970>// Размер популяции - 50, количество поколений - 20 </span> <span style="color:#3D9970>// Каждая возращаемая BitString содержит фичи и их качество.</span> '''val '''result = selector.learn(50, 20, trainer, measure, x, y, 5) result.foreach { bits => print(100*bits.fitness) println(bits.bits.mkString(" ")) }
Метод главных компонент часто используется для представления многомерной выборки данных на двумерном графике. Для этого полагают $m =2$ и полученные пары значений $(g_1(x_i), g_2(x_i)), i ==Пример 1, ..., l$, наносят как точки на график. Проекция на главные компоненты является наименее искаженной из всех линейных проекций многомерной выборки на какую-либо пару осей. Как правило, в осях главных компонент удаётся увидеть наиболее существенные особенности исходных данных, даже несмотря на неизбежные искажения. В частности, можно судить о наличии кластерных структур и выбросов. Две оси $g_1$ и $g_2$ отражают «две основные тенденции» в данных. Иногда их удаётся интерпретировать, если внимательно изучить, какие точки на языке Java===графике являются «самыми левыми», «самыми правыми», «самыми верхними» и «самыми нижними». Этот вид анализа не позволяет делать точные количественные выводы и обычно используетсяПример уменьшения размерности датасета с применением целью понимания данных. Аналогичную роль играют многомерное шкалирование <coderef>weka[https://ru.attributeSelectionwikipedia.PrincipalComponentsorg/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%88%D0%BA%D0%B0%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 Многомерное шкалирование]</coderef>и карты Кохонена <ref>[httphttps://weka.sourceforgeru.net/docwikipedia.dev/weka/attributeSelectionorg/PrincipalComponents.htmlwiki/ Weka, PCA%D0%A1%D0%B0%D0%BC%D0%BE%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D1%83%D1%8E%D1%89%D0%B0%D1%8F%D1%81%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0_%D0%9A%D0%BE%D1%85%D0%BE%D0%BD%D0%B5%D0%BD%D0%B0 Самоорганизующаяся карта Кохонена]</ref>.
<code>Maven</code> зависимость==Пример кода scikit-learn==Пример применения PCA к датасету Iris для уменьшения размерности: <dependencyspan style="color:#3D9970> <groupId>nz.ac.waikato.cms.weka# Импорт библиотек</groupIdspan> <artifactId>weka-stable</artifactId> import numpy as np <version>3 import matplotlib.8.0</version>pyplot as plt from sklearn import decomposition </dependency>from sklearn import datasets
'''import''' weka.attributeSelection.PrincipalComponents;<span style="color:#3D9970># Загрузка данных</span> '''import''' weka.core.Instances;centers = [[1, 1], [-1, -1], [1, -1]] '''import''' wekairis = datasets.filters.Filter;load_iris() '''import''' wekaX = iris.filters.unsupervised.attribute.NumericToNominal; '''import''' java.io.BufferedReader;data '''import''' java.ioy = iris.FileReader;target
[[File:Pca iris example.png|275px|thumb|right|Применения PCA к датасету Iris]] <font colorspan style="green"color:#3D9970>// load dataset# Преобразование данных датасета Iris, уменьшающее размерность до 2</fontspan> '''var''' data pca = new Instancesdecomposition.PCA(new BufferedReader(new FileReader("data/bank-data.arff"))n_components=3); '''var''' filter = new NumericToNominalpca.fit(X); filterX = pca.setInputFormattransform(dataX); data y = Filternp.useFilterchoose(datay, [1, 2, filter0]).astype(np.float); <font color="green">// initialize the PCA-based selector</font>plt.clf() '''var''' pca = new PrincipalComponentsplt.cla(); <font colorplt.scatter(X[:, 0], X[:, 1], c="green">// dimensionality reduction is achieved through selecting enough eigenvectors to account</font> <font colory, cmap="green">// for some percantege of the variance in the original data</font> pcaplt.setVarianceCovered(0cm.95nipy_spectral, edgecolor='k'); pcaplt.buildEvaluatorxlabel(data"PC1"); <font color=plt.ylabel("greenPC2">// transform the dataset</font>) data = pcaplt.transformedDatashow(data);
==См. также==
*[[Переобучение]]*[[Метод опорных векторов (SVM)| SVM]]<sup>[на 28.01.19 не создан]</sup>*[[Дерево решений и случайный лес| Случайный лесУменьшение размерности]]*[[Метод главных компонент (PCA)| PCA]Сингулярное разложение]<sup>[на 28.01.19 не создан]</sup>*[[Стохастическое вложение соседей с t-распределением |t-SNE]]<sup>[на 28.01.19 не создан]</sup>
==Примечания==
<references/>
==Источники информации==
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82 machinelearning.ru — Метод главных компонент]#[https://www.youtube.com/watch?v=wcJ0nSUr7ws Лекция "Регрессионный анализ и метод главных компонентов"] {{---}} К.В. Воронцов, курс "Машинное обучение" 2014#[http://research.cs.tamu.edu/prism/lectures/pr/pr_l11pr_l9.pdf Sequential feature selectionPCA] {{---}} курс ML Texas A&M University#[https://en.wikipedia.org/wiki/Feature_selection Feature selectionPrincipal_component_analysis Principal Component Analysis] {{---}} статья про Feature Selection Principal Component Analysis в Wikipedia#[https://benthamopen.com/FULLTEXT/TOBIOIJ-11-117 Публикация про feature selection]#[https://towardsdatascience.com/feature-selection-using-randomunderstanding-forestpca-26d7b747597f Embedded random forestfae3e243731d Understanding PCA]
[[Категория: Машинное обучение]]
[[Категория: Уменьшение размерности]]
[[Категория: Метод главных компонент]]