【发布时间】:2019-09-02 11:44:30
【问题描述】:
我有两个矩阵 [A](Expected_matrice) ,[B](Predicted_matrice) 我需要通过减去它们 [C]=[A]-[B] 创建第三个 [C](Error_matrice) 并将其传递给 Pandas 数据框并保存在 csv 中文件。
由于上述矩阵的大小为 24*20,我尝试:
首先:绘图 [C] 通过sns.heatmap(C, cbar=True, cmap="gray_gist")
第二:评估 [C] 通过应用sum(abs(abs([A])-abs([B])))/24*20 来检查它有多好。事实上,我以此来计算 Error 的数量。我也知道可以通过申请使用另一种方法,例如 MSE from Sklearn import metrics:
from Sklearn import metrics
print(metrics.mean_squared_error(A,B))
由于矩阵的元素是列表,我使用过:[i - j for (i, j) in zip(A,B)]
我的代码如下:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.ndimage.filters import gaussian_filter
#A,B can be read from .csv files
A = pd.read_csv('D:\A.csv', header=None)
B = pd.read_csv('D:\B.csv', header=None)
#A,B can be assumed as lists
df_A = pd.DataFrame(A)
df_B = pd.DataFrame(B)
#calculate error matrix via subtraction
C = [i - j for (i, j) in zip(A,B)]
#Pass error matrix to Pandas dataframe
df_C = pd.DataFrame(C)
df_C.to_csv('Error_Matrix.csv', header=None, index=None)
#Evaluation
Eval= sum(abs(abs([A])-abs([B])))/24*20
Eval_ = '{:04}'.format(Eval)
print(Eval_)
#Plotting C
fig, ax = plt.subplots(nrows=1, ncols=2 , figsize=(20,15))
plt.subplot(1,2,1)
ax = sns.heatmap(C, cbar=True, cmap="gist_gray")
plt.title(f'Error Matrix Error={Eval_}', fontsize=14 , fontweight='bold', color='black', loc='center', style='italic')
plt.axis('off')
plt.subplot(1,2,2)
C_smooth = gaussian_filter(dfr_b, sigma=1)
ax = sns.heatmap(C_smooth, vmin=np.min(C_smooth), vmax=np.max(C_smooth), cmap ="gray" , cbar=True , cbar_kws={"ticks":[0,33,67,100]})
plt.title(f'Error Matrix Smooth Error={Eval_}', fontsize=14 , fontweight='bold', color='black', loc='center', style='italic')
plt.axis('off')
plt.savefig('Error_Matrix.png')
plt.show()
预期结果:
注意白色显示 Error=0,纯黑色显示 Error=maximum。 大部分应该是错误,但我不想得到黑色的结果,我主要期望灰色。
【问题讨论】:
-
嗨马里奥,问题是什么? ...为什么要放置高斯滤波器?
-
如果我猜对了,黑色是
error = 0。此外,如果您将vmin和vmax缩放到数组的极值,它的范围自然会从黑色到白色。最后,我不认为abs( abs(A) - abs(B) )是一个好的错误指示器;abs( A - B )可能更好。 -
@mikuszefski 我用来消除冗余的高斯滤波器,它可以更好地突出显示结果。我不确定我们是否有其他选择。关于您在 MAPE 中使用 MSE(Mean Square Error) 和 MAPE(Mean Absolute Percentage Error) 的公式,最好使用
( deltax) / A而不是( deltax) / B在ox_ = 100 * np.sum(( 1 - np.abs( ( deltax) / A ) )) / ( len( A ) * len( B[0] ) )中只剩下一些问题,例如在colormap中的数字描述中保持颜色的和谐,并将%添加到colormap中的数字中,就像帖子中的预期图片一样。我喜欢图片。 -
@mikuszefski 我想知道您是否喜欢 DNN,您可以通过查看 this question 来帮助我并检查我对数据集的重塑。我觉得有问题或者没有科学实施。我想从你那里得到反馈,至少请检查我的方法和数据集。
-
嗨马里奥,虽然这是一个有趣的话题,但我不喜欢神经网络。如果我有空闲时间,无论如何我可能会研究一下,但是由于您的问题看起来很有趣,我相信您会吸引合适的人来回答它。干杯。
标签: python dataframe matrix seaborn heatmap