Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7615.pdf
Скачиваний:
2
Добавлен:
23.11.2023
Размер:
1.17 Mб
Скачать

У каждого объекта есть ссылка на класс, к которому он относится. При приеме сообщения объект обращается к классу для обработки данного сообщения. Сообщение может быть передано вверх по иерархии наследования, если сам класс не располагает методом для его обработки. Если обработчик событий для сообщения выбирается динамически, то методы, реализующие обработчиков событий, принято называть виртуальными.

Естественным средством структурирования в данной методологии являются классы. Классы определяют, какие поля и методы экземпляра доступны извне, как обрабатывать отдельные сообщения и т. п. В чистых объектно-ориентированных языках извне доступны только методы, а доступ к данным объекта возможен только через его методы.

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

Для поддержки концепции ООП были разработаны специальные объектноориентированные языки программирования. Все языки OOП можно разделить на три группы.

Чистые языки, в наиболее классическом виде поддерживающие объектноориентированную методологию. Такие языки содержат небольшую языковую часть и существенную библиотеку, а также набор средств поддержки времени выполнения.

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

Урезанные языки, которые появились в результате удаления из гибридных языков наиболее опасных и ненужных с позиций ООП конструкций.

ПРАКТИЧЕСКАЯ ЧАСТЬ.

Задание. 1. Основы ООП. Представление объектов, классов на Python. В среде

разработки Google Colaboratory или редакторе Visual Studio Code создайте класс Student с

набором свойств: name, phone, address, birthday. Создайте объект (№ студенческого) типа

Student со следующими данными:

name: ФИ студента;

phone: номер телефона;

address: адрес в формате Страна, населенный пункт, улица, дом, квартира

birthday: день рождения в формате XX.XX.XXXX

Вызовите функцию print_contact() и выведите на экране данные контактов «№

студенческого»

Методика выполнения: Информация о пользователе содержит разнородные данные, например, имя, телефон, адрес, день рождения. Это – свойства, определяющие конкретного пользователя. Одинаковые структуры часто требуют одинаковой обработки, и потому функции-обработчики включены в состав этих структур. Такие функции называются методы. В нашем случае удобно иметь метод show, функцию, которая выведет на экран значения свойств. Структура, объединяющая свойства и методы, называется класс. В программировании экземпляры класса иначе называют объекты.

Класс похож на бланк документа. Скажем, бланк контакта в записной книжке:

-Название бланка: Контакт

-Доступные поля для заполнения (свойства):

-name: Имя контакта

-phone: Телефон контакта

45

- birthday: День рождения

Чтобы создать новый контакт, в пустой бланк вносят данные конкретного человека. Заполненный бланк — это объект, экземпляр класса.

Для создания новых классов существует ключевое слово class.

После него указывается имя этого класса. Дальше описывают метод с именем init , это специальная функция для создания объектов — конструктор класса. Он вызывается автоматически при создании нового объекта и сохраняет полученные значения в этом объекте.

Синтаксис описания класса выглядит так:

Обратите внимание: код класса пишется с отступом. Все методы внутри блока class пишутся с дополнительными отступами. Классам принято давать имена, начинающиеся с заглавной буквы.

Параметр self нужен для того, чтобы объект мог обратиться к собственным методам или свойствам: self.имя_свойства.

Этапы выполнения работы следующие:

1.1.Создаѐм класс Student (class Student:):

1.2.Создаѐм функцию def init которая принимает аргументы (name, phone, address, birthday) создаѐт объект и в нѐм сохраняет их значения: def init (self, name, phone, address, birthday):

1.3. Добавьте в метод init строки self.name = name, self.phone = phone, self.birthday = birthday и self.address = address.

После создания объекта сообщим об этом print(f'Создан новый контакт: {name}')

1.4Объект создаѐтся вызовом конструктора. Для создания объекта № студеческого типа Student вызовите конструктор и передайте в него параметры. № студенческого = Student("сюда имя", "сюда телефон", "сюда дату рождения", "сюда адрес").

1.5Создаѐм функцию def print_ student ():

print(f"{№ студенческого.name} — адрес: {№ студенческого.address}, телефон: {№ студенческого.phone}, день рождения: {№ студенческого.birthday}")

1.6Чтобы вызвать функцию — просто напишите print_student ()

Задание 2. Создание новых типов данных в Python. В классе Student создайте метод show_student(), который будет выводить данные любого объекта типа Student в том же виде, как сейчас их выводит функция print_student.

