Update lab2.py, lab4.py, and 5 more files...
This commit is contained in:
parent
7c4a2f3ed6
commit
abf38bce43
|
@ -7,34 +7,45 @@ class lab2:
|
|||
pass
|
||||
|
||||
def main(self):
|
||||
# Данные для графика
|
||||
|
||||
# Используем массивы из первой работы
|
||||
x11 = np.random.normal(2, 1, [10, 1])
|
||||
x21 = np.random.normal(6, 2, [10, 1])
|
||||
print(x11,x21)
|
||||
|
||||
# Рисуем график
|
||||
# Построение диаграммы рассеяния
|
||||
plt.scatter(x11, x21)
|
||||
plt.xlabel("x")
|
||||
plt.ylabel("y")
|
||||
plt.xlabel("x1")
|
||||
plt.ylabel("x2")
|
||||
plt.title("Диаграмма рассеяния")
|
||||
plt.show()
|
||||
|
||||
# Построение гистограммы
|
||||
hist_data = np.vstack((x11, x21))
|
||||
print ("Данные для гистограммы:", hist_data )
|
||||
plt.hist(hist_data)
|
||||
plt.xlabel('Значение признака')
|
||||
plt.ylabel('Частота появления значения признака')
|
||||
plt.title('Гистограмма')
|
||||
plt.hist(hist_data, bins=10)
|
||||
plt.xlabel("Значение признака")
|
||||
plt.ylabel("Количество значений")
|
||||
plt.title("Гистограмма")
|
||||
plt.show()
|
||||
|
||||
# Коробочковая диаграмма
|
||||
plt.boxplot((x11.ravel(), x21.ravel()), notch=True)
|
||||
print("Данные для коробочковой диаграммы",x11.ravel(), x21.ravel())
|
||||
plt.xlabel('№ объекта')
|
||||
plt.ylabel('Значение признака')
|
||||
plt.title('Ящик с усами')
|
||||
# Построение "ящика с усами"
|
||||
boxplot_data = plt.boxplot((x11.ravel(), x21.ravel()), notch=True)
|
||||
plt.xlabel("Массив")
|
||||
plt.ylabel("Значение признака")
|
||||
plt.title("Ящик с усами")
|
||||
plt.xticks([1, 2], ['x11', 'x21'])
|
||||
plt.show()
|
||||
|
||||
# Получение данных для таблицы
|
||||
for i, name in enumerate(['x11', 'x21'], start=1):
|
||||
print(f"Данные для {name}:")
|
||||
print(f"Медиана: {boxplot_data['medians'][i-1].get_ydata()[0]}")
|
||||
print(f"Нижняя граница: {boxplot_data['whiskers'][2*(i-1)].get_ydata()[1]}")
|
||||
print(f"Верхняя граница: {boxplot_data['whiskers'][2*(i-1)+1].get_ydata()[1]}")
|
||||
print(f"Нижний квартиль: {boxplot_data['boxes'][i-1].get_ydata()[1]}")
|
||||
print(f"Верхний квартиль: {boxplot_data['boxes'][i-1].get_ydata()[2]}")
|
||||
fliers = boxplot_data['fliers'][i-1].get_ydata()
|
||||
print(f"Выбросы: {', '.join(map(str, fliers)) if fliers.size > 0 else 'Нет выбросов'}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
l2 = lab2()
|
||||
l2.main()
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
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()
|
|
@ -0,0 +1,85 @@
|
|||
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()
|
|
@ -0,0 +1,98 @@
|
|||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import pandas as pd
|
||||
import matplotlib
|
||||
|
||||
class lab6:
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def main(self):
|
||||
|
||||
matplotlib.use('TkAgg')
|
||||
|
||||
#создание массивов
|
||||
g1 = [[0.7, 0.3, 1.2],
|
||||
[0.5, 0.7, 1.0],
|
||||
[0.4, 1.0, 0.4],
|
||||
[0.7, 0.7, 1.0],
|
||||
[0.6, 0.6, 1.5],
|
||||
[0.6, 0.6, 1.2],
|
||||
[0.6, 0.5, 1.0],
|
||||
[0.4, 0.9, 0.6],
|
||||
[0.5, 0.6, 1.1],
|
||||
[0.8, 0.3, 1.2]]
|
||||
g2 = [[0.4, 0.2, 0.8],
|
||||
[0.2, 0.2, 0.7],
|
||||
[0.9, 0.3, 0.5],
|
||||
[0.8, 0.3, 0.6],
|
||||
[0.5, 0.6, 0.4],
|
||||
[0.6, 0.5, 0.7],
|
||||
[0.4, 0.4, 1.2],
|
||||
[0.6, 0.3, 1.0],
|
||||
[0.3, 0.2, 0.6],
|
||||
[0.5, 0.5, 0.8]]
|
||||
# Создание датафреймов
|
||||
df_g1 = pd.DataFrame(g1, columns=['X1', 'Y1', 'Z1'])
|
||||
df_g2 = pd.DataFrame(g2, columns=['X2', 'Y2', 'Z2'])
|
||||
# Объединение датафреймов
|
||||
df = pd.concat([df_g1, df_g2], axis=1)
|
||||
# п3: построение скаттерограммы
|
||||
fig = plt.figure()
|
||||
ax = fig.add_subplot(111, projection='3d')
|
||||
# Наносим точки на график
|
||||
ax.scatter(df.iloc[:, 0],
|
||||
df.iloc[:, 1],
|
||||
df.iloc[:, 2],
|
||||
color='midnightblue')
|
||||
ax.scatter(df.iloc[:, 3],
|
||||
df.iloc[:, 4],
|
||||
df.iloc[:, 5],
|
||||
color='darkred')
|
||||
ax.set_xlabel('1 признак')
|
||||
ax.set_ylabel('2 признак')
|
||||
ax.set_zlabel('3 признак')
|
||||
plt.legend(['g1', 'g2'])
|
||||
plt.show()
|
||||
|
||||
# п2: последовательное обучение с коррекцией ошибки
|
||||
one = np.ones((10, 1))
|
||||
g1 = np.hstack((g1, one))
|
||||
g2 = np.hstack((g2, one))
|
||||
g2 = (-1)*np.array(g2)
|
||||
g = np.vstack((g1, g2))
|
||||
W = np.mean(g1, axis=0) - np.mean(g2, axis=0)
|
||||
w = W/np.linalg.norm(W)
|
||||
proj1=np.matmul(g,w)
|
||||
print (proj1)
|
||||
plt.figure(3)
|
||||
plt.subplot(1, 2, 1)
|
||||
plt.hist(proj1.T[0:9], bins= 10,color = ('firebrick'), alpha=0.7, edgecolor = 'black',label='g1')
|
||||
plt.hist((-1)*proj1.T[10:19], bins= 10,color = ('indigo'), alpha=0.7, edgecolor ='black',label='g2')
|
||||
plt.legend()
|
||||
plt.xlabel('Значение')
|
||||
plt.ylabel('Количество')
|
||||
plt.title('Гистограмма первого приближения')
|
||||
learn_coeff = 0.1
|
||||
while min(proj1)<0:
|
||||
for ind, data_sample in enumerate(g):
|
||||
proj1[ind] = np.matmul(data_sample, w)
|
||||
if proj1[ind]<0:
|
||||
w = w + data_sample*learn_coeff
|
||||
proj = np.matmul(g, w)
|
||||
v1 = np.matmul(g, w)
|
||||
# Построение гистограммы проекций
|
||||
plt.subplot(1, 2, 2)
|
||||
plt.hist(v1.T[0:9], bins= 10,color = ('firebrick'), alpha=0.7, edgecolor = 'black',label='g1')
|
||||
plt.hist((-1)*v1.T[10:19], bins= 10,color = ('indigo'), alpha=0.7, edgecolor ='black',label='g2')
|
||||
plt.xlabel('Значение')
|
||||
plt.ylabel('Количество')
|
||||
plt.title('Гистограмма после обучения')
|
||||
plt.legend()
|
||||
plt.show()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
l6 = lab6()
|
||||
l6.main()
|
143
app/labs/lab7.py
143
app/labs/lab7.py
|
@ -0,0 +1,143 @@
|
|||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import sklearn.metrics
|
||||
from sklearn.datasets import load_iris
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.neighbors import KNeighborsClassifier
|
||||
import matplotlib
|
||||
|
||||
class lab7:
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def main(self):
|
||||
matplotlib.use('TkAgg')
|
||||
|
||||
# Загружаем данные ирисов
|
||||
data = load_iris()
|
||||
X = data.data # Признаки ирисов
|
||||
Y = data.target # Сорта ирисов
|
||||
label = Y # Используем Y в качестве меток классов для классификации
|
||||
Y_str = data.target_names # Названия сортов ирисов
|
||||
|
||||
# setosa
|
||||
setosa_inds = Y == np.where(Y_str == "setosa")[0][0]
|
||||
setosa_data = X[setosa_inds, :]
|
||||
# versicolor
|
||||
versicolor_inds = Y == np.where(Y_str == "versicolor")[0][0]
|
||||
versicolor_data = X[versicolor_inds, :]
|
||||
# virginica
|
||||
virginica_inds = Y == np.where(Y_str == "virginica")[0][0]
|
||||
virginica_data = X[virginica_inds, :]
|
||||
|
||||
# Определяем функцию классификации
|
||||
def classification(data, label, k):
|
||||
X_train, X_test, y_train, y_test = train_test_split(data, label, random_state=10) #Разделение данных
|
||||
knn = KNeighborsClassifier(n_neighbors=k, metric='euclidean') # Создание KNN-классификатора
|
||||
knn.fit(X_train, y_train)
|
||||
predicted_data = knn.predict(X_test)
|
||||
report = sklearn.metrics.classification_report(y_test, predicted_data)
|
||||
|
||||
# Пример вызова функции классификации
|
||||
setosa_data = sklearn.preprocessing.normalize(setosa_data)
|
||||
versicolor_data = sklearn.preprocessing.normalize(versicolor_data)
|
||||
virginica_data = sklearn.preprocessing.normalize(virginica_data)
|
||||
data_all = np.vstack((setosa_data,versicolor_data,virginica_data))
|
||||
|
||||
fig, axs = plt.subplots(2, 3, figsize=(12,8),dpi=160)
|
||||
axs[0, 0].scatter(data_all[:50, 0], data_all[:50, 1], marker='*')
|
||||
axs[0, 0].scatter(data_all[50:100, 0], data_all[50:100, 1], marker='^')
|
||||
axs[0, 0].scatter(data_all[100:, 0], data_all[100:, 1], marker='+')
|
||||
axs[0, 0].title.set_text('features 1 and 2')
|
||||
|
||||
axs[0, 1].scatter(data_all[:50, 0], data_all[:50, 2], marker='*')
|
||||
axs[0, 1].scatter(data_all[50:100, 0], data_all[50:100, 2], marker='^')
|
||||
axs[0, 1].scatter(data_all[100:, 0], data_all[100:, 2], marker='+')
|
||||
axs[0, 1].title.set_text('features 1 and 3')
|
||||
|
||||
axs[0, 2].scatter(data_all[:50, 0], data_all[:50, 3], marker='*')
|
||||
axs[0, 2].scatter(data_all[50:100, 0], data_all[50:100, 3], marker='^')
|
||||
axs[0, 2].scatter(data_all[100:, 0], data_all[100:, 3], marker='+')
|
||||
axs[0, 2].title.set_text('features 1 and 4')
|
||||
|
||||
axs[1, 0].scatter(data_all[:50, 1], data_all[:50, 2], marker='*',)
|
||||
axs[1, 0].scatter(data_all[50:100, 1], data_all[50:100, 2], marker='^')
|
||||
axs[1, 0].scatter(data_all[100:, 1], data_all[100:, 2], marker='+')
|
||||
axs[1, 0].title.set_text('features 2 and 3')
|
||||
|
||||
axs[1, 1].scatter(data_all[:50, 1], data_all[:50, 3], marker='*')
|
||||
axs[1, 1].scatter(data_all[50:100, 1], data_all[50:100, 3], marker='^')
|
||||
axs[1, 1].scatter(data_all[100:, 1], data_all[100:, 3], marker='+')
|
||||
axs[1, 1].title.set_text('features 2 and 4')
|
||||
|
||||
axs[1, 2].scatter(data_all[:50, 2], data_all[:50, 3], marker='*')
|
||||
axs[1, 2].scatter(data_all[50:100, 2], data_all[50:100, 3], marker='^')
|
||||
axs[1, 2].scatter(data_all[100:, 2], data_all[100:, 3], marker='+')
|
||||
axs[1, 2].title.set_text('features 3 and 4')
|
||||
plt.show()
|
||||
|
||||
data = np.hstack((data_all[:,0].reshape(150,1),data_all[:,1].reshape(150,1)))
|
||||
print('Количество соседей = 2:')
|
||||
classification(data,label,2)
|
||||
print('Количество соседей = 5:')
|
||||
classification(data,label,5)
|
||||
print('Количество соседей = 20:')
|
||||
classification(data,label,20)
|
||||
print('Количество соседей = 70:')
|
||||
classification(data,label,70)
|
||||
print('///////////////////////////////////////////////////////////////////')
|
||||
data = np.hstack((data_all[:,0].reshape(150,1),data_all[:,2].reshape(150,1)))
|
||||
print('Количество соседей = 2:')
|
||||
classification(data,label,2)
|
||||
print('Количество соседей = 5:')
|
||||
classification(data,label,5)
|
||||
print('Количество соседей = 20:')
|
||||
classification(data,label,20)
|
||||
print('Количество соседей = 70:')
|
||||
classification(data,label,70)
|
||||
print('///////////////////////////////////////////////////////////////////')
|
||||
data = np.hstack((data_all[:,0].reshape(150,1),data_all[:,3].reshape(150,1)))
|
||||
print('Количество соседей = 2:')
|
||||
classification(data,label,2)
|
||||
print('Количество соседей = 5:')
|
||||
classification(data,label,5)
|
||||
print('Количество соседей = 20:')
|
||||
classification(data,label,20)
|
||||
print('Количество соседей = 70:')
|
||||
classification(data,label,70)
|
||||
print('///////////////////////////////////////////////////////////////////')
|
||||
data = np.hstack((data_all[:,1].reshape(150,1),data_all[:,2].reshape(150,1)))
|
||||
print('Количество соседей = 2:')
|
||||
classification(data,label,2)
|
||||
print('Количество соседей = 5:')
|
||||
classification(data,label,5)
|
||||
print('Количество соседей = 20:')
|
||||
classification(data,label,20)
|
||||
print('Количество соседей = 70:')
|
||||
classification(data,label,70)
|
||||
print('///////////////////////////////////////////////////////////////////')
|
||||
data = np.hstack((data_all[:,1].reshape(150,1),data_all[:,3].reshape(150,1)))
|
||||
print('Количество соседей = 2:')
|
||||
classification(data,label,2)
|
||||
print('Количество соседей = 5:')
|
||||
classification(data,label,5)
|
||||
print('Количество соседей = 20:')
|
||||
classification(data,label,20)
|
||||
print('Количество соседей = 70:')
|
||||
classification(data,label,70)
|
||||
print('///////////////////////////////////////////////////////////////////')
|
||||
data = np.hstack((data_all[:,2].reshape(150,1),data_all[:,3].reshape(150,1)))
|
||||
print('Количество соседей = 2:')
|
||||
classification(data,label,2)
|
||||
print('Количество соседей = 5:')
|
||||
classification(data,label,5)
|
||||
print('Количество соседей = 20:')
|
||||
classification(data,label,20)
|
||||
print('Количество соседей = 70:')
|
||||
classification(data,label,70)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
l7 = lab7()
|
||||
l7.main()
|
9
main.py
9
main.py
|
@ -2,10 +2,5 @@ from app.utils.config import debug
|
|||
from app.menu_load import menu
|
||||
|
||||
if __name__ == "__main__":
|
||||
if debug == True:
|
||||
print("Running in debug mode...")
|
||||
from test_module.debug_main import debug_main_start
|
||||
debug_main_start()
|
||||
else:
|
||||
mn = menu()
|
||||
mn.main_menu()
|
||||
mn = menu()
|
||||
mn.main_menu()
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
numpy==1.24.4
|
||||
matplotlib==3.7.5
|
||||
scikit-learn==1.3.2
|
||||
pandas==2.2.3
|
||||
|
|
Loading…
Reference in New Issue