2016-10-18 21:29:41 cunyan 阅读数 65

 

选择合适的指标
在构建机器学习模型时,我们首先要选择性能指标,然后测试模型的表现如何。相关的指标有多个,具体取决于我们要尝试解决的问题。
在可以选择性能指标之前,首先务必要认识到,机器学习研究的是如何学习根据数据进行预测。对于本课程和后续的“监督式机器学习”课程,我们将重点关注那些创建分类或创建预测回归类型的已标记数据。
此外,在测试模型时,也务必要将数据集分解为训练数据和测试数据。如果不区分训练数据集和测试数据集,则在评估模型时会遇到问题,因为它已经看到了所有数据。我们需要的是独立的数据集,以确认模型可以很好地泛化,而不只是泛化到训练样本。在下一课中,我们将探讨模型误差的一些常见来源,并介绍如何正确分解本课程的“数据建模和验证”部分中的数据集。
 
 
 
分类和回归
分类涉及到根据未见过的样本进行预测,并确定新实例属于哪个类别。例如,可以根据蓝色或红色或者方形或圆形来组织对象,以便在看到新对象时根据其特征来组织对象。
在回归中,我们想根据连续数据来进行预测。例如,我们有包含不同人员的身高、年龄和性别的列表,并想预测他们的体重。或者,像在本课程的最终项目中一样,我们可能有一些房屋数据,并想预测某所住宅的价值。
手头的问题在很大程度上决定着我们如何评估模型。
 
 
分类指标与回归指标
在分类中,我们想了解模型隔多久正确或不正确地识别新样本一次。而在回归中,我们可能更关注模型的预测值与真正值之间差多少。
在本节课的余下部分,我们会探讨几个性能指标。对于分类,我们会探讨准确率、精确率、召回率和 F 分数。对于回归,我们会探讨平均绝对误差和均方误差
 
 
分类指标
对于分类,我们处理的是根据离散数据进行预测的模型。这就是说,此类模型确定新实例是否属于给定的一组类别。在这里,我们测量预测是否准确地将所讨论的实例进行分类。
 
 
准确率
最基本和最常见的分类指标就是准确率。在这里,准确率被描述为在特定类的所有项中正确分类或标记的项的数量。
举例而言,如果教室里有 15 个男孩和 16 个女孩,人脸识别软件能否正确识别所有男孩和所有女孩?如果此软件能识别 10 个男孩和 8 个女孩,则它识别男孩和女孩的准确率分别为 66% 和 50%:
准确率 = 正确识别的实例的数量/所有实例数量
有关准确率和如何在 sklearn 中使用它的更多信息,请查看此链接 此处
 
 
 
 
F1 分数
既然我们已讨论了精确率和召回率,接下来可能要考虑的另一个指标是 F1 分数。F1 分数会同时考虑精确率和召回率,以便计算新的分数。
可将 F1 分数理解为精确率和召回率的加权平均值,其中 F1 分数的最佳值为 1、最差值为 0:
F1 = 2 * (精确率 * 召回率) / (精确率 + 召回率)
有关 F1 分数和如何在 sklearn 中使用它的更多信息,请查看此链接此处
 
 
 
回归指标
正如前面对问题的回归类型所做的介绍,我们处理的是根据连续数据进行预测的模型。在这里,我们更关注预测的接近程度。
例如,对于身高和体重预测,我们不是很关心模型能否将某人的体重 100% 准确地预测到小于零点几磅,但可能很关心模型如何能始终进行接近的预测(可能与个人的真实体重相差 3-4 磅)。
 
 
平均绝对误差
您可能已回想起,在统计学中可以使用绝对误差来测量误差,以找出预测值与真实值之间的差距。平均绝对误差的计算方法是,将各个样本的绝对误差汇总,然后根据数据点数量求出平均误差。通过将模型的所有绝对值加起来,可以避免因预测值比真实值过高或过低而抵销误差,并能获得用于评估模型的整体误差指标。
有关平均绝对误差和如何在 sklearn 中使用它的更多信息,请查看此链接此处
 
 
均方误差
均方误差是另一个经常用于测量模型性能的指标。与绝对误差相比,残差(预测值与真实值的差值)被求平方。
对残差求平方的一些好处是,自动将所有误差转换为正数、注重较大的误差而不是较小的误差以及在微积分中是可微的(可让我们找到最小值和最大值)。
有关均方误差和如何在 sklearn 中使用它的更多信息,请查看此链接此处
 
 
 
