python - 绘制成本函数并查看迭代中的每个 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)
解决方案
推荐阅读
- python - 表单从模型接收旧数据
- c# - 从具有自动化 ID 的列表中获取元素
- iphone - iOS 13 在后台没有收到 VoIP 推送通知
- amazon-web-services - 通过 AWS Cli 连接 AWS EKS
- python - 用“元素编号”替换数组中的元素(Python)
- angular - 在 android 上运行时,如何通过量角器中的(缺少)ID 访问 HTML 元素?
- javascript - Vue - 如果加载响应时显示一个 div
- c++ - 如何打印字符串而不是数字
- active-directory - Active Directory 直通身份验证
- sql - 我想获取 2 条具有相同 ID 的记录