机器学习中的precision, recall, accuracy, F值

假设用机器学习方法解决某个二元分类问题,在分析比较不同模型时常看到这些指标。

四个概念:TP,FP,TN,FN

TP(True Positive):在判定为positive的样本中,判断正确的数目。

FP(False Positive):在判定为positive的样本中,判断错误的数目。

TN(True Negative):在判定为negative的样本中,判断正确的数目。

FN(False Negative):在判定为negative的样本中,判断错误的数目。

判断正误是根据样本的label或称之为标准答案,来计算的。模型或规则给出的判定P或N可以看作是二分类类别。

这些值计算一般是在验证集(validation set)上进行的。


计算 precision,recall,accuracy,F1 score

精确率(precision),可理解为“真正属于类别P的/找到属于类别P的”

召回率(recall)     ,可理解为“真正属于类别P的/所有属于类别P的”

准确率(accuracy)

可见,精确率和召回率是相互影响的,理想情况下两者都高,但是一般情况下准确率高,召回率就低;召回率高,准确率就低;如果两者都低,应该是哪里算的有问题。

在两者都要求高的情况下,综合衡量P和R就用F值:


α为1时,就是常见的F1值(F1 score): 

一般多个模型假设进行比较时,F1 score越高,说明它越好。


ROC曲线和AUC

ROC(Receiver Operating Characteristic)和AUC(Area UnderCharacteristic常被用来评价一个二分类器的优劣。

ROC曲线一般横轴是FPR,纵轴是TPR。AUC为曲线下面的面积,一般AUC值越大,说明模型越好。

曲线示例:


  • 26
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
下面是描述的Python代码实现: ```python import pandas as pd import numpy as np from sklearn.neural_network import MLPClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 从csv文件读入数据 data = pd.read_csv("microgrid_data.csv") # 提取特征和标签 X = data.iloc[:, :-1].values y = data.iloc[:, -1].values # 划分训练集和测试集,测试集占总数据集的20% X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 自定义函数对数据进行正规化 def normalize(X): X_norm = (X - np.mean(X, axis=0)) / np.std(X, axis=0) return X_norm X_train_norm = normalize(X_train) X_test_norm = normalize(X_test) # 训练多层神经网络模型 mlp = MLPClassifier(hidden_layer_sizes=(100, 50), max_iter=1000, random_state=42) mlp.fit(X_train_norm, y_train) # 在测试集上进行预测 y_pred = mlp.predict(X_test_norm) # 计算模型性能指标 accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred) recall = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) # 打印模型性能指标,并将结果输出到文件Performance.txt with open("Performance.txt", "w") as f: f.write("Accuracy: {:.3f}\n".format(accuracy)) f.write("Precision: {:.3f}\n".format(precision)) f.write("Recall: {:.3f}\n".format(recall)) f.write("F1 score: {:.3f}\n".format(f1)) print("Accuracy: {:.3f}".format(accuracy)) print("Precision: {:.3f}".format(precision)) print("Recall: {:.3f}".format(recall)) print("F1 score: {:.3f}".format(f1)) ``` 这段代码实现了对微电网稳定性数据的读取、训练集和测试集的划分、数据正规化、多层神经网络模型的训练和测试集上的预测、模型性能指标的计算和输出到文件Performance.txt。其,使用pandas库读取csv文件,使用numpy库进行数据处理和正规化,使用scikit-learn库的MLPClassifier类实现多层神经网络模型的训练和预测,并使用scikit-learn库的评估函数计算模型性能指标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值