ТОП просматриваемых книг сайта:
Введение в машинное обучение. Равиль Ильгизович Мухамедиев
Читать онлайн.Название Введение в машинное обучение
Год выпуска 2023
isbn
Автор произведения Равиль Ильгизович Мухамедиев
Издательство Автор
Как и в случае с линейной регрессией, минимизация функции стоимости достигается с помощью алгоритма градиентного спуска (gradient descent), но также применяются Conjugate gradient [[36]], BFGS, L-BFGS или lbfgs [[37]].
Логистический классификатор может быть применен и в отношении нескольких классов. В этом случае для каждого класса классификатор настраивается отдельно. Класс, к которому принадлежит новый объект, вычисляется расчетом значений всех функций гипотез и выбором из них максимального значения miaxhθ(i)(x), где i – номер класса. Другими словами, объект принадлежит к тому классу, функция гипотезы которого максимальна.
Как и в случае с линейной регрессией, для увеличения обобщающей способности алгоритма применяют регуляризацию (последнее слагаемое в нижеследующей формуле), которая позволяет уменьшить влияние величин высокого порядка:
Интересно, что производная функции стоимости логистической регрессии ровно такая же, как и производная функции стоимости линейной регрессии (вывод см., например, в [[38]]). Следовательно, алгоритм градиентного спуска будет работать так же, как и для линейной регрессии (формула 1.5), с тем отличием, что значение функции гипотезы будет вычисляться по формуле 2.8.
Пример. Построим линейный классификатор на основе логистической регрессии. Вначале сгенерируем набор данных и разделим его на тренировочное и тестовое множества:
from sklearn.datasets import make_moons, make_circles, make_classification
from sklearn.model_selection import train_test_split
dataset = make_circles(noise=0.2, factor=0.5, random_state=1)
X_D2, y_D2 = dataset
plt.figure(figsize=(9,9))
plt.scatter(X_D2[:,0],X_D2[:,1],c=y_D2,marker='o',
s=50,cmap=ListedColormap(['#FF0000','#00FF00']))
X_train, X_test, y_train, y_test = train_test_split(X_D2, y_D2, test_size=.4, random_state=42)
В результате получим распределение данных, показанное на рисунке 1.3.
Вызовем необходимые библиотеки и методы:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
Последние две строки необходимы для оценки точности работы классификатора (см. раздел «Оценка качества методов ML»).
Разработаем логистическую функцию logisticFunction(X,theta) и функцию, обеспечивающую оценку объекта на основе предсказанного значения гипотезы, – logRegPredictMatrix(h,threshold). Как показано выше, функция гипотезы принимает значение от 0 до 1. Для того чтобы получить оценку принадлежности объекта к классу (1 – «положительный», 0 – «отрицательный»), необходимо для каждого значения гипотезы вычислить номер класса («предсказать») по правилу predicted = 0 If h <threshold и predicted = 1 If h >= threshold. Обычное значение порога threshold=0.5.
Функция, вычисляющая значения коэффициентов логистической регрессии первого порядка:
def logisticRegressionByNumpy(X,y):
m=y.size
X=np.concatenate((np.ones([m,1]),X), axis=1)
theta=np.array(np.random.rand(X.shape[1]))
h=logisticFunction(X,theta)
alpha=0.05
iterations=1500
lambda_reg=0.01
for
36
Martin Fodslette Møller. A scaled conjugate gradient algorithm for fast supervised learning // Neural Networks. – 1993. – Vol. 6. – Issue 4. – P. 525–533.
37
Dong C. Liu, Jorge Nocedal. On the limited memory BFGS method for large scale optimization // Mathematical Programming. – 1989. – Vol. 45. – Issue 1–3. – P. 503–528.
38
Derivative of Cost Function for Logistic Regression. – https://medium.com/mathematics-behind-optimization-of-cost-function/derivative-of-log-loss-function-for-logistic-regression-9b832f025c2d