机器学习
一、机器学习理论&常见任务
1.机器学习基础
什么是机器学习
- 什么是学习:图灵奖与诺贝尔经济学奖得主Herbert Simon:学习是指数据系统通过执行某个过程改进性能

人工智能的两个重要阶段
- 逻辑推理,知识库与专家系统 1980年之前,人工建立规则、知识库

机器学习:1980年之后,计算机算法从数据中学习,并自动改进和优化算法,以便更好地预测和决策

人工智能与机器学习
- AI是计算机科学中获得图灵奖最多的方向之一,机器学习是主要实现方法
- AI最近三次获得的图灵奖均属机器学习方向
- 2018 Hinton,LeCun,Bengio
- 2011Judea Pearl(概率图模型)
- 2010 Leslie Valiant(PACIi)

什么是机器学习
- 对于某类任务T**(机器学习问题)和性能度量P(评估指标),如果一个计算机程序在T(模型)上以P衡量的性能随着经验E(学习数据)而自我完善,那么我们称这个计算机程序在从经验E中学习。**

机器学习的发展历史
曾经的模式识别 (Pattern Recognition, IPR) ,今天的机器学习(Machine Learning,简称ML)

人工智能>机器学习>深度学习
- 人工智能是研究与开发用于模拟、延伸和扩展人的智能的综合性技术科学。
- 机器学习属于人工智能的一个分支,是实现人工智能的方法。
- 深度学习是一种机器学习方法,当前主要特指深度神经网络。

当前机器学习的背景
- 算法+数据+算力
- 算法成熟:神经网络、bayes方法、支撑向量机......
- 大量可用数据:社交数据、金融蝼数据、电商数据、科学研究数据......
- 计算资源丰富:GPU算力增长迅速....
- 竞争加剧:需要智能手段提供更方便的服务、发现商业规律...

为什么需要机器学习
- 人工规则与专家系统的缺陷:可扩展性、通用性差,需要领域的专家知识

对于一张512x512的黑白图像,每个像素取值0-255,总共的情况是256 ^512x512 =256 ^262144
机器学习可以从样本数据中学习经验,将经验用于预测

2012年,Google的一个由16000台电脑集群组成的人工神经网络通过YouTube上有关于猫的资料自行训练而能够识别出“猫”这一概念,与其把知识和经验总结好了告诉计算机,不如让计算机自己去学习知识和经验
机器学习的发展历史
ANN, SVM, AdaBoost, CNN, Transformer

机器学习的发展历程大致可以分为三个阶段
- 1980-1990年处于早期:成为独立的学科,诞生了决策树、反向传播算法,卷积神经网络等经典算法
- 1991-2011年处于蓬勃发展期:出现了大量方法,2次获得图灵奖。经典的算法包括支持向量机,随机森林,Boosting,RNN/LSTM,流形学习,各种聚类算法等
- 2012-至今处于深度学习时代:深度卷积神经网络,深度RNN,深度强化学习,生成对抗网络,图神经网络,Transformer,自动化机器学习/NAS等
与其他学科的关系

2. 机器学习特征
2.1特征概念
什么是特征?
- 事物可供识别的特殊的征象或标志

特征选择
- 对一个学习任务而言,有些特征可能很有用,另一些可能没什么用
- 有经验的人往往只需要看看根蒂、听听敲声就知道是否好瓜。

典型的图像特征
- 常用的特征有:Harris角点特征,Canny边缘特征,直方图特征等。

典型的文本特征
- 常用的特征有:词属性,词频TF-IDF,词向量,Bag of Words等。

机器学习数据库UCI
- UCl数据库是加州大学欧文分校(University of Californialrvine)提出的数据库,目前共有585个数据集,其数目还在不断增加。

http://archive.ics.uci.edu/ml/index.php
Iris数据库
- 可能是模式识别文献中最著名的数据库,数据集包含3个类,每个类有50个实例,每个类指的是一种鸢尾植物

