Введение в машинное обучение. Равиль Ильгизович Мухамедиев

Введение в машинное обучение - Равиль Ильгизович Мухамедиев


Скачать книгу
обладал достаточной способностью к обобщению.

      Вычисление параметров регрессии методом градиентного спуска выполняется так же, как и ранее, за исключением небольшого дополнения в виде регуляризационного коэффициента, так что для j-го параметра на каждом шаге цикла вычисляется значение:

      Рассмотрим пример.

      В качестве исходных данных синтезируем набор данных в соответствии с выражением:

      Добавив некоторый случайный коэффициент с помощью np.array([np.random.rand(x.size)]).T/50, получим примерно следующее (рисунок 2.5):

      Рисунок 2.5. Исходные данные и результаты выполнения алгоритма полиномиальной регрессии

      Введем переменную degree, означающую коэффициент регрессии. Например, при degree = 1 получим обычную линейную регрессию (r2_score = 0.27). Увеличивая степень регрессии, можем добится значительно лучших результатов. Например, при degree = 19 r2_score = 0.90. Использование коэффициента регуляризации lambda_reg позволяет «сглаживать» регрессионную кривую. Фрагмент программы, обеспечивающей расчет параметров полиномиальной регрессии, приведен ниже:

      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 – число параметров (свойств или признаков)


Скачать книгу