ru24.pro
Работа
Май
2024

Решение задач по Машинному обучению на Python в Jupiter Notebook

0

Задача 1. Реализация собственных классов и функций


⚠️ Замечание. 1) Нельзя пользоваться готовыми реализациями sklearn; 2) чтобы избежать случая с вырожденной матрицей при оценке параметров добавьте незначительную регуляризацию по умолчанию или используйте lstsq из пакета numpy или др. способ; 3) используйте random_state=0

  1. Реализуйте класс, предназначенный для оценки параметров линейной регрессии с регуляризацией совместимый с sklearn. Передаваемые параметры: 1) коэффициент регуляризации (alpha). Использовать метод наименьших квадратов с регуляризацией.
  2. Реализуйте класс для стандартизации признаков в виде трансформации совместимый с sklearn. Передаваемые параметры: 1) has_bias (содержит ли матрица вектор единиц), 2) apply_mean (производить ли центровку)
  3. Реализуйте функции для расчета MSE и R^2 при отложенной выборке (run_holdout) и кросс-валидации (run_cross_val). Для кросс-валидации используйте только класс KFold. Выходными значениями должны быть MSE и R^2 для обучающей и тестовой частей.

    Шаблон кода:

    def run_holdout(model, X, y, train_size, random_state) -> dict:
        ...
        return scores
    def run_cross_val(model, X, y, n_splits, shuffle, random_state) -> dict:
        ...
        return scores
  4. Используя класс Pipeline, выполнить обучение линейной регрессии с предварительной стандартизацией с коэффициентом регуляризации равным 0 и 0.01. Выведите значения параметров обученной модели. Выведите значения MSE и R^2, полученные посредством функций run_holdout и run_cross_val. Отобразите график предсказание (^) - действительное значение () для разных коэффициентов регуляризации для обучающего и текстового множества. Использовать следующие параметры:

    • train_size=0.75,
    • n_splits=4,
    • shuffle=True,
    • random_state=0
⚠️ Замечание. При формировании исходных данных использовался полином 16 степени одномерных данных.

Задача 2. Классификация и кросс-валидация

⚠️ Замечание:

  • Используйте класс логистической регрессии из sklearn со следующими параметрами:
    • penalty='l2'
    • fit_intercept=True
    • max_iter=100
    • C=1e5
    • solver='liblinear'
    • random_state=12345
  • Разбейте исходные данные на обучающее и тестовое подмножества в соотношении 70 на 30, random_state=0
  • Для выбора гиперпараметров используйте два подхода: 1) с отложенной выборкой, 2) с кросс-валидацией
  • Для кросс-валидации использовать функцию cross_validate из sklearn
  • Параметры разбиения для выбора гиперпараметров используйте те, что в п.4 задачи 1
Дано множество наблюдений (см. набор данных к заданию), классификатор - логистическая регрессия. Найти степень полинома с минимальной ошибкой на проверочном подмножестве. Для лучшего случая рассчитать ошибку на тестовом подмножестве. В качестве метрики использовать долю правильных классификаций. Сделать заключение о влиянии степени полинома на качество предсказания.

Построить:

  • диаграмму разброса исходных данных
  • зависимость доли правильных классификаций от степени полинома для обучающего и проверочного подмножеств (две кривые на одном графике)
  • результат классификации для наилучшего случая (степень полинома) для обучающего и тестового подмножеств с указанием границы принятия решения

Задача 3. Классификация текстовых документов


файл: data/reviews.tsv

  1. Загрузите исходные данные
  2. Разбейте исходные данные на обучающее (train, 80%) и тестовое подмножества (test, 20%)
  3. Используя стратифицированную кросс-валидацию k-folds (=4) для обучающего множество с метрикой Balanced-Accuracy, найдите лучшие гиперпараметры для следующих классификаторов:

    • K-ближайших соседей: количество соседей () из диапазона np.arange(1, 150, 20)
    • Логистическая регрессия: параметр регуляризации () из диапазона np.logspace(-2, 10, 8, base=10)
    • Наивный Байес: сглаживающий параметр модели Бернулли () из диапазона np.logspace(-4, 1, 8, base=10)
    • Наивный Байес: сглаживающий параметр полиномиальной модели () из диапазона np.logspace(-4, 1, 8, base=10)
  4. Отобразите кривые (параметры модели)-(Balanced-Accuracy) при обучении и проверке для каждой классификатора (две кривые на одном графике для каждого классификатора)
  5. Если необходимо, выбранные модели обучите на всём обучающем подмножестве (train) и протестируйте на тестовом (test) по Balanced-Accuracy, R, P, F1. Определите время обучения и предсказания.
  6. Выполните пункты 3-5 для n-gram=1, n-gram=2 и n-gram=(1,2)
  7. Выведите в виде таблицы итоговые данные по всем методам для лучших моделей (метод, n-gram, значение параметра модели, время обучения, время предсказания, метрики (Balanced-Accuracy, R, P, F1))
  8. Сделайте выводы по полученным результатам (преимущества и недостатки методов)
⚠️ Замечание:

  • Для всех объектов/методов/моделей random_state = 123
  • Для выбора гиперпараметров можно использовать стандартные утилиты sklearn


!!!Всё выполнить в Jupiter Notebook, пример выполнения с другими задачами прикреплен!!!