Прогноз начинается с догадок
в соответствии спредыдущий постДругими словами, машинное обучение — это процесс применения математических методов для обнаружения закономерностей в данных. Поскольку математика — это объяснение реального мира, давайте вернемся к реальному миру и пофантазируем.
Представьте, что перед нами белая доска из пенопласта, на доске расставлены несколько синих канцелярских кнопок, в них как бы есть какой-то узор, мы пытаемся найти этот узор.
Кнопки на доске (данные), как показано выше, есть ли у нас способ (Математический алгоритм) найти закономерности (интерпретация модели) Шерстяная ткань? Поскольку мы не знаем, как это сделать, давайте просто предположим!
Я взял две деревянные палочки и стал жестикулировать перед доской, пытаясь использовать деревянные палочки для представления законов данных. Я выразился небрежно, как показано на следующем рисунке:
Кажется, что все они в какой-то степени представляют собой образец синей канцелярской кнопки, поэтому вопрос в том, какой из них лучше для зеленого (пунктирная линия) или красного (сплошная линия)?
Функция потерь (функция стоимости)
Хорошее и плохое — очень субъективные выражения, а субъективные ощущения ненадежны Мы должны найти объективный способ измерения. Мы считаем само собой разумеющимся, что представление с наименьшей ошибкой является лучшим. Затем мы вводим метод количественной оценки ошибки — метод наименьших квадратов.
Наименьших квадратов: метод минимизации суммы квадратов ошибок является статистическим методом ошибок, а квадрат означает квадрат.
Интерпретация метода наименьших квадратов заключается в следующем, мы используем预测值-实际值
представляет ошибку одной точки, а затем положить их平方和
суммируются, чтобы представить общую ошибку. (Преимущество возведения в квадрат может иметь дело с отрицательными значениями, и не невозможно использовать сумму абсолютных значений.) Мы используем это конечное значение для представления потерь (затрат), а функция, которая может представлять потери (затраты), называется функцией потерь (функция затрат).
Как видно на рисунке выше, расстояние от синей точки до сплошной линии — это ошибка, которую мы хотим внести в формулу. Хотя они выглядят одинаково, расчетный результат представляет собой сплошную красную линию (y=3x+2
) равно 27,03, а сплошная зеленая линия (y=4x+4
) потеря составляет 29,54, явно красная модель превосходит зеленую модель.
Итак, есть ли лучшая модель для представления данных, чем сплошная красная линия? Есть ли способ найти его?
градиентный спуск
Мы математически изображаем палку (сплошная линия, модель), и поскольку мы можем использовать 3 и 4 в качестве коэффициентов x, мы, конечно, можем попробовать и другие числа. Выразим эту зависимость следующей формулой:
где x и y известны, и мы продолжаем корректироватьw
(Веса)иb
(отклонение), а затем ввести функцию потерь в процесс нахождения минимального значения, то естьградиентный спуск.
Начинаем с -50 и заканчиваем на 50w
Значение , относим к смещению случайным числомb
, а затем внесите его в функцию потерь, чтобы вычислить потерю ошибки между нашим прогнозом и фактическим значением, и получите следующую кривую:
Важно отметить, что изображения, которые мы рисуем, представляют собой кривые, основанные на весе и потерях. И наше модельное представление представляет собой прямую линию.
Мы видим, что на приведенном выше рисунке мы можем найти минимальное значение, которое составляет около 5. Это позиция, в которой наши потери наименьшие, В это время наша модель может лучше всего представлять закон данных.
Градиент можетполностьюПонимайте это как производную, процесс градиентного спуска — это процесс нашего непрерывного вывода.
скорость обучения (размер шага)
Процесс постоянной корректировки весов и смещений для нахождения минимального значения функции потерь — это то, как мы сопоставляем данные, чтобы найти лучшую модель с использованием градиентного спуска. Итак, теперь, когда у нас есть решение, следует ли нам подумать, как повысить эффективность и как быстро найти самую низкую точку?
Представьте, что вы теряетесь в тумане на горе, и все, что вы можете чувствовать, это наклон дороги под вашими ногами. Одна из стратегий, позволяющих быстро добраться до подножия горы, — это спускаться по самому крутому склону. Важным параметром в градиентном спуске являетсяразмер шага(скорость обучения), если размер шага слишком мал, алгоритму потребуется пройти много итераций, чтобы сойтись, если размер шага слишком велик, вы можете пройти прямо через долину, что приведет к расхождению алгоритма и увеличению значения. и больше.
Установите размер шага слишком маленьким:
Установите слишком большой размер шага:
Установите размер шага соответствующим образом:
Размер шага не может быть изучен самим алгоритмом, он должен быть задан внешним миром.
Этот алгоритм не поддается обучению и требует искусственно заданных параметров, что называетсяГиперпараметры.
Линейная регрессия
Наконец мы нашлилинейныймодель для объяснения взаимосвязи между независимой переменной x и зависимой переменной y, котораяЛинейная регрессия. Объяснение регрессии состоит в том, что вещи всегда имеют тенденцию двигаться к какому-то «среднему», чтотенденцияЭто называется регрессией, поэтому регрессия в основном используется для прогнозирования.
На рисунке выше красная линия — это лучшая модель, которую мы подошли В этой модели мы можем найти предсказанные значения 2,2, 2,6 и 2,8, которые соответствуют трем красным точкам на рисунке.
Это также основное значение линейной регрессии.
Кодекс Практика
Подготовьте данные:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
X = 2 * np.random.rand(10)
y = 4 + 3 * X + np.random.randn(10)
plt.plot(X, y, "bo")
plt.xlabel("$X$", fontsize=18)
plt.ylabel("$y$", rotation=0, fontsize=18)
plt.axis([0, 2, 0, 15])
plt.show()
рисоватьy=3x+2
иy=4x+4
Две прямые:
plt.plot(X, y, "bo")
plt.plot(X, 3*X+2, "r-", lw="5", label = "y=3x+2")
plt.plot(X, 4*X+4, "g:", lw="5", label = "y=4x+4")
plt.xlabel("$X$", fontsize=18)
plt.ylabel("$y$", rotation=0, fontsize=18)
plt.axis([0, 2, 0, 15])
plt.legend(loc="upper left")
plt.show()
Подсчитайте потери и сравнитеy=3x+2
иy=4x+4
Две прямые:
fig, ax_list = plt.subplots(nrows=1, ncols=2,figsize=(20,10))
ax_list[0].plot(X, y, "bo")
ax_list[0].plot(X, 3*X+2, "r-", lw="5", label = "y=3x+2")
loss = 0
for i in range(10):
ax_list[0].plot([X[i],X[i]], [y[i],3*X[i]+2], color='grey')
loss= loss + np.square(3*X[i]+2-y[i])
pass
ax_list[0].axis([0, 2, 0, 15])
ax_list[0].legend(loc="upper left")
ax_list[0].title.set_text('loss=%s'%loss)
ax_list[1].plot(X, y, "bo")
ax_list[1].plot(X, 4*X+4, "g:", lw="5", label = "y=4x+4")
loss = 0
for i in range(10):
ax_list[1].plot([X[i],X[i]], [y[i],4*X[i]+4], color='grey')
loss= loss + np.square(4*X[i]+4-y[i])
pass
ax_list[1].axis([0, 2, 0, 15])
ax_list[1].legend(loc="upper left")
ax_list[1].title.set_text('loss=%s'%loss)
fig.subplots_adjust(wspace=0.1,hspace=0.5)
fig.suptitle("Calculate loss",fontsize=16)
Обучите модель и предскажите:
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X.reshape(-1,1),y.reshape(-1,1))
X_test = [[2.2],[2.6],[2.8]]
y_test = lr.predict(X_test)
X_pred = 3 * np.random.rand(100, 1)
y_pred = lr.predict(X_pred)
plt.scatter(X,y, c='b', label='real')
plt.plot(X_test,y_test, 'r', label='predicted point' ,marker=".", ms=20)
plt.plot(X_pred,y_pred, 'r-', label='predicted')
plt.xlabel("$X$", fontsize=18)
plt.ylabel("$y$", rotation=0, fontsize=18)
plt.axis([0, 3, 0, 15])
plt.legend(loc="upper left")
loss = 0
for i in range(10):
loss = loss + np.square(y[i]-lr.predict([[X[i]]]))
plt.title("loss=%s"%loss)
plt.show()
другая регрессия
Как на самом деле понять регрессию? Из-за большого количества статистических данных бобы с маленькими особями, как правило, производят потомство, которое больше их, в то время как бобы с крупными особями, как правило, производят потомство, которое меньше их.Тенденция, и эта тенденция является возвратом. Линейная регрессия, о которой мы говорим в этой статье, применяется кпредсказыватьтехнологии. В этом случае регрессия часто противоположна классификации.
Линейная регрессия, логистическая регрессия, полиномиальная регрессия, пошаговая регрессия, гребневая регрессия, регрессия Лассо, регрессия ElasticNet являются наиболее часто используемыми методами регрессии. Сначала я сделаю краткий обзор этих технологий, чтобы вы могли прояснить контекст, а затем углубимся в них, когда они вам действительно понадобятся.Попытка исчерпать свои знания приведет только к истощению.
название | объяснять | формула |
---|---|---|
Линейная регрессия | Метод моделирования связи между независимыми переменными и зависимыми переменными с помощью линейной модели. | |
Логистическая регрессия | Смоделируйте определенный класс для бинарной классификации | |
Полиномиальная регрессия | Отношение между независимой переменной x и зависимой переменной y моделируется как полином степени n относительно x | (водяной знак caiyongji) |
Пошаговая регрессия | Вводите несколько переменных в модель одну за другой и находите переменные, оказывающие большое влияние на модель. | |
Лассо-регрессия | Разреженная матрица, удаление неважных признаков, норма MSE+L1 | , где чем больше α, тем меньше вес модели |
Ридж-регрессия | Регулярная линейная регрессия, увеличение степени свободы модели, предотвращение переобучения, норма MSE+L2 | , где чем больше α, тем меньше вес модели |
Эластичная сетка | Между регрессией гребня и регрессией лассо | , где γ находится между 0 и 1, ближе к 0 более склонен к регрессии Риджа, а ближе к 1 более склонен к регрессии Лассо |