Знакомство с библиотеками Python. Применение регрессионных методов машинного обучения. Применение классификационных методов машинного обучения.
Описание
- Контрольная работа состоит из трех частей:
Часть 1. Знакомство с библиотеками Python.
Часть 2. Применение регрессионных методов машинного обучения.
Часть 3. Применение классификационных методов машинного обучения.
- Данная контрольная работа выполняется в любом блокноте Python (Anaconda, Colab, PyCharm).
- Для выполнения первой части выбирается один из 10 вариантов файлов, представленных в таблице 1, в соответствии с последней цифрой пароля. Файлы размещены в папке «Приложение 1».
- Для выполнения задания второй части выбирается один из 10 вариантов файлов, представленных в таблице 2, в соответствии с последней цифрой пароля. Файлы размещены в папке «Приложение 2».
- Отчет по контрольной работе необходимо представить в текстовом формате с подробным описанием этапов выполнения заданий, приложить скрины листингов и результатов выполнения. Включить в отчет ответы на контрольные вопросы.
Часть 1. Задание
- Создать структуру данных Series из Python и Numpy ;
- Создать структуру данных DataFrame любым из способов.
- Создайте csv- файл: создайте строку, содержащую данные в формате CSV и постройте на их базе DataFrame.
- Загрузите данные из файла csv в структуру DataFrame.
Варианты:
Таблица 1
Вариант | Файл |
1 | 'Protein Consumption in |
2 | bank_marketing_dataset.csv |
3 | Churn.csv |
4 | heart.csv |
5 | ВВП России.csv |
6 | Дети с особенностями.csv |
7 | mba_decision_dataset |
8 | StudentsPerformance |
9 | winequality-white |
0 | Obesity prediction |
- Файл из архива (DataSet,)
** Файлы могут быть не подготовлен для обработки данных, вам необходимо, открыть файл в любом текстовом редакторе и расставить разделители согласно тому как требует это формат csv.
- Выведите данные на просмотр
- Выведите случайную выборку 10 из фреймов данных
- Проверьте хвост набора данных — последние записи в наборе данных
- Посмотрите размер набора данных
- Выведите название столбцов
- Проверить файл на пропуски данных
- Заполнить имеющиеся пропуски 0.
- Добавить в имеющуюся структуру строку и столбец.
- Вывести строки структуры за исключением первых 7.
- Задайте новую структуру DataFrame и объедините с текущей структурой (concat).
- Задайте еще одну структуру DataFrame и соедините с текущей структурой по вертикали (применив join).
- Загрузите исходный файл заново и выполните над данными следующие статистические операции, отмеченные в таблице, для числовых значений необходимо создать фрейм только для числовых значений и работать с ним:
Методы для расчета статистик
Метод | Описание |
count | Количество не-NAобъектов |
sum | Сумма |
mean | Среднее значение |
mad | Среднее абсолютное отклонение |
median | Медиана |
min | Минимум |
max | Максимум |
mode | Мода |
abs | Абсолютное значение |
std | Стандартное отклонение |
quantile | Квантиль (%) |
- Вывести сводную информацию по статистикам (describe()).
- Вывести описательную статистику всех категориальных переменных
- На основе данных таблицы построить гистограммы для подходящих значений.
Часть 2. Задание
- С помощью данный методических указаний, и материалов сети Интернет изучить основные теоретические сведения и инструкции по реализации множественной линейной регрессии.
- В соответствии с номерами варианта выбрать из табл. 2 заданный набор данных и выполнить постановку задачи регрессионного анализа: определить цель исследования и поставить конкретные задачи анализа (например, определить стоимость на подержанные автомобили в зависимости от его характеристик, и т.п.).
- В соответствии с постановкой задачи импортировать требуемые библиотеки:
- обработка данных: pandas и numpy,
- модель множественной регрессии: linear_model из sklearn,
- разделение данных обучения и тестирования: train_test_spli,
- оценка модели: r2_score;
- Обработать данные,
- просмотреть;
- избавиться от пропусков;
- Обработать данные,
- определить формат данных для работы;
- проверить корректность отображения;
- провести словесное описание набора данных;
- провести описательную статистику;
- определить категориальные данные и преобразовать их в (есть несколько способов сделать это, например, с помощью Label Encoder или One Hot Encoder - оба доступны в модуле sklearn (подробнее см. #encoding-categorical-features). Можно использовать классический подход фиктивных переменных, который преобразует категориальные признаки в числовые дихотомические переменные);
- представить визуализацию зависимости данных (представить графики, гистограммы, диаграммы и т.д.).
- Подготовить входные данные:
- определить зависимую переменную, исходя из тото, что требуется спрогнозировать;
- определить функции для прогноза, то есть набор характеристик для прогноза (можно брать все, а можно исключить лишние характеристики):
- при выборе признаков проверять корреляцию между зависимой и каждой независимой переменной. Если они не коррелированны, следует удалить соответствующий элемент из модели;
- проверить мультиколлинеарность, взаимосвязь между независимыми переменными, удалить коррелированные элементы, чтобы избежать переобучения модели;
- есть несколько способов выбрать переменные для модели: прямой отбор и обратное исключение, в этом процессе добавляется или удаляется по одной переменной и проверяется производительность режима;
- разделить данные на наборы для обучения и тестирования;
- Построить модель:
- вызвать регрессор: model = LinearRegression();
- передать данные в модель: model.fit(X, Y);
- выполнить предсказание: y_pred = model.predict(X).
- Провести оценивание модели. Выбрать метод для оценивания модели (в классической статистике производительность моделей линейной регрессии оценивается с помощью расчета коэффициента детерминации (R²), то есть разница между выборками в наборе данных и прогнозами, сделанными моделью, которое дает значение от 0 до 1, и чем выше R², тем лучше модель. Подробнее о методике расчета коэффициента детерминации см. .
Ответьте письменно на контрольные вопросы
-
- В чем отличия между простой и множественной линейной регрессей?
- В чем разница в методиках расчета коэффициентов корреляции с помощью Pandas и SciPy?
- В чем разница между числовыми и категориальными переменными? Каковы отличия их обработки методом регрессионного анализа?
- Как осуществляется подбор членов линейного уравнения при построении модели множественной линейной регрессии?
- Что такое мультиколлинеарность и как её избежать?
- Как идентифицировать фиктивные поля в наборе данных?
- Для чего рассчитывается коэффициент корреляции Пирсона и какие средства Python для этого используются?
- Построить модель:
-
- Выполнить загрузку и предварительную обработку данных, построить модель.
- На сайте Kaggle необходимо выбрать один из наборов данных подходящих для разработки модели k ближайших соседей. Далее определить, как устроен датасет и какую постановку задачи можно выполнить. Т.к. алгоритм является метрическим, соответственно значения полей должны быть числовыми.
- Выделить целевую переменную. Определить, какая из задач обучения с учителем k ближайших соседей будет рассматриваться – классификация или регрессия.
- Определить распределение значений целевой переменной. Построить подходящую визуализацию. Прокомментировать результат.
- Провести необходимую предобработку данных. Все категориальные признаки преобразовать в числовые.
- Разбить набор данных на обучающую и тестовую выборки с помощью метода train_test_split.
- Обучить алгоритм классификации kNeighborsClassifier и регрессии KNeighborsRegressor. Оценить качество модели на тестовой выборке помощью mean_squared_error. Сравнить результаты и сделать выводы.
- Выполнить загрузку и предварительную обработку данных, построить модель.
-
- Поиск наилучшего значения количества соседей.
- Разработать генератор, который выполнит разбивку на блоки и перемешает выборку перекрестной проверки. Число блоков n_splits равно 5. Например: kf = KFold(n_splits=5, shuffle=True, random_state=42).
- Найти показатель качества модели kNN кросс-валидации (cross_val_score).
- Сделать вывод, приемлемо ли использование данной метрики качества в выбранной задаче.
- Пересчитать качество модели при помощи другой наиболее подходящей метрики из списка в табл. 3.
- Выполнить перекрестную проверку при возможных значения количества соседей от 1 до 50. Использовать GridSearchCV.
- Сделать выводы: при каком количестве соседей качество модели получилось наилучшим, чему равна эта оценка качества.
- Построить график значений метрики в зависимости от количества соседей (matplotlib.pyplot.plot()).
- Выбор метрики в методе k ближайших соседей.
- Выполнить перебор различных вариантов значений метрики Минковского по сетке от 1 до 10 с таким шагом, чтобы всего было протестировано 200 вариантов (удобно использовать функцию numpy.linspace: np.linspace(1.0, 10.0, num = 200)). Использовать наилучшее значение n_neighbors, найденое ранее.
- Для параметра weights задать значение 'distance' (данный параметр добавляет в алгоритм веса, зависящие от расстояния до ближайших соседей). В качестве метрики качества снова использовать accuracy . Качество оценить с помощью кросс-валидации по 5 блокам.
- Определить, при каком значении меры Минковского на кросс-валидации качество модели оказалось наилучшим. При этом учесть, что cross_val_score возвращает массив показателей качества по блокам, поэтому необходимо максимизировать среднее этих показателей.
- Разработать алгоритм классификатора либо регрессора методом k ближайших соседей без использования библиотек.
- Ответить письменно на контрольные вопросы
- В чем заключается метод классификации?
- Какие задачи можно решить методом k ближайших соседей?
- Какие подходы для реализации метод классификации могут быть использованы и в чем их суть?
- Какие средства Python применяются для реализации метод классификации?
- В чем заключается метод k ближайших соседей?
- С какими данными – числовыми или категориальными – работает метод k ближайших соседей?
- Каков смысл задачи определения числа ближайших соседей и как этот параметр влияет на результат решения задачи?
- Поиск наилучшего значения количества соседей.
- Подготовить входные данные:
Метрика | Ссылка на описание |
‘accuracy’ | |
‘balanced_accuracy’ | |
‘top_k_accuracy’ | |
‘average_precision’ | |
‘neg_brier_score’ | |
‘f1’ | |
‘f1_micro’ | |
‘f1_macro’ | |
‘f1_weighted’ | |
‘f1_samples’ | |
‘neg_log_loss’ | |
‘precision’ etc. | |
‘recall’ etc. | |
‘jaccard’ etc. | |
‘roc_auc’ | |
‘roc_auc_ovr’ | |
‘roc_auc_ovo’ | |
‘roc_auc_ovr_weighted’ | |
‘roc_auc_ovo_weighted’ | |
‘explained_variance’ | |
‘max_error’ | |
‘neg_mean_absolute_error’ | |
‘neg_mean_squared_error’ | |
‘neg_root_mean_squared_error’ | |
‘neg_mean_squared_log_error’ | |
‘neg_median_absolute_error’ | |
‘r2’ | |
‘neg_mean_poisson_deviance’ | |
‘neg_mean_gamma_deviance’ | |
‘neg_mean_absolute_percentage_error’ |
СибГУТИ










