Введение в машинное обучение. Равиль Ильгизович Мухамедиев
обладал достаточной способностью к обобщению.
Вычисление параметров регрессии методом градиентного спуска выполняется так же, как и ранее, за исключением небольшого дополнения в виде регуляризационного коэффициента, так что для 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 – число параметров (свойств или признаков)