Дисциплина «Искусственный интеллект»
Дисциплина «Искусственный интеллект»
Рабочая тетрадь № 1
Цель изучения дисциплины – формирование компетенций в области современных информационных технологий с применением инструментария искусственного интеллекта и машинного обучения. Для реализации методов и алгоритмов будем использовать язык программирования Python.
|
Python является популярным высокоуровневым языком программирования, который применяется для решения прикладных задач принятия решений с использованием технологий искусственного интеллекта и машинного обучения.
Для реализации методов и алгоритмов, изучаемых в данной дисциплине, рекомендуется использовать среду разработок Anaconda, содержащую библиотеки языка программирования Python с открытым исходным кодом.
https: //www. anaconda. com/products/individual
Для выполнения заданий из рабочих тетрадей рекомендуется использовать JupyterNotebook.
| Название рабочих тетрадей должно содержать фамилию и имя студента, номер рабочей тетради. Например,
Для создания файла необходимо выбрать вкладку New/Notebook:
Далее File/Renameи указать название файла.
|
1. 1. Теоретический материал – Типы данных
|
Типы данных
Все типы данных в Python относятся к одной из 2-х категорий:
изменяемые (mutable) и неизменяемые (immutable).
Неизменяемые объекты:
- числовые данные (int, float),
- bool,
- None,
- символьные строки (class 'str'),
- кортежи (tuple).
Изменяемые объекты:
- списки (list),
- множества (set),
- словари (dict).
|
1. 2. Пример
| Задача:
|
| Выведите на печать и определите тип переменной.
| Решение:
|
|
| Ответ:
|
|
|
1. 3. Задание
| Задача:
|
| Выведите на печать и определите тип переменной.
| Решение:
|
| print (x, '|', type(x), '\n', A, '|', type(A), '\n',
B, '|', type(B), '\n', df, '|', type(df), '\n',
C, '|', type(C), D, '|', type(D))
| Ответ:
|
| True | < class 'bool'>
{8, 1, 3, 7} | < class 'set'>
{2, 'apple', 4, 5, 10} | < class 'set'>
('АнтоноваАнтонина', 34, 'ж') | < class 'tuple'>
set() | < class 'set'> [1, 'title', 2, 'content'] | < class 'list'>
| | | |
2. 1. Теоретический материал – Условный оператор
| |
If –Условный оператор
В коде часто приходится проверять выполнимость или невыполнимость каких-то условий. Синтаксис:
if< условие1 (булевское выражение)> :
< код, который выполнится, если условие верно>
elif< условие2 (булевское выражение)>:
< код, который выполнится, если условие1 было неверно, а условие2верно>
else:
< код, который выполнится, если условие1 и условие2 были неверны>
Обратите внимание, что код, который должен выполняться внутри каждого условия, записывается с отступом в 4 пробела от уровня if, elif и else: в питоне области видимости переменных обозначаются отступами.
То есть, отступы позволяют понять, где начинается код, который должен выполняться при выполнении условия в if, и где заканчивается.
| |
2. 2. Пример
| | Задача:
| |
| Вывести на экран является ли переменная х положительной, отрицательной или равна нулю.
| | Решение:
| |
|
| | Ответ:
| |
| x положительный
| |
2. 3. Задание
| | Задача:
|
| Напишите код. Задается х, напечатать какому из интервалов принадлежит: (-infinity, -5), [-5, 5] или от (5, +infinity)
| Решение:
|
| x=125
if x< -5:
print(" x принадлежит: (-infinity, -5)" )
elif x> 5:
print(" x принадлежит: (5, +infinity)" )
else:
print (" x принадлежит [-5, 5] " )
| Ответ:
|
| x принадлежит: (5, +infinity) |
3. 1. Теоретический материал – Циклы, массивы, срезы
| |
Циклы - for и while
Цикл while проверяет истинность условия, и если условие истинно, то выполняет инструкции цикла.
Синтаксис:
while условие:
инструкции
Инструкции, которые относятся к циклу while, располагаются на последующих строках и должны иметь отступ от начала ключевого слова while.
Цикл for проходит по набору значений, помещает каждое значение в переменную с которой в цикле можно производить различные действия.
Синтаксис:
for переменная in набор_значений:
инструкции
После ключевого слова for идет название переменной, в которую будут помещаться значения. После оператора in указывается набор значений и двоеточие. Инструкции, которые относятся к циклу, располагаются на последующих строках и должны иметь отступ.
При создании цикла удобно пользоваться функцией range(a, b), которая создает последовательность чисел от a до b-1.
| |
3. 2. 1. Пример
| | Задача:
| |
| Вывести все числа от 1 до 10 с шагом 3.
| | Решение:
| |
|
| | Ответ:
| |
|
| |
3. 2. 2. Пример
| | Задача:
| |
| Задан список. Напечатать все элементы списка.
| | Решение:
| |
|
| | Ответ:
| |
|
| |
3. 2. 3. Пример
| | Задача:
| |
| Создать список от 1 до 99 с шагом 7.
| | Решение:
| |
|
| | Ответ:
| |
|
| |
3. 2. 4. Пример
| | Задача:
| |
| Вывести на экран числа от 5 до 105 с шагом 25, используя функцию range()
| | Решение:
| |
|
| | Ответ:
| |
|
| |
3. 2. 5. Пример
| | Задача:
| |
| Срез. Необходимо получить каждый k-й элемент массива a, начиная с элемента с индексом i (включительно) и заканчивая элементом с индексом j (не включительно), c шагом 2. Переставить все элементы в обратном порядке.
| | Решение:
| |
|
| | Ответ:
| |
|
| |
3. 3. 1 Задание
| | Задача:
| |
| Выведите числа из примера на while (3. 2. 1) в обратном порядке.
| | Решение:
| |
| x=10
while x> =1:
print(x)
x-=3
| | Ответ:
| |
| 10741
| |
3. 3. 2 Задание
| | Задача:
| |
| При решении задач машинного обучения часто в качестве объектов исследования выступает человек. Создайте список значимых характеристик (признаков), идентифицирующих человека. Выведите список на экран.
| | Решение:
| |
| chelovek = [ 'возраст', 'инициалы', 'пол', 'год рождения']
for chelovek in chelovek:
print(chelovek)
| | Ответ:
| |
| возрастинициалыполгод рождения | |
3. 3. 3 Задание
| | Задача:
| |
| Создать список чисел от 2 до 15с шагом 1.
| | Решение:
| |
| x=2
while x< =15:
print(x)
x+=1
| | Ответ:
| |
| 23456789101112131415 | |
3. 3. 4 Задание
| | Задача:
| |
| Выведите числа из примера на forcфункцией range() (3. 2. 4) в обратном порядке.
| | Решение:
| |
| for i in range (105, 4, -25):
print(i)
| | Ответ:
| |
| 1058055305
| |
3. 3. 5 Задание
| | Задача:
|
| Срез. Напишите код, который все элементы массива x с четными индексами переставит в обратном порядке. Т. е. если x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], то код должен сформировать [8, 1, 6, 3, 4, 5, 2, 7, 0, 9].
| Решение:
|
| x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x[0:: 2] = reversed(x[0:: 2])
print(x)
| Ответ:
|
| [8, 1, 6, 3, 4, 5, 2, 7, 0, 9] | | | | |
4. 1. Теоретический материал - Библиотеки
| Машинное обучение опирается на фундаментальные понятия и законы математики и информатики. Библиотека математических функций (math) применяется при решении большинства прикладных задач анализа данных. Также, и некоторые другие библиотеки Python содержат математические функции (например, NumPy). Важную роль играет библиотека matplotlib, которая позволяет производить визуализацию расчетов в удобной для восприятия человеком форме: графики, диаграммы, гистограммы.
Подключениебиблиотек – синтаксис:
importmathas m
import numpy as np
import matplotlib. pyplot as plt
etc…
Библиотеки в pythonсодержат не только функции, позволяющие решать различные задачи, но и некоторые популярные константы, например число Эйлера.
|
4. 2. 1 Пример
| Задача:
|
| Рассчитать синус от е радиан и вывести результат на экран
| Решение:
|
|
| Ответ:
|
|
|
4. 2. 2 Пример
| Задача:
|
| Для функции на интервале [0; 10] с шагом 0, 05 построить график функции, закрасить площадь под ним и вычислить значение этой площади.
Для вычисления площади воспользуйтесь функциейtrapz(), вычисляющей интеграл по правилу трапеции. Для ее корректной работы необходимо подключить следующие библиотеки:
Fromscipy. integrateimportsimps
Fromnumpyimporttrapz
| Решение:
|
|
| Ответ:
|
|
|
4. 2. 3 Пример
| Задача:
|
| Дано некоторое распределение оценок в группе за экзамен. Нарисовать круговую и точечную диаграммы распределения.
| Решение:
|
|
| Ответ:
|
|
|
4. 3. 1 Задание
| Задача:
|
| Задайте массив случайных значений из интервала (0; 1).
Рассчитайте средние и медианные значения для массива, сравните результаты, какие выводы можно сделать о значениях?
Постройте точечную диаграмму рассеяния полученного ряда.
| Решение:
|
| %matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
from scipy. integrate import simps
from numpy import trapz
import random
median_array = []
n, m, sum = 1, 3, 0
x = np. abs([random. random() for _ in range(m) for _ in range(n)])
print (" x", x)
median_array = sorted(x)
print(" Отсортированный массив", median_array)
if m % 2 == 0:
mediana = (median_array[m//2-1] + median_array[m//2])/2
else:
mediana = median_array[m//2]
print(" Медиана", mediana)
for i in range(m):
sum += x[i]
print (" Среднее значение", sum/m)
plt. grid()
plt. scatter(median_array, median_array)
| Ответ:
|
|
|
4. 3. 2 Задание
| Задача:
|
| Дана функция Создать массив из 10 значений функции ( , например, изменяется от 1 до 10). Выделить срез первой половины массива и построить графики для основного массива, используя plt. plot(), для среза – точечный (plt. scatter()).
| Решение:
|
| %matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
from scipy. integrate import simps
from numpy import trapz
import random
n, m = 1, 10
x = np. abs( [random. randint(1, 10) for _ in range(m) for _ in range(n)])
print (" x", x)
y = np. abs(((np. sqrt(1+np. exp(np. sqrt(x))+np. cos(x**2)))/(np. fabs(1-(np. sin(x))**3)))+np. log(np. fabs(2*x)))
print (" y", y)
x2 = x[0: 5: 1]
print (" x2", x2)
y2 = np. abs(((np. sqrt(1+np. exp(np. sqrt(x2))+np. cos(x2**2)))/(np. fabs(1-(np. sin(x2))**3)))+np. log(np. fabs(2*x2)))
print (" y2", y2)
plt. grid()
plt. plot(x, y)
#plt. fill_between(x, y)
plt. show()
plt. grid()
plt. scatter (x2, y2)
| Ответ:
|
|
|
4. 3. 3 Задание
| Задача:
|
| Дана функция Построить график на интервале (0, 10) с шагом 1с заливкой площади и найти эту площадь под ним. Для вычисления площади воспользуйтесь функцией trapz(), вычисляющей интеграл по правилу трапеции.
Для ее корректной работы необходимо подключить следующие библиотеки:
from scipy. integrate import simps
from numpy import trapz
| Решение:
|
| %matplotlib inline
import numpy as np
import matplotlib. pyplot as plt
from scipy. integrate import simps
from numpy import trapz
x = np. arange(1, 10, 1)
y = np. abs(np. fabs(np. cos(x*np. exp(np. cos(x)+np. log(x+1)))))
plt. grid()
plt. plot(x, y, c = " r" )
plt. fill_between(x, y)
area = trapz(y)
print(area)
| Ответ:
|
|
|
4. 3. 4 Задание
| Задача:
|
| Откройте статистические данные по стоимости акций Apple, Microsoft, Googleза 12 месяцев 2021 г. Постройте 3 графика на плоскости и оцените их динамику. Подумайте, как можно улучшить визуализацию результатов.
Для начальных данных допустимо использовать следующий ресурс: https: //finance. yahoo. com
| Решение:
|
| %matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
APPLE = [131. 99, 121. 88, 122. 18, 131. 5, 124. 67, 137. 02, 145. 84, 151. 92, 141. 71, 149. 87, 166. 44, 177. 51]
Microsoft = [231. 79, 232. 42, 237. 55, 252. 12, 250, 270. 98, 285, 302. 14, 282. 26, 331. 83, 333. 49, 336. 27]
Google =[91. 35, 101. 1, 103. 2, 117. 88, 117. 85, 122. 1, 134. 7, 144. 83, 133. 78, 148, 142. 76, 145. 05]
mes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
plt. plot(mes, Microsoft, c = " r" )
plt. plot(mes, APPLE, c = " g" )
plt. plot(mes, Google, c = " b" )
plt. grid()
| Ответ:
|
|
|
4. 3. 5 Задание
| Задача:
|
| Создайте простейший калькулятор, включающий основные действия для двух переменных , а также вычисление следующих функций: .
| Решение:
|
| import numpy as np
for i in range (10000000):
print('Будете вводить опереацию? 1/0')
otv = float(input('otv = '))
if otv == 1:
s = input(" Знак (+, -, *, /, stepen, sin, cos, expon): " )
if s not in ('+', '-', '*', '/', 'stepen', 'sin', 'cos', 'expon'):
continue
x = float(input('x = '))
y = float(input('y = '))
if s == '+':
print(x + y)
elif s == '-':
print(x - y)
elif s == '*':
print(x * y)
elif s == '/':
if y! = 0:
print(x / y)
else:
print(" Делениенаноль! " )
elif s == 'expon':
print(np. exp(x+y))
elif s == 'stepen':
print(x**y)
elif s == 'sin':
print(np. sin(x+y))
elif s == 'cos':
print(np. cos(x+y))
if otv == 0:
break
if otv not in (0, 1):
continue
| Ответ:
|
|
| | | |
|