import numpy as np import matplotlib import matplotlib.pyplot as plt from sklearn.datasets import load_iris class lab4: 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_inds = Y == np.where(Y_str == "setosa") setosa_data = X[np.ravel(setosa_inds), :] virginica_inds = Y == np.where(Y_str == "virginica") virginica_data = X[np.ravel(virginica_inds), :] # трехмерная скаттерограмма setosa и virginica fig = plt.figure() ax = plt.axes(projection='3d') ax.set_title('Cкаттерограмма setosa и virginica') x = setosa_data[:, 1] y = setosa_data[:, 3] z = setosa_data[:, 0] ax.scatter(x, y, z, c='blue') x = virginica_data[:, 1] y = virginica_data[:, 3] z = virginica_data[:, 0] ax.scatter(x, y, z, c='red') ax.set_xlabel('Ширина чашелистика') ax.set_ylabel('Ширина лепестка') ax.set_zlabel('Длина чашелистика') plt.show() # разница средних значений по всем признакам diff_mean = np.mean(setosa_data, axis=0) - np.mean(virginica_data, axis=0) print ('Разница средних значений:', diff_mean) # сумма матриц ковариации sum_covariance = np.cov(setosa_data, rowvar=0) + np.cov(virginica_data, rowvar=0) print ('Сумма матриц ковариации:',sum_covariance) # ненормированный весовой вектор W = np.matmul(np.linalg.inv(sum_covariance), diff_mean) print ('Ненормируемый весовой вектор:',W) # нормируемирование весового вектора w = W/np.linalg.norm(W) print ('Нормируемый весовой вектор:', w) # проекции исходных объектов на полученный весовой вектор proj_setosa = np.matmul(setosa_data, w) print ('Проекция сетоса', proj_setosa) proj_virginica = np.matmul(virginica_data, w) #Гистограмма проекций объектов на весовой вектор hist_data = np.vstack((proj_setosa, proj_virginica)) plt.hist(hist_data.T) print ('Значения гистограммы', hist_data.T) plt.xlabel('Значение проекции объекта') plt.ylabel('Проекция на весовой вектор') plt.title('Гистограмма') plt.show() lim=(np.mean(proj_setosa)+np.mean(proj_virginica))/2 print(lim) if __name__ == "__main__": l4 = lab4() l4.main()