Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
семестр 2 / Задания ИТиП 2 семестр.docx
Скачиваний:
0
Добавлен:
13.05.2026
Размер:
28.8 Кб
Скачать

Лабораторная работа № 2. Подготовка изображений для машинного обучения

Дано: Набор изображений со спутника с деревьевьями и без

https://drive.google.com/file/d/1yPAs-3H5gQGdM02KFiZKwVHT4AM_yeiI/view?usp=sharing

(Набор данных взят из базы данных https://www.kaggle.com/datasets/mcagriaksoy/trees-in-satellite-imagery)

Подготовить изображения для машинного обучения для классификации наличия деревьев на изображениях.

1. Составить список файлов в каждой папке

Для этого можно использовать функцию os.listdir('Путь\\к\\папке')

2.а Создать список из массивов numpy с изображениями для каждой папки.

2.б Отобразить на экране изображение № j из папки NoTrees, если j < 50 или из папки Trees, если j >49.

3. Создать массив параметров X для машинного обучения. Каждая компонента R,G,B каждого пикселя -- это отдельный параметр - столбец, каждое изображение -- строка.

3.а Превратить изображения в одномерные массивы параметров с помощью метода .flatten(). В этом случае изображение превращается в массив размера (1 x n), где n – количество элементов исходного массива с изображением, следующего вида:

R(0,0)

G(0,0)

B(0,0)

R(0,1)

G(0,1)

G(h-1,w-1)

B(h-1,w-1)

3.б Объединить одномерные массивы в многомерный, где каждая строка X[i,:]-- это одномерный массив, полученный из i-го изображения.

4. Создать массив результатов y, так, что элемент y[i,0] = 0, если строка X[i,:] соответствует изображению без деревьев, а y[i,0] = 1, если строка X[i,:] соответствует изображению с деревьями.

5. Перемешать строки массивов X и y, сохранив соотношение из предыдущего пункта.

Если j чётно: объединить массивы X и y по горизонтали (например с помощью функции np.hstack((a, b)), где a и b – объединяемые матрицы, воспользоваться функцией перемешивание np.random.shuffle(), после разделить массивы.

Если j нечётно: создать порядок перемешивания с помощью функции perm = np.random.permutation(n) и применить его к обоим массивам по типу:

arr = arr[perm]

6. Разделить наборы данных на 3 части: для обучения, для кроссвалидации, для тестирования:

Если j заканчивается на 0-5: 60%, 20%, 20% соответственно

Если j заканчивается на 6-9: по 2000 на кроссвалидацию и тестирование, остальные на обучение.

7. Для каждой из трёх частей (обучение, кроссвалидация, тестирования) вывести первое изображение и напечатать на экране, есть ли на нём деревья.

Чтобы из одномерного массива восстановить изображение, воспользоваться функцией reshape:

img = np.reshape(X[i,:], (width, height,3))

Лабораторная работа № 3. Классификация изображений на основе логистической регрессии

Дано: Набор изображений со спутника с деревьевьями и без (см. прошлую работу)

Задание:

1. Подготовить данные (пункты 1.а и 1.б):

1.а. Упростить данные по вариантам (j % 5 + 1):

  1. Использовать каждый 8-й параметр каждого изображения

  2. Использовать только зелёный канал и только чётные строки изображения

  3. Использовать ч/б изображение, усреднив красный, синий и зелёный каналы, и использовать только нечётные строки изображения

  4. Использовать центральную область изображения (⅓ от высоты и ⅓ от ширины)

  5. Уменьшить разрешение изображений в 4 раза, усреднив области 4х4 пикселя

Для этого воспользуйтесь функцией

skimage.transform.resize(image, (new_h, new_w))

1.б. Подготовить данные для обучения для логистической регрессии (составить наборы параметров для обучения, кроссвалидации, тестирования) (см. предыдущую работу)

2. Составить функцию, рассчитывающую логистическую гипотезу на основе параметров и коэффициентов регрессии.

Примечание: Перед преобразованием с помощью функции сигмоида, ограничить значения величинами [-30, 30], чтобы не было переполнения результата:

z[z < -30] = -30

z[z > 30] = 30

3. Составить функцию, рассчитывающую стоимость ошибки гипотезы.

4. Составить функцию, рассчитывающую производные функции стоимости ошибки.

5. Составить функцию, рассчитывающую коэффициенты регрессии по методу градиентного спуска

6. Преобразовать данные в тип float и пронормировать к интервалу 0-1:

X = X.astype('float64') /255

7. Используя функции по пункту 3-5, выполнить машинное обучение и найти коэффициенты гипотезы. Использовать только ту часть исходных данных, которая для обучения.

8. Используя гипотезу, найти процент ошибок на данных для тестирования.

Соседние файлы в папке семестр 2