放到开始,官方文档:http://seaborn.pydata.org/generated/seaborn.heatmap.html#seaborn.heatmap
函数是seaborn包的,同时seaborn也是基于matplotlib的画图模块,所以都需要及进行引用。使用前需要set()一下。
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="white", palette="muted", color_codes=True)
#set( )设置主题,调色板更常用 没有要求可直接sns.set()
plt.plot(np.arange(10))
plt.show()
Python混淆矩阵的使用
confusion_matrix函数的使用
官方文档中给出的用法是
sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)
y_true: 是样本真实分类结果,y_pred: 是样本预测分类结果
labels:是所给出的类别,通过这个可对类别进行选择
sample_weight : 样本权重
(原文https://blog.csdn.net/xyisv/article/details/80456649 )
也可以参考https://blog.csdn.net/m0_38061927/article/details/77198990
from sklearn.metrics import confusion_matrix
y_true = [2, 1, 0, 1, 2, 0]
y_pred = [2, 0, 0, 1, 2, 1]
C=confusion_matrix(y_true, y_pred)
print(C, end='\n\n')
y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
C2 = confusion_matrix(y_true, y_pred, labels=["ant", "bird", "cat"])
print(C2)
上面是一个最简单的实现,函数要求两个输入向量均为list,有需要的话注意进行转换。
语句
ax = sns.heatmap(C, cmap=plt.cm.Blues)#画热力图,cmap表示设定的颜色集
具体颜色集可参考链接
https://blog.csdn.net/guduruyu/article/details/60868501
我选择了Blues颜色集
组装了一个函数:
def plot_heatmap(model,X_train, Y_train,nb_class):#画热力图函数
Y_train_out = model.predict(X_train)#利用训练好的模型做预测
Y_train_outclass = np.argmax(Y_train_out, axis=1)#找到预测结果的最大下标位置
Y_train_class = np.argmax(Y_train, axis=1)#找到标签的最大下标位置,作为类别
Y_train_outclasslist = Y_train_outclass.tolist()
Y_train_classlist = Y_train_class.tolist()#转成list格式
C = confusion_matrix(Y_train_classlist, Y_train_outclasslist,
labels=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29])#计算混淆矩阵
#混淆矩阵函数,第一个参数:真实值,第二个参数:标签,第三个参数:标签内容
C = np.array(C) / (Y_train.shape[0] / nb_class)#转成百分比,正确率
ax = sns.heatmap(C, cmap=plt.cm.Blues)#画热力图,cmap表示设定的颜色集
plt.title('Confusion_Matrix')
plt.xticks(rotation=50)
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.savefig("heatmap3.png")#将热力图输出保存
plt.show()
用于实验对比。
这个方法很有用,可以让我们灵活的对模型任意一层(关键是最后一层)的输出进行进一步操作。
https://blog.csdn.net/hahajinbu/article/details/77982721
核心就是在model规划完毕后,对model权重进行训练(或者加载权重),进行predict操作,输出即是np.array格式的数组结果。
对应着每个神经元的输出。如果是最后一层softmax,则输出 样本数*末层神经元 的二维数组,对应每个样本的神经元内存储的是0-1的概率值。
model.fit(data, labels, epochs=10, batch_size=32)
#已有的model在load权重过后
#取某一层的输出为输出新建为model,采用函数模型
dense1_layer_model = Model(inputs=model.input,
outputs=model.get_layer('Dense_1').output)
#以这个model的预测值作为输出
dense1_output = dense1_layer_model.predict(data)
遇到有用的一些代码段,保存下来。
a=([1,2,3,4])
a为python的list类型
将a转化为numpy的array:
b = np.array(a)
将a转化为python的list
c = a.tolist()
一定要加上前面的变量和等号!
参照:https://blog.csdn.net/qq_40693171/article/details/85224423