能否用RMSE相关函数一次性计算对比10个数据样本
多组样本RMSE批量计算方案
可以基于你正在使用的sklearn.metrics.mean_squared_error函数实现10个样本的批量RMSE计算,根据实际需求分为两种常见场景:
场景1:以单个样本为基准,计算其余9个样本和基准的RMSE
直接利用函数的广播特性和multioutput参数即可一次性输出所有结果,无需循环:
import numpy as np from sklearn.metrics import mean_squared_error # 把10个等长样本整理为shape=(10, 样本长度)的二维数组,此处用随机数模拟数据 all_samples = np.random.rand(10, 100) # 指定基准样本,此处取第一个样本为例 baseline_sample = all_samples[0] # 一次性计算剩余9个样本与基准的RMSE rmse_results = mean_squared_error(baseline_sample, all_samples[1:], multioutput='raw_values', squared=False)
输出的rmse_results是长度为9的数组,每个元素对应一个待比对样本和基准的RMSE值。
场景2:计算10个样本两两之间的RMSE,生成RMSE比对矩阵
如果需要所有样本之间的两两比对结果,可以用短循环或者完全向量化的方式实现:
基于sklearn函数的实现
import numpy as np from sklearn.metrics import mean_squared_error all_samples = np.random.rand(10, 100) rmse_matrix = np.zeros((10, 10)) # 循环计算每行样本和所有样本的RMSE for idx in range(10): rmse_matrix[idx] = mean_squared_error(all_samples[idx], all_samples, multioutput='raw_values', squared=False)
最终得到的rmse_matrix[i][j]就是第i个样本和第j个样本的RMSE值。
纯numpy向量化实现(无循环,适合小样本场景)
import numpy as np all_samples = np.random.rand(10, 100) # 广播计算所有两两组合的MSE后开方得到RMSE mse_matrix = np.mean((all_samples[:, np.newaxis] - all_samples) ** 2, axis=2) rmse_matrix = np.sqrt(mse_matrix)
注意事项
- 所有参与计算的样本长度必须一致,否则会触发维度不匹配报错
- 两两比对得到的RMSE矩阵是对称矩阵,仅需要非重复结果时可直接提取矩阵的上三角或下三角部分使用
内容的提问来源于stack exchange,提问作者the phoenix
相关产品推荐
相关产品推荐

