Логистическая регрессия и теоретический вывод модели максимальной энтропииВ статье упоминаются четыре алгоритма оптимизации: это:
- Алгоритм градиентного спуска
- Метод квазиньютона (метод Ньютона)
- Обобщенное итеративное масштабирование (ГИС: Обобщенное итеративное масштабирование).
- Улучшенное итеративное масштабирование (IIS: улучшенное итеративное масштабирование).
Выражения и целевые функции логистической модели и модели максимальной энтропии:
логистическая модель
- выражение
- целевая функция
модель максимальной энтропии
- выражение
- целевая функция
в
главная предпосылка
для набора данных,представительметка класса для фрагмента данных,представительхарактеристики данных,представительчасть данныхособенность.
Предполагаемая целевая функция— выпуклая функция, причем второй порядок непрерывно дифференцируем, а минимальное значение функции равно.
1. Алгоритм градиентного спуска
1.1 Градиент
Математическое определение градиента: направление градиента — это направление самого быстрого изменения. Смысл этого в том, что по направлению градиента легче найти максимальное значение функции, наоборот, градиент убывает быстрее всего, и легче найти минимальное значение.
1.2 Применение
В логистической модели вычислите частную производную целевой функции по весам каждой функции.
Тогда обновление веса:
1.3 Неадекватность
Расстояние каждого шага очень важно вблизи крайней точки, если шаги слишком велики, легко колебаться вблизи крайней точки и не сойтись.
Решение: положитьУстановите переменную, которая уменьшается с количеством итераций, но не точно равна нулю.
1.4 Различные градиентные спуски
1.4.1 Пакетный градиентный спускПакетный градиентный спуск является наиболее часто используемой формой градиентного спуска, Конкретный метод заключается в использовании всех выборок для обновления параметров.1.4.2 Стохастический градиентный спускМетод стохастического градиентного спуска на самом деле похож на метод пакетного градиентного спуска, разница в том, что он не использует все выборочные данные при поиске градиента, а выбирает только один образец для поиска градиента. Стохастический градиентный спуск и пакетный градиентный спуск — это две крайности, в одном используются все данные для градиентного спуска, а в другом — одна выборка для градиентного спуска. Естественно, преимущества и недостатки каждого очень заметны. Что касается скорости обучения, метод стохастического градиентного спуска использует только одну выборку за раз для итерации, поэтому скорость обучения очень высока, в то время как метод пакетного градиентного спуска не может удовлетворить скорость обучения при большом размере выборки. Для точности используется стохастический градиентный спуск для определения направления градиента только с одним образцом, что приводит к решению, которое, вероятно, будет неоптимальным. Что касается скорости сходимости, поскольку метод стохастического градиентного спуска итерирует одну выборку за раз, направление итераций сильно меняется, и он не может быстро сходиться к локальному оптимальному решению.1.4.3 Мини-пакетный градиентный спускМини-пакетный градиентный спуск — это компромисс между пакетным градиентным спуском и стохастическим градиентным спуском, то есть дляобразцы, мы используемобразцы для повторения,,в целом, разумеется, это значение можно скорректировать по данным выборки.
1.5 Реализация кода
#==============梯度上升优化算法=======================#
def _batchGradientAscent(self, nums, lr):
'''
梯度上升优化算法
------
:param nums: <np.ndarray>迭代次数
:param lr: <np.ndarray>学习率
:return:
'''
for k in range(nums):
print('%d th iterations' % k)
output = self.predict(self.input_vecs)
delta = lr * (self.labels - output.T)
delta_weight = np.dot(self.input_vecs.T, delta)
self.weight += delta_weight.T
# ==============随机梯度上升优化算法=======================#
def _StochasticGradientAscent0(self, lr):
'''
随机梯度上升优化算法
------
:param lr: <np.ndarray>学习率
:return:
'''
for inum in range(self.n_nums):
output = self.predict(self.input_vecs[inum])
delta = lr * (self.labels[inum] - output.T)
delta_weight = self.input_vecs[inum] * delta
self.weight += delta_weight.T
# ==============随机梯度上升优化算法=======================#
def _StochasticGradientAscent1(self, nums):
'''
随机梯度上升优化算法
------
:param nums: <np.ndarray>迭代次数
:return:
'''
for iteration in range(nums):
for inum in range(self.n_nums):
data_index = [_ for _ in range(self.n_nums)]
lr = 4 / (iteration + inum + 1) + 0.01
rand_index = int(random.uniform(0, self.n_nums))
output = self.predict(self.input_vecs[rand_index])
delta = lr * (self.labels[rand_index] - output.T)
delta_weight = self.input_vecs[rand_index] * delta
self.weight += delta_weight.T
del(data_index[rand_index])
# ==============小批量梯度上升优化算法=======================#
def _MiniBatchGradientAscent(self, nums, lr, batch_size=16):
'''
小批量梯度上升优化算法
------
:param nums: <np.ndarray>迭代次数
:param lr: <np.ndarray>学习率
:param batch_size: <np.ndarray>批学习大小
:return:
'''
for iteration in range(nums):
for ibatch in range(1, self.n_nums // batch_size):
start_index = (ibatch-1) * batch_size
end_index = ibatch * batch_size
mini_train_data = self.input_vecs[start_index: end_index, ]
mini_label = self.labels[start_index: end_index, ]
output = self.predict(mini_train_data)
delta = lr * (mini_label - output.T)
delta_weight = np.dot(mini_train_data.T, delta)
self.weight += delta_weight.T
def train(self, nums, optimization='gradAscent', lr=0.001):
'''
训练logistics模型
:param nums: 迭代次数
:param input_vecs: 训练样本的特征值
:return:
'''
if optimization == 'gradAscent':
self._batchGradientAscent(nums, lr)
elif optimization == 'SGA0':
self._StochasticGradientAscent0(lr)
elif optimization == 'SGA1':
self._StochasticGradientAscent1(nums)
elif optimization == 'MGA':
self._MiniBatchGradientAscent(nums, lr, batch_size=16)
2. Метод Ньютона
2.1 Основная идея (сначала рассмотрим случай с одним значением)
Используйте метод Ньютона, чтобы найти решение функции. построен в- оценочная точка текущего минимального значения, которое можно узнать из формулы Тейлора
сделать,какЕсли условие не выполняется, итерационная формула может быть
можно рассматривать какСравниватьближе к 0, когдапора сходиться.
2.1 Основная идея (случай матрицы)
кЕсть крайние точки, нужно, так что есть
Когда матрицаДля невырожденных матриц имеем
3. Квазиньютоновский метод.
Примечания к изучению метода Ньютона и метода квазиньютона (2) Условие квазиньютона
Метод Ньютона и квази-Ньютоновский метод примечания к изучению (3) Алгоритм DFP