# 模型评估指标

```# 加载数据
import pandas as pd
import matplotlib.pyplot as plt
from collections import Counter

Xvar = ['X'+str(i) for i in list(range(1, 31))]
var= ['id', 'y'] + Xvar
df.columns = var

Counter(df['y'])
df['y'] = df['y'].map({'M': 1, 'B': 0})
df.info()

X = df.loc[:, Xvar].values
y = df['y'].values```

```# 抽样
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1)```

```# 标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)```

```# 预测
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=300, max_depth=3, random_state=1234)
rf = rf.fit(X_train, y_train)

y_pred = rf.predict(X_test)
y_prob = rf.predict_proba(X_test)
y_prob_1 = rf.predict_proba(X_test)[:, 1]
y_prob_0 = rf.predict_proba(X_test)[:, 0]```

1、sklearn.metrics模块中的confusion_matrix方法，可以直接求出混合矩阵：

```from sklearn.metrics import confusion_matrix
confmat = confusion_matrix(y_true=y_test, y_pred=y_pred)
print(confmat)
# 混合矩阵为：
[[71 1]
[ 5 37]]```

2、上面得到的结果展示的较简单，可以使用scikitplot.skplt中的方法得到更好看的结果：

```import scikitplot as skplt
skplt.metrics.plot_confusion_matrix(y_test, y_pred)```

`skplt.metrics.plot_confusion_matrix(y_test, y_pred, normalize=True)`

1、根据混合矩阵可以计算出查准率/准确率、查全率/召回率等指标：

```from sklearn.metrics import precision_score, recall_score, f1_score

# 查准率/准确率Precision(PRE) = TP/(TP+FP)
precision_score(y_true=y_test, y_pred=y_pred) # 0.9736842105263158

# 查全率/召回率recall(REC) = TP/(TP+FN)
recall_score(y_true=y_test, y_pred=y_pred) # 0.8809523809523809

# F1 = 2*PRE*REC/(PRE+REC)
f1_score(y_true=y_test, y_pred=y_pred) # 0.925```

2、画出准确率-召回率曲线(Precision-Recall Curve)，曲线下面区域面积越大，模型越好。

```import scikitplot as skplt
skplt.metrics.plot_precision_recall_curve(y_test, y_prob)```

```from sklearn.metrics import accuracy_score
accuracy_score(y_true=y_test, y_pred=y_pred) # 0.9473684210526315```

sklearn.metrics中的classification_report可以提取模型的性能报告，其实就是将准确率、召回率等指标打印成报告的形式输出。

```from sklearn.metrics import classification_report
print(classification_report(y_true=y_test, y_pred=y_pred))```

AUC值

1、sklearn.metrics中的roc_auc_score可以直接计算出AUC值：

```from sklearn.metrics import roc_auc_score
roc_auc_score(y_true=y_test, y_score=y_prob_1) # 0.9761904761904762```

2、可以使用scikitplot.skplt画出ROC曲线：

```import scikitplot as skplt
skplt.metrics.plot_roc(y_test, y_prob)```

0 条评论

• ### 决策树可视化-python

决策树相较于其他机器学习模型具有较好的解释性，也容易将其结果进行可视化展示，python中sklearn.tree的export_graphviz函数可以将决策...

• ### 算法 | 朴素贝叶斯

朴素贝叶斯是实用性很高的一种学习器，主要基于贝叶斯定理和条件独立性假设求出后验概率，将后验概率最大的类别作为预测的结果.

• ### 模型评估 | Precision-Recall Curve

最近接手的一个项目，最后被要求给出查准率-查全率曲线(Precision-Recall Curve)以及曲线对应的查准率、查全率数值序列。查准率-查...

• ### 过来人对迷茫的程序员一点建议，3种学习方式的优缺点

很多朋友都想入行编程，也许是因为好就业，也许是因为工资高，或许是因为其他原因。是因为爱吗？很多人都是从入门到放弃，还有很多小伙伴走了弯路，那么今天老哥就来讲讲各...

• ### 诺亚方舟实验室李航：深度学习还局限在复杂的模式识别上

李航认为，深度学习时代的到来是统计学习发展的必然趋势，今后若干年里深度学习还将是研究的热点，会有很多新技术开发出来，利用深度学习的应用也会有革命性的进步。尽管深...

• ### 9个牛逼的网站

链接地址：https://www.zitijia.com/t/%E5%85%8D%E8%B4%B9%E5%95%86%E7%94%A8 在这里下载的字体都是免...

• ### 轻量级熔断降级框架 alibaba sentinel 应用

wiki：https://github.com/alibaba/Sentinel/wiki

• ### 腾讯梦想乌龙始末：百万+爆款、干掉同题的潘乱和坐飞机的张军

五月第一个周末因为一篇《腾讯没有梦想》的文章，科技圈高潮迭起。当所有人都以为剧终时，一位网名为Zen的人在公众号发布的《腾讯的梦想其实是我PS出来的》一文，很像...

• ### 三四行代码打造元学习核心，PyTorch元学习库L2L现已开源

learn2learn 是一个用于实现元学习的 Pytorch 库，我们只需要加几行高层 API，就能为一般的机器学习流程添加元学习能力。例如在元学习 MNIS...