590 likes | 727 Views
分类. 林琛 博士 、 副 教授. 本讲要点. 分类基础 分类过程 分类算法 KNN ,决策树,神经网络 分类评估 分类高级 预处理与特征选择 不平衡分类,多类分类,多标记分类 集成分类算法 Adaboost , bagging, 随机森林. 分类过程. 步骤 1 :训练 已标注的训练集 分类“模型”表达 步骤 2 :预测 构建测试 集 应用分类“模型”预测类别 评估. 一个例子. 借助适合于当地使用的彩色蘑菇图册,逐一辨认当地食用菌或毒蘑菇是一个很好的方法。.
E N D
分类 林琛 博士、副教授
本讲要点 • 分类基础 • 分类过程 • 分类算法 • KNN,决策树,神经网络 • 分类评估 • 分类高级 • 预处理与特征选择 • 不平衡分类,多类分类,多标记分类 • 集成分类算法 • Adaboost, bagging, 随机森林
分类过程 • 步骤1:训练 • 已标注的训练集 • 分类“模型”表达 • 步骤2:预测 • 构建测试集 • 应用分类“模型”预测类别 • 评估
一个例子 借助适合于当地使用的彩色蘑菇图册,逐一辨认当地食用菌或毒蘑菇是一个很好的方法。 • 看形状:毒蘑菇一般比较黏滑,菌盖上常沾些杂物或生长一些像补丁状的斑块。菌柄上常有菌环(像穿了超短裙一样)。无毒蘑菇很少有菌环。 • 观颜色:毒蘑多呈金黄、粉红、白、黑、绿。无毒蘑菇多为咖啡、淡紫或灰红色。 • 闻气味:毒蘑菇有土豆或萝卜味。无毒蘑菇为苦杏或水果味。 • 看分泌物:将采摘的新鲜野蘑菇撕断菌杆,无毒的分泌物清亮如水,个别为白色,菌面撕断不变色;有毒的分泌物稠浓,呈赤褐色,撕断后在空气中易变色 毒蘑菇? 凭经验知道
K近邻(KNN) • 基本思想 • 对于一个测试样本 • 找出最接近测试样本的训练样本 • 决定测试样本的标签 • 实例投影到 n维空间 • 多少个?K怎么选 • 怎样判断相似度? • 怎么决定? _ . _ _ _ + + _ + xq _ +
K的选择 . . . . . . . . . . K=1 最近邻 K=2 • 常用方法: • 不断增加k直到达到一个较好的预测值 • 交叉验证: • 将训练集分成若干部分,用其中一些作为训练,另一些作为检验 • 十折、五折…… K=3:实线,预测红 K=5:虚线,预测蓝
相似度度量的选择 • 相似度 • 数值描述两个对象的相似程度 • 通常范围[0,1] • 一般是对称的 • 相异度 • 数值描述两个对象的差异程度 • 范围[0,1]或者>0(可以到无穷大) • 一般是对称的 • 严格的测度需要满足三角不等式
简单属性的相似度/相异度及变换 • 回顾: 属性(特征)种类(Lecture 2) • 标称(Nominal),满足相异性,如身份证号 • 序数(Ordinal),满足相异性,有序性,如门牌号 • 区间(Interval),满足相异性,有序性,可加性,如日期 • 比率(Ratio),满足全部:如长度
复杂对象的相似度测量 • 明氏距离Minkowski Distance • 曼哈顿距离(城市街区距离):p=1 • 欧式距离 :p=2 • 余弦相似度Cosine Similarity • 皮尔逊积矩相关系数Pearson Correlation • 杰卡德相似度Jaccard Similarity • 编辑距离Edit Distance 请给出上述距离/相似度的值域
相似度量的选择 • Google 的新闻是自动分类和整理的。所谓新闻的分类无非是要把相似的新闻放到一类中。计算机其实读不懂新闻,它只能快速计算。这就要求我们设计一个算法来算出任意两篇新闻的相似性。为了做到这一点,你打算采取什么样的相似度? • 吴军《数学之美》 • 考虑如下的一个图形,欧氏距离适合用来测度相似性吗?
规范化 假设属性:收入的范围是 $12,000 ~$98,000 。希望规范化到 [0.0, 1.0]. 则$73,600 规范化后的值是: • 最小-最大规范化 • 首先确定新的数值范围 • Z-score 规范化 • 确定均值μ,标准差σ • 小数定标规范化 • 通过移动属性的小数点 上例中假设μ = 54,000, σ = 16,000. 换算$73,600 上例中换算$73,600 0.736 其中j是使得Max(|ν’|) < 1的最小整数
规范化方法比较 • 最小-最大规范化 • 最小,最大值是全局的 • 如果测试数据和训练数据不一致,则会出现“越界” • 线性变换 • Z-score规范化 • 不受孤立点影响 • 需要保存参数,对测试集进行统一处理 • 小数定标规范化 • 需要保存参数,对测试集进行统一处理 • 线性变换
投票策略 • 多数投票 • 指派到k近邻的多数类 • 加权投票 • 对噪音数据的鲁棒性 • 距离越近权重越大
查找最近邻 • 穷举 • 将数据集中的点与查询点逐一进行距离比较 • 索引 • 划分互不重叠的空间 • 在空间里查找最近邻 • K-d tree • K指的不是KNN ,指的是特征维度
K-d树构建 树节点数据结构: Node-data //数据集中某个数据点 Range //该节点所代表的空间范围 Split //垂直于分割超平面的方向轴 Left //由位于该节点分割超平面左子空间内所有数据点所构成的k-d树Right //由位于该节点分割超平面右子空间内所有数据点所构成的k-d树parent //父节点 createKDTree//构建k-d树算法 Input:Data-set,Range Output:k-d tree If (Data-set为空) Return 空的k-d tree; Else //调用节点生成程序: Split=argmax(sd); Node-data=median(d[split]); Data-set' = Data-set\Node-data; createKDTree(dataLeft,leftRange); createKDTree(dataRight,rightRange); 看一个例子
K-d树上的最近邻查找 6个二维数据点{(2,3),(5,4),(9,),(4,7),(8,1),(7,2)} 对于给定点(2,4.5),查找最近邻 算法维护数据结构:路径堆栈,当前最近邻,当前最近距离 1,在k-d树上查找最近区域 路径<(7.2),(5,4)(4,7)> 2,根据堆栈回溯比较每个最近邻 在k-d树上二叉查找 从堆栈最顶端弹出(4,7),距离:3.202 弹出(5.4),距离:3.041<3.202 考虑(5,4)的左空间是否需要搜索 在(2,4.5)的圆心上画半径为3.041的圆 发现与(5,4)的左空间交集 把(2,3)列入路径 弹出(2,3),距离1.5 弹出(7,2),考虑右空间是否需要搜索 在(2,4.5)的圆心上画半径为1.5的圆 不与(7,2)的右空间交集 结束 K-d树划分空间
LSH • 局部敏感哈希(Locality Sensitive Hashing) • 用于Jaccard Similarity • 特征维数很高 变换特征顺序 第一个非零位 minHashing1(A,B,C,D,E)分别为1, 2, 1, 3, 4 经过多次随机变换特征顺序,得到minh 如n=6,Sig(A )= (2,1,5,0,3,2) Sig(B)=(2,1,3,2,8,0), 近似计算sim(A,B)≈2/6 = 0.33
KNN扩展到回归问题上 • 回归问题: • 在教材里被称为“预测” • 和分类的不同 • 分类:离散 • 回归:数值 • 一个典型的回归问题 • 推荐系统 • KNN方法:协同过滤
协同过滤:k近邻 K近邻的基本思想: 利用偏好相似的用户进行推荐 v u u1 u2 u3 • 直接反馈(评分矩阵)特点: • 稀疏 • 动态 • 新评分 • 新用户 • 新项目
基于项目的协同过滤 v u
具体实现(1) • 怎么选择相似的用户/项目? • 相似性的计算 • 基于评分的
具体实现(2) • 选择多少个相似的用户/项目? • 定值K • 阈值法T • 一个朴素算法 • 输入:评分矩阵 • 输出:预测评分矩阵 • For each 用户对 • 计算相似度 • End • For each 需要预测的用户-项目 • 预测评分 • End
具体实现(3) • 用户打分偏差? • 规范化 • 能找到足够多的在目标项目上评分的相似用户吗?(数据稀疏) • 预处理
对协同过滤的改进(偏差) 展示的是以平均值来调整用户评分偏差 同样可以用z-score,方差等方法来调整 • 偏好漂移 • 越老的评分越不可信 • 衰减因子
对协同过滤的改进(数据稀疏) • 方案1:填空 • 方案2:相似用户在相似项目上的评分
对协同过滤的改进(数据稀疏) • 方案3:降维 • 评分矩阵分解 • 相似矩阵分解(SVD) item item Similarity matrix user user
对协同过滤的改进(数据稀疏) 图(距离) 图(传播) 随机游走 • 最短路径 • 最大流 0.6 1.0 0.5 0.4 0.8 1.0 1.0 1.0 0.2
问题 • 自由讨论以下问题 • 协同过滤算法能适应大规模的推荐系统吗?(可伸缩性) • 存储空间 • 计算效率 • 协同过滤算法如何应对不断增长的评分矩阵? • 针对新项目,新用户怎么预测评分?(冷启动)
基于规则的分类 • 如果你有一些分类知识,用IF-THEN规则表示 R: IF age = youth AND student = yes THEN buys_computer = yes • 如果有多条规则 IFage = young AND student = noTHENbuys_computer = no IFage = young AND student = yesTHENbuys_computer = yes IFage = mid-age THENbuys_computer = yes IFage = old AND credit_rating = excellent THENbuys_computer= no IFage = old AND credit_rating = fairTHENbuys_computer = yes • 如何排序 • 训练集:买电脑
规则排序 • 规模序方案:将最高优先权赋予具有“最苛刻”要求的触发规则 • 规则前件的规模(如触发属性的多少) • 规则序方案:预先确定规则的次序 • 基于类的序:最普遍的类->最少见的类 • 规则质量的度量 • 覆盖率ncovers= # of tuples covered by R • 准确率ncorrect= # of tuples correctly classified by R
age? <=30 overcast >40 31..40 student? credit rating? yes excellent fair no yes no yes no yes 如何生成规则:决策树方法 • 决策树:是一种从标记类的训练元组中学习到的树结构,其中 • 内部节点(矩形):表示一个属性上的测试 • 分支:一个测试输出 • 可以是二叉或者非二叉的 • 叶节点(椭圆形):存放一个类标号
归纳决策树的基本算法 • 贪婪的,自顶向下的重复分治法 • 创建根节点,所有候选属性集合 • 递归调用划分数据集的过程(参数:候选属性集合,元组集合) • 找出最好的属性及其分裂准则 • 如果是离散属性且允许多路划分,删除该属性 • 对分裂属性的每个分枝 • 以满足该条件的训练集合与当前候选属性集合为输入 • 递归调用划分过程 • +该节点到根节点 • 停止分裂 • 如果所有训练实例都是同类 • 属性列表为空 • 多数表决 • 训练元祖为空 • 叶子节点
属性选择 • 同时选择测试属性及如何分裂 • 背景:熵 • 随机变量的不确定性越大,把它搞清楚所需要的信息量也要越大 • 反之组分越纯信息量越小 • 信息增益(ID3) • 增益率(C4.5) • Gini指标(CART)
离散值属性的信息增益 • 假设按照属性A划分D中的元组 • 这样划分的信息量 • 原信息量 • 信息增益 • 选择信息增益最大的属性 • 即分后信息量最小,最纯的划分
连续值属性的信息增益 • 找到最优的分裂点 • 对A按照升序排列 • 考虑所有可能的分裂点(一般是两个相邻值的中点) (ai+ai+1)/2 • 计算最小信息增益 • 元组划分(二叉) • D1 :A ≤ split-point • D2 :A > split-point
使用信息增益构造决策树 属性”age” 原信息量(不划分) 课堂小quiz:计算Gain(income)=?
增益率 课堂小quiz:一般来说,信息增益偏向选择具有多个不同值的属性还是少量值的属性?为什么? • 利用分裂信息对信息增益进行了规范化 • 分裂信息:分裂产生的信息量 • 增益率
使用增益率构造决策树 age? <=30 >40 31..40 ? 原信息量(不划分)
Gini指标 • 考虑属性上的二元划分(二叉树) • 离散属性 • 划分为两个子集 • 对于每个子集中的元组 • 其中pj是类j 出现在 D中的相对频率 • 该二元划分 • 选择最小Gini指标的属性和划分 • 连续值属性 • 考虑所有可能的分裂点(相邻值的中点)
使用Gini指标归纳决策树 同理,Gini{low,high} =0.458 Gini{medium,high} =0.450 最优划分:{low, medium}和{high} Income属性的二元划分 {low, medium} {high} {low, high} {medium} {medium, high} {low}
比较 分裂准则 特点 偏向大量值的属性 偏向少量值的属性 偏向平衡的划分 偏向不平衡的划分 • 信息增益 • 增益率 • Gini指标 课堂小quiz:为左右两栏连线 答案:信息增益和Gini指标偏向大量值的属性 增益率偏向少量值的属性和不平衡的划分 Gini指标偏向平衡的划分
剪枝 • 过拟合 • 由于数据中的噪声和离群点,许多分支反映的是训练数据中的异常 • 测试数据是未观测到的,可能效果不好。 • 剪枝 • 先剪枝 • 例如,一旦发现分裂准则不满足预定义的阈值,则停止划分 • 后剪枝 • 完全生长树后检查 • 代价复杂度(CART) • 由底向上,如果某个内部节点的子树的树叶节点个数和树的错误率(误分类元组所占百分比)比剪去子树代价复杂度高,则剪枝 • 由叶子替换子树
age? <=30 overcast >40 31..40 student? credit rating? yes excellent fair no yes no yes no yes 由决策树提取分类规则 • 沿着树中由根节点到每个叶节点的路径,提取IF –Then 规则 • 由于决策树的分支是互斥和穷举的 • 互斥:没有两个规则被相同的元组所触发 • 穷举:所有属性值组合都存在一个对应规则 • 因此,规则的序不重要 课堂小quiz:提取该决策树的规则?
神经网络 • 原型:生物神经元之间的相互连接从而让信息传递的部位披称为突触(Synapse)。突触按其传递信息的不同机制,可分为化学突触和电突触、其中化学突触占大多数,其神经冲动传递借助于化学递质的作用。生物神经元的结构大致描述如下图所示。
bias x0 w0 x1 w1 f å output y xn wn Input vector x weight vector w weighted sum Activation function MP模型 • 神经元的形式化数学描述 • 多输出、单输入 • 兴奋和抑制 • 阈值特性(偏倚)
感知器模型 Output vector • 模拟神经网络 • 前馈网络 • 层间无反馈 Output layer Hidden layer wij Input layer Input vector: X
训练神经网络 • 后向传播算法 • 初始化权重和阈值(偏倚) • -1.0~1.0 • 向前传播输入 • 根据激励函数计算上一层的输出 • 作为下一层的输入 • 向后传播误差 • 对于输出层单元,误差=(真实值-输出值)x导数 • 对于隐藏层单元,误差=(反向连接误差加权和)x导数 • 更新权重和偏倚:+步长x误差x输出 • 重复直至收敛
后向传播更新算法 第一步:随机初始化 Logistic函数 1 1 第二步:向前传播 4 6 2 0 5 1 3 1 第三步:向后传播更新权重和偏倚,步长=0.9 节点6,误差0.474x(1-0.474)(1-0.474)=0.1311,更新权重 W46=--0.3+0.9x0.1311x0.332=-0.261 W56=-0.2+0.9x0.1311x0.525=-0.138 6=-0.4+0.9x-0.0087=-0.408 2. 节点5,误差=0.525x(1-0.525)x0.1311x-0.2=-0.0065
以上分类器的讨论 • 形状 • KNN:任意形状,线性 • 决策树:矩形 • ANN:任意形状,特别是非线性 • 增量学习 • KNN • 并行计算 • ANN • 计算开销 • 更复杂的情况 • 不平衡分类 • 多类分类 • 多标记分类
分类效果的评估 混淆矩阵: 课堂小quiz:癌症识别应该用什么评估指标? • 准确率:正确分类的元组百分比 Accuracy = (TP + TN)/All • 误差率:1 –accuracy,或者 Error rate = (FP + FN)/All • 精度:正确分类的正例占结果比率 Precision=TP/(TP+FP) • 召回率:发现的正例占正例比重 Recall=TP/(TP+FN) • F-score • 灵敏度: 正确识别的正例 • Sensitivity = TP/P • 特效性:正确识别的负例 • Specificity = TN/N