Рабочая тетрадь 1_ОМО_1_ семестр. Дисциплина Основы машинного обучения Рабочая тетрадь 1
Скачать 1.51 Mb.
|
Дисциплина «Основы машинного обучения» Рабочая тетрадь № 1 Цель изучения дисциплины – формирование компетенций в области современных информационных технологий с применением инструментария искусственного интеллекта и машинного обучения. Для реализации методов и алгоритмов будем использовать язык программирования Python. Python является популярным высокоуровневым языком программирования, который применяется для решения прикладных задач принятия решений с использованием технологий искусственного интеллекта и машинного обучения. Для реализации методов и алгоритмов, изучаемых в данной дисциплине, рекомендуется использовать среду разработок Anaconda, содержащую библиотеки языка программирования Python с открытым исходным кодом. https://www.anaconda.com/products/individual Для выполнения заданий из рабочих тетрадей рекомендуется использовать Jupyter Notebook. Название рабочих тетрадей должно содержать фамилию и имя студента, номер рабочей тетради. Например, Для создания файла необходимо выбрать вкладку New/Notebook: Далее File/Rename и указать название файла. Внимание! Рабочая тетрадь должна содержать теоретический материал, все примеры и задания! Теоретический материал – Типы данных Типы данных Все типы данных в Python относятся к одной из 2-х категорий: изменяемые (mutable) и неизменяемые (immutable). Неизменяемые объекты: − числовые данные (int, float), − bool, − None, − символьные строки (class 'str'), − кортежи (tuple). Изменяемые объекты: − списки (list), − множества (set), − словари (dict). Определить тип переменной можно с помощью функции type(). Пример 1. Задача: Выведите на печать и определите тип переменной x=5. Решение: Ответ: Теоретический материал – Тип int C переменными типа int можно производить стандартные математические операции – сложение, вычитание, умножение, деление, возведение в степень, взятие остатка при делении на число. Деление переменных типа int бывает двух типов – целочисленное (с помощью символа //) и нецелочисленное (символ /). Результатом первого типа деления будет целое число, второго – дробное. Пример 2. Задача: Выполнить стандартные операции. Решение: Ответ: Задание 1. Задача: Приведите пример стандартных математических операций с переменной типа int. Решение: Ответ: Теоретический материал – Тип int Язык питон удобен в работе с большими числами. Во многих других языках (например, С++) присвоение большого числа переменной int вызвало ошибку - возникло бы переполнение. Давайте присвоим переменной большое число. Пример 3. Задача: Присвоим переменной большое число 5000000000000000000000000001. Решение: Ответ: Задание 2. Задача: Присвойте переменной типа int большое число (значение указать больше, чем значение целочисленной переменной на языках класса СИ). Решение: Ответ: Теоретический материал – Тип float C переменными типа float можно производить стандартные математические операции – сложение, вычитание, умножение, деление, возведение в степень, взятие остатка от деления на число. Переменную типа int можно привести к типу float. Пример 4. Задача: Инициализируем переменную типа float. Разделитель точка. Решение: Ответ: Пример 5. Задача: Основные операции с переменной типа float. Решение: Ответ: Замечание: Задание 3. Задача: Приведите пример стандартных операций с переменной типа float. Напишите комментарии к операциям в строке с операцией. Пример: af = 4.2 + 5.1 # сложение вещественных чисел. Решение: Ответ: Теоретический материал – Тип bool Логический тип данных – принимает два значения: True или False. У типа bool существует связь с типом int – переменная со значением True соответствует int-овой переменной со значением 1, а переменная со значением False – int'овой переменной со значением 0. Пример 6. Задача: Инициализируем переменные типа bool. Определим тип и убедимся, что тип bool. Решение: Ответ: Пример 7. Задача: У типа bool существует связь с типом int. Решение: Ответ: Задание 4. Задача: Приведите примеры переменных типа bool. У типа bool существует связь с типом int - переменная со значением True соответствует int'овой переменной со значением 1, а переменная со значением False - int'овой переменной со значением 0. Пример дополнить демонстрацией взаимосвязи с типом int. Решение: Ответ: Пример 8. Задача: Переменную типа bool можно привести к типу int. Решение: Ответ: Пример 9. Задача: Проверим основные тождества. Решение: Ответ: Пример 10. Задача: Записать выражения a = (2 == 3) b = (4 < 5) Проверить тип результата. Комментарии приветствуются всегда. Решение: Ответ: Пример 11. Задача: Определить результат 9/3>2*3 or not (12!=3**2+3 and 57-24>30) Решение: Ответ: Теоретический материал – Функция input() Функция input() используется для ввода данных с клавиатуры. В примере 12 инициализируется переменная name – имя переменной. Имена переменных используются для хранения значений. Символ + используется для соединения (конкатенации) строк. Пример 12. Задача: Введите с клавиатуры имя и скажите от имени программы привет. Python очень дружелюбный, позитивный и интуитивно понятный язык. Решение: Ответ: Пример 13. Задача: Введите с клавиатуры два целых числа и выполните сложение. Решение: Ответ: Задание 5. Задача: Присвойте переменной x значение БФБО, а переменной у номер группы и год поступления. Пример на конкатенацию – указать свою группу. Решение: Ответ: Теоретический материал – Ввод с клавиатуры переменной Необходимо определять тип переменной при вводе с клавиатуры для выполнения арифметических операций. Пример 14. Задача: Введите с клавиатуры два числа и выполните сложение. Решение 1: Ответ: Решение 2: Ответ: Задание 6. Задача: Введите с клавиатуры два числа, одно типа float, второе типа int. Выполните сложение. Определите тип данных результата. Решение: Ответ: Теоретический материал – Тип str Тип переменной "строка". Нужен для хранения и выполнения операций со строками – наборами символов. В Python строку можно задавать как с помощью одинарных кавычек, так и с помощью двойных, разницы нет (главное, чтобы в начале и конце одной строки стояли одинаковые кавычки). Со строками можно выполнять некоторые операции. Например, можно сложить две строки – вторая добавится в конец первой. Также у строк есть некоторое количество методов. Метод – это название для функций, которые вызываются от объекта. Например, у нас есть объект a – строка, и для нее можно вызвать метод .upper(): a.upper() Методы делятся на те, которые изменяют сам объект, который их вызывает, и на те, которые возвращают результат, но не изменяют сам объект. Методы .upper() и .lower() – возвращают копию строки (не изменяя саму строку), для которой был вызван методы, приведения к верхнему и нижнему регистру соответственно. Внимание! При вызове метода какого-то класса (или функции какого-то модуля) можно написать его имя и через точку нажать [tab]: <имя_объекта_класса(модуля).[tab] – всплывет меню, в котором можно выбрать из всех существующих в этом классе методов (функций модуля). Пример 15. Задача: Введите с клавиатуры имя и скажите от имени программы привет. Python очень дружелюбный, позитивный и интуитивно понятный язык. Решение: Ответ: Пример 16. Задача: Задайте две переменные типа str, используя одинарные и двойные кавычки. Определите тип. Решение: Ответ: Пример 17. Задача: Задайте две переменные типа str, используя одинарные и двойные кавычки. Сложите две строки. Решение: Ответ: Пример 18. Задача: Приведите строку а = ‘Привет’ к верхнему и нижнему регистру. Убедитесь, что данные методы возвращают результат, но не изменяют сам объект. Решение: Ответ: Задание 7. Задача: Присвойте переменной n значение ФИО, а переменной nn группы. Приведите переменные к верхнему регистру. Выполните сложение строк. Выведите на печать результат сложения. Покажите, что метод не изменил саму переменную. Решение: Ответ: Теоретический материал – Тип None None – ничего, null Специальный тип в питоне, который обозначает “ничего”. Его нельзя привести ни к одному другому типу языка. Проверить, является ли переменная param типом None, можно так: if param is None С первого взгляда может быть непонятно, зачем он нужен, но на самом деле это очень удобный тип. Например, если вы где-то в коде создаете объект (базу данных, например), обращаясь к внешнему коду и хотите проверить, создалась ли ваша база данных, вы можете осуществить эту проверку, сравнив переменную базы данных с None. Примерно так: database = MyDatabase(db_host, db_user, db_password, db_database) if database is None Пример 19. Задача: Задайте переменную None. Определите тип. Решение: Ответ: Пример 20. Задача: Убедитесь, что None нельзя привести к другому типу. Решение: Ответ: Пример 21. Задача: Проверьте переменную на None Решение: Ответ: Пример 22. Задача: Мы рассмотрели int, float, bool, None, str. К остальным очень важным типам данных и их специфики мы вернемся в дальнейшем. А пока давайте все-таки посмотрим и убедимся, что они существуют. Решение: Ответ: Задание 8. Задача: По аналогии с примером, приведите свои примеры типов данных. Не забудьте инициализировать переменные и определить их тип ФИО и группа. Решение: Ответ: Теоретический материал – Тип Set Множество – это набор, в котором элементы не повторяются (то есть, как и в математическом определении множества). Даже, если при задании элементов множества или копировании элементов массива в переменную типа множество будет указано несколько раз одинаковый элемент, при выводе множества можно убедится, что он будет один. Тип данных множество языка Python устроен совсем не так, как массив или кортеж, элементы множества хранятся не последовательно, поэтому к элементам множества нельзя обращаться по индексу. Пример 23. Задача: Пустое множество можно создать с помощью set(). Решение: Ответ: Пример 24. Задача: Задайте множество и проверьте его отличие от массива. Решение: Ответ: Задание 9. Задача: По аналогии с примером, приведите свои примеры задания множества. Множество может включать переменные разных типов. При задании элементов множества укажите 5 элементов типа int (два одинаковых и для других типов тоже), 5 - типа float, 5 - элементов типа str. В комментарии опишите отличие множества от массива. Укажите мощность множества. Решение: Ответ: Теоретический материал – Операции над множествами Основные операции над множествами: 1) Объединение; 2) Пересечение; 3) Разность; 4) Симметричная разность. Пример 25. Задача: Задайте два множества. Реализуйте операцию объединения. Решение: Ответ: Решение: Ответ: Пример 26. Задача: Пересечение множеств. Решение: Ответ: Решение: Ответ: Пример 27. Задача: Разность множеств. Решение: Ответ: Решение: Ответ: Пример 28. Задача: Симметричная разность множеств. Решение: Ответ: Решение: Ответ: Задание 10. Задача: По аналогии с примерами, приведите свои варианты операций над множествами. Не забывайте заголовки и комментарии – это хороший тон в программировании. Решение: Ответ: Теоретический материал – Тип Set – модификация множеств Еще немного про множества. Можно добавлять элементы в множество с помощью метода .add() Можно удалить элементы по значению .discard(8) Посмотреть другие методы. При вызове метода какого-то класса (или функции какого-то модуля) можно написать его имя и через точку нажать tab: <имя_объекта_класса(модуля).[tab] Тогда всплывёт меню, в котором можно выбрать из всех существующих в этом классе методов (функций модуля). Пример 29. Задача: Задайте множество A = {1, 2, 3, 7, 8}. Добавьте в множество переменные типов int, float, str, none. Напечатайте множество А. Решение: Ответ: Пример 30. Задача: Внимание! Можно удалить элемент по значению, но не по индексу (отличие от массива нельзя обращаться к элементам по индексу). Решение: Ответ: Пример 31. Задача: Можно и другими методами изменять множество. При вызове метода какого-то класса (или функции какого-то модуля) можно написать его имя и через точку нажать [tab]: <имя_объекта_класса(модуля).[tab] Тогда всплывёт меню, в котором можно выбрать из всех существующих в этом классе методов (функций модуля). Решение: Ответ: Проверка: Ответ: Задание 11. Задача: Задайте два множества Set1 = {1, 4, 5, 3, 5}, Set2 = {4,5}. Примените к множеству Set2 метод .issubset(). В комментарии напишите, что определяет данный метод. Решение: Ответ: Теоретический материал – Визализация множеств Комментарии в программах, описание разделов и методов - является важным аспектом любой программы. Инструментарий Jupyter очень обширен. Можно создавать заголовки, описание, код, визуализацию расчетов и комментарии к решаемым задачам - совокупность инструментов оценена аналитиками и учеными по данным, что определяет лидерство данных информационных технологий. Построим диаграммы Эйлера-Венна используя matplotlib_venn. from matplotlib_venn import venn2, venn2_unweighted, venn2_circles, venn3, venn3_circles from matplotlib import pyplot as plt Пример 32. Задача: Нарисовать два множества. Решение: Ответ: Решение: Ответ: Пример 33. Задача: Можно задать множества перечислением элементов. Решение: Ответ: Пример 34. Задача: Обратите внимание на параметры функции визуализации – задание множеств. Зададим два множества. Определим количество элементов в множестве A- B, B-A, A&B. Построим диаграмму. Решение: Ответ: Пример 35. Задача: Задать три множества. Построить диаграмму. Решение: Ответ: Задание 12. Задача: Задайте два множества. Постройте диаграммы Венна для двух множеств. Решение: Ответ: Задание 13. Задача: Задайте три множества. Постройте диаграммы Венна для трех множеств. Решение: Ответ: Задание 14. Выполняется рукописно, сдается преподавателю. Вариант выбирается по списку. Задача: Для универсального множества 𝑈𝑈 = {−5, −4, −3, −2, −1,1,2,3,4,5}, множества 𝐴𝐴, заданного списком, и для 𝐵𝐵, являющегося множеством корней уравнения 𝑥𝑥 4 + 𝛼𝛼𝑥𝑥 3 + 𝛽𝛽𝑥𝑥 2 + 𝛾𝛾𝑥𝑥 + 𝛿𝛿 = 0. Найти множества: 𝐴𝐴 ∪ 𝐵𝐵, 𝐵𝐵 ∩ 𝐴𝐴, 𝐴𝐴\𝐵𝐵, 𝐵𝐵\𝐴𝐴, 𝐴𝐴∆𝐵𝐵, 𝐵𝐵�, 𝐶𝐶 = (𝐴𝐴∆𝐵𝐵)∆𝐴𝐴. Задание 15. Дополнительные задания. Все задачи без использования IF и циклов. В Python можно разными способами реализовывать задачи. Очень много зависит от умения продумывать алгоритмы и находить уникальные решения. Задача 15.1: Сумма первых n положительных целых чисел. n - вводится с клавиатуры. Код три строки. Решение: Ответ: Задача 15.2: Сортировка трех чисел по возрастанию. Без If и циклов. Например, используя min() и max(). Решение: Ответ: |