Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3975

.pdf
Скачиваний:
0
Добавлен:
21.11.2023
Размер:
422.59 Кб
Скачать

МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего образования

«Нижегородский государственный архитектурно-строительный университет»

Д. И. Кислицын

Машинное обучение и анализ данных

Учебно-методическое пособие

по выполнению лабораторных работ для обучающихся по дисциплине «Машинное обучение и анализ данных»

по направлению подготовки 09.04.02 Информационные системы и технологии, профиль «Искусственный интеллект в системах и сетях передачи данных»

Нижний Новгород

2022

МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего образования

«Нижегородский государственный архитектурно-строительный университет»

Д. И. Кислицын

Машинное обучение и анализ данных

Учебно-методическое пособие

по выполнению лабораторных работ для обучающихся по дисциплине «Машинное обучение и анализ данных»

по направлению подготовки 09.04.02 Информационные системы и технологии, профиль «Искусственный интеллект в системах и сетях передачи данных»

Нижний Новгород ННГАСУ

2022

2

УДК 681.3 (075)

Кислицын Д. И. Машинное обучение и анализ данных : учебнометодическое пособие / Д. И. Кислицын; Нижегородский государственный архитектурно-строительный университет. – Нижний Новгород : ННГАСУ, 2022. - 13 с. - Текст : электронный.

Предназначено для обучающихся в ННГАСУ по дисциплине «Машинное обучение и анализ данных» по направлению подготовки 09.04.02 Информационные системы и технологии, профиль «Искусственный интеллект в системах и сетях передачи данных».

Д. И. Кислицын, 2022ННГАСУ, 2022

3

 

Содержание

Лабораторная работа №1

.................................................................................. 5

Лабораторная работа №2 ..................................................................................

7

Лабораторная работа №3 ..................................................................................

9

4

Лабораторная работа №1

Выработка навыков в использовании статистических методов вмашинном

обучении

1.Войти в учетную запись google и создать рабочий блокнот в Google Collab.

2.Произвести импорт библиотек, необходимых для проведения экспериментов.

import numpy as np

import pandas as pd

import seaborn as sns.

3.Прочитать исходные данные из файла csv

df=pd.read_csv('Excel.csv')

df.head()

4.Оценить типы данных и их статистические характеристики

df.dtypes

df.describe()

5.Построим график распределения данных

sns.kdeplot(data=df,x='Height',shade=True) sns.kdeplot(data=df,x='Weight',shade=True)

6.Оценим размер данных

df.shape

7.Разделим данные

X = df.iloc[:,:-1] y = df.iloc[:,-1]

8.Добавим модули для построения модели линейной регрессии

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression

9. Разделим данные на обучающую и тестовую выборки и отобразим их

размеры

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, r andom_state=0)

print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)

10.Создадим линейную регрессию

5

LinReg = LinearRegression()

LinReg.fit(X_train,y_train)

11.Отобразим коэффициенты модели.

LinReg.coef_, LinReg.intercept_

12.Выведем оценку коэффициента R2 модели машинного обучения

print("Оценка модели машинного обучения: {:.2f}".format(LinReg.score(X_tes

t,y_test)))

Индивидуальное задание: Построить модель линейной регрессии взяв данныеу

преподавателя.

6

Лабораторная работа №2

Введение в кластеризацию. Основные методы кластеризации. Понижение размерности и отбор признаков. Матричные разложения.

Типы кластерных структур. ЕМ – алгоритм и метод k-средних

1.Войти в учетную запись google и создать рабочий блокнот в Google Collab.

2.Произвести импорт библиотек, необходимых для

проведенияэкспериментов.

import numpy as np import pandas as pd

import matplotlib.pyplot as plt plt.style.use('ggplot')

from sklearn.manifold import TSNE

from sklearn.datasets import load_digits

3. Чтобы проиллюстрировать идею кластеризации рассмотрим следующий пример. Предположим. что у вас есть большая коллекция картинок. Вам надо определить классы этих картинок. Но вы не знаете на сколько классов имеет смысл разделить эти картинки. Попробуем применить t-SNE чтобы понять это загрузим картинки цифр

digit = load_digits() img = digit.images img.shape plt.imshow(img[0]);

img[0]

4.Применим t-SNE и визуализируем получившееся разбиение

X = img.reshape(-1, 64)

tsne = TSNE(n_components=2, perplexity=30)tsne.fit(X) Z = tsne.embedding_

Z.shape

plt.scatter(Z[:, 0], Z[:, 1], c='b');

5. Визуализируем получившееся разбиение с учетом знания цифр на

картинках

7

y = digit.target plt.scatter(Z[:, 0], Z[:, 1], c=y);

6. Чтобы проиллюстрировать последнее рассмотрим предыдущий пример с изображениями цифр. Мы будет случайно определять начальное расположение центроидов. Посмотрим как будет меняться финальное разбиение и насколько оно будет соответствовать реальному делению на классы.

# Применение k-means

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=10, init='random', n_init=10, random_state=10)

# применяем - обучаем kmeans.fit(X)

#метки кластеров labels = kmeans.labels_ labels.shape

#визуализируем получившееся разбиение с учетом знания цифр на картинках#

и сравним с разбиением на кластеры, полученным с помощью k-means fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(12,5)) ax[0].scatter(Z[:, 0], Z[:, 1], c=y)

ax[1].scatter(Z[:, 0], Z[:, 1], c=labels) ax[0].set_title('Истинное разбиение') ax[1].set_title('Разбиение k-means') fig.show()

Индивидуальное задание: Построить разбиение на кластеры взяв данные у

преподавателя.

8

Лабораторная работа 3.

