Линейная регрессия является одним из наиболее часто используемых алгоритмов в статистике. В основном линейная регрессия используется, когда вы хотите представить математическую связь между двумя переменными. Когда вы его используете, вы сначала предполагаете линейную связь между выходной переменной (иногда называемой переменной отклика, зависимой переменной или меткой) и переменной-предиктором (иногда называемой независимой переменной, независимой переменной или функцией). Конечно, эта линейная зависимость может также существовать между одной выходной переменной и несколькими предикторными переменными. Линейная связь между выходной переменной и переменной-предиктором — смелое предположение, но также и одно из самых простых. С точки зрения математического представления линейные функции проще, чем нелинейные. Линейные модели всегда являются самым простым способом параметризации. Это связано с тем, что многие проблемы, даже нелинейные по своей сути, можно решить с помощью линейных моделей.
В линейной регрессии данные моделируются линейной функцией, и неизвестные параметры в модели также оцениваются с использованием данных. Для модели многомерной линейной регрессии это может быть выражено в виде следующей формулы:
где Y — линейная функция X,Это ошибка. ЛинейностьУсловное среднее , в параметреявляется линейным. Некоторые функциональные модели не обязательно являются моделями линейной регрессии, но могут быть преобразованы в модели линейной регрессии с помощью алгебраических преобразований. Для простой линейной регрессии это можно выразить следующим образом:
Для одномерной линейной регрессии в настоящее время это самая простая для понимания линейная модель Формула регрессии выглядит следующим образом:
Линейная регрессия является наиболее широко используемой моделью в регрессионном анализе, и она чаще используется в приложениях прогнозирования результатов и функциональных взаимосвязей.
Для алгоритма линейной регрессии мы узнаем уравнение линейной регрессии из обучающих данных, а именно:
где b называется смещением,– коэффициент регрессии. Для приведенной выше формулы пустьТогда вышеуказанная формула может быть выражена как:
В модели линейной регрессии цель состоит в том, чтобы найти уравнение регрессии линейной модели, то есть найти коэффициент регрессии в уравнении линейной регрессии. Оценка линейной регрессии относится к тому, как измерить близость между прогнозируемым значением (Прогноз) и меткой (Метка).Функция потерь модели линейной регрессии может быть абсолютной потерей (Абсолютная потеря). убыток) или квадратный убыток. Среди них абсолютная функция потерь:
в,является прогнозируемым значением, и:
Функция квадратных потерь:
Поскольку квадрат потерь можно вывести везде, квадрат ошибки обычно используется в качестве функции потерь модели линейной регрессии. Предполагая, что имеется m обучающих выборок, каждая из которых имеет n-1 признаков, квадрат ошибки может быть выражен как:
Для приведенной выше функции потерь решение линейной регрессии состоит в том, чтобы получить минимальное значение квадрата ошибки.
Наименьших квадратов
Метод наименьших квадратов также называют методом наименьших квадратов, чаще всего используется обычный метод наименьших квадратов (Обычный метод наименьших квадратов), который представляет собой метод оптимизации в математике, пытающийся найти одно или множество оценочных значений, чтобы фактическое значение и оценочное значение максимально близки.Может быть похожим, расстояние наименьшее, цель состоит в том, чтобы предсказать неизвестные данные через существующие данные. Как правило, он рассчитывается с помощью многомерного линейного уравнения, которое представляет собой бинарное линейное уравнение в двумерных координатах. Например, в двумерных координатах в ней разбросано множество точек, пытающихся провести линию так, чтобы расстояние между этими разбросанными точками и линией было минимальным. Минимальное расстояние здесь — это не кратчайшее расстояние по вертикали от точки до прямой, а кратчайшее расстояние от точки до прямой оси у, то есть кратчайшее расстояние от точки до пересечения параллели оси у линия и прямая линия, проходящая через точку и параллельная оси у.
Основная идея метода наименьших квадратов состоит в том, чтобы попытаться найти наиболее вероятное уравнение функции путем минимизации суммы квадратов ошибок. Например, в двумерной системе координат есть пять точек данных (10,20), (11,23), (12,25), (13,27), (14,26), и мы надеемся найти одну из пяти точек данных. Прямая линия с кратчайшим расстоянием между точками согласно бинарному линейному уравнению:. Приведение пяти точек в бинарное уравнение соответственно дает следующее:
Поскольку метод наименьших квадратов заключается в том, чтобы минимизировать дисперсию по обе стороны от знака равенства, насколько это возможно, поэтому:
Таким образом, минимальное значение может быть получено путемПолучена частная производная, а обратное значение первого порядка равно 0, поэтому:
То есть получается бинарное линейное уравнение для решения неизвестных переменных a и b:
A=0,0243, b=24,1708 можно получить, вычислив описанным выше бинарным методом первого порядка. Следовательно, в вышеуказанных пяти точках уравнение прямой линии получается методом наименьших квадратов: y=24,1708+0,0243x — прямая, минимизирующая расстояние от пяти точек до прямой.
решение методом наименьших квадратов
Для модели линейной регрессии, предполагая, что в обучающем наборе есть m обучающих выборок, и каждая обучающая выборка имеет n-1 признаков, можно использовать метод матричного представления, а функцию прогнозирования можно выразить как:, а его функция потерь выражается как:.
Среди них метка Y представляет собой матрицу размера m×1, функция обучения X представляет собой матрицу размера m×n, а коэффициент регрессии W представляет собой матрицу размера n×1. В методе наименьших квадратов возьмите производную по W, то есть:
Пусть это будет 0, мы получим:
Реализация Python:
def least_square(feature, label):
'''最小二乘法
input: feature(mat):特征
label(mat):标签
output: w(mat):回归系数
'''
w = (feature.T * feature).I * feature.T * label
return w
Хотя метод наименьших квадратов кажется задачей линейного уравнения, он широко используется в практических приложениях, так как уравнение, полученное с его помощью, можно рассматривать как функциональную модель, которая может принести большое удобство в последующей работе. Вышеупомянутый процесс объясняется методом решения линейной задачи, но чаще решаемая задача не является линейной задачей, ее необходимо обрабатывать полиномиальным подбором, но принцип и метод решения те же. Когда выборочные данные продолжают увеличиваться, объем вычислений значительно увеличивается.При более высоком порядке расчеты будут более сложными.Чтобы решить больше задач, базовый метод наименьших квадратов является производным от метода скользящих наименьших квадратов, взвешенного метод наименьших квадратов и частичный метод наименьших квадратов и т. д. Помимо метода наименьших квадратов, градиентный спуск также является одним из методов линейной регрессии.
Градиентный спуск
Что такое градиентный спуск
Основная идея градиентного происхождения может сравниться с процессом нисходящего горы. Предположим, что сценарий: человек застрял на горе и должен сойти с горы (то есть найдя самую низкую точку горы, которая является долиной). Но в это время толстый туман на горе был очень толстым, что привело к очень низкой видимости. Следовательно, путь вниз по горе не может быть определен, и он должен использовать информацию вокруг него, чтобы найти путь вниз по горе. В это время он может использовать алгоритм спуска градиента, чтобы помочь себе на гору. В частности, на основе его текущей позиции, ищите самое крутое место в этой позиции, а затем идите к месту, где высота горного водопада. Точно так же, если наша цель - подняться на гору, то есть подняться на Верхняя часть горы, то она должна идти вверх в самом глубоком направлении в это время. Затем каждый раз, когда вы проходите определенное расстояние, вы будете использовать один и тот же метод несколько раз, и, наконец, вы сможете успешно добраться до долины.
В исчислении нахождение параметров многомерной функцииЧастная производная, запишите полученную частную производную каждого параметра в виде вектора, который является градиентом. Например, функция f(x, y) принимает частные производные от x и y соответственно, а полученный вектор градиента равен, обозначаемый как grad f(x,y) или. для точкиКонкретный вектор градиента,или.如果是3个参数的向量梯度,就是, и так далее.
Так какой смысл находить этот вектор градиента? Его смысл в геометрическом смысле заключается в том, где изменение функции увеличивается быстрее всего. В частности, для функции f(x,y) в точке, вдоль направления вектора градиентаНаправление - это то, где f (x, y) увеличивается быстрее всего. Другими словами, вдоль направления вектора градиента проще найти максимальное значение функции. И наоборот, вдоль направления, противоположного вектору градиента, т. е.В направлении градиент убывает быстрее всего, т. е. легче найти минимальное значение функции.
Для задач выпуклой оптимизации точка, в которой производная равна 0 (градиент является нулевым вектором), является решением задачи оптимизации. Чтобы найти это решение, мы выполняем линейный поиск вдоль противоположного направления градиента, каждый поиск с размером шага определенного значения, пока градиент не станет очень близким к вектору 0. Описанный выше метод представляет собой градиентный спуск. Шаги итеративного алгоритма следующие:
- когда, задайте начальную точку самостоятельно, установите размер шага (также называемый скоростью обучения), который устанавливает допуск ошибок tol для завершения итерации.
- Вычислить целевую функциюв точкуградиент на.
- рассчитать, формула выглядит следующим образом:
- Рассчитать градиент. еслиЗатем итерация останавливается, и оптимальное решение принимает значение; если двойная норма градиента больше tol, то i=i+1, и возвращаемся к шагу (3).
Типы градиентного спуска
Градиентный спуск может быть определен в различных вариантах в зависимости от того, как производная функции стоимости вычисляется с использованием данных. В частности, по количеству используемых данных (количество данных), временной сложности (временной сложности) и точности алгоритма (точность алгоритма) метод градиентного спуска можно разделить на:
- Пакетный градиентный спуск (BGD);
- стохастический градиентный спуск (SGD);
- Мини-пакетный градиентный спуск (MBGD).
Пакетный градиентный спуск BGD
Это базовый тип градиентного спуска, который использует полный набор данных для вычисления градиента функции стоимости. Пакетный градиентный спуск является медленным и сложным для обработки наборов данных, которые не помещаются в памяти, каждый раз используя все данные для вычисления градиентов для обновления параметров.
Функция потерь пакетного градиентного спуска:
Итерационная формула для дальнейшего пакетного градиентного спуска:
где m — количество обучающих примеров.
Для каждого шага итерации необходимо использовать все данные обучающей выборки.Если количество выборок велико, то скорость итерации этого метода можно представить!
Преимущества: глобальное оптимальное решение, простота параллельной реализации;
Недостаток: при большом количестве выборок процесс обучения будет медленным.
- Если обучающая выборка содержит 300 миллионов единиц данных, вам необходимо прочитать все данные с жесткого диска в память;
- После расчета каждой суммы параметры обновляются;
- Затем повторите каждый шаг выше;
- Это означает, что для сходимости требуется больше времени;
- Тем более, что дисковый ввод/вывод (disk I/O) является типичным узким местом системы, такой подход неизбежно потребует большого количества операций чтения.
С точки зрения количества итераций количество итераций BGD относительно невелико. Схематическая диаграмма его итеративной кривой сходимости может быть выражена следующим образом:
На приведенном выше рисунке показана контурная карта после каждой итерации, и каждая цветная линия представляет собой различное значение функции стоимости. Использование градиентного спуска быстро сойдется к центру круга, который является единственным глобальным минимумом.
Следующий код Python реализует пакетный градиентный спуск:
import numpy as np
def gradient_descent(alpha, x, y, ep=0.0001, max_iter=10000):
converged = False
iter = 0
m = x.shape[0] # number of samples
# initial theta
t0 = np.random.random(x.shape[1])
t1 = np.random.random(x.shape[1])
# total error, J(theta)
J = sum([(t0 + t1 * x[i] - y[i]) ** 2 for i in range(m)])
# Iterate Loop
while not converged:
# for each training sample, compute the gradient (d/d_theta j(theta))
grad0 = 1.0 / m * sum([(t0 + t1 * x[i] - y[i]) for i in range(m)])
grad1 = 1.0 / m * sum([(t0 + t1 * x[i] - y[i]) * x[i] for i in range(m)])
# update the theta_temp
temp0 = t0 - alpha * grad0
temp1 = t1 - alpha * grad1
# update theta
t0 = temp0
t1 = temp1
# mean squared error
e = sum([(t0 + t1 * x[i] - y[i]) ** 2 for i in range(m)])
if abs(J - e) <= ep:
print('Converged, iterations: ', iter, '!!!')
converged = True
J = e # update error
iter += 1 # update iter
if iter == max_iter:
print('Max interactions exceeded!')
converged = True
return t0, t1
Мини-пакетный градиентный спуск MBGD
Мини-пакетный градиентный спуск — это наиболее широко используемый алгоритм, который обучается на m обучающих выборках (называемых пакетом) за раз и может быстрее получать точные ответы. Вместо использования полного набора данных мини-пакетный градиентный спуск использует только m обучающих выборок для вычисления градиента функции стоимости на каждой итерации. Как правило, количество образцов, выбранных методом мини-пакетного градиентного спуска, составляет от 50 до 256, в зависимости от конкретного приложения.
- Изменения в обновлениях параметров уменьшаются, что приводит к более стабильной сходимости.
- Эффективные вычисления градиента могут быть выполнены с использованием высокооптимизированных матриц.
После случайной инициализации параметров вычислите градиент функции стоимости следующим образом:
Здесь b представляет количество обучающих выборок в пакете, а m — общее количество обучающих выборок.
Стохастический градиентный спуск (SGD)
Пакетный градиентный спуск оказался более медленным алгоритмом, поэтому мы можем выбрать стохастический градиентный спуск для более быстрого вычисления. Первым шагом в стохастическом градиентном спуске является рандомизация всего набора данных. На каждой итерации выбирается только одна обучающая выборка для вычисления градиента функции стоимости и последующего обновления параметров. Стохастический градиентный спуск очень быстро сходится даже на больших наборах данных. Стохастический градиентный спуск может быть не самым точным по точности, но позволяет быстро вычислить результаты. После рандомизации начальных параметров вычислите градиент функции стоимости, используя:
Пакетный градиентный спуск минимизирует функцию потерь всех обучающих выборок, так что конечное решение является глобальным оптимальным решением, то есть параметры решения минимизируют функцию риска. Стохастический градиентный спуск минимизирует функцию потерь каждой выборки.Хотя функция потерь, полученная на каждой итерации, не направлена в сторону глобального оптимума, направление большого целого направлено в сторону глобального оптимального решения, и конечный результат часто находится в глобальное оптимальное решение, близкое к оптимальному решению.
Процесс оптимизации стохастического градиентного спуска выглядит следующим образом:
Стохастический градиентный спуск итеративно обновляется через каждую выборку.Если размер выборки велик (например, сотни тысяч), то для итерации тета до оптимума могут использоваться только десятки тысяч или тысячи выборок.Решено, по сравнению с приведенным выше пакетный градиентный спуск, одна итерация должна использовать сотни тысяч обучающих выборок, и одна итерация не может быть оптимальной.Если есть 10 итераций, необходимо пройти обучающие выборки 10 раз. Однако проблема с SGD заключается в том, что здесь больше шума, чем в BGD, поэтому SGD не находится в направлении общей оптимизации на каждой итерации.
Преимущества: быстрая скорость обучения;
Недостатки: Снижается точность, не является глобально оптимальным, сложно реализовать параллельно.
С точки зрения количества итераций количество итераций SGD велико, и процесс поиска в пространстве решений кажется слепым. Схематическая диаграмма его итеративной кривой сходимости может быть выражена следующим образом:
Ссылка на ссылку:SofaS, волосы .io/tutorials/страх...
метод Ньютона
В дополнение к упомянутому выше методу градиентного спуска метод Ньютона также является алгоритмом оптимизации, используемым в машинном обучении. Основная идея метода Ньютона заключается в использовании итерационных точекПроизводная первого порядка (градиент) и производная второго порядка (матрица Гессена) целевой функции аппроксимируются квадратичной функцией, а затем в качестве новой точки итерации используется точка минимума квадратичной модели, и этот процесс повторяется до Приближенных минимумов, удовлетворяющих точности. Метод Ньютона спускается быстрее, чем градиентный спуск, и очень близок к оптимальному значению. Метод Ньютона делится на базовый метод Ньютона и глобальный метод Ньютона.
Основной метод Ньютона
Базовый метод Ньютона представляет собой алгоритм, основанный на производной, и итеративное направление каждого шага является направлением убывания значения функции в текущей точке. Для одномерного случая для оптимизационной функции f(x), которую необходимо решить, задача нахождения экстремального значения функции может быть преобразована в производную функцию. В разложении Тейлора функции f(x) до второго порядка получаем:
Взяв производную от приведенной выше формулы и приравняв ее к 0, мы получим:
То есть получить:
Это обновленная формула метода Ньютона.
Поток основного метода Ньютона
- заданное значение ошибки завершения, начальная точка, пусть к=0;
- рассчитать,как, затем стоп, вывод;
- рассчитать, и решить систему линейных уравненийпонимать;
- сделать, и очередь 2.
Глобальный метод Ньютона
Наиболее заметным преимуществом метода Ньютона является то, что он имеет высокую скорость сходимости и имеет локальную сходимость второго порядка.Однако начальная точка базового метода Ньютона должна быть «достаточно близко» к точке минимума, иначе алгоритм может не работать. сходятся, и в это время вводится глобальный метод Ньютона. Процесс глобального метода Ньютона:
- заданное значение ошибки завершения,,, начальная точка, пусть к=0;
- рассчитать,как, затем стоп, вывод;
- рассчитать, и решить систему линейных уравненийпонимать;
- Предполагать— наименьшее неотрицательное целое число m, не удовлетворяющее следующим неравенствам:
- сделать, и очередь 2.
Конкретная реализация глобального метода Ньютона:
def newton(feature, label, iterMax, sigma, delta):
'''牛顿法
input: feature(mat):特征
label(mat):标签
iterMax(int):最大迭代次数
sigma(float), delta(float):牛顿法中的参数
output: w(mat):回归系数
'''
n = np.shape(feature)[1]
w = np.mat(np.zeros((n, 1)))
it = 0
while it <= iterMax:
# print it
g = first_derivativ(feature, label, w) # 一阶导数
G = second_derivative(feature) # 二阶导数
d = -G.I * g
m = get_min_m(feature, label, sigma, delta, d, w, g) # 得到最小的m
w = w + pow(sigma, m) * d
if it % 10 == 0:
print "\t---- itration: ", it, " , error: ", get_error(feature, label , w)[0, 0]
it += 1
return w
В программе функция newton использует глобальный метод Ньютона для изучения параметров в модели линейной регрессии.Вводом функции newton является функция обучения, метка целевого значения обучения, максимальное количество итераций iterMax глобального Ньютона метод и два глобальных метода Ньютона, параметры сигма и дельта. Выходом функции newton является параметр w модели линейной регрессии. В функции Ньютона необходимо рассчитать первую производную функции потерь, необходимо рассчитать вторую производную функции потерь, одновременно необходимо рассчитать минимальное значение m, и, наконец, вес обновляется в соответствии с к вышеуказанному значению.
def get_min_m(feature, label, sigma, delta, d, w, g):
'''计算步长中最小的值m
input: feature(mat):特征
label(mat):标签
sigma(float),delta(float):全局牛顿法的参数
d(mat):负的一阶导数除以二阶导数值
g(mat):一阶导数值
output: m(int):最小m值
'''
m = 0
while True:
w_new = w + pow(sigma, m) * d
left = get_error(feature, label , w_new)
right = get_error(feature, label , w) + delta * pow(sigma, m) * g.T * d
if left <= right:
break
else:
m += 1
return m
В программе реализовано определение минимального значения m в глобальном методе Ньютона.В функции get_min_m входом является характерный признак обучающих данных, метка целевого значения обучающих данных, параметры глобального метода Ньютона сигма, delta, d и первый порядок функции потерь Производное значение g. Его выходом является наименьшее значение m m. В процессе расчета используется функция get_error при расчете значения функции потерь, и ее конкретная реализация:
def get_error(feature, label, w):
'''计算误差
input: feature(mat):特征
label(mat):标签
w(mat):线性回归模型的参数
output: 损失函数值
'''
return (label - feature * w).T * (label - feature * w) / 2
Армиджо Поиск
данный,, пусть ступенчатый множитель,в— наименьшее целое неотрицательное число, удовлетворяющее следующим неравенствам:
Решение моделей линейной регрессии с использованием глобального метода Ньютона
Предположим, что имеется m обучающих выборок, где каждая выборка имеет n-1, где функция потерь модели линейной регрессии выглядит следующим образом:
Если для решения модели линейной регрессии используется глобальный метод Ньютона, необходимо рассчитать первую производную и вторую производную функции потерь модели линейной регрессии.Первая производная:
Вторая производная функции потерь:
Соответствующий код:
def first_derivativ(feature, label, w):
'''计算一阶导函数的值
input: feature(mat):特征
label(mat):标签
output: g(mat):一阶导数值
'''
m, n = np.shape(feature)
g = np.mat(np.zeros((n, 1)))
for i in xrange(m):
err = label[i, 0] - feature[i, ] * w
for j in xrange(n):
g[j, ] -= err * feature[i, j]
return g
def second_derivative(feature):
'''计算二阶导函数的值
input: feature(mat):特征
output: G(mat):二阶导数值
'''
m, n = np.shape(feature)
G = np.mat(np.zeros((n, n)))
for i in xrange(m):
x_left = feature[i, ].T
x_right = feature[i, ]
G += x_left * x_right
return G
first_derivativ реализует решение первой производной функции потерь. В функции first_derivativ ее входные данные — это признак обучающих данных и метка целевого значения обучающих данных, а ее выход — первая производная g функции потерь, где g — вектор n × 1.
Функция second_derivative реализует вычисление второй производной функции потерь. В функции second_derivative ее входом является особенность обучающих данных, а выходом является вторая производная G функции потерь, где G — матрица размера n×n.
локально взвешенная линейная регрессия
Подзадание происходит в линейной регрессии, и есть методы, которые могут быть использованы для решения таких проблем. Локально взвешенная линейная регрессия (LWLR) является одним из таких методов. Локальная взвешенная линейная регрессия использует определенный вес к каждой точке вблизи прогнозируемой точки, а коэффициент регрессии в это время может быть выражено как:
M - вес, присвоенный каждой точке.
LWLR использует функцию ядра, чтобы придать более высокие веса ближайшим точкам.Обычно используются ядра Гаусса, и соответствующие веса:
Такая весовая матрица содержит только диагональные элементы.
Конкретная реализация локально взвешенной линейной регрессии:
import numpy as np
def lwlr(feature, label, k):
'''局部加权线性回归
input: feature(mat):特征
label(mat):标签
k(int):核函数的系数
output: predict(mat):最终的结果
'''
m = np.shape(feature)[0]
predict = np.zeros(m)
weights = np.mat(np.eye(m))
for i in xrange(m):
for j in xrange(m):
diff = feature[i, ] - feature[j, ]
weights[j,j] = np.exp(diff * diff.T / (-2.0 * k ** 2))
xTx = feature.T * (weights * feature)
ws = xTx.I * (feature.T * (weights * label))
predict[i] = feature[i, ] * ws
return predict
Линейный регрессионный анализ с помощью Scikit-Learn
Здесь мы используем набор данных, который поставляется с SkLearn для тестирования:
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
boston = load_boston()
X = boston.data
y = boston.target
print(X.shape) # 样本个数及特征数
print(boston.feature_names) # 特征标签名字
# 把数据分为训练数据集和测试数据集(20%数据作为测试数据集)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=3)
model = LinearRegression()
model.fit(X_train, y_train)
train_score = model.score(X_train, y_train) # 模型对训练样本得准确性
test_score = model.score(X_test, y_test) # 模型对测试集的准确性
print(train_score)
print(test_score)
Оптимизация модели
Полиномиально-линейная регрессия
Когда модель линейной регрессии слишком проста и приводит к недостаточному соответствию, мы можем увеличить полином признаков, чтобы модель линейной регрессии лучше соответствовала данным. как две особенности, что может увеличить произведение двух функцийкак новая функция. Мы также можем добавить x_1^2 в качестве еще одной новой функции..
В scikit-learn линейная регрессия реализуется классом sklearn.linear_model.LinearRegression, а полиномиальная реализуется классом sklearn.preprocessing.PolynomialFeatures. Итак, как добавить полиномиальные функции? Нам нужно соединить два класса с помощью конвейера, т. е. соединить две модели с помощью sklearn.pipeline.Pipeline. Конвейер может содержать несколько узлов обработки. В scikit-learn все узлы, кроме последнего узла, должны реализовывать методы «fit ()» и «transform ()». Последний узел должен только реализовать метод fit (). Вот и все . Когда данные обучающей выборки отправляются в конвейер для обработки, он вызывает методы fit() и transform() узлов один за другим, а затем вызывает метод fit() последнего узла для подбора данных.
нормализация данных
Когда модель линейной регрессии имеет несколько входных признаков, в частности, при использовании полинома, необходимо нормализовать данные. Например, характеристикиДиапазон находится между [1, 4], функцияДиапазон находится между [1, 2000], в этом случае вы можете позволитьРазделить на 4 как новую функцию, при этом позволяяРазделить на 2000 как новую функцию, этот процесс называется масштабированием признаков. Обучающие выборки можно нормализовать с помощью масштабирования признаков, а значения обработанных признаков находятся в диапазоне от [0, 1].
Целью обработки нормализации является ускорение сходимости алгоритма и повышение эффективности вычислений в процессе подбора модели. После процесса нормализации, когда новый образец должен вычислить прогнозируемое значение, его также необходимо сначала нормализовать, а затем прогнозируемое значение вычисляется с помощью модели, а рассчитанное прогнозируемое значение необходимо умножать на нормализованное значение коэффициента. , данные, полученные таким образом, являются реальными данными прогноза.
В scikit-learn при использовании LinearRegression для линейной регрессии вы можете указать normalize=True для нормализации данных. Подробнее см. в документации scikit-learn.
Код после оптимизации:
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
boston = load_boston()
X = boston.data
y = boston.target
print(X.shape) # 样本个数及特征数
print(boston.feature_names) # 特征标签名字
# 把数据分为训练数据集和测试数据集(20%数据作为测试数据集)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=3)
def polynomial_model(degree=1):
polynomial_features = PolynomialFeatures(degree=degree, include_bias=False)
linear_regression = LinearRegression(normalize=True)
pipeline = Pipeline([("polynomial_features", polynomial_features), ("linear_regression", linear_regression)])
return pipeline
model = polynomial_model(degree=2)
model.fit(X_train, y_train)
train_score = model.score(X_train, y_train) # 模型对训练样本得准确性
test_score = model.score(X_test, y_test) # 模型对测试集的准确性
print(train_score)
print(test_score)
После использования полиномиального обучения второго порядка улучшились как оценка выборки, так и оценка теста.Похоже, что модель была оптимизирована.После перехода на третий порядок оценка для обучающей выборки достигает 1, а оценка для тестовый образец отрицательный. Это указывает на переобучение модели.
Наградить автора