混淆矩阵 def plot_confusion_matrix(y_test,y_pred,title=""): conf_mat=confusion_matrix(y_test,y_pred) conf_mat_normalized=conf_mat.astype("float")/conf_mat.sum(axis=1)[:,np.newaxis] figsize=(22,5) ticksize=18 titlesize=ticksize+8 labelsize=ticksize+5 xlabel="Predicted label" ylabel="True label" params={"figure.figsize":figsize, "axes.labelsize":labelsize, "axes.titlesize":titlesize, "xtick.labelsize":ticksize, "ytick.labelsize":ticksize} plt.rcParams.update(params) plt.subplot(121) sns.heatmap(conf_mat,annot=True) plt.title(title) plt.xlabel(xlabel) plt.ylabel(ylabel) plt.subplot(122) sns.heatmap(conf_mat_normalized,annot=True) plt.title(title) plt.xlabel(xlabel) plt.ylabel(ylabel) plt.show() print("Confusion Matrix:\n") print(conf_mat) print("\n\nConfusion Matrix Normalized:\n") print(conf_mat_normalized)
时间: 2024-02-29 11:54:36 浏览: 27
这段代码是用来画出混淆矩阵的,混淆矩阵是用来评估分类模型性能的一种矩阵。它展示了分类模型将样本分到各个类别时的正确率和错误率。这段代码中,首先计算出混淆矩阵和归一化后的混淆矩阵,然后利用seaborn库中的heatmap函数画出两个热力图,分别展示混淆矩阵和归一化后的混淆矩阵。最后打印出混淆矩阵和归一化后的混淆矩阵。
相关问题
def plot_confuse(model, x_val, y_val): predictions = model.predict_classes(x_val) truelabel = y_val.argmax(axis=-1) # 将one-hot转化为label conf_mat = confusion_matrix(y_true=truelabel, y_pred=predictions) plt.figure() plot_confusion_matrix(conf_mat, range(np.max(truelabel) + 1))
如果你正在使用Keras的Sequential模型,那么你需要使用predict()方法获取模型的预测结果,如下所示:
```python
import numpy as np
# 假设你的模型是一个Sequential对象,名为model
predictions = model.predict(x_val)
predicted_classes = np.argmax(predictions, axis=1)
truelabel = np.argmax(y_val, axis=1) # 将one-hot编码转化为标签形式
conf_mat = confusion_matrix(y_true=truelabel, y_pred=predicted_classes)
plt.figure()
plot_confusion_matrix(conf_mat, classes=range(np.max(truelabel) + 1))
```
这个代码将使用model的predict()方法获取模型的预测结果predictions,然后使用numpy.argmax()函数获取预测结果的类别predicted_classes。同时,使用numpy.argmax()函数将y_val从one-hot编码转化为标签形式,并保存在truelabel中。接下来,使用sklearn库中的confusion_matrix()函数计算混淆矩阵,并将其保存在conf_mat中。最后,使用自定义的plot_confusion_matrix()函数绘制混淆矩阵图。需要注意的是,classes参数应该是类别的列表,而不是类别标签的数组。
pca = PCA(n_components=7) newX = pca.fit_transform(X) x_data = ['PC1','PC2','PC3','PC4','PC5','PC6','PC7'] y_data = np.around(pca.explained_variance_ratio_, 2) plt.bar(x=x_data, height=y_data,color='steelblue', alpha=0.8) plt.show() PCA_data = pd.DataFrame(newX, columns=['PC1', 'PC2', 'PC3', 'PC4', 'PC5', 'PC6', 'PC7']) correlation_matrix = PCA_data.corr() sns.heatmap(correlation_matrix, cmap='coolwarm', annot=True) plt.show() 上述代码是对数据进行主成分分析,展示每个主成分的贡献率, 并计算所有主成分之间的皮尔逊相关系数,并用热图Heatmap的形式展示出来,请在上述代码基础上,请给出下一步的代码,要求是: 划分训练集测试集,只使用前两个主成分作为自变量训练逻辑回归模型,并在测试集上测试模型预测效果。显示模型预测的准确率,显示模型的混淆矩阵,试着画出ROC曲线
下一步的代码如下:
# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(newX[:,:2], y, test_size=0.3, random_state=42)
# 训练逻辑回归模型
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
# 在测试集上测试模型预测效果
y_pred = logreg.predict(X_test)
# 显示模型预测的准确率
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print("模型预测准确率为:", accuracy)
# 显示模型的混淆矩阵
from sklearn.metrics import confusion_matrix
conf_mat = confusion_matrix(y_test, y_pred)
print("模型的混淆矩阵为:\n", conf_mat)
# 画ROC曲线
from sklearn.metrics import roc_curve, roc_auc_score
fpr, tpr, thresholds = roc_curve(y_test, y_pred)
roc_auc = roc_auc_score(y_test, y_pred)
plt.plot(fpr, tpr, label='ROC曲线 (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.title('ROC曲线')
plt.xlabel('假正率(FPR)')
plt.ylabel('真正率(TPR)')
plt.legend(loc="lower right")
plt.show()