机器学习相关知识总结.pdfVIP

  • 16
  • 0
  • 约2.71万字
  • 约 55页
  • 2020-11-01 发布于江西
  • 举报
1 KNN 概述 KNN 算法其实简单的说就是 “物以类聚”,也就是将新的没有被分类的点分类为周围的点中大多 数属于的类。它采用测量不同特征值之间的距离方法进行分类,思想很简单:如果一个样本的特征空 间中最为临近(欧式距离进行判断)的K个点大都属于某一个类,那么该样本就属于这个类。这就是 物以类聚的思想。 当然,实际中,不同的K取值会影响到分类效果,并且在K个临近点的选择中,都不加意外的认 为这K个点都是已经分类好的了,否则该算法也就失去了物以类聚的意义了。 KNN算法的不足点: 1) 当样本不平衡时,比如一个类的样本容量很大,其他类的样本容量很小,输入一个样本的时候, K 个临近值中大多数都是大样本容量的那个类,这时可能就会导致分类错误。改进方法是对 K 临近点进行加权,也就是距离近的点的权值大,距离远的点权值小。 2) 计算量较大,每个待分类的样本都要计算它到全部点的距离,根据距离排序才能求得 K个临近 点,改进方法是:先对已知样本点进行剪辑,事先去除对分类作用不大的样本。 适用性: 适用于样本容量比较大的类域的自动分类,而样本容量较小的类域则容易误分 算法描述: 1) 计算已知类别数据集合汇总的点与当前点的距离 2) 按照距离递增次序排序 3) 选取与当前点距离最近的 K个点 4) 确定距离最近的前 K个点所在类别的出现频率 5) 返回距离最近的前 K个点中频率最高的类别作为当前点的预测分类 Python 实现 Knn.txt 调用方式:knn_main.txt Matlab 实现 代码: KNN .m 可以看到,整个 KNN算法的 Matlab代码也就只有 6行,比 Python少很多,这其中要得益于 Matlab成熟的矩阵计算和很多成熟的函数。 实际调用中,我们利用一个数据集进行测试,该数据集是由1000个样本的3维坐标组成,共分 为3个类 首先可视化我们的数据集,看看它的分布: 第一维和第二维:可以清晰地看到数据大致上分为 3 类 1维和 3维:从这个角度看,3类的分布就有点重叠了,这是因为我们的视角原因 画出3维,看看它的庐山真面目: 由于我们已经编写了 KNN 代码,接下来我们只需调用就行。了解过机器学习的人都应该知道, 很多样本数据在代入算法之前都应该进行归一化,这里我们将数据归一化在 [0,1]的区间内,归一化方 式如下: newData = (oldData-minValue)/(maxValue-minValue) 其中,maxValue 为 oldData 的最大值,minValue 为 oldData 的最小值。 同时,我们对于 1000 个数据集,采取 10%的数据进行测试,90%的数据进行训练的方式,由于 本测试数据之间完全独立,可以随机抽取 10%的数据作为测试数据,代码如下: KNNdatgingTest.m 当我们选择 K 为 4 的时候,准确率为:97% KNN进阶 接下来我们将运用 KNN 算法实现一个手写识别系统,训练数据集大约 2000 个样本,每个数字 大概有 200 个样本 测试数据大概有 900个样本,由于每个样本都是一个 32x32 的数字,我们将其转换为 1x1024 的矩阵,方便我们利用KNN算法 数据如下: 由于数据量比较大,加载数据的时候回花一点时间,具体代码如下: handWritingTest.M 不同的 K识别准确率稍有不同,当 K为4的时候,准确率为 98.31% 2决策树 简介 决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表 示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点 所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以 处理不同输出。 数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来 作预测 基本思想 1)树以代表训练样本的单个结点开始。 2)如果样本都在同一个类.则该结点成为树叶,并用该类标记。 3)否则,算法选择最有分类能力的属性作为决策树的当前结点. 4 )根据当前决策结点属性取值的不同,将训练样本数据集tlI分为若干子集,每个取值形成一个 分枝,有几个取值形成几个分枝。匀针对上一步得到的一个子集,重复进

文档评论(0)

1亿VIP精品文档

相关文档