回归分数函数
除了误差指标之外,scikit-learn还包括了两个分数指标,范围通常从0到1,值0为坏,而值1为最好的表现。
虽然在课程最后的项目中,我们不会用到这两个指标,但是需要知道他们很重要。他们还有一个优点,就是看起来和分类指标类似,都是数字越接近1.0分数就越好。
其中之一是R2分数,用来计算真值预测的可决系数。在 scikit-learn 里,这也是回归学习器默认的分数方法。
另一个是可释方差分数
虽然眼下我们不会详细探讨这些指标,一个要记住的重点是,回归的默认指标是“分数越高越好”;即,越高的分数表明越好的表现。而当我们用到前面讲的误差指标时,我们要改变这个设定。
 
2020-03-02 00:29:01 weixin_43912994 阅读数 53

你可以在我的【幕布】里面查看这篇文章原文,也可以查看对应的思维导图

你可以转载或者保存,如果能注明出处或者点个赞那是最好的啦

感谢!

六种机器学习常用衡量指标

六种机器学习常用衡量指标——分类精度;回归均方误差;查准率、查全率、与F1;对数损失;IOU;检测错误权衡图(Detection error tradeoff(DET))

  • 分类精度

    • 它是正确预测数与样本总数的比值,同理可见错误率

      • 正确率
        在这里插入图片描述
      • 错误率
        在这里插入图片描述
    • 注:只有当属于每个类的样本数量相等时,它才有效

    • 如果正确样本数远超过错误样本,则数据不可靠,比如有98%的A类样本和2%的B类样本,预测每个训练样本都属于A类而轻松获得98%的训练准确性

    • 在少量样本类被误分类造成很大的损失的情况下,使用精确度指标会带来很大隐患;比如预测罕见但致命的疾病、


  • 回归均方误差

    • 主要用于回归问题

    • yi是示例xi的真实标记。记f(x)为预测结果
      在这里插入图片描述


  • 查准率、查全率、与F1

    • 真假(T/F)——预测是否正确;正反(P/N)——样本的正反例
      在这里插入图片描述

    • 查准率(准确率)
      P=TP/(TP+FP)预测为正例中预测对的。——希望我选出的结果尽可能准,要求严格点

    • 查全率(召回率)
      R=TP/(TP+FN)正例被预测对的比例。——希望把所有正例都选出来,要求宽松点

    • PR曲线

      查准率和查全率是一对矛盾的度量,以Precision为纵轴,Recall为横轴可以画出“PR曲线”,通常一个学习器PR曲线被另一个包围,认为后者优于前者。但交叉的时候就难以断言。合理判断是根据PR下面积

    • 平衡点:P=R

    • F1度量
      在这里插入图片描述
      在这里插入图片描述

      F1度量的一般形式-Fβ,能让表达出对查准率、查全率的不同偏好

    • ROC与AUC

      • ROC(receiver
        operatingcharacteristic)全称是“受试者工作特性”曲线。其综合考虑了概率预测排序的质量,体现了学习器在不同任务下的“期望泛化性能”的好坏

      • ROC曲线的纵轴是“真正例率”(TruePositive
        Rate,TPR),横轴是“假正例率”(False Positive Rate,FPR)

      • 真正例率——所有正例中被判断对的,跟查全率数值相同;(正例中被判断为正例的比例)

      • 假正例率——所有负例中被判断为正例(判错了的)(负例中被判断为正例的比率)
        在这里插入图片描述

      • ROC下面积–AUC

    • PR曲线与ROC曲线的差异
      在这里插入图片描述


  • 对数损失

    • 对数损失适用于多类分类,他是通过惩罚错误分类来工作的,分类器必须为样本分配属于每个类的概率。假如有N个样本属于M类,则对数损失的计算如下:

    • yij表示样本i是否属于类别j,Pij表示样本i属于类别j的概率
      在这里插入图片描述

    • 对数损失函数的值域为0到正无穷。损失函数越接近0准确性越高,所以在训练过程中应尽可能减小对数损失函数来提高分类精度


  • IOU

    • IoU 的全称为交并比(Intersection over Union),通计算的是 “预测的边框”
      和 “真实的边框” 的交集和并集的比值
      在这里插入图片描述

  • 检测错误权衡图(Detection error tradeoff(DET))

    • 表示示错误拒绝率(false reject rate)和错误接受率(false accept
      rate)之间的关系,x和y轴一般用log坐标轴表示

    • 错误拒绝率(FRR)表示分类错误不接受这个结果

    • 错误接受率(FAR)表示分类错误却接受了这个结果

    • 简单可以理解为在二分类中,正例判断为负例的比率,与负例被判断为正例的比率之间的关系
      在这里插入图片描述

