机器学习算法 原理、实现与实践 —— 分类、标注与回归

1. 分类问题

分类问题是监督学习的一个核心问题。在监督学习中,当输出变量$Y$取有限个离散值时,预测问题便成为分类问题。

监督学习从数据中学习一个分类决策函数或分类模型,称为分类器(classifier)。分类器对新的输入进行输出的预测,这个过程称为分类。

分类问题包括学习与分类两个过程。在学习的过程中,根据已知的训练样本数据集利用有效的学习方法学习一个分类器;在分类中,利用学习的分类器对新的输入实例进行分类。

对于训练数据集$(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)$,学习系统将学习一个分类器$P(Y|X)$或$Y=f(X)$;分类系统通过学到的分类器$P(Y|X)$或$Y=f(X)$对于新的输入实例$x_{N+1}$进行分类,即预测其输出的类标记$y_{N+1}$。

评价分类器性能的指标一般是分类的准确率,其定义是:对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。

对于二分类问题常用的评价指标是精确率(precision)与召回率(recall)。通常以关注的类为正类,其他类为负类,分类器在测试数据集上的预测或正确或不正确,4种情况出现的总数分别记作:

  • TP —— 将正类预测为正类的数量;
  • FN —— 将正类预测为负类的数量;
  • FP —— 将负类预测为正类的数量;
  • TN —— 将负类预测为负类的数量;

精确率定义为:

$$P = \frac{TP}{TP+FP}$$

召回率定义为:

$$R = \frac{TP}{TP+FN}$$

此外,还有一个$F_1$值,是精确率和召回率的调用均值,即

$$\frac{2}{F_1} = \frac{1}{P}+\frac{1}{R}$$

$$F_1 = \frac{2TP}{2TP+FP+FN}$$

精确率真和召回率都高时,$F_1$也会高。

许多的机器学习方法可以用来解决分类问题,包括$k$近邻法、感知机、朴素贝叶斯法、决策树、逻辑斯谛回归模型、SVM、adaBoost、贝叶斯网络、神经网络等。

比如一个文本内容分类的例子。文本分类是根据文本的特征将其划分到已有的类中。输入是文本的特征向量,输出是文本的类别。通常把文本中的单词定义为特征,每个单词对应一个特征。单词的特征可以是二值的:如果单词在文本中出现则取值1,否则是0;也可以是多值的,表示单词在文本中出现的频率。形象地,如果“股票”“银行”“货币”这些词出现很多,这个文本可能属于经济类,如果“网球”“比赛”“运动员”这些词频繁出现,这个文本可能属于体育类。

2. 标注问题

标注问题也是一个监督学习问题。可以认为标记问题是分类问题的一个推广。

标注问题的输入是一个观测序列,输出的是一个标记序列或状态序列。也就是说,分类问题的输出是一个值,而标注问题输出是一个向量,向量的每个值属于一种标记类型。

标注问题也可以分为两步:学习和标注两个过程。首先给定一个训练数据集

$$T = (x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)$$

这里,$x_i = (x_i^{(1)},x_i^{(2)},\dots,x_i^{(n)})^T,i = 1,2,\dots,N$是输入观测序列,$y_i = (y_i^{(1)},y_i^{(2)},\dots,y_i^{(n)})^T$是相应的输出标记序列,$n$是序列的长度,对于不同样本可以有不同的值。学习系统基于训练数据集构建一个模型,表示为条件概率分布:

$$P(Y^{(1)},Y^{(2)},\dots,Y^{(n)}|X^{(1)},X^{(2)},\dots,X^{(n)})$$

这里,每一个$X^{(i)}(i=1,2,\dots,N)$取值为所有可能的观测,每一个$Y^{(i)}(i=1,2,\dots,N)$取值为所有可能的标记,一般$n \ll N$。标注系统按照学习得到的条件概率分布模型,对新的输入观测序列找到相应的输出标记序列。具体地,对一个观测序列$x_{N+1} = (x_{N+1}^{(1)},x_{N+1}^{(2)},\dots,x_{N+1}^{(n)})^T$找到使条件概率$P(y_{N+1}^{(1)},y_{N+1}^{(2)},\dots,y_{n+1}^{(n)}|x_{N+1}^{(1)},x_{N+1}^{(2)},\dots,x_{N+1}^{(n)})$最大的标记序列$y_{N+1} = (y_{N+1}^{(1)},y_{N+1}^{(2)},\dots,y_{N+1}^{(n)})^T$。

评价标注模型的指标与评价分类的模型指标一样,常用的有标注准确率、精确率和召回率等。

标注常用的机器学习方法有:隐性马尔可夫模型、条件随机场。

自然语言处理中的词性标注(part of speech tagging)就是一个典型的标注问题:给定一个由单词组成的句子,对这个句子中的每一个单词进行词性标注,即对一个单词序列预测其对应的词性标记序列。

3. 回归问题

回归问题也属于监督学习中的一类。回归用于预测输入变量与输出变量之间的关系,特别是当输入变量的值发生变化时,输出变量的值随之发生的变化。

回归模型正是表示从输入变量到输出变量之间映射的函数。回归问题的学习等价于函数拟合:选择一条函数曲线,使其很好地拟合已知数据且很好地预测未知数据。

回归问题按照输入变量的个数,可以分为一元回归和多元回归;按照输入变量与输出变量之间关系的类型,可以分为线性回归和非线性回归。

回归学习最常用的损失函数是平方损失,在此情况下,回归问题可以由著名的最小二乘法求解。

