0-1混淆矩阵的代码实现
时间: 2024-09-04 18:02:19 浏览: 53
0-1混淆矩阵,也称为精确率召回率矩阵或对角线矩阵,用于评估分类模型的性能,特别关注真正例(True Positives, TP)、假正例(False Positives, FP)、真负例(True Negatives, TN)和假负例(False Negatives, FN)。以下是一个简单的Python代码示例,使用pandas库来创建和显示混淆矩阵:
```python
import pandas as pd
# 假设我们有实际类别(y_true)和预测类别(y_pred)的数据
y_true = [1, 0, 0, 1, 1] # 实际标签
y_pred = [1, 0, 1, 1, 0] # 预测结果
# 计算混淆矩阵
conf_matrix = pd.crosstab(y_true, y_pred, rownames=['Actual'], colnames=['Predicted'])
print(conf_matrix)
```
运行上述代码后,你会得到类似这样的矩阵:
```
Predicted
0 1
Actual
0 FP TN
1 FN TP
```
其中`FP`、`FN`、`TP`和`TN`分别代表了混淆矩阵中的数值。
相关问题
0-1混淆矩阵的代码实现,其中TP=191,FN=85,FP=2,TN=3
如果已知TP(真正例)等于191,FN(假阴性)等于85,FP(假阳性)等于2,TN(真阴性)等于3,我们可以手动构建一个0-1混淆矩阵。在这种情况下,由于TP、FP、TN和FN都是整数,可以直接用字典或列表的形式表示:
```python
conf_matrix = {
'实际类别': ['真实阳性的(Positive)', '真实阴性的(Negative)'],
'预测类别': ['预测阳性的(Positive)', '预测阴性的(Negative)'],
'计数': [TP, FN, FP, TN]
}
# 将计数转为二维列表,方便展示
matrix_data = [[conf_matrix['计数'][i], conf_matrix['计数'][j]] for i, j in zip([1, 2], [0, 3])]
# 使用numpy或pandas展示矩阵
import numpy as np
conf_matrix_df = pd.DataFrame(matrix_data, index=['TP', 'FP'], columns=['实际阳性的(Positive)', '实际阴性的(Negative)'])
print(conf_matrix_df)
# 或者直接打印计数值
print("TP:", TP, "FN:", FN, "FP:", FP, "TN:", TN)
```
这将输出一个简单的文本形式的混淆矩阵以及每个值。
基于Python实现BP神经网络四分类混淆矩阵代码
以下是一个基于Python实现BP神经网络四分类混淆矩阵的示例代码:
```python
import numpy as np
# 定义sigmoid函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义BP神经网络类
class BPNeuralNetwork:
def __init__(self, input_num, hidden_num, output_num):
# 初始化权重
self.weights_ih = np.random.rand(hidden_num, input_num)
self.weights_ho = np.random.rand(output_num, hidden_num)
# 初始化偏置
self.bias_h = np.random.rand(hidden_num, 1)
self.bias_o = np.random.rand(output_num, 1)
def forward(self, inputs):
# 计算隐藏层输出
hidden_inputs = np.dot(self.weights_ih, inputs) + self.bias_h
hidden_outputs = sigmoid(hidden_inputs)
# 计算输出层输出
output_inputs = np.dot(self.weights_ho, hidden_outputs) + self.bias_o
output_outputs = sigmoid(output_inputs)
return output_outputs
def train(self, inputs, targets, learning_rate):
# 前向传播
hidden_inputs = np.dot(self.weights_ih, inputs) + self.bias_h
hidden_outputs = sigmoid(hidden_inputs)
output_inputs = np.dot(self.weights_ho, hidden_outputs) + self.bias_o
output_outputs = sigmoid(output_inputs)
# 计算输出层误差
output_errors = targets - output_outputs
# 计算隐藏层误差
hidden_errors = np.dot(self.weights_ho.T, output_errors) * hidden_outputs * (1 - hidden_outputs)
# 更新权重和偏置
self.weights_ho += learning_rate * np.dot(output_errors * output_outputs * (1 - output_outputs), hidden_outputs.T)
self.weights_ih += learning_rate * np.dot(hidden_errors * hidden_outputs * (1 - hidden_outputs), inputs.T)
self.bias_o += learning_rate * output_errors * output_outputs * (1 - output_outputs)
self.bias_h += learning_rate * hidden_errors * hidden_outputs * (1 - hidden_outputs)
# 加载数据集
data = np.genfromtxt('data.csv', delimiter=',')
inputs = data[:, :4]
targets = data[:, 4:]
# 数据归一化
inputs = inputs / np.max(inputs, axis=0)
targets = targets / np.max(targets, axis=0)
# 划分训练集和测试集
train_inputs = inputs[:120, :].T
train_targets = targets[:120, :].T
test_inputs = inputs[120:, :].T
test_targets = targets[120:, :].T
# 创建BP神经网络
network = BPNeuralNetwork(4, 8, 4)
# 训练BP神经网络
for i in range(1000):
network.train(train_inputs, train_targets, 0.1)
# 在测试集上进行预测
test_outputs = network.forward(test_inputs)
# 计算混淆矩阵
conf_matrix = np.zeros((4, 4))
for i in range(test_outputs.shape[1]):
predict_label = np.argmax(test_outputs[:, i])
true_label = np.argmax(test_targets[:, i])
conf_matrix[true_label, predict_label] += 1
# 输出混淆矩阵
print('Confusion matrix:')
print(conf_matrix)
```
其中,`sigmoid`函数用于计算神经网络的输出,`BPNeuralNetwork`类定义了BP神经网络的结构和训练方法,`train`方法用于训练神经网络,`forward`方法用于进行前向传播,`data`变量存储了数据集,`inputs`和`targets`分别存储了输入和输出数据,`train_inputs`、`train_targets`、`test_inputs`和`test_targets`分别存储了训练集和测试集的输入和输出数据,`network`变量创建了一个BP神经网络,`test_outputs`用于存储在测试集上的预测结果,`conf_matrix`变量用于存储混淆矩阵。
阅读全文