Этапы выполнения работы следующие:

1.В теле класса Student напишите метод show_student, который в качестве параметра будет принимать переменную self. В теле метода выполните print(), точно такой же, как в функции print_student, только вместо имени объекта в аргументе укажите self.

2.Вызовите метод show_contact для объекта № студеческого

Задание 3. Наследование ООП. Опишите на ООП взаимодействие студента, ментора, код-ревьюера и куратора.

46

Пример. Все эти люди — люди, поэтому создадим базовый класс Human, со свойством name (у каждого человека должно быть имя) и методом answer_question() для ответов на

вопросы.

По умолчанию объект Human будет отвечать на любой вопрос так: «Очень интересный

вопрос! Не знаю.»

 

 

 

 

 

От класса Human унаследуем классы Student, Mentor, CodeReviewer и Curator.

 

Student должен

уметь

задавать

вопросы.

Реализуйте

в

классе Student метод ask_question(Human, question). При вызове этот метод должен:

1.Напечатать на экране вопрос в формате <имя человека, которому задаѐм вопрос>, <текст вопроса>

2.Задать вопрос question человеку, объекту класса Human. Имя объекта, которому адресован вопрос, передаѐтся при вызове метода ask_question().

Объекты классов Mentor, CodeReviewer и Curator должны уметь отвечать на вопросы при вызове метода answer_question(). Задан непредусмотренный вопрос — для него подойдет ответ по умолчанию.

47

ЛАБОРАТОРНАЯ РАБОТА № 5

Кластерный анализ

Цель работы – ознакомиться с методом машинного обучения, используемый для идентификации кластеров объектов данных в наборе данных.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

Метод кластеризации k-средних — это неконтролируемый метод машинного обучения, используемый для идентификации кластеров объектов данных в наборе данных. Существует множество различных методов кластеризации, но метод k-средних является одним из самых старых и доступных. Эти черты делают реализацию кластеризации k- средних в Python достаточно простой даже для начинающих программистов и специалистов по данным.

Кластеризация — это набор методов, используемых для разделения данных на группы или кластеры. Кластеры в общих чертах определяются как группы объектов данных, которые больше похожи на другие объекты в своем кластере, чем на объекты данных в других кластерах.

Возможно выполнить кластеризацию, используя множество различных подходов — на самом деле так много, что существуют целые категории алгоритмов кластеризации. Каждая из этих категорий имеет свои уникальные сильные и слабые стороны. Это означает, что определенные алгоритмы кластеризации приведут к более естественному распределению кластеров в зависимости от входных данных.

Выбор подходящего алгоритма кластеризации для набора данных часто затруднен изза большого количества доступных вариантов. Некоторые важные факторы, влияющие на это решение, включают характеристики кластеров, особенности набора данных, количество выбросов и количество объектов данных.

Три популярные категории алгоритмов кластеризации:

1.Частичная кластеризация

2.Иерархическая кластеризация

3.Кластеризация на основе плотности Алгоритм K-средних

Обычные k-средние требуют всего несколько шагов. Первый шаг — случайным

образом выбрать k центроидов, где k равно количеству выбранных вами кластеров. Центроиды — это точки данных, представляющие центр кластера.

Основной элемент алгоритма работает с помощью двухэтапного процесса, называемого максимизацией ожидания. Шаг ожидания присваивает каждой точке данных ее ближайший центр тяжести. Затем на этапе максимизации вычисляется среднее значение всех точек для каждого кластера и устанавливается новый центроид.

Качество назначений кластеров определяется путем вычисления суммы квадратов ошибок (SSE) после того, как центроиды сходятся или совпадают с назначением предыдущей итерации. SSE определяется как сумма квадратов евклидовых расстояний от каждой точки до ее ближайшего центроида. Поскольку это мера ошибки, цель k-средних состоит в том, чтобы попытаться минимизировать это значение.

Ссылка https://proglib.io/p/unsupervised-ml-with-python

ПРАКТИЧЕСКАЯ ЧАСТЬ Задание на лабораторную работу

1.Подобрать датасет пригодный для решения задач кластеризации

2.Подготовить тренировочные и тестовые выборки

3.Произвести кластеризацию тестовой выборки, вычислить точность кластеризации

4.Исследовать зависимость количества кластеров модели от точности кластеризации

48

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