Главная страница
Навигация по странице:

  • Задача

  • Метод решения

  • Листинг программы MLF_LogRegClassifier001+

  • Задача 2 *

  • Реализация классификатора на базе алгоритма логистической регрессии (LogisticRegression) Постановка задачи


    Скачать 190.5 Kb.
    НазваниеРеализация классификатора на базе алгоритма логистической регрессии (LogisticRegression) Постановка задачи
    Дата03.12.2022
    Размер190.5 Kb.
    Формат файлаdoc
    Имя файлаMLF_LogisticRegression_py_v.1.0.doc
    ТипЗадача
    #825794

    Реализация классификатора на базе алгоритма логистической регрессии (LogisticRegression)
    Постановка задачи
    Нам необходимо настроить классификатор для классификации объектов относящихся к двум классам. Для этого можно воспользоваться достаточно быстрым алгоритмом логистической регрессии. Алгоритм показывает хорошие результаты в случае если объекты хорошо разделены в пространстве признаков.

    Хотя алгоритм логистической регрессии изначально предложен для классификации двух классов или One-vs-all, однако текущая версия данной модели позволяет выполнять классификацию объектов нескольких классов при установке параметра multi_class. В качестве одного из основных параметров настройки служит С - инверсная регуляризационная величина.Чем она меньше, тем сильнее регуляризация, то есть тем более сглаженной получается линия разделяющая классы.

    Задача: Используя исскуственно сгенерированный набор данных, построить классификатор на базе алгоритма логистической регрессии.

    Данные
    В качестве данных используем специально сгенерированный набор данных, содержащий 200 объектов разделенных на 2 класса. Данные сгенерируем с помощью метода make_blobs() следующим образом.

    fromsklearn.datasetsimportmake_classification, make_blobs

    X_D2, y_D2 = make_blobs(n_samples = 200, n_features = 2, centers = 2, cluster_std = 1.3, random_state = 4)

    Для визуализации данных воспользуемся следующим фрагментом кода

    plt.figure()

    plt.scatter(X_D2[:,0], X_D2[:,1], c=y_D2, marker= 'o', s=50, cmap=cmap_bold)

    plt.show()

    Получим примерно следующее


    Метод решения
    Полученные выше данные разобьем на тренировочное и тестовое множества

    X_train, X_test, y_train, y_test = train_test_split(X_D2, y_D2, random_state = 0)

    Создадим классификатор и натренируем его, используя данные тренировочного множества

    clf = LogisticRegression(C=1, solver='lbfgs')

    clf.fit(X_train, y_train)

    вычислим результат классификации на тестовом наборе данных

    predictions = clf.predict(X_test)

    Распечатаем параметры классификатора

    print('Logistic regression classifier \n ', clf)

    и оценим качество классификации на тренировочном и тестовом множествах

    print('Logistic regression classifier \n ', clf)

    print('Accuracy of KNN classifier on training set: {:.2f}'

    .format(clf.score(X_train, y_train)))

    print('Accuracy of KNN classifier on test set: {:.2f}'

    .format(clf.score(X_test, y_test)))

    Результаты классификации на тренировочном и тестовом множествах

    Accuracy of LR classifier on training set: 0.95

    Accuracy of LR classifier on test set: 0.90
    Листинг программы MLF_LogRegClassifier001+




    Задача 1* 1.

    Для полноценной оценки классификатора необходимо кроме accuracy определить параметры точности, полноты и гармонической меры (precision, recall, f1-score), а для наглядного представления результатов классификации используется матрица ошибок классификации (confusion matrix), которая показывает насколько классификатор путает объекты разных классов. Анализ матрицы, в частности, позволяет выявить объекты, которые классификатор чаще путает с другими.

    Для расчета указанных параметров используются классы confusion_matrix и classification_report, которые можно подключить командой

    from sklearn.metrics import confusion_matrix, classification_report

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

    В случае классификации объектов, обладающих только двумя признаками для наглядного представления результатов классификации воспользуйтесь утилитой plot_class_regions_for_classifier

    Для ее использования разместите в текущей директории библиотеку adspy_shared_utilities.py и добавьте в программу следующие строки

    from adspy_shared_utilities import plot_class_regions_for_classifier

    plot_class_regions_for_classifier(clf, X_train, y_train, X_test, y_test,

    'Dataset d2: log_reg classifier')
    1.1. Оцените результаты работы классификатора с помощью перечисленных параметров и confusion matrix.

    1.2. Для данных и классификатора, описанного выше, постройте наглядное представление объектов в пространстве признаков.

    Вывод вашей программы теперь должен быть намного более информативным, например,

    Logistic regression classifier

    LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,

    intercept_scaling=1, max_iter=100, multi_, n_jobs=1,

    penalty='l2', random_state=None, solver='lbfgs', tol=0.0001,

    verbose=0, warm_start=False)

    Accuracy of LR classifier on training set: 0.95

    Accuracy of LR classifier on test set: 0.90

    [[22 2]

    [ 3 23]]

    precision recall f1-score support
    0 0.88 0.92 0.90 24

    1 0.92 0.88 0.90 26
    avg / total 0.90 0.90 0.90 50
    training results

    precision recall f1-score support
    0 0.95 0.96 0.95 76

    1 0.96 0.95 0.95 74
    avg / total 0.95 0.95 0.95 150

    Задача 2 *2

    Загрузите набор данных iris, содержащий 150 строк данных о цветах ирисов разбитых на три класс. Каждый цветок описывается четырьмы параметрами.

    Разработайте классификатор на базе логистической регрессии, обеспечивающий показатели accuracy не ниже 97%.3

    Загрузить данные и получить массив параметров и меток классов (X, y) можно с помощью следующих операторов

    from sklearn import datasets

    iris = datasets.load_iris()

    X = iris.data[:, :4]

    y = iris.target

    Совет.

    Используйте нормализаторы или масштабирующие утилиты, например, MinMaxScaler() для улучшения качества классификации.

    1Решение MLF_LogRegClassifier001_t1

    2 Решение MLF_LogRegClassifier001_t2

    3 Отметим, что указанную величину accuracy можно получить используя только два параметра из 4-x. Бонусом при таком подходе является то, что и при этом можно визуализировать результаты с помощью утилиты plot_class_regions_for_classifier()


    написать администратору сайта