求助:为自定义Python逻辑回归模型生成混淆矩阵
解决逻辑回归模型的混淆矩阵生成问题
首先明确:weight是模型的参数,不是预测值。预测值(y_pred)是将测试集输入模型,经过sigmoid激活后,用阈值(通常取0.5)转换得到的0/1分类结果。下面是具体实现步骤:
1. 先修正模型代码中的致命错误
你的model函数里存在拼写错误:weigt = weight - learningRate*dw.T应该改成weight = weight - learningRate*dw.T,这个错误会导致权重完全无法更新,模型训练彻底失效,必须先修正。
2. 训练模型,得到训练后的权重和偏置
调用你写的model函数完成训练:
# 假设X、y已定义,且完成了train_test_split和转置操作 learning_rate = 0.01 iterations = 10000 trained_weight, trained_bias, cost_history = model(x_train, y_train, learning_rate, iterations)
3. 生成测试集的预测分类结果(y_pred)
基于你现有的accuracy函数逻辑,改写一个生成预测结果的函数:
def get_predictions(X, weight, bias): z = np.dot(weight.T, X) + bias activation = sigmoid(z) # 用0.5作为阈值,将概率转换为0/1分类 predictions = (activation > 0.5).astype('int64') # 转成一维数组,和真实标签的形状匹配 return predictions.flatten()
生成测试集的预测结果与真实标签:
y_pred = get_predictions(x_test, trained_weight, trained_bias) y_true = y_test.flatten() # 把转置后的真实标签转成一维数组
4. 用scikit-learn生成混淆矩阵
导入工具并计算:
from sklearn.metrics import confusion_matrix # 生成混淆矩阵 cm = confusion_matrix(y_true, y_pred) print("混淆矩阵:") print(cm)
可选:可视化混淆矩阵
如果需要更直观的展示,用热力图呈现:
import seaborn as sns import matplotlib.pyplot as plt sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['类别0', '类别1'], yticklabels=['类别0', '类别1']) plt.xlabel('预测标签') plt.ylabel('真实标签') plt.title('混淆矩阵') plt.show()
混淆矩阵说明
混淆矩阵的行代表真实标签,列代表预测标签:
cm[0][0]:真实为0且预测为0的样本数(真阴性)cm[0][1]:真实为0但预测为1的样本数(假阳性)cm[1][0]:真实为1但预测为0的样本数(假阴性)cm[1][1]:真实为1且预测为1的样本数(真阳性)
内容的提问来源于stack exchange,提问作者Logit
相关产品推荐
相关产品推荐