一个回归学习用于股票预测的例子:假设知道一个公司在过去不同时间点的市场上的股票价格(或一段时间的平均价格),以及在各个时间点之间可能影响该公司股份的信息(比如,公司前一周的营业额)。目标是从过去的数据学习一个模型,使它可以基于当前的信息预测该公司下一个时间点的股票价格。具体地,将影响股价的信息视为自变量(输入特征),而将股价视为因变量(输出的值)。将过去的数据作为训练数据,就可以学习一个回归模型,并对未来股份进行预测。实际我们知道想做出一个满意的股价预测模型是很难的,因为影响股份的因素非常多,我们未必能获得那些有用的信息。

ML 05、分类、标注与回归的更多相关文章

  1. ML(4)——逻辑回归

    Logistic Regression虽然名字里带“回归”,但是它实际上是一种分类方法,“逻辑”是Logistic的音译,和真正的逻辑没有任何关系. 模型 线性模型 由于逻辑回归是一种分类方法,所以我 ...

  2. 大叔学ML第五:逻辑回归

    目录 基本形式 代价函数 用梯度下降法求\(\vec\theta\) 扩展 基本形式 逻辑回归是最常用的分类模型,在线性回归基础之上扩展而来,是一种广义线性回归.下面举例说明什么是逻辑回归:假设我们有 ...

  3. seaborn(2)---画分类图/分布图/回归图/矩阵图

    二.分类图 1. 分类散点图 (1)散点图striplot(kind='strip') 方法1: seaborn.stripplot(x=None, y=None, hue=None, data=No ...

  4. LR多分类推广 - Softmax回归*

    LR是一个传统的二分类模型,它也可以用于多分类任务,其基本思想是:将多分类任务拆分成若干个二分类任务,然后对每个二分类任务训练一个模型,最后将多个模型的结果进行集成以获得最终的分类结果.一般来说,可以 ...

  5. CS229笔记:分类与逻辑回归

    逻辑回归 对于一个二分类(binary classification)问题,\(y \in \left\{0, 1\right\}\),如果直接用线性回归去预测,结果显然是非常不准确的,所以我们采用一 ...

  6. 【HowTo ML】分类问题->神经网络入门

    非线性分类器(Non-linear hypotheses) 为什么使用非线性分类器 我们举几个栗子: 假如我们有一个数据空间如左上角坐标系所看到的,那么我们要的模型须要如右边公式所看到的的预測函数. ...

  7. 分类,logistic回归

    1. 使用回归进行分类 机器学习中分类是指输入一个样本点,输出这个样本点所属的类别,预测的是一个离散值,如类别(1,2). 而回归问题是输入一个样本点,预测一个值,这个值是连续值,可以介于\([1,2 ...

  8. 分类和逻辑回归(Classification and logistic regression)

    分类问题和线性回归问题问题很像,只是在分类问题中,我们预测的y值包含在一个小的离散数据集里.首先,认识一下二元分类(binary classification),在二元分类中,y的取值只能是0和1.例 ...

  9. 斯坦福CS229机器学习课程笔记 part2:分类和逻辑回归 Classificatiion and logistic regression

    Logistic Regression 逻辑回归 1.模型 逻辑回归解决的是分类问题,并且是二元分类问题(binary classification),y只有0,1两个取值.对于分类问题使用线性回归不 ...

随机推荐

  1. php 开启curl,重启php-fpm服务

    1,找到php.ini配置 find / -name 'php.ini' /usr/local/php/etc/php.ini 找到extension=php_curl.dll 把前面的分号去掉即可. ...

  2. excel插入当前时间快捷键Ctrl+;

    之前写了一篇editplus如何插入当前时间_Ctrl+D的文章,有的同学说excel用习惯了,那在这我们就说一下excel插入当前时间快捷键,让您在excel快速插入当前时间 excel插入当前时间 ...

  3. cocos基础教程(2)Window环境下搭建

    第一步:开始安装VS2012  第二步:下载Cocos2d-x 3.4源码  配置环境变量 COCOS_CONTROL = E:\cocos2d-x-3.4\tools\cocos2d-console ...

  4. js实现鼠标右键自定义菜单(弹出层),并与树形菜单(TreeView)、iframe合用(兼容IE、Firefox、Chrome)

    <table class="oa-el-panel-tree"> <tr> <td style="vertical-align: top; ...

  5. [BZOJ1786][BZOJ1831]逆序对

    [BZOJ1786][BZOJ1831]逆序对 试题描述 输入 输出 输入示例 - - 输出示例 数据规模及约定 见“输入” 题解 首先这题有一个性质,即,填的数从左到右一定不降.证明不妨读者自己yy ...

  6. C#父类子类对象关系

    案例: 主要有Vehicle.cs  Airplane.cs   Car.cs  3个类. Car和Airplane都继承与Vehicle类.Vehicle中Drive为虚方法,可在子类中重写,父类引 ...

  7. css定位左移动多少距离

    .main .logo { padding-left:82px; } 说明: .main .logo这个标签的路径离边框的距离是82Px

  8. vi命令的基础知识

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,先说说一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您 ...

  9. c++0x新特性实例(比较常用的)

    //array #include <array> void Foo() { array<> a; generate(a.begin(),a.end(),rand); sort( ...

  10. Android 中PendingIntent---附带解决AlarmManager重复加入问题

    最近在程序中使用到了notification功能,自然,就涉及到了PendingIntent,下面总结下. 1 什么是PendingIntent A description of an Intent ...