Машинное обучение Python Визуализация радужной оболочки: Упражнение 19 с решением
Из Википедии —
Анализ главных компонентов (PCA) — это статистическая процедура, которая использует ортогональное преобразование для преобразования набор наблюдений за возможно коррелированными переменными (объекты, каждая из которых принимает различные числовые значения) в набор значений линейно некоррелированных переменных, называемых главными компонентами. Это преобразование определяется таким образом, что первый главный компонент имеет максимально возможную дисперсию (то есть учитывает как можно большую вариативность данных), а каждый последующий компонент, в свою очередь, имеет самую высокую дисперсию, возможную при ограничении что он ортогонален предыдущим компонентам. Результирующие векторы (каждый из которых является линейной комбинацией переменных и содержит n наблюдений) представляют собой некоррелированный ортогональный базисный набор. PCA чувствителен к относительному масштабированию исходных переменных.
Напишите программу Python для создания анализа основных компонентов (PCA) набора данных радужной оболочки глаза.
Пример решения:
Код Python:
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfrom sklearn import decpositionfrom sklearn import preprocessing # import iris.csviris = pd.read_csv ("iris.csv") числа. # создание labelEncoderle = preprocessing.LabelEncoder () # Преобразование строковых меток в числа. iris.Species = le.fit_transform (iris.Species) # Drop id columniris = iris.drop ('Id', axis = 1) X = iris .iloc [:,: -1] .valuesy = iris.iloc [:, 4] .valuesfig = plt.figure (1, figsize = (7, 6)) plt.clf () ax = Axes3D (fig, rect = [0, 0, .95, 1], elev = 48, azim = 134) plt.cla () pca = разложение.PCA (n_components = 3) pca.fit (X) X = pca.transform (X) для имени , метка в [('Setosa', 0), ('Versicolour', 1), ('Virginica', 2)]: ax.text3D (X [y == label, 0] .mean (), X [y == метка, 1] .mean () + 1.5, X [y == label, 2] .mean (), name, horizontalalignment = 'center', bbox = dict (alpha = .5, edgecolor = 'w', facecolor = 'w')) # Измените порядок меток, чтобы цвета соответствовали кластеру resultsy = np.choose (y, [1, 2, 0]). astype (np.float) ax.scatter ( X [:, 0], X [:, 1], X [:, 2], c = y, cmap = plt.cm.nipy_spectral, edgecolor = 'k') ax.w_xaxis.set_ticklabels ([]) ax. w_yaxis.set_ticklabels ([]) ax.w_zaxis.set_ticklabels ([]) plt.show ()
Вывод:
Редактор кода Python: