首页 > 解决方案 > 绘制成本函数并查看迭代中的每个 theta 值

问题描述

我正在尝试从头开始编写一些算法,以便更好地理解它们。我想从梯度下降中绘制成本函数与 theta0,theta1 的关系,但我没有在每次迭代时都得到成本函数,我该怎么做?这是我的代码,如果您能告诉我一些更好的编码建议,那就太好了:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

#Mínimos cuadrados ordinarios
# x = np.array([4,5.5,7.5,10])
# y = np.array([2,3.5,5,11])
datos = pd.read_csv('Salary_Data.csv')
x = datos['YearsExperience'].values
y=datos['Salary'].values

x_media = np.mean(x)
y_media = np.mean(y)

m = np.zeros((1,2))
for _ in range(len(x)):
    m[0,0]+=(x[_]-x_media)*(y[_]-y_media)
    m[0,1]+=(x[_]-x_media)**2
pendiente = m[0,0]/m[0,1]
intercepto = (-1)*(pendiente*x)+y
y2 = pendiente*x + intercepto[0]
## Descenso del gradiente ###
lr = 0.035 #learning rate
iteraciones = 1000
teta0 = np.zeros((y.shape))# pendiente ara DDG
teta1= np.zeros((y.shape)) # intercepto para DDG
yddg = np.zeros((y.shape)) # Recta calculada
costo = np.zeros((y.shape))
for i in range(iteraciones):
    teta0 = teta0 - lr/len(x)*np.sum((yddg-y)*x)
    teta1 = teta1 - lr/len(x)*np.sum(yddg-y)
    yddg = x*teta0 + teta1 # Recta calculada por DDG


plt.scatter(x,y,color='green',label="Punticos")
plt.plot(x,y2,color='red',label="Recta-Mínimos Cuadrados")
plt.plot(x,yddg,color='black',label='Recta-Descenso del gradiente')
plt.legend()

我发现它的成本函数可以从 sklearn 指标中计算出来:

    from sklearn.metrics import mean_squared_error as ecm
    cost = ecm(y,yddg)

标签: pythonpandasmatplotliblinear-regressiongradient-descent

解决方案


推荐阅读