用pandas函数替代该函数:def RMSE_MAPE(ydata,y_hatdata,indexlist): y=[] y_hat=[] for i in indexlist: y.append(ydata.iat[i,0]) y.append(ydata.iat[i,1]) y.append(ydata.iat[i,2]) y_hat.append(y_hatdata.iat[i,0]) y_hat.append(y_hatdata.iat[i,1]) y_hat.append(y_hatdata.iat[i,2]) x1=0 for i in range(len(indexlist)): x1=x1+np.square(y[i] - y_hat[i]) x2=0 for i in range(len(indexlist)): x2=x2+np.abs((y[i] - y_hat[i]) / y[i]) RMSE = np.sqrt(x1/len(indexlist)) MAPE = x2*100/len(indexlist) print('RMSE:'+str(RMSE)+' MAPE:'+str(MAPE)) return
时间: 2023-06-10 17:04:07 浏览: 91
可以使用以下的pandas函数替代该函数:
def RMSE_MAPE(ydata, y_hatdata, indexlist):
y = ydata.iloc[indexlist, :].values.flatten()
y_hat = y_hatdata.iloc[indexlist, :].values.flatten()
x1 = np.sum(np.square(y - y_hat))
x2 = np.sum(np.abs((y - y_hat) / y)) * 100
RMSE = np.sqrt(x1/len(y))
MAPE = x2/len(y)
print('RMSE:', RMSE, 'MAPE:', MAPE)
return RMSE, MAPE
这个函数首先使用iloc函数来筛选出在indexlist中的行,并将其展开为一维数组y和y_hat。然后求出x1和x2,并根据它们的值计算RMSE和MAPE。最后返回RMSE和MAPE。
相关问题
用pandas函数简化下列语句:def RMSE_MAPE(ydata,y_hatdata,indexlist): y=[] y_hat=[] for i in indexlist: y.append(ydata.iat[i,0]) y.append(ydata.iat[i,1]) y.append(ydata.iat[i,2]) y_hat.append(y_hatdata.iat[i,0]) y_hat.append(y_hatdata.iat[i,1]) y_hat.append(y_hatdata.iat[i,2]) x1=0 for i in range(len(indexlist)): x1=x1+np.square(y[i] - y_hat[i]) x2=0 for i in range(len(indexlist)): x2=x2+np.abs((y[i] - y_hat[i]) / y[i]) RMSE = np.sqrt(x1/len(indexlist)) MAPE = x2*100/len(indexlist) print('RMSE:'+str(RMSE)+' MAPE:'+str(MAPE)) return
可以用 pandas 的 loc 函数代替循环中的 iat 函数,并利用矩阵转置函数和 numpy 中的 power 和 mean 函数简化代码,具体如下:
import numpy as np
import pandas as pd
def RMSE_MAPE(ydata, y_hatdata, indexlist):
y = ydata.loc[indexlist].values.T
y_hat = y_hatdata.loc[indexlist].values.T
x1 = np.power(y - y_hat, 2).mean()
x2 = np.abs((y - y_hat) / y).mean()
RMSE = np.sqrt(x1)
MAPE = x2 * 100
print(f'RMSE:{RMSE} MAPE:{MAPE}')
return RMSE, MAPE
其中,y 和 y_hat 利用 pandas 的 loc 函数获取 indexlist 对应的行数据,并利用 values 属性得到其 numpy 数组表示,同时利用矩阵转置函数将 y 和 y_hat 的列向量转置成行向量。x1 和 x2 利用 numpy 中的 power 和 mean 函数分别计算平方误差和绝对误差,并根据公式计算出 RMSE 和 MAPE。最后,利用 f-string 来输出 RMSE 和 MAPE 的值。
用pandas函数代替下列语句:def RMSE_MAPE(ydata,y_hatdata,indexlist): y=[] y_hat=[] for i in indexlist: y.append(ydata.iat[i,0]) y.append(ydata.iat[i,1]) y.append(ydata.iat[i,2]) y_hat.append(y_hatdata.iat[i,0]) y_hat.append(y_hatdata.iat[i,1]) y_hat.append(y_hatdata.iat[i,2]) x1=0 for i in range(len(indexlist)): x1=x1+np.square(y[i] - y_hat[i]) x2=0 for i in range(len(indexlist)): x2=x2+np.abs((y[i] - y_hat[i]) / y[i]) RMSE = np.sqrt(x1/len(indexlist)) MAPE = x2*100/len(indexlist) print('RMSE:'+str(RMSE)+' MAPE:'+str(MAPE)) return
可以使用pandas中的iloc函数简化代码:
def RMSE_MAPE(ydata, y_hatdata, indexlist):
y = ydata.iloc[indexlist, :].values.flatten()
y_hat = y_hatdata.iloc[indexlist, :].values.flatten()
x1 = np.square(y - y_hat).sum()
x2 = np.abs((y - y_hat) / y).sum()
RMSE = np.sqrt(x1/len(indexlist))
MAPE = x2*100/len(indexlist)
print(f'RMSE: {RMSE:.4f} MAPE: {MAPE:.2f}')
return
阅读全文