ниже:

>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]].

Логистический классификатор может быть применен и в отношении нескольких классов. В этом случае для каждого класса классификатор настраивается отдельно. Класс, к которому принадлежит новый объект, вычисляется расчетом значений всех функций гипотез и выбором из них максимального значения