Adult数据库
- 从人口普查数据库中抽取,使用以下条件进行提取:(AAGE>16)&&(AGI>100)&&(AFNLWGT>1)&&(HRSWK>0)。

- 任务是预测确定一个人的年收入是否超过5万美元。
- 所采用的特征包括:年龄、工作类型、教育程度、受教育时间、婚姻状况、职业、种族、性别、每周工作小时数、原籍、收入等。
2.2特征编码
- 任务拿到的初始数据通常比较脏乱,可能会带有各种非数字特殊符号,需要将其转换为可计算的数字,采用编码量化等方法

- 常见的编码方式有:序号编码、独热编码、标签编码、频数编码等
序号编码
- 序号编码(Ordinal Encoding),通常用于处理类别间具有内在大小顺序关系的数据,对于一个具有m个类别的特征,可以将其对应地映射到 [0,m-1]的整数。

- 例如收入数据集中的教育程度,可以将“学士”、“硕士”编码成“0”和“1”,因为它们内在就含有这样的逻辑顺序。
独热编码
- 独热编码(one-hot encoding),又称一位有效编码,使用N位状态向量对N个状态进行编码,每个状态都有独立的位置,并且只有一位有效。

- 通常用于处理类别间不具有大小关系的特征,如收入数据集的种族。
2.3特征选择
什么是特征选择?
- 原始未经过滤过的特征可能包含很多无关特征,不同特征对问题的贡献大小程度也不相同,往往需要选取一个包含重要信息的特征子集。

过滤式特征选择方法
- 先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续训练无关。
- 方差选择法:计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征
- 相关系数法:计算各个特征对目标值的相关系数
- 卡方检验法:检验自变量对因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于沮因变量等于j的样本频数的观察值与期望的差距
包裹式特征选择方法
- 直接以最终学习器的性能作为特征子集的评价准则,目的是为给定学习器选择最有利于其性能的特征子集。
- 递归特征消除法:使用一个基模型进行多轮训练,每轮训练后,根据权值系数消除若干特征,再基于新的特征集进行下一轮训练。
嵌入式特征选择方法
- 将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成
- 基于惩罚项的特征选择法:使用L1等惩罚项对不同维度的特征进行惩罚,除了筛选出特征外,也进行了降维。
- 基于树模型的特征选择法:使用决策树、随机森林、Boosting、XGBoost等算法进行特征选择。
3.机器学习常见任务
3.1机器学习问题概览
- 机器学习问题分类

- 监督学习、半监督学习、无监督学习的比较

- 利用一组标记的样本学习已知输入输出数据之间的关系,效果好并且稳定。
- 通过有效利用小部分监督信息,在获得比无监督学习更好的效果的同时,将成本控制在可以接受范围。
- 通过算法自动发现输入特征中的结构或模式,能克服很多实际应用中获取监督数据的困难。
有监督学习与无监督学习
- 最常见的两类问题,根据是否存在真实的答案,即标签进行区分

- 有监督:有监督:在真值标签(分类类别)的指导下进行学习
- 无监督:没有真值标签,学习数据的统计规律或潜在结构
半监督学习与弱监督学习
- 半监督即只有部分训练样本有标签值;弱监督即只有不完整的标签值

- 半监督分类任务,少量有标签数据与大量无标签数据
- 弱监督图像分割任务,标注目标框
强化学习
- 又称再励学习、评价学习或增强学习,在与环境的交互过程中学习策略,达成回报最大化或实现特定目标。

3.2有&无监督学习模型
有监督学习模型
- 经典的有监督机器学习模型包括分类与回归模型

分类任务
- 将物理或抽象对象的集合分成多个不同的指定类别,标签为离散类别数值

回归任务
- 将输入的数据拟合成连续的输出结果,标签为连续数值

无监督学习模型
- 经典的无监督机器学习模型包括降维、聚类与生成模型

