当前位置: 首页 > news >正文

网站表单提交到qq邮箱野望赏析

网站表单提交到qq邮箱,野望赏析,长沙官网seo服务,赣楠脐橙网络营销推广方式一. 分类评价指标 对机器学习算法的性能进行评估时,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价指标,这就是算法评价指标。分类算法的评价指标一般有准确率,精确率,召回率,F1-score&a…

一. 分类评价指标

对机器学习算法的性能进行评估时,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价指标,这就是算法评价指标。分类算法的评价指标一般有准确率,精确率,召回率,F1-score,PR曲线,ROC,AUC。

在介绍具体的评价指标前,需要先以二分类为例引入混淆矩阵。

混淆矩阵

针对一个二分类问题,即将实例分成正类(positive)或反类(negative),在实际分类中会出现以下四种情况:
(1)若一个样本是正类,并且被预测为正类,即为真正类TP(True Positive )
(2)若一个样本是正类,但是被预测为反类,即为假反类FN(False Negative )
(3)若一个样本是反类,但是被预测为正类,即为假正类FP(False Positive )
(4)若一个样本是反类,并且被预测为反类,即为真反类TN(True Negative )

混淆矩阵的每一行是样本的预测分类,每一列是样本的真实分类,如下图所示。
在这里插入图片描述

二. 准确率(accuracy),精确率(precision),召回率(recall),F1-score

1. 准确率(accuracy)

精确率是预测正确的样本占所有样本的百分比。
accuracy=TP+TNTP+FP+TN+FNaccuracy = \frac{TP + TN}{TP + FP +TN + FN}accuracy=TP+FP+TN+FNTP+TN

局限:当数据的正负样本不均衡,仅仅使用这个指标来评价模型的性能优劣是不合适的。

假如一个测试集有正样本99个,负样本1个。模型把所有的样本都预测为正样本,那么模型的Accuracy为99%,看评价指标,模型的效果很好,但实际上模型没有任何预测能力。

2. 精确率(precision)

又叫查准率,它是模型预测为正样本的结果中,真正为正样本的比例。
precision=TPTP+FPprecision=\frac{TP}{TP + FP}precision=TP+FPTP

3. 召回率(recall)

又叫查全率,它是实际为正的样本中,被预测为正样本的比例。
recall=TPTP+FNrecall=\frac{TP}{TP + FN}recall=TP+FNTP

4. F1-score

F1-score是precision和recall的调和平均值。
F1=2∗Precision∗RecallPrecision+RecallF1 =\frac{2 * Precision * Recall}{ Precision + Recall}F1=Precision+Recall2PrecisionRecall

5. 编码实现
import numpy as np
from sklearn import datasets
import warnings
warnings.filterwarnings("ignore")
digits = datasets.load_digits()
x = digits.data
y = digits.target.copy()
y[digits.target == 9] = 1
y[digits.target != 9] = 0
x.shape
(1797, 64)
y.shape
(1797,)
from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(x, y, random_state=666)
from sklearn.linear_model import LogisticRegressionlog_reg = LogisticRegression()
log_reg.fit(x_train, y_train)
y_log_predict = log_reg.predict(x_test)
log_reg.score(x_test, y_test)
0.9755555555555555
#### 手动计算混淆矩阵
def TN(y_true, y_predict):assert len(y_true) == len(y_predict)return np.sum((y_true ==0) & (y_predict == 0))
TN(y_test, y_log_predict)
403
def FP(y_true, y_predict):assert len(y_true) == len(y_predict)return np.sum((y_true ==0) & (y_predict == 1))
FP(y_test, y_log_predict)
2
def FN(y_true, y_predict):assert len(y_true) == len(y_predict)return np.sum((y_true ==1) & (y_predict == 0))
FN(y_test, y_log_predict)
9
def TP(y_true, y_predict):assert len(y_true) == len(y_predict)return np.sum((y_true ==1) & (y_predict == 1))
TP(y_test, y_log_predict)
36
def my_confusion_matrix(y_true, y_predict):return np.array([[TN(y_true, y_predict),FP(y_true, y_predict)],[FN(y_true, y_predict),TP(y_true, y_predict)]])
my_confusion_matrix(y_test, y_log_predict)
array([[403,   2],[  9,  36]])
# 使用sklearn 提供的api计算混淆矩阵from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_log_predict)
array([[403,   2],[  9,  36]])
#手动计算precision
def my_precision_score(y_true, y_predict):return TP(y_true, y_predict) / (TP(y_true, y_predict) + FP(y_true, y_predict))my_precision_score(y_test, y_log_predict)
0.9473684210526315
# 使用sklearn提供的api计算precision
from sklearn.metrics import precision_score
precision_score(y_test, y_log_predict)
0.9473684210526315
#手动计算recall
def my_recall_score(y_true, y_predict):return TP(y_true, y_predict) / (TP(y_true, y_predict) + FN(y_true, y_predict))my_recall_score(y_test,y_log_predict)
0.8
#使用sklearn 提供的api计算recall
from sklearn.metrics import recall_score
recall_score(y_test, y_log_predict)
0.8
# 手动计算F1-score
def my_f1_score(precision, recall):try:return 2 * precision * recall / (precision + recall)except:return 0.0
my_f1_score(precision_score(y_test, y_log_predict), recall_score(y_test, y_log_predict))
0.8674698795180723
# 使用sklearn 提供的api计算F1-score
from sklearn.metrics import f1_score
f1_score(y_test, y_log_predict)
0.8674698795180723

三. PR曲线

1. PR曲线

P-R曲线是描述精确率和召回率变化的曲线。对于所有的正样本,设置不同的阈值,模型预测所有的正样本,再根据对应的精准率和召回率绘制相应的曲线。

