数据处理包:Numpy,pandas,matplotlib,sklearn等记录

Numpy

1.想实现用matplotlib对confusion matrix画color map时,能够根据每个元素占每一行样本总量而非总体样本总量显示color map颜色。可以使用两个confusion matrix来作图,第一个实际的confusion matrix为原始,用来显示数据,另一个confusion matrix对每一行进行归一化到[0,1](具体方法每个元素除以每一行的样本总数,pps:每一行的样本总量为True Label),然后对这张图作color map.其中用到一个numpy函数:np.apply_along_axis(func,axis,data),对data按axis轴方向的每一个元素作func操作,实现对一行的每个元素除以这行的总数,虽然有更简单的方法,但是此方法可以用在列上,通用性强.

confusionMatrix = np.array([.....]) # 原始混淆矩阵

def my_func(a):                     #每行操作
    return a/np.sum(a)
   
confusionMatrixColor = np.apply_along_axis(my_func,axis=1,arr=confusionMatrix) 
                                     # 用来制作color map的混淆矩阵

plt.imshow(confusionMatrixColor, interpolation='nearest',cmap=plt.cm.Blues) #制作color map

fmt = 'd'
thresh = 0.5
for i, j in itertools.product(range(confusionMatrix.shape[0]), range(confusionMatrix.shape[1])):
    plt.text(j, i, format(confusionMatrix[i, j], fmt),
             horizontalalignment="center",
             color="white" if confusionMatrixColor[i, j] > thresh else "black")    #填充原始混淆矩阵

对比:
数据处理包:Numpy,pandas,matplotlib,sklearn等记录_第1张图片
数据处理包:Numpy,pandas,matplotlib,sklearn等记录_第2张图片

Matplotlib

1.调整x轴刻度标签并右对齐,在刻度标签字符串长度很长时很有用:

plt.xticks(tick_marks, Xticks, rotation=45)
fig = plt.gcf()
fig.autofmt_xdate()

效果对比:

数据处理包:Numpy,pandas,matplotlib,sklearn等记录_第3张图片数据处理包:Numpy,pandas,matplotlib,sklearn等记录_第4张图片

你可能感兴趣的:(编程技巧)