2018-03-17 00:12:02 Katherine_hsr 阅读数 3005

在做机器学习进行实验过程中,我们需要使用分类精度、均方误差等方法衡量模型的性能,从而判断训练出的模型的表现是否符合预期要求。本文整理了7种常见的机器学习算法衡量指标:分类精度、对数损失、混淆矩阵、曲线下面积(AUC)、F1分数、平均绝对误差、均方误差。

1. 分类精度

分类精度其实就是我们所说的准确性,是正确预测数占总样本数的比值。
Accuracy=NumberofCorrectpredictionsTotalnumberofpredictionsmade
只有当属于每个类的样本数量相等时才有效。这个不难理解,假如我们的训练集中有90%的A类样本和10%的B类样本,然后我们的模型对A类样本表现的特别好,能准确的分类出A类样本,而不能分类出B类样本,则这个模型就能获得90%的分类精度。这给我们一种错觉,认为我们的模型表现的很好,但当在50%的A类样本和50%的B类样本的测试集中做测试时,测试精度就只有50%了。

2. 对数损失

对数损失适用于多类分类,他是通过惩罚错误分类来工作的,分类器必须为样本分配属于每个类的概率。假如有N个样本属于M类,则对数损失的计算如下:
LogarithmicLoss=1Ni=1Nj=1Nyijlog(Pij)
这里,yij表示样本i是否属于类别j
Pij表示样本i属于类别j的概率
对数损失函数的值域为0到正无穷。损失函数越接近0准确性越高,所以在训练过程中应尽可能减小对数损失函数来提高分类精度。

3. 混淆矩阵

混淆矩阵是其他很多度量类型的基础,是通过一个矩阵描述了模型的精确度。假如我们有一个二分类的问题,标签为YES和NO。在165个测试样本中我们测试了模型,得到如下结果:
这里写图片描述
矩阵的精确度可以通过取主对角线的平均值来计算,即:
Accuracy=TruePositives+FalseNegativesTotalNumberOfSamples
所以这里面的精度为:
Accuracy=100+50165

4. 曲线下面积(AUC)

曲线下面积是适用于二分类问题,是评估中使用最广的指标之一。分类器的AUC等价于随机选择正样本高于随机选择负样本的概率。了解AUC首先需要了解以下术语:
True Positive Rate(真阳性率):它被定义为
TPFN+TP.对于所有的正数据点,它对应于正数据点被正确认为是正的比例。
False Positive Rate(假阳性率):它被定义为FPFP+TN,即对应于所有的负数据点,负数据点被错误的认为是正的比例。False Positive Rate和True Positive Rate的值都在[0, 1]范围内。下图是[0,1]中不同点的False Positive Rate对True Positive Rate曲线下面积。
这里写图片描述
很明显,AUC的范围是[0, 1],值越大,我们模型的性能越好。

5. F1分数