降维任务
- 采用某种映射方法,将原高维空间中的数据点映射到低维度空间中,对特征进行降维与可视化

聚类任务
- 将集合分成由类似的对象组成的多个类的过程,是分类问题,但没有训练过程

- 把一批样本划分成多个类,使得在某种相似度指标下每一类中的样本尽量相似,不同类的样本之间尽量不同
生成任务
- 估计特定集合的概率密度函数,生成高质量文本、图像、语音、代码等数据

二、评估目标与优化目标
1. 机器学习评估指标
1.1模型评估概述
样本集划分
- 训练集,验证集,测试集3个不相交的子集

- 以训练集训练模型;以验证集评估模型,寻找最佳的参数;以测试集测试模型一次,其误差近似为泛化误差。
N折交叉验证技术
将样本集均匀的分成N份,轮流用其中的N-1份作为训练集,剩下的1份作为测试集

什么是评测指标
机器学习算法的性能评测指标用于衡量算法的优劣,作为各种方法比较的基准,指导我们对模型进行选择与优化

1.2分类任务常见的评估指标
两类常见的评测指标
分类任务评测指标与回归任务评测指标

正负样本划分
- 标签为正样本,分类为正样本的数目为True Positive,简称TP。
- 标签为正样本,分类为负样本的数目为False Negative,简称FN。
- 标签为负样本,分类为正样本的数目为False Positive,简称FP。
- 标签为负样本,分类为负样本的数目为True Negative,简称TN。

准确率/召回率/精确度
- 准确率,精度,召回率计算
- 准确率:Accuracy=(TP+TN)/(TP+FP+TN+FN),被判定为正样本的测试样本中,真正的正样本所占的比例。
- 正样本精度:Precision=TP/(TP+FP),召回的正样本中有多少是真正的正样本。
- 正样本召回率:Recall=TP/(TP+FN),被判定为正样本的正样本占所有正样本的比例。
PR曲线和F1 Score
- 精度与召回率是一对相互矛盾的指标,对正负样本不均衡问题敏感

ROC曲线
- 分类算法在不同假阳率下对应的真阳率
- 假阳率false positive rate(FPR): FPR=FP/(FP+TN)负样本被分类器判定为正样本的比例。
- 真阳率true positive rate(TPR): TPR=TP/(TP+FN) 正样本被分类器判定为正样本的比例。

AUC
- AUC(Area Under Curve)为ROC曲线下的面积,表示随机挑选一个正样本以及一个负样本,分类器会对正样本给出的预测值高于负样本的概率

混淆矩阵
- 对于k分类问题,混淆矩阵为kxk的矩阵,元素cij表示第i类样本被分类器判定为第j类的数量

1.3回归任务常见的评估指标
IoU
- loU(lntersection over Union),边界框/掩膜正确性的度量指标

PSNR
- Peak Signal to NoiseRatio,有真值参考的质量评估指标,在信号处理领域被广泛使用,计算复杂度小

2. 机器学习优化目标
2.1模型优化概述
优化目标
- 机器学习用有限训练集上的期望损失作为优化目标(即代理损失函数loss function),损失代表预测值f(x)与真实值Y的不一致程度。

- 般损失函数越小,模型的性能就越好,观察训练集和测试集的误差就能知道模型的收敛情况,估计模型的性能
过拟合与欠拟合状态
- 模型在训练集和测试集上的不同表现

过拟合的原因
- 模型过大,数据太少

- 模型本身过于复杂,拟合了训练样本集中的噪声

- 训练样本太少或者缺乏代表性
2.2分类任务常见优化目标
两类常见的优化目标
- 分类任务优化目标与回归任务优化目标

0-1损失
- 只看分类的对与错,当标签与预测类别相等时,损失为0,否则为1

- 真实的优化目标,但是无法求导和优化,只有理论意义
熵与交叉熵(cross entropy)
- 熵表示热力学系统的无序程度,在信息学中用于表示信息多少,不确定性越大,概率越低,则信息越多,熵越高

