>xr=np.array([np.linspace(0,1,180)])
>x=xr.T
>print(x.size)
>y=f(x)
>(x,y)=plusRandomValues(x,y) #добавление случайных величин
>plt.figure(figsize=(9,9))
>plt.plot(x,y,'.')
>m=x.size
>degree=19 #коэффициент регрессии
>lambda_reg=0.00001
>on=np.ones([m,1])
>X=on
>#расчет степеней свободной переменной в соответствии со степенью регрессии degree
>for i in range(degree):
> xx=np.power(x, i+1)
> X=np.concatenate((X,xx),axis=1)
>theta=np.array([np.random.rand(degree+1)])
>h=np.dot(X,theta.T)
>t0=time.time()
>alpha=0.5
>iterations=100000
>for i in range(iterations):
> theta=theta-alpha*(1/m)*np.dot((h-y).T,X) -(lambda_reg/m)*theta
> h=np.dot(X,theta.T)
>t1=time.time()
>plt.plot(x,y,'.')
>plt.plot(x,h, label='Regression degree = {:0.2f})'.format(degree))
>leg=plt.legend(loc='upper left',shadow=True,fontsize=16)
>leg.get_frame().set_facecolor('#0055DD')
>leg.get_frame().set_facecolor('#')
>leg.get_frame().set_alpha(0.9)
>plt.show()
2.4. Классификаторы. Логистическая регрессия
Несмотря на присутствующее в названии данного метода слово «регрессия», цель данного алгоритма не восстановление значений или предсказание. Алгоритм применяется в случае, если необходимо решить задачу классификации. В случае логистической регрессии речь идет о задаче бинарной классификации, то есть отнесении объектов к классу «негативных» или «позитивных», вследствие чего набор обучающих примеров построен таким образом, что y ∈ {0,1}.
В этом случае от функции гипотезы требуется выполнение условия 0 ≤h>θ(x) ≤1, что достигается применением сигмоидальной (логистической) функции:
Где θ – вектор параметров.
Можно записать также
где n – число параметров (свойств или признаков) объектов; g(z) – сигмоидальная или логистическая функция.
В сокращенном виде h>θ(x) = g(θ>Tx).
Отметим, что сигмоидальная функция широко применяется и в нейронных сетях в качестве активационной функции нейронов, поскольку является непрерывно дифференцируемой и тем самым гарантирует сходимость алгоритмов обучения нейронной сети. Примерный вид сигмоиды показан в разделе «Активационные функции».
Функция h>θ(x) может рассматриваться как вероятность того, что объект является «позитивным» (h>θ(x)≥0.5) или «негативным» (h>θ(x)<0.5). В сложных случаях, требующих нелинейной границы разделения, например, в виде окружности (рисунок 2.6), необходимо добавить дополнительные параметры, например, квадратные степени исходных параметров:
или их произведения и т.п.
Рисунок 2.6. Объекты, для которых необходима нелинейная граница разделения
Подбор параметров θ после выбора функции гипотезы выполняется так, чтобы минимизировать функцию стоимости вида:
Из двух частей функции стоимости, объединенных знаком +, вычисляется фактически только одна, так как в задаче классификации y может принимать только два значения: 1 и 0.
То есть в случае, если y = 0, стоимость для i-го примера принимает вид:
Таким образом, при минимальном значении функции стоимости в обоих случаях достигается максимизация вероятности принадлежности объекта к положительному классу для «положительных» объектов и минимизация вероятности для «отрицательных» объектов. По-другому логистический классификатор называется классификатором максимизации энтропии (maximum-entropy classification – MaxEnt).
Как и в случае с линейной регрессией, минимизация функции стоимости достигается с помощью алгоритма градиентного спуска (gradient descent), но также применяются Conjugate gradient [[36]], BFGS, L-BFGS или lbfgs [[37]].
Логистический классификатор может быть применен и в отношении нескольких классов. В этом случае для каждого класса классификатор настраивается отдельно. Класс, к которому принадлежит новый объект, вычисляется расчетом значений всех функций гипотез и выбором из них максимального значения