【scikit-learn】评估分类器性能的度量,像混淆矩阵、ROC、AUC等

2023-05-16



内容概要¶

  • 模型评估的目的及一般评估流程
  • 分类准确率的用处及其限制
  • 混淆矩阵(confusion matrix)是如何表示一个分类器的性能
  • 混淆矩阵中的度量是如何计算的
  • 通过改变分类阈值来调整分类器性能
  • ROC曲线的用处
  • 曲线下面积(Area Under the Curve, AUC)与分类准确率的不同

1. 回顾¶

模型评估可以用于在不同的模型类型、调节参数、特征组合中选择适合的模型,所以我们需要一个模型评估的流程来估计训练得到的模型对于非样本数据的泛化能力,并且还需要恰当的模型评估度量手段来衡量模型的性能表现。

对于模型评估流程而言,之前介绍了K折交叉验证的方法,针对模型评估度量方法,回归问题可以采用平均绝对误差(Mean Absolute Error)、均方误差(Mean Squared Error)、均方根误差(Root Mean Squared Error),而分类问题可以采用分类准确率和这篇文章中介绍的度量方法。

2. 分类准确率(Classification accuracy)¶

这里我们使用Pima Indians Diabetes dataset,其中包含健康数据和糖尿病状态数据,一共有768个病人的数据。

In [1]:

# read the data into a Pandas DataFrame
import pandas as pd
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data'
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
pima = pd.read_csv(url, header=None, names=col_names)
  
In [2]:

# print the first 5 rows of data
pima.head()
  
Out[2]:
 pregnantglucosebpskininsulinbmipedigreeagelabel
061487235033.60.627501
11856629026.60.351310
28183640023.30.672321
318966239428.10.167210
40137403516843.12.288331

上面表格中的label一列,1表示该病人有糖尿病,0表示该病人没有糖尿病

In [3]:

# define X and y
feature_cols = ['pregnant', 'insulin', 'bmi', 'age']
X = pima[feature_cols]
y = pima.label
  
In [4]:

# split X and y into training and testing sets
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
  
In [5]:

# train a logistic regression model on the training set
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
  
Out[5]:

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=100, multi_class='ovr',
          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
          verbose=0)  
In [6]:

# make class predictions for the testing set
y_pred_class = logreg.predict(X_test)
  
In [7]:

# calculate accuracy
from sklearn import metrics
print metrics.accuracy_score(y_test, y_pred_class)
  

0.692708333333
  

分类准确率分数是指所有分类正确的百分比。

空准确率(null accuracy)是指当模型总是预测比例较高的类别,那么其正确的比例是多少

In [8]:

# examine the class distribution of the testing set (using a Pandas Series method)
y_test.value_counts()
  
Out[8]:

0    130
1     62
dtype: int64  
In [9]:

# calculate the percentage of ones
y_test.mean()
  
Out[9]:

0.32291666666666669  
In [10]:

# calculate the percentage of zeros
1 - y_test.mean()
  
Out[10]:

0.67708333333333326  
In [11]:

# calculate null accuracy(for binary classification problems coded as 0/1)
max(y_test.mean(), 1-y_test.mean())
  
Out[11]:

0.67708333333333326  

我们看到空准确率是68%,而分类准确率是69%,这说明该分类准确率并不是很好的模型度量方法,分类准确率的一个缺点是其不能表现任何有关测试数据的潜在分布。

In [12]:

# calculate null accuracy (for multi-class classification problems)
y_test.value_counts().head(1) / len(y_test)
  
Out[12]:

0    0.677083
dtype: float64  

比较真实和预测的类别响应值:

In [13]:

# print the first 25 true and predicted responses
print "True:", y_test.values[0:25]
print "Pred:", y_pred_class[0:25]
  

