metodi/app/labs/lab5.py

86 lines
3.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import matplotlib.pyplot as plt
import matplotlib
from sklearn.datasets import load_iris
from sklearn.decomposition._pca import PCA
import numpy as np
class lab5:
def __init__(self):
pass
def main(self):
matplotlib.use('TkAgg')
# Загружаем данные ирисов
data = load_iris()
X = data.data # признаки ирисов
Y = data.target # сорта ирисов
Y_str = data.target_names # названия сортов ирисов
# setosa
setosa_inds = Y == np.where(Y_str == "setosa")
setosa_data = X[np.ravel(setosa_inds), :]
# versicolor
versicolor_inds = Y == np.where(Y_str == "versicolor")
versicolor_data = X[np.ravel(versicolor_inds), :]
# virginica
virginica_inds = Y == np.where(Y_str == "virginica")
virginica_data = X[np.ravel(virginica_inds), :]
plt.scatter(setosa_data[:, 1], setosa_data [:, 2], marker="+", label='Setosa')
plt.scatter(virginica_data[:, 1], virginica_data[:, 2], marker=".", label='Vergisicа')
plt.title('Скаттерограмма Setosa и Virginica')
plt.xlabel('Ширина чашелистика (см)')
plt.ylabel('Ширина лепестка (см)')
plt.legend()
plt.show()
# Выполняем PCA для сокращения размерности до 2D
PCA_obj = PCA(n_components=2) # Две главные компоненты
N = len(setosa_data)
data_0 = np.vstack((setosa_data, virginica_data))
reduced_data_0 = PCA_obj.fit_transform(data_0)
print (reduced_data_0)
#Скаттерограмма объекты сортов ирисов в пространстве главных компонент
plt.scatter(reduced_data_0[0:N, 0], reduced_data_0[0:N, 1], marker=".", label='Setosa')
plt.scatter(reduced_data_0[N:, 0], reduced_data_0[N:, 1], marker="*", label='Virginica')
plt.xlabel("Главная компонента 1")
plt.ylabel("Главная компонента 2")
plt.title("Скатерограмма Setosa и Virginica")
plt.legend()
plt.show()
# Для всех Сортов
plt.scatter(setosa_data[:, 1], setosa_data [:, 2], marker="+", label='Setosa')
plt.scatter(versicolor_data[:, 1], versicolor_data[:, 2], marker=".", label='Versicolor')
plt.scatter(virginica_data[:, 1], virginica_data[:, 2], marker=".", label='Vergisicа')
plt.title('Скаттерограмма для всех сортов ирисов')
plt.xlabel('Ширина чашелистика (см)')
plt.ylabel('Ширина лепестка (см)')
plt.legend()
plt.show()
data = np.vstack((setosa_data, versicolor_data, virginica_data))
reduced_data = PCA_obj.fit_transform(data)
#Скаттерограмма объекты сортов ирисов в пространстве главных компонент
plt.scatter(reduced_data[0:N, 0], reduced_data[0:N, 1], marker="+", label='Setosa')
plt.scatter(reduced_data[N:2*N, 0], reduced_data[N:2*N, 1], marker=".", label='Versicolor')
plt.scatter(reduced_data[2*N:, 0], reduced_data[2*N:, 1], marker="*", label='Virginica')
plt.xlabel("Главная компонента 1")
plt.ylabel("Главная компонента 2")
plt.title("Скатерограмма всех сортов")
plt.legend()
plt.show()
if __name__ == "__main__":
l5 = lab5()
l5.main()