F1分数(F1 Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的准确率和召回率。F1分数可以看作是模型准确率和召回率的一种加权平均,它的最大值是1,最小值是0。它会告诉我们分类器的精确程度(正确分类的实例数),以及它的稳健成都(它不会错过大量实例)。
高精度低召回率会带来高的精度,但也会错过很难分类的实例。F1得分越高我们的模型表现越好。F1可以表示为:
F1=211precision+1recall
这里写图片描述
其中:Precision为它是正结果的数目除以分类器所预测的正结果的数目
Precision=TruePositiveTruePositive+FalsePositive
Recall为它是正结果数量除以分类器应该预测的正结果的数目(即为实际为正结果的数目)
Recall=TruePositiveTruePositive+FalseNegative

6. 平均绝对误差(Mean Absolute Error)

平均绝对误差是原始值于预测值之间的平均值,用来衡量预测与实际输出还差多远。但是它们并没有给出任何关于错误方向的信息。平均绝对误差用以下公式表达:
MeanAbsoluteError=1Nj=1N|yiyj^|

7. 均方误差(Mean Squared Error)

均方差与平均绝对误差非常相似,唯一的区别在于MSE取原始值与取预测值之差的平方的平均值。MSE的优点是计算梯度更容易,而平均绝对误差需要更负责的线性编程工具来完成。均方误差用以下公式表达:
MeanSquaredError=1Nj=1N(yiyj^)2

2019-08-07 09:44:43 qq_32599479 阅读数 11613

机器学习中各类算法、代价函数、衡量标准

本文是基于以下的系统环境,学习和测试机器学习中的各类算法:

  • Windows 10
  • PyCharm

一、机器学习算法

1、无监督学习

1.1 聚类算法

KMeans算法

  • 优点:
    1)速度快,可并行
  • 缺点:
    1)最终结果对于初始化中心点敏感
    2)需求预先设定聚类个数
  • 相关实现包或类:
    1)sklearn.cluster.KMeans

二、数据预处理

1. 数据变换

1.1 数据标准化

  • 优点:
    1)将数据缩放成均值为0,标准差为1的新数据
  • 缺点:
    1)原始数据应符合高斯分布
    2)加入新的数据时,需要重新计算所有的点
  • 相关实现包或类:
    1)sklearn.preprocessing.StandardScaler

1.2 数据归一化

  • 优点:
    1)利用特征的最大最小值,将特征的值缩放到[0,1]区间
  • 缺点:
    1)加入新的数据时,需要重新计算所有的点
  • 相关实现包或类:
    1)sklearn.preprocessing.MinMaxScaler

2. 特征工程

特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性

1.1 缺失值处理

1.2 数据转换

1.3 特征抽取

将非数值型的特征属性转换成数值类型的过程就是特征抽取,让计算机更好的理解数据

1.3.1 字典数据特征抽取
from sklearn.feature_extraction import DictVectorizer

data = [{'city': '北京', 'temperature': 100}, 
		{'city': '上海', 'temperature': 60}, 
		{'city': '深圳', 'temperature': 30}]
model = DictVectorizer(sparse=False)
transform = model.fit_transform(data)
print(model.get_feature_names())
print(transform)
# ['city=上海', 'city=北京', 'city=深圳', 'temperature']
# [[  0.   1.   0. 100.]
#  [  1.   0.   0.  60.]
#  [  0.   0.   1.  30.]]
1.3.2 文本数据特征抽取
  • 文本全部为英文的情况
from sklearn.feature_extraction.text import CountVectorizer

data = ["life is short, like python", "life is too long, dislike python"]
model = CountVectorizer()
transform = model.fit_transform(data)
print(model.get_feature_names())
print(transform.toarray())

# 单个字母不统计
# ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
# [[0 1 1 1 0 1 1 0]
#  [1 1 1 0 1 1 0 1]]
  • 文本全部为中英文混合的情况
#  对于含有中英文的文本,需要先进行分词
from sklearn.feature_extraction.text import CountVectorizer
import jieba
data1 = "人生苦短,我喜欢python"
data2 = "人生漫长,不用python"
con1 = jieba.cut(data1)
con2 = jieba.cut(data2)
content1 = list(con1)
content2 = list(con2)
c1 = ' '.join(content1)
c2 = ' '.join(content2)
print(c1)
print(c2)

model = CountVectorizer()
cv = model.fit_transform([c1, c2])
print(model.get_feature_names())
print(cv.toarray())

# 人生 苦短 , 我 喜欢 python
# 人生 漫长 , 不用 python
# ['python', '不用', '人生', '喜欢', '漫长', '苦短']
# [[1 0 1 1 0 1]
#  [1 1 1 0 1 0]]
  • tf-idf提取
    tf:term frequency 词的频率
    idf:inverse document frequency 逆文档频率 = log(总文档数量 / 该词出现的文档数量)
    tf * idf = 重要性程度
#  对于含有中英文的文本,需要先进行分词
from sklearn.feature_extraction.text import CountVectorizer
import jieba
data1 = "人生苦短,我喜欢python"
data2 = "人生漫长,不用python"
con1 = jieba.cut(data1)
con2 = jieba.cut(data2)
content1 = list(con1)
content2 = list(con2)
c1 = ' '.join(content1)
c2 = ' '.join(content2)
print(c1)
print(c2)