- 熵函数是概率的单调递减的函数

交叉熵损失(cross entropy loss)
- 衡量两个概率分布的相似性
- 令yij表示第i个样本属于分类j的标签,f(xij)表示的是样本溺预测为j分类的概率

Softmax loss
- 交叉熵损失(cross entropy loss)softmax loss

2.3回归任务常见优化目标
L1 Loss
- L1损失即Mean absolute loss(MAE loss),以绝对误差作为距离。

- 主要问题:梯度在零点不平滑(缺点)
L1/L2-loss
- L2损失即Mean Squared Loss(MSE loss),也被称为欧氏距离,以误差的平方和作为距离。

- 当预测值与目标值相差很大(异常值)时,梯度容易爆炸,因为梯度里有两者差值。
Smooth L1 loss
- 解决L1 loss梯度不平滑,L2 loss梯度爆炸的问题

- 在x比较小时,等价于L2 loss,保持平滑。
- 在x比较大时,等价于L1loss,可以限制数值的大小。
三、机器学习模型实践
1.逻辑回归模型原理与实战
1.1如何建模求解
一个简单的机器学习问题
- 如何区分樱桃和猕猴桃?

- 樱桃的颜色亮,重量小;猕猴桃的颜色暗,重量大;选择两个有区分度的特征-颜色y,重量x,组成特征向量(x,y),樱桃位于xy平面的左上角,猕猴桃位于右下角
如何进行建模求解
- 把樱桃和猕猴桃抽象成平面上的点,用一条直线可以将这两种类型分开,这条直线称为线性分类器

直线方程为 ax+by+c=0
落在直线上方的点被判定成樱桃 ax +by+c<0
落在直线下方的点被判定成猕猴桃 ax +by+c>0
将机器学习模型表示为f,输入特征向量为**(x,y),樱桃的类别标签为-1**,猕猴桃的类别标签为**+1**,直线方程的参数**(a,b,c)**就是机器学习模型的参数

1.2逻辑回归模型
逻辑回归(logistic)模型
又被称为对数回归模型,实际上是一种二分类算法,从一个样本的特征向量x,预测出它是正样本的概率值p(y=1|x)

如何使用逻辑回归模型进行分类
- 对数似然比,样本属于正样本和负样本概率值比的对数

1.3逻辑回归模型实战
sklearn机器学习库
- 一个著名的Python机器学习库,实现了绝大多数经典机器学习算法

使用sklearn解决逻辑回归问题
- 构建包含两个类的简单二维数据并进行可视化

使用sklearn解决逻辑回归问题
- 导入库进行训练

数据集
- 鸢尾花分类

# Copyright 2021 longpeng2008. All Rights Reserved.
# Licensed under the Apache License, Version 2.0 (the "License");
# If you find any problem,please contact us
# Author: longpeng
# Email: longpeng2008to2012@gmail.com
#coding:utf8
import numpy as np
import matplotlib.pyplot as plt
import sys
## 导入逻辑回归模型函数
from sklearn.linear_model import LogisticRegression
## 读取数据
lines = open('iris.txt').readlines()
x_features = [] ## 特征数组
y_label = [] ## 标签数组
table = {"setosa":0,"versicolor":1,"virginica":2} #创建标签转换表
for i in range(1,len(lines)):
line = lines[i].strip().split(' ')
feature = line[1:-1] ## 获得特征
label = table[str(line[-1].split('\"')[1])] ## 获得标签
x_features.append(feature)
y_label.append(label)
#print(str(feature)+' '+str(label))
## 调用逻辑回归模型
lr_clf = LogisticRegression()
lr_clf = lr_clf.fit(x_features, y_label) #其拟合方程为 y=w0+w1*x1+w2*x2
## 查看模型的w和b
print('the weight of Logistic Regression:',lr_clf.coef_)
print('the intercept(w0) of Logistic Regression:',lr_clf.intercept_)