True: [1 0 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 0 0]
Pred: [0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
  

从上面真实值和预测值的比较中可以看出,当正确的类别是0时,预测的类别基本都是0;当正确的类别是1时,预测的类别大都不是1。换句话说,该训练的模型大都在比例较高的那项类别的预测中预测正确,而在另外一中类别的预测中预测失败,而我们没法从分类准确率这项指标中发现这个问题。

分类准确率这一衡量分类器的标准比较容易理解,但是它不能告诉你响应值的潜在分布,并且它也不能告诉你分类器犯错的类型。接下来介绍的混淆矩阵可以识别这个问题。

3. 混淆矩阵¶

In [14]:

# IMPORTANT: first argument is true values, second argument is predicted values
print metrics.confusion_matrix(y_test, y_pred_class)
  

[[118  12]
 [ 47  15]]
  
  • 真阳性(True Positive,TP):指被分类器正确分类的正例数据
  • 真阴性(True Negative,TN):指被分类器正确分类的负例数据
  • 假阳性(False Positive,FP):被错误地标记为正例数据的负例数据
  • 假阴性(False Negative,FN):被错误地标记为负例数据的正例数据
In [15]:

# save confusion matrix and slice into four pieces
confusion = metrics.confusion_matrix(y_test, y_pred_class)
TP = confusion[1, 1]
TN = confusion[0, 0]
FP = confusion[0, 1]
FN = confusion[1, 0]
print "TP:", TP
print "TN:", TN
print "FP:", FP
print "FN:", FN
  

TP: 15
TN: 118
FP: 12
FN: 47
  

4. 基于混淆矩阵的评估度量¶

准确率、识别率(Classification Accuracy):分类器正确分类的比例

In [16]:

print (TP+TN) / float(TP+TN+FN+FP)
print metrics.accuracy_score(y_test, y_pred_class)
  

0.692708333333
0.692708333333
  

错误率、误分类率(Classification Error):分类器误分类的比例

In [17]:

print (FP+FN) / float(TP+TN+FN+FP)
print 1-metrics.accuracy_score(y_test, y_pred_class)
  

0.307291666667
0.307291666667
  

考虑类不平衡问题,其中感兴趣的主类是稀少的。即数据集的分布反映负类显著地占多数,而正类占少数。故面对这种问题,需要其他的度量,评估分类器正确地识别正例数据的情况和正确地识别负例数据的情况。

灵敏性(Sensitivity),也称为真正例识别率、召回率(Recall):正确识别的正例数据在实际正例数据中的百分比

In [18]:

print TP / float(TP+FN)
recall = metrics.recall_score(y_test, y_pred_class)
print metrics.recall_score(y_test, y_pred_class)
  

0.241935483871
0.241935483871
  

特效性(Specificity),也称为真负例率:正确识别的负例数据在实际负例数据中的百分比

In [19]:

print TN / float(TN+FP)
  

0.907692307692
  

假阳率(False Positive Rate):实际值是负例数据,预测错误的百分比

In [20]:

print FP / float(TN+FP)
specificity = TN / float(TN+FP)
print 1 - specificity
  

0.0923076923077
0.0923076923077
  

精度(Precision):看做精确性的度量,即标记为正类的数据实际为正例的百分比

In [21]:

print TP / float(TP+FP)
precision = metrics.precision_score(y_test, y_pred_class)
print precision
  

0.555555555556
0.555555555556
  

F度量(又称为F1分数或F分数),是使用精度和召回率的方法组合到一个度量上

F=2precisionrecallprecision+recall   F=2∗precision∗recallprecision+recall
F β =(1+β 2 )precisionrecallβ 2 precision+recall   Fβ=(1+β2)∗precision∗recallβ2∗precision+recall

F  F度量是精度和召回率的调和均值,它赋予精度和召回率相等的权重。

F β   度量是精度和召回率的加权度量,它赋予召回率权重是赋予精度的 β  β倍。

In [22]:

print (2*precision*recall) / (precision+recall)
print metrics.f1_score(y_test, y_pred_class)
  

0.337078651685
0.337078651685
  

总结

混淆矩阵赋予一个分类器性能表现更全面的认识,同时它通过计算各种分类度量,指导你进行模型选择。

使用什么度量取决于具体的业务要求:

  • 垃圾邮件过滤器:优先优化精度或者特效性,因为该应用对假阳性(非垃圾邮件被放进垃圾邮件箱)的要求高于对假阴性(垃圾邮件被放进正常的收件箱)的要求
  • 欺诈交易检测器:优先优化灵敏度,因为该应用对假阴性(欺诈行为未被检测)的要求高于假阳性(正常交易被认为是欺诈)的要求

5. 调整分类的阈值¶

In [23]:

# print the first 10 predicted responses
logreg.predict(X_test)[0:10]
  
Out[23]:

array([0, 0, 0, 0, 0, 0, 0, 1, 0, 1], dtype=int64)  
In [24]:

y_test.values[0:10]
  
Out[24]:

array([1, 0, 0, 1, 0, 0, 1, 1, 0, 0], dtype=int64)  
In [25]:

# print the first 10 predicted probabilities of class membership
logreg.predict_proba(X_test)[0:10, :]
  
Out[25]:

array([[ 0.63247571,  0.36752429],
       [ 0.71643656,  0.28356344],
       [ 0.71104114,  0.28895886],
       [ 0.5858938 ,  0.4141062 ],
       [ 0.84103973,  0.15896027],
       [ 0.82934844,  0.17065156],
       [ 0.50110974,  0.49889026],
       [ 0.48658459,  0.51341541],
       [ 0.72321388,  0.27678612],
       [ 0.32810562,  0.67189438]])  

上面的输出中,第一列显示的是预测值为0的百分比,第二列显示的是预测值为1的百分比。

In [26]:

# print the first 10 predicted probabilities for class 1
logreg.predict_proba(X_test)[0:10, 1]
  
Out[26]:

array([ 0.36752429,  0.28356344,  0.28895886,  0.4141062 ,  0.15896027,
        0.17065156,  0.49889026,  0.51341541,  0.27678612,  0.67189438])  

我们看到,预测为1的和实际的类别号差别很大,所以这里有50%作为分类的阈值显然不太合理。于是我们将所有预测类别为1的百分比数据用直方图的方式形象地表示出来,然后尝试重新设置阈值。

In [27]:

# store the predicted probabilities for class 1
y_pred_prob = logreg.predict_proba(X_test)[:, 1]
  
In [28]:

# allow plots to appear in the notebook
%matplotlib inline
import matplotlib.pyplot as plt
  
In [29]:

# histogram of predicted probabilities
plt.hist(y_pred_prob, bins=8)
plt.xlim(0, 1)
plt.title('Histogram of predicted probabilities')
plt.xlabel('Predicted probability of diabetes')
plt.ylabel('Frequency')
  
Out[29]:

<matplotlib.text.Text at 0x76853b0>  

我们发现在20%-30%之间的数高达45%,故以50%作为分类阈值时,只有很少的一部分数据会被认为是类别为1的情况。我们可以将阈值调小,以改变分类器的灵敏度和特效性

In [30]:

# predict diabetes if the predicted probability is greater than 0.3
from sklearn.preprocessing import binarize
y_pred_class = binarize(y_pred_prob, 0.3)[0]
  
In [31]:

# print the first 10 predicted probabilities
y_pred_prob[0:10]
  
Out[31]:

array([ 0.36752429,  0.28356344,  0.28895886,  0.4141062 ,  0.15896027,
        0.17065156,  0.49889026,  0.51341541,  0.27678612,  0.67189438])  
In [32]:

# print the first 10 predicted classes with the lower threshold
y_pred_class[0:10]
  
Out[32]:

array([ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  1.,  0.,  1.])  
In [33]:

y_test.values[0:10]
  
Out[33]:

array([1, 0, 0, 1, 0, 0, 1, 1, 0, 0], dtype=int64)  

从上面两组数据对比来看,效果确实改善不少

In [34]:

# previous confusion matrix (default threshold of 0.5)
print confusion
  

[[118  12]
 [ 47  15]]
  
In [35]:

# new confusion matrix (threshold of 0.3)
print metrics.confusion_matrix(y_test, y_pred_class)
  

[[80 50]
 [16 46]]
  
In [36]:

# sensitivity has increased (used to be 0.24)
print 46 / float(46 + 16)
print metrics.recall_score(y_test, y_pred_class)
  

0.741935483871
0.741935483871
  
In [37]:

# specificity has decreased (used to be 0.91)
print 80 / float(80 + 50)
  

0.615384615385
  

总结:

  • 0.5作为阈值时默认的情况
  • 调节阈值可以改变灵敏性和特效性
  • 灵敏性和特效性是一对相反作用的指标
  • 该阈值的调节是作为改善分类性能的最后一步,应更多去关注分类器的选择或构建更好的分类器

6. ROC曲线和AUC¶

ROC曲线指受试者工作特征曲线/接收器操作特性(receiver operating characteristic,ROC)曲线, 是反映灵敏性和特效性连续变量的综合指标,是用构图法揭示敏感性和特异性的相互关系,它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性。

ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真正例率(也就是灵敏度)(True Positive Rate,TPR)为纵坐标,假正例率(1-特效性)(False Positive Rate,FPR)为横坐标绘制的曲线。

ROC观察模型正确地识别正例的比例与模型错误地把负例数据识别成正例的比例之间的权衡。TPR的增加以FPR的增加为代价。ROC曲线下的面积是模型准确率的度量。

In [38]:

# IMPORTANT: first argument is true values, second argument is predicted probabilities
fpr, tpr, thresholds = metrics.roc_curve(y_test, y_pred_prob)
plt.plot(fpr, tpr)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.title('ROC curve for diabetes classifier')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
plt.grid(True)
  

ROC曲线上的每一个点对应于一个threshold,对于一个分类器,每个threshold下会有一个TPR和FPR。 比如Threshold最大时,TP=FP=0,对应于原点;Threshold最小时,TN=FN=0,对应于右上角的点(1,1)

正如上面所述,TPR的增加以FPR的增加为代价,所以ROC曲线可以帮助我们选择一个可以平衡灵敏性和特效性的阈值。通过ROC曲线我们没法看到响应阈值的对应关系,所以我们用下面的函数来查看。

In [39]:

# define a function that accepts a threshold and prints sensitivity and specificity
def evaluate_threshold(threshold):
    print 'Sensitivity:', tpr[thresholds > threshold][-1]
    print 'Specificity:', 1 - fpr[thresholds > threshold][-1]
  
In [40]:

evaluate_threshold(0.5)
  

Sensitivity: 0.241935483871
Specificity: 0.907692307692
  
In [41]:

evaluate_threshold(0.3)
  

Sensitivity: 0.741935483871
Specificity: 0.615384615385
  

AUC(Area Under Curve)被定义为ROC曲线下的面积,也可以认为是ROC曲线下面积占单位面积的比例,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。

对应AUC更大的分类器效果更好。所以AUC是衡量分类器性能的一个很好的度量,并且它不像分类准确率那样,在类别比例差别很大的情况下,依然是很好的度量手段。在欺诈交易检测中,由于欺诈案例是很小的一部分,这时分类准确率就不再是一个良好的度量,而可以使用AUC来度量。

In [42]:

# IMPORTANT: first argument is true values, second argument is predicted probabilities
print metrics.roc_auc_score(y_test, y_pred_prob)
  

0.724565756824
  
In [43]:

# calculate cross-validated AUC
from sklearn.cross_validation import cross_val_score
cross_val_score(logreg, X, y, cv=10, scoring='roc_auc').mean()
  
Out[43]:

0.73782336182336183  

参考资料¶

  • scikit-learn documentation: Model evaluation
  • ROC曲线-阈值评价标准
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【scikit-learn】评估分类器性能的度量,像混淆矩阵、ROC、AUC等 的相关文章

  • 水仙花数(做题)

    代码如下 xff1a include lt stdio h gt int main int a scanf 34 d 34 amp a float t t 61 0 1 while a gt 0 t 61 t 10 a 判断几位数 int
  • 一分钟了解动态内存分配

    谈到这 xff0c 必然离不开malloc函数 在上面可以看出此函数需要一个头文件 include lt stdilb h gt 而且返回类型是void 传进去的是空间大小 xff0c 此函数申请的空间是字节为单位的 这其中的就分配了100
  • 动态内存分配深究

    接下来我们将探究以下三个问题 xff1a 1 相邻两次malloc得到的空间是否是连续的呢 xff1f 2 你得到的空间的实际大小是否就是你要求的大小呢 xff1f 3 如果你malloc零长度会得到什么结果呢 xff1f 第一个问题 xf
  • 同一个页面不打开两次

    lt script language 61 34 javascript 34 gt function popwin3 path window open path 34 cart 34 34 height 61 520 width 61 52
  • 超易懂!二分查找 详析

    二分算法的 本质 是 xff1a 假如我们可以找到事物的 某种性质 xff0c 这种性质 可以将区间一分为二 xff0c 一半满足 xff0c 一半不满足 我们就可以二分 另外 xff0c 有 连续性 必可以 二分 二分模板一共有两个 xf
  • 手摸手 Spring Cloud Gateway + JWT 实现登录认证

    你好 xff0c 我是悟空 前言 上篇我已经讲解了 Spring Cloud 的原理和实战 xff0c 这次就要结合 JWT 来实现登录认证的功能了 本文已收录至 深入剖析 Spring Cloud 底层架构原理 xff0c 已更新 18
  • 百行代码实现VLC简易视频播放器【VLC环境配置过程+可执行源码注释完整】

    文章目录 什么是VLC x1f680 VLC 库的集成 VLC环境配置演示 win10系统 43 vs2017 43 win64 x1f34e VLC 库的基本使用 x1f382 视频播放器实现 自定义函数Unicode2Utf8讲解 x1
  • HttpWebRequest 使用NetworkCredential 进行域认证下载时不成功 的解决方案

    最近在项目中使用pWebRequest 使用NetworkCredential 进行域认证下载时老不成功 xff0c 最后Google了解决方案 xff0c 发现几乎所有讨论的方案都不成功 xff0c 只好埋头自己解决 xff0c 最后总算
  • Firefox 的用户脚本管理器 greasemonkey 的使用一例

    一 什么是greasemonkey Firefox 的用户脚本管理器 greasemonkey 使你可以向任何网页添加DHTML语句 用户脚本 来改变它们的显示方式 就像CSS可以让你接管网页的样式 xff0c 而用户脚本 User Scr
  • Apache Http 服务器安装教程

    我在学习网络开发的时候需要从服务器上获得json数据 xff0c 所以在自己的电脑上安装了一个本地服务器 xff0c 其中遇到的一些问题 xff0c 在这里都写出来 首先 xff0c 我们需要访问apache http服务器的下载网页 xf
  • STM32的UART奇偶校验注意

    STM32的UART奇偶校验注意 STM32的UART在初始化时 xff0c 我们通常用到最多的就是无校验位 xff0c 1停止位 但是我在项目中也遇到某些芯片通信用的需要奇校验或者偶校验 xff0c 这里需要特别注意的是STM32中开启奇
  • Realtek RTL8762C/Realtek RTL8762D学习记录

    本人基于日常工作整理编写的8762C FAQ文档 xff0c 记录RTL8762C 8762D系列软件开发常见问题以及解决方案 希望它能发挥更多作用 帮到有需要的朋友 关键字 xff1a 8762CMF 8762CK 8762CJ 8762
  • 蓝牙BLE---DA14683的SPI主机通信讲解

    DA14683的SPI主机通信例程 Date 2018 12 19 Create Jim 导入例程 首先导入ble peripheral例程或者pxp reporter例程 再到以下位置打开硬件SPI的宏定义 xff1a 获取SPI例程源码
  • 06.5 Code

    06 5 Code 推力 force 推力的应用旋翼的气动阻力空气阻力矩滚转力矩电机的转速 推力 force span class token comment force 61 电机的转速 xff5c 电机的转速 xff5c xff08 带
  • C、C++ 对于char*和char[]的理解

    1 char 和char 的共同点 都是指针 xff0c 指向第一个字符所在的地址 2 char 的用法 char a 61 34 aaa 34 char p1 61 a char 是常量指针 xff08 常量的指针 xff09 xff0c
  • 重新抛出(rethrow)

    有可能单个catch不能完全处理一个异常 在进行了一些校正行动之后 xff0c catch可能确定该异常必须由函数调用链中更上层的函数来处理 xff0c catch可以通过重新抛出 rethrow 将异常传递给函数调用链中更上层的函数 重新
  • 4-2 图像聚类算法

    4 2 图像聚类算法 目录1 分类与聚类1 1 分类1 2 聚类1 3 聚类样本间的属性1 4 聚类的常见算法 2 K Means聚类2 1 概念2 2 步骤2 3 例子2 4 K Means聚类与图像处理2 5 K Means聚类优缺点优
  • JavaWeb-03 统一字符集编码、JSP的页面元素、JSP九大内置对象-request

    1 使用Eclipse开发Web项目 JSP项目 tomacat 2 在Eclipse中创建的Web项目 xff1a 浏览器可以直接访问WebContent中的文件例如 http 127 0 0 1 8888 MyJspProject in
  • 9-1 从零开始训练网络

    9 1 从零开始训练网络 目录1 搭建网络基本架构要完成的功能 2 构建训练网络1 实现网络训练功能2 获取训练数据及预处理 3 启动训练网络并测试数据 目录 搭建网络基本架构构建训练网络启动训练网络并测试数据 1 搭建网络基本架构 要完成
  • 基于知识图谱的推荐系统

    基于知识图谱的推荐系统 推荐系统 xff1a 核心目标是通过分析用户行为 兴趣 需求等信息 在海量的数据中挖掘用户感兴趣的信息 如商品 新闻 POI point of interest 和试题 等 个性化推荐算法是推荐系统的核心 其主要可以

随机推荐

  • mysql级联删除

    mysql级联删除 场景 xff1a 员工表 id xff1a 员工idleader id xff1a 该员工的领导的id xff08 也是员工id xff09 外键dept id xff1a 该员工的部门id xff08 部门表外键 xf
  • 【Seata】安装 - mac

    1 下载 官网 xff1a https seata io zh cn index html 2 修改配置文件 2 1 file conf 还有user password 2 2 registry conf 1 xff09 registry
  • Go Modules模式

    Go Modules模式 xff08 1 xff09 go mod 命令 命令作用go mod init生成 go mod 文件 在当前文件夹下初始化一个新的 go mod 文件go mod download下载 go mod 文件中指明的
  • 【Go】flag

    flag String span class token keyword func span span class token function String span span class token punctuation span n
  • Mybatis 逆向工程

    Mybatis 逆向工程 Maven项目generatorConfig xmlpom xml Maven项目 项目结构 xff1a generatorConfig xml span class token prolog lt xml ver
  • 原理分享 | 单片机常用通信协议汇总(上)

    vx 嵌入式工程师成长日记 https mp weixin qq com s biz 61 Mzg4Mzc3NDUxOQ 61 61 amp mid 61 2247484134 amp idx 61 1 amp sn 61 b779ccf0
  • C语言模拟TCP通信-------收发数据

    简介 这篇是我学习网络编程时初次接触到的 xff0c 感觉挺适合初学者 xff0c 下文主要介绍了如何使用Linux模拟TCP通信 xff0c 分为客户端和服务器端两大部分 xff0c 外加一个总的头文件 流程 服务器端和客户端使用TCP的
  • 多传感器融合记录

    多传感器信息融合的典型应用 多传感器融合中的时间硬同步1 论文阅读 weixin 39606911的博客 CSDN博客 前言阅读硕士论文 自动驾驶中多传感器集成同步控制器设计与实现 xff0c 该论文为自动驾驶设计了一套时间同步控制器 xf
  • VINS记录

    euroc launch lt launch gt lt arg name 61 34 config path 34 default 61 34 find feature tracker config euroc euroc config
  • OpenCV介绍与入门

    OpenCV入门 OpenCV介绍关于OpenCV1 OpenCV能做什么 xff1b 2 OpenCV与图形学与FFmpeg的关系 xff1b 3 OpenCV的未来 xff1b OpenCV介绍 OpenCV是计算机视觉的框架 关于Op
  • 【可见光室内定位】(一)概览

    目录 一 室内无线定位技术概况二 研究现状三 应用前景背景 一 室内无线定位技术概况 二 研究现状 得益于可见光通信 xff08 xff36 xff2c xff23 xff09 技术的迅速发展 xff0c 可 见光定位 xff08 xff3
  • 【机器学习中的数学】比例混合分布

    比例混合分布 Scale Mixture Distribution 混合分布是来自其他随机变量的集合构成的随机变量的概率分布 xff1a 一个随机变量是根据给定的概率从集合随机选取的 xff0c 然后所选随机变量的值就得到了 first a
  • 互联网相似图像识别检索引擎 —— 基于图像签名的方式

    一 引言 多媒体识别是信息检索中难度较高且需求日益旺盛的一个问题 以图像为例 xff0c 按照图像检索中使用的信息区分 xff0c 图像可以分为两类 xff1a 基于文本的图像检索和基于内容识别的图像检索 xff08 CBIR xff1a
  • 【Vim】使用map自定义快捷键

    map简介 map是一个映射命令 将常用的很长的命令映射到一个新的功能键上 map是Vim强大的一个重要原因 xff0c 可以自定义各种快捷键 xff0c 用起来自然得心应手 映射的种类 有五种映射存在 xff1a 用于普通模式 输入命令时
  • 【Scala】使用Option、Some、None,避免使用null

    避免null使用 大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是 无 xff0c 在Java xff0c 它是null 在Java 里 xff0c null 是一个关键字 xff0c 不是一个对象 xff0c 所以对它调用任何
  • 【Linux】使用update-alternatives命令进行版本的切换

    引言 在Debian系统中 xff0c 我们可能会同时安装有很多功能类似的程序和可选配置 xff0c 可能会出现同一软件的多个版本并存的场景 比如像是一些编程语言工具 xff0c 一些系统中自带的是python2 6 xff0c 而现在py
  • stm32G0 启动

    目的 STM32G是意法半导体这两年新推出的系列芯片 xff0c 相比原先的F系列的芯片有很多提升点 xff0c 将来必将取代F系列芯片的地位 对于新芯片的应用来说能够正确下载与运行程序是比较重要的一点 xff0c 这篇文章将对 STM32
  • 【scikit-learn】交叉验证及其用于参数选择、模型选择、特征选择的例子

    xfeff xfeff 内容概要 训练集 测试集分割用于模型验证的缺点K折交叉验证是如何克服之前的不足交叉验证如何用于选择调节参数 选择模型 选择特征改善交叉验证 1 模型验证回顾 进行模型验证的一个重要目的是要选出一个最合适的模型 xff
  • 【scikit-learn】网格搜索来进行高效的参数调优

    xfeff xfeff 内容概要 如何使用K折交叉验证来搜索最优调节参数如何让搜索参数的流程更加高效如何一次性的搜索多个调节参数在进行真正的预测之前 xff0c 如何对调节参数进行处理如何削减该过程的计算代价 1 K折交叉验证回顾 交叉验证
  • 【scikit-learn】评估分类器性能的度量,像混淆矩阵、ROC、AUC等

    xfeff xfeff 内容概要 模型评估的目的及一般评估流程分类准确率的用处及其限制混淆矩阵 xff08 confusion matrix xff09 是如何表示一个分类器的性能混淆矩阵中的度量是如何计算的通过改变分类阈值来调整分类器性能