Сверточные ИНС – дальнейшее развитие ИНС.

Базовая версия программы, которая реализует обучение нейронной сети для распознавания предметов одежды.

from tensorflow.keras.datasets import fashion_mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout from tensorflow.keras import utils

import numpy as np

# Загружаем данные

(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()

# Список с названиями классов

classes = ['футболка', 'брюки', 'свитер', 'платье', 'пальто', 'туфли', 'рубашка', 'кроссовки', 'сумка', 'ботинки']

#Преобразование размерности изображений x_train = x_train.reshape(60000, 784) x_test = x_test.reshape(10000, 784)

#Нормализация данных

x_train = x_train / 255 x_test = x_test / 255

# Преобразуем метки в категории

y_train = utils.to_categorical(y_train, 10) y_test = utils.to_categorical(y_test, 10)

#Создаем последовательную модель model = Sequential()

#Добавляем уровни сети

model.add(Dense(800, input_dim=784, activation="relu")) model.add(Dense(10, activation="softmax"))

# Компилируем модель model.compile(loss="categorical_crossentropy", optimizer="SGD",

metrics=["accuracy"])

print(model.summary())

# Обучаем сеть

history = model.fit(x_train, y_train, batch_size=200,epochs=100,

validation_split=0.2,verbose=1)

# Оцениваем качество обучения сети на тестовых данных scores = model.evaluate(x_test, y_test, verbose=1)

print("Доля верных ответов на тестовых данных, в процентах:", round(scores[1] * 100, 4))

Запишите долю верных ответов работы сети после обучения на тестовых данных. Она выводится следующим образом:

Доля верных ответов на тестовых данных, в процентах: 86.87

9

Проанализируйте долю верных ответов на проверочном наборе данных в процессе обучения. Она указывается после заголовка "val_acc". Вот фрагмент вывода обучения нейронной сети (эпохи с 11 по 89 удалены для сокращения места):

Train on 48000 samples, validate on 12000 samples

 

Epoch 1/100

 

 

48000/48000

[==============================] - 2s 37us/sample - loss: 1.1875

-

acc: 0.6657

- val_loss: 0.8279 - val_acc: 0.7548

 

Epoch 2/100

 

 

48000/48000

[==============================] - 1s 21us/sample - loss: 0.7540

-

acc: 0.7721

- val_loss: 0.6858 - val_acc: 0.7850

 

Epoch 3/100

 

 

48000/48000

[==============================] - 1s 19us/sample - loss: 0.6573

-

acc: 0.7947

- val_loss: 0.6244 - val_acc: 0.8001

 

Epoch 4/100

 

 

48000/48000

[==============================] - 1s 20us/sample - loss: 0.6061

-

acc: 0.8084

- val_loss: 0.5850 - val_acc: 0.8112

 

Epoch 5/100

 

 

48000/48000

[==============================] - 1s 19us/sample - loss: 0.5729

-

acc: 0.8158

- val_loss: 0.5609 - val_acc: 0.8153

 

Epoch 6/100

 

 

48000/48000

[==============================] - 1s 20us/sample - loss: 0.5491

-

acc: 0.8212

- val_loss: 0.5447 - val_acc: 0.8175

 

Epoch 7/100

 

 

48000/48000

[==============================] - 1s 19us/sample - loss: 0.5304

-

acc: 0.8255

- val_loss: 0.5242 - val_acc: 0.8238

 

Epoch 8/100

 

 

48000/48000

[==============================] - 1s 19us/sample - loss: 0.5159

-

acc: 0.8289

- val_loss: 0.5133 - val_acc: 0.8267

 

Epoch 9/100

 

 

48000/48000

[==============================] - 1s 19us/sample - loss: 0.5037

-

acc: 0.8328

- val_loss: 0.5026 - val_acc: 0.8287

 

Epoch 10/100

 

 

48000/48000

[==============================] - 1s 19us/sample - loss: 0.4933

-

acc: 0.8355

- val_loss: 0.4942 - val_acc: 0.8294

 

...

 

 

Epoch 90/100

 

 

48000/48000

[==============================] - 1s 19us/sample - loss: 0.3249

-

acc: 0.8881

- val_loss: 0.3607 - val_acc: 0.8731

 

Epoch 91/100

 

 

48000/48000

[==============================] - 1s 20us/sample - loss: 0.3244

-

acc: 0.8871

- val_loss: 0.3592 - val_acc: 0.8745

 

Epoch 92/100

 

 

48000/48000

[==============================] - 1s 20us/sample - loss: 0.3228

-

acc: 0.8884

- val_loss: 0.3581 - val_acc: 0.8756

 

Epoch 93/100

 

 

48000/48000

[==============================] - 1s 20us/sample - loss: 0.3222

-

acc: 0.8890 - val_loss: 0.3612 - val_acc: 0.8743

 

Epoch 94/100

 

 

48000/48000

[==============================] - 1s 19us/sample - loss: 0.3210

-

acc: 0.8889 - val_loss: 0.3588 - val_acc: 0.8743

 

Epoch 95/100

 

 

48000/48000

[==============================] - 1s 19us/sample - loss: 0.3203

-

acc: 0.8888 - val_loss: 0.3577 - val_acc: 0.8742

 

Epoch 96/100

 

 

48000/48000

[==============================] - 1s 20us/sample - loss: 0.3192

-

acc: 0.8896 - val_loss: 0.3585 - val_acc: 0.8739

 

Epoch 97/100

 

 

48000/48000

[==============================] - 1s 20us/sample - loss: 0.3183

-

acc: 0.8899 - val_loss: 0.3566 - val_acc: 0.8764 Epoch 98/100

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]