model = CountVectorizer()
cv = model.fit_transform([c1, c2])
print(model.get_feature_names())
print(cv.toarray())

# 人生 苦短 , 我 喜欢 python
# 人生 漫长 , 不用 python
# ['python', '不用', '人生', '喜欢', '漫长', '苦短']
# [[0.40993715 0.         0.40993715 0.57615236 0.         0.57615236]
#  [0.40993715 0.57615236 0.40993715 0.         0.57615236 0.        ]]

2、有监督学习

2.1 随机森林算法

  • 优点:
    1)能够处理高维度特征数据,并且不用做特征选择
    2)训练完成后,能够给出哪些特征比较重要
    1)容易做并行化方法,速度比较快
    1)可以进行可视化展示,便于分析
  • 缺点:
    1)最终结果对于初始化中心点敏感
    2)需求预先设定聚类个数
  • 相关实现包或类:
    1)sklearn.cluster.KMeans

二、代价函数

1、均方误差代价函数

在这里插入图片描述

2、交叉熵代价函数

在这里插入图片描述

三、衡量标准

1、熵

在这里插入图片描述

2、Gini系数

在这里插入图片描述


2019-07-12 14:10:06 Dear_leslie 阅读数 39

MSE、RMSE、MAE

1/m 是为了使衡量结果与样本数量无关

使用简单线性回归法

1、使用波士顿数据集

In [474]: from sklearn import datasets
In [476]: boston = datasets.load_boston()
#取出第五个属性,即只使用房间数量这个特征
x=boston.data[:,5]
In [482]: y = boston.target
#去除异常样本数据
In [484]: np.max(y)
Out[484]: 50.0
In [485]: x = x[y<50.0]
In [486]: y = y[y<50.0]

2、进行简单线性回归

#划分数据集
In [491]: from sklearn.model_selection import train_test_split
In [492]: x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=666)
In [495]: from SimpleLinearRegression import SimpleLinearRegression2
#简单线性回归
In [496]: reg = SimpleLinearRegression2()
In [497]: reg.fit(x_train,y_train)
In [498]: reg.a_
Out[498]: 7.8608543562689555
In [499]: reg.b_
Out[499]: -27.459342806705543
In [500]: plt.scatter(x_train,y_train)
     ...: plt.plot(x_train,reg.predict(x_train),color="r")

在这里插入图片描述
#使用拟合出来的模型对测试样本进行预测

In [501]: y_predict = reg.predict(x_test)
MSE

在这里插入图片描述

In [503]: mse_test = np.sum((y_predict - y_test)**2) / len(y_test)
In [504]: mse_test
Out[504]: 24.156602134387438
RMSE

在这里插入图片描述

In [505]: from math import sqrt
In [506]: rmse_test = sqrt(mse_test)
In [507]: rmse_test
Out[507]: 4.914936635846635
MAE

在这里插入图片描述

In [508]: mae_test = np.sum(np.absolute(y_predict - y_test)) / len(y_test)
In [509]: mae_test
Out[509]: 3.5430974409463873
scikit-learn中的MSE和MAE
In [510]: from sklearn.metrics import mean_squared_error
In [511]: from sklearn.metrics import mean_absolute_error
In [512]: mean_squared_error(y_test,y_predict)
Out[512]: 24.156602134387438
In [513]: mean_absolute_error(y_test,y_predict)
Out[513]: 3.5430974409463873

最好的衡量线性回归法的指标 R Square

在这里插入图片描述

  • 得到的结果是我们的模型拟合成功的部分
  • R2 <= 1
  • R2越大越好。当我们的预测模型不犯任何错误时,R2取得最大值1
  • R2 < 0时,说明我们的学习模型还不如基准模型。此时,可能数据不存在任何线性关系。

在这里插入图片描述

In [514]: 1 - mean_squared_error(y_test,y_predict)/np.var(y_test)
Out[514]: 0.6129316803937322

scikit-learn中的R square

In [515]: from sklearn.metrics import r2_score
In [516]: r2_score(y_test,y_predict)
Out[516]: 0.6129316803937324
没有更多推荐了,返回首页