一般情况下一个分类模型不可能同时获得高的精准率与召回率,当精准率较高时,召回率会降低;当召回率较高时,精准率会降低。
在这里插入图片描述

模型与坐标轴围成的面积越大,则模型的性能越好。但一般来说,曲线下的面积是很难进行估算的,所以衍生出了“平衡点”(Break-Event Point,简称BEP),即当P=R时的取值,平衡点的取值越高,性能更优。

2. 编码实现
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
digits = datasets.load_digits()
x = digits.data
y = digits.target.copy()
y[digits.target == 9] = 1
y[digits.target != 9] = 0
from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(x, y, random_state=666)
from sklearn.linear_model import LogisticRegressionlog_reg = LogisticRegression()
log_reg.fit(x_train, y_train)
y_log_predict = log_reg.predict(x_test)
log_reg.score(x_test, y_test)
0.9755555555555555
# 获取分类算法的分类阈值
decision_scores = log_reg.decision_function(x_test)

手动绘制PR曲线

from sklearn.metrics import precision_score
from sklearn.metrics import recall_scoreprecisions = []
recalls = []
thresholds = np.arange(np.min(decision_scores), np.max(decision_scores), 0.1)
for threshold in thresholds:y_predict = np.array(decision_scores >= threshold, dtype = 'int')precisions.append(precision_score(y_test, y_predict))recalls.append(recall_score(y_test, y_predict))
plt.plot(precisions, recalls)

在这里插入图片描述

使用sklearn API绘制PR曲线

from sklearn.metrics import precision_recall_curveprecisions1, recalls1, thresholds1 = precision_recall_curve(y_test, decision_scores)
plt.plot(precisions1, recalls1)

在这里插入图片描述

四. ROC和AUC

1. ROC曲线

ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。曲线对应的纵坐标是TPR,横坐标是FPR。下面先介绍下TPR和FPR。

  • TPR(true positive rate):真正类率,也称为灵敏度(sensitivity),等同于召回率。表示被正确分类的正实例占所有正实例的比例。
    TPR=TPTP+FNTPR=\frac{TP}{TP + FN}TPR=TP+FNTP

  • FPR(false positive rate):负正类率,表示被错误分类的负实例占所有负实例的比例。
    FPR=FPFP+TNFPR=\frac{FP}{FP + TN}FPR=FP+TNFP
    在这里插入图片描述
    设置不同的阈值,会得到不同的TPR和FPR,而随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着负类,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

    理想目标: TPR=1, FPR=0,即图中(0,1)点。故ROC曲线越靠拢(0,1)点,即,越偏离45度对角线越好。对应的就是TPR越大越好,FPR越小越好。

2. AUC

AUC(Area Under Curve)是处于ROC曲线下方的那部分面积的大小。AUC越大,代表模型的性能越好。

一个分类模型的AUC值越大,则认为算法表现的越好。

3. 编码实现
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
digits = datasets.load_digits()
x = digits.data
y = digits.target.copy()
y[digits.target == 9] = 1
y[digits.target != 9] = 0
from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(x, y, random_state=666)
from sklearn.linear_model import LogisticRegressionlog_reg = LogisticRegression()
log_reg.fit(x_train, y_train)
y_log_predict = log_reg.predict(x_test)
log_reg.score(x_test, y_test)
0.9755555555555555
# 获取分类算法的分类阈值
decision_scores = log_reg.decision_function(x_test)

使用sklearn API绘制ROC曲线

from sklearn.metrics import roc_curvefprs1, tprs1, thresholds = roc_curve(y_test, decision_scores)
plt.plot(fprs1, tprs1)

在这里插入图片描述

使用sklearn API计算auc的值

from sklearn.metrics import roc_auc_scoreroc_auc_score(y_test, decision_scores)
0.9824417009602195
http://www.yayakq.cn/news/188429/

相关文章:

  • 南通的电商网站建设无锡网络公司平台
  • 织梦网站免费模板外贸自主建站平台
  • 唯品会网站开发费用网站搭建的费用
  • 深圳富通做网站更换网站首页模板怎么做
  • 企业网站的建设的功能定位如何建设网站兴田德润在那里
  • 旅游网站的系统建设的意义可以直接做海报的网站
  • 网站备案主体黑名单深圳网站建设的客户在哪里
  • 做外贸网站需要什么免费网站制作器
  • 网站建设实践心得视频网站做视频节目赚钱吗
  • 洛阳网站建设哪家公司好长沙做网站好的公司
  • 做企业网站需要哪些网络工程和软件工程的区别
  • html购物网站模板惠东做网站公司
  • wordpress 仿站 教程网四川省建设安全质量监理协会网站
  • 建设网站查询密码网站开发与设计总结
  • 网站开发合同下载百度推广平台登陆
  • 上海建设网站制松岗做网站公司
  • 网站制作用什么语言最好长春市建设厅网站
  • 齐河网站建设建设企业网站企业网上银行登录
  • 网站点击软件排名网站建设公司长春
  • 来宾住房与城乡建设网站品牌网站设计哪家好
  • 网站模版学校网站开发研究的意义和目的
  • 苏州网站设计制作公司深圳网站的优化
  • 做微信公众号的网站有哪些内容wordpress 手机页面停
  • 开发网站网络公司有哪些seo的收费标准
  • 正规的抖音推广平台图片优化
  • 免费的网站域名查询565wcc百度指数趋势
  • 北京住房建设厅网站网站做自签发证书
  • 室内设计网站公司房产备案价格查询官网
  • 宿迁做网站中文wordpress网站
  • 网站开发实践自己做的网站如何让百度收录