Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
1. Градиентный спуск — одномерная линейная регрессия
Для анализа алгоритма градиентного спуска вы можете обратиться к предыдущей статьеПолностью подключенная нейронная сеть
1. Импорт связанных модулей
numpy: обработка данных pyplot: визуализировать результаты корреляции
import numpy as np
import matplotlib.pyplot as plt
2, метод наименьших квадратов, чтобы найти значение потери
def compute_loss(b,k,x_data,y_data):
totalLoss = 0
for i in range(0,len(x_data)):
totalLoss += (y_data[i] - (k*x_data[i] + b))**2
return totalLoss/float(len(x_data))/2.0
3. Метод градиентного спуска для решения коэффициентов
def gradient_descent(x_data,y_data,b,k,lr,epchos):
#计算数据量长度
m = float(len(x_data))
# 循环批次:epochs次
for i in range(epochs):
b_grad = 0
k_grad = 0
# 计算梯度
for j in range(len(x_data)):
b_grad += (1/m)*(((k*x_data[j])+b)-y_data[j])
k_grad += (1/m)*x_data[j]*(((k*x_data[j])+b)-y_data[j])
# 更新k和b
b = b - (lr*b_grad)
k = k - (lr*k_grad)
return b,k
4. Загрузите данные
Импорт данных из CSV-файла
data = np.genfromtxt("data.csv",delimiter=',')
x_data = data[:,0]
y_data = data[:,1]
Данные csv выглядят следующим образом:
5. Установите параметры тренировки
Параметры, которые необходимо установить: скорость обучения, максимальное количество итераций, а также инициализированный перехват и наклон.
# 学习率learning rate
lr = 0.0001
# 截距
b = 0
# 斜率
k = 0
# 最大迭代次数
epochs = 50
6. Параметры инициализации
print("Initialization Parameter b = {}, k = {}, Loss = {}".format(epochs,b,k,compute_loss(b,k,x_data,y_data)))
7. Используйте алгоритм градиентного спуска для обучения
b, k = gradient_descent(x_data, y_data, b, k, lr, epochs)
8. Распечатайте параметры после обучения
print("After {} interations b = {}, k = {}, Loss = {}".format(epochs,b,k,compute_loss(b,k,x_data,y_data)))
9. Результаты
k и b, полученные после обучения:
Визуализация результатов тренировки:
2. sklearn-монарная линейная регрессия
sklearnЯвляетсяPythonОчень мощная библиотека машинного обучения, предоставленная сторонними поставщиками, охватывает все аспекты от предварительной обработки данных до моделей обучения. используется в реальном боюscikit-learnЭто может значительно сэкономить нам время на написание кода и уменьшить объем нашего кода.
1. Импорт связанных модулей
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt
2. Загрузите данные
data = np.genfromtxt("data.csv", delimiter=",")
x_data = data[:,0]
y_data = data[:,1]
3. Преобразуйте структуру данных
x_data = data[:,0,np.newaxis]
y_data = data[:,1,np.newaxis]
4. Создайте и подгоните модель
model = LinearRegression()
model.fit(x_data, y_data)
5. Визуализируйте результаты тренировки
plt.plot(x_data, y_data, 'b.')
plt.plot(x_data, model.predict(x_data), 'r')
plt.show()