机器学习实战

《机器学习实战》kNN学习笔记(二)

笑着哭i 提交于 2020-02-22 06:35:27
在约会网站上使用k-近邻算法 首先,把约会数据存放在文本文件datingTestSet中,样本主要包括以下三个特征 每年获得的飞行常客里程数 玩视频游戏所耗时间百分比 每周消耗的冰激凌公升数 在kNN.py中创建名为file2matrix的函数,以此来处理输入格式问题。该函数的输入为文件名字符串,输出为训练样本矩阵和类标签向量 def file2matrix(filename): # 打开文件 fr = open(filename) # 读取文件所有内容 arrayOlines = fr.readlines() # 得到文件行数 numberOfLines = len(arrayOlines) # 返回的NumPy矩阵numberOfLines行,3列 returnMat = np.zeros((numberOfLines, 3)) # 创建分类标签向量 classLabelVector = [] # 行的索引值 index = 0 # 读取每一行 for line in arrayOlines: # 去掉每一行首尾的空白符,例如'\n','\r','\t',' ' line = line.strip() # 将每一行内容根据'\t'符进行切片,本例中一共有4列 listFromLine = line.split('\t') # 将数据的前3列进行提取保存在returnMat矩阵中

《机器学习实战》笔记(六):Ch6 - 支持向量机

吃可爱长大的小学妹 提交于 2020-02-01 00:31:13
第六章 支持向量机([代码][ch06]) SVM算法优缺点 优点:泛化错误率低,计算开销不大,结果易解释。 缺点:对参数调节和和核函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。 范围:数值型和标称型数据。 SVM分类(Tip: 不讲非线性支持向量机) 线性支持向量机 求解线性支持向量机的过程是凸二次规划问题,所谓凸二次规划问题,就是目标函数是凸的二次可微函数,约束函数为仿射函数 (满足f(x)=a*x+b,a,x均为n为向量) 。而我们说求解凸二次规划问题可以利用对偶算法–即引入拉格朗日算子,利用拉格朗日对偶性将原始问题的最优解问题转化为拉格朗日对偶问题,这样就将求w*,b的原始问题的极小问题转化为求alpha*(alpha>=0)的对偶问题的极大问题,即求出alpha*,在通过KKT条件求出对应的参数w*,b,从而找到这样的间隔最大化超平面,进而利用该平面完成样本分类 近似线性支持向量机 - 当数据集并不是严格线性可分时,即满足绝不部分样本点是线性可分,存在极少部分异常点;这里也就是说存在部分样本不能满足约束条件,此时我们可以引入松弛因子,这样这些样本点到超平面的函数距离加上松弛因子,就能保证被超平面分隔开来;当然,添加了松弛因子sigma,我们也会添加对应的代价项,使得alpha满足0=<alpha<=C SMO算法 SMO是一种用于训练SVM的强大算法

《机器学习实战》笔记(七):Ch7 - 利用AdaBoost元算法提高分类性能

不想你离开。 提交于 2020-02-01 00:20:25
第七章 利用AdaBoost元算法提高分类性能([代码][ch07]) AdaBoost算法的优缺点 优点: 泛化错误率低,易编码,可以应用再大部分分类器上,无参数调整。 缺点: 对离群点敏感。 使用数据类型: 数值型和标称型数据。 bagging: 基于数据随机重抽样的分类器构造方法 在原始数据选择S次后得到S个数据集的一种技术。新数据集和原数据集的大小相等。每个数据集通过原始样本中随机替换得到的。 boosting 收集数据:可以使用任意方法。 准备数据:依赖于所使用的弱分类器类型,本章使用的是单层决策树,这种分类器可以处理任何数据类型。当然也可以使用任意分类器作为弱分类器,第2章到第6章中的任一分类器都可以充当弱分类器。作为弱分类器,简单分类器的效果更好。 分析数据:可以使用任意方法。 训练算法: Adaboost的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器。 测试算法:计算分类的错误率。 使用算法:同SVM一样, Adaboost预测两个类别中的一个。如果想把它应用到多个类次后别的场合,那么就要像多类SVM中的做法一样对。 训练算法: 基于错误提升分类器的性能 AbaBoost算法会不断得重复训练和调整权重的过程,直到悬链错误率为0或者弱分类器的数目达到用户的制定值为止。 基于单层决策树构建弱分类器 伪代码 将minError设置为无穷大

《机器学习实战》笔记(八):Ch8 - 预测数值型数据:回归

╄→尐↘猪︶ㄣ 提交于 2020-02-01 00:08:36
第八章 预测数值型数据: 回归([代码][ch08]) 线性回归算法的优缺点 优点:结果容易理解,计算上下不复杂 缺点:对非线性问题数据处理不好. 使用数据类型:数值型和标称型数据. 回归方程 回归方程(regression equation),回归系数(regression weights),求回归系数的过程就是回归。说到回归,一般都是指线性回归(linear regression),还存在非线性回归模型。 局部加权线性回归 线性回归会出现欠拟合现象,因为它求的是最小均方误差的无偏估计。可以在估计中引入一些偏差,从而降低预测的均方误差。其中一个方法是局部加权线性回归(Locally Weighted Linear Regression,LWLR),该算法中给待测点附近的每个点赋予一定的权重,然后在这个子集上基于最小均方差来进行普通的回归。与kNN一样,此算法每次预测均需事先选取出对应的数据子集 缩减系数“理解”数据 若数据的特征比样本点还多,在计算(XTX)−1的时候会出错,也就是输入数据的矩阵X不是满秩矩阵,非满秩矩阵在求逆是会出现问题。接下来介绍两种方法来解决这个问题:岭回归(ridge regression)与前向逐步回归(Forward stepwise regression),其中前向逐步回归与lasso法效果差不多。 lasso 是一种压缩估计

《机器学习实战》笔记(九):Ch9 - 树回归

烈酒焚心 提交于 2020-01-31 23:57:56
第九章 树回归([代码][ch09]) 树回归算法的优缺点 优点:可以对复杂和非线性的问题建模. 缺点:结果不容易理解. 适用数据类型:数值型和标称型. 树回归和分类树的思路类似,且方法如下 收集数据 采用任意方法收集数据. 准备数据 需要数值型的数据,标称型数据应该映射成为二值型数据. 分析数据 汇出数据的二维可视化显示结果,以字典方式生成树 训练算法 大部分时间都花费在叶节点树模型的构建上. 测试算法 使用测试数据上的R*R值来分析模型的效果. 使用算法 使用训练出的树做预测,预测结果还可以来做很多事情. 连续和离散型特征的树的构建 在树的构建过程中,需要使用到字典,该字典包含以下4个元素 带切分的特征 待切分的特征值 右子树 左子树 构建树的伪代码 找到最佳的待切分特征 如果该节点不能再分,将该节点存为叶节点 执行二元切分 在右子树调用方法 在左子树调用方法 将CART算法用于回归 在构建树种新增伪代码 对每个特征 对每个特征值 将数据切成两份 计算切分的误差 如果当前误差小于当前最小误差,那么将切分设定为最佳切分并且更新最小误差 树剪枝 一棵树如果节点过多,就会出现“过拟合” 通过降低决策树的复杂度来避免过拟合的过程称为剪枝 预剪枝方法 定义一个高度,当决策树达到该高度的时候就停止决策树的增长 达到某个节点的实例具有相同的特征向量,即使这些实例不属于同一类

《机器学习实战》笔记(十):Ch10 - 利用k-均值聚类算法对未标注数据分组

浪尽此生 提交于 2020-01-31 23:47:21
第10章 K-均值聚类算法([代码][ch10]) K-均值算法的优缺点 K-均值是发现给定数据集的 K 个簇的聚类算法, 之所以称之为 K-均值 是因为它可以发现 K 个不同的簇, 且每个簇的中心采用簇中所含值的均值计算而成. 簇个数 K 是用户指定的, 每一个簇通过其质心(centroid), 即簇中所有点的中心来描述. 聚类与分类算法的最大区别在于, 分类的目标类别已知, 而聚类的目标类别是未知的. 优点:容易实现 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢 使用数据类型 : 数值型数据 K-均值聚类算法 伪代码 创建 k 个点作为起始质心(通常是随机选择) 当任意一个点的簇分配结果发生改变时(不改变时算法结束) 对数据集中的每个数据点 对每个质心 计算质心与数据点之间的距离 将数据点分配到距其最近的簇 对每一个簇, 计算簇中所有点的均值并将均值作为质心 开发流程 收集数据:使用任意方法 准备数据:需要数值型数据类计算距离, 也可以将标称型数据映射为二值型数据再用于距离计算 分析数据:使用任意方法 训练算法:不适用于无监督学习,即无监督学习不需要训练步骤 测试算法:应用聚类算法、观察结果.可以使用量化的误差指标如误差平方和(后面会介绍)来评价算法的结果. 使用算法:可以用于所希望的任何应用.通常情况下, 簇质心可以代表整个簇的数据来做出决策. K-均值 的评价标准

《机器学习实战》笔记(十一):Ch11 - 使用Apripri算法进行关联分析

妖精的绣舞 提交于 2020-01-31 23:16:27
第11章 使用Apriori算法进行关联分析([代码][ch11]) 关联分析 关联分析是一种在大规模数据集中寻找有趣关系的任务。这些关系可以有两种形式: 频繁项集(frequent item sets): 经常出现在一块的物品的集合。 关联规则(associational rules): 暗示两种物品之间可能存在很强的关系。 交易号码 商品 0 豆奶草莓 1 草莓,尿布,啤酒,辣椒酱 2 豆奶,尿布,黄瓜,饼干 3 黄瓜,饼干,尿布,啤酒 4 黄瓜,啤酒,尿布,黄瓜 频繁项集指的就是那些经常一起出现的物品集合,比如{啤酒,尿布,饼干}就是频繁项集中的一个例子,而根据上表也可以找到尿布->啤酒这样的关联规则。而我们是要通过关联分析大规模数据从而发现数据之间存在的有趣关系,那么问题来了,什么样的关系是有趣的呢?而这个有趣又是怎么定义的呢?我们可以通过支持度(support)和可信度(置信度confidence)来定义。一个项集的支持度指的是数据集中包含该项集记录所占的比例,上例中{豆奶}的支持度是2/5, {啤酒,尿布}的支持度是3/5;可信度是针对于像{尿布}->{啤酒}这样的关联规则来定义的,定义为:支持度({尿布,葡萄酒})/支持度(尿布). Apriori 原理 Apriori算法优缺点 优点:易编码实现 缺点:在大数据集上可能较慢 适用数据类型:数值型 或者 标称型数据。

《机器学习实战》笔记(十二):Ch12 - 使用FP-growth算法来高效发现频繁项集

↘锁芯ラ 提交于 2020-01-31 22:52:45
第12章 使用FP-growth算法来高效发现频繁项集([代码][ch12]) FP 优点 因为 FP-growth 算法只需要对数据集遍历两次,所以速度更快。 FP树将集合按照支持度降序排序,不同路径如果有相同前缀路径共用存储空间,使得数据得到了压缩。 不需要生成候选集。 比Apriori更快。 缺点 FP-Tree第二次遍历会存储很多中间过程的值,会占用很多内存。 构建FP-Tree是比较昂贵的。 适用数据类型 标称型数据(离散型数据)。 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模式树算法,他与Apriori算法一样也是用来挖掘频繁项集的,不过不同的是,FP-Tree算法是Apriori算法的优化处理,他解决了Apriori算法在过程中会产生大量的候选集的问题,而FP-Tree算法则是发现频繁模式而不产生候选集。但是频繁模式挖掘出来后,产生关联规则的步骤还是和Apriori是一样的。 创建FP树步骤 创建根节点,用NULL标记。 统计所有的事务数据,统计事务中各个类型项的总支持度(在下面的例子中就是各个商品ID的总个数) 依次读取每条事务,比如T1, 1, 2, 5,因为按照总支持度计数数量降序排列,输入的数据顺序就是2, 1, 5,然后挂到根节点上。 -依次读取后面的事务,并以同样的方式加入的FP树中,顺着根节点路径添加

《机器学习实战》笔记(十三):Ch13 - 利用PCA来简化数据

旧城冷巷雨未停 提交于 2020-01-31 22:35:34
第13章 利用PCA来简化数据([代码][ch13]) 降维技术 降维的意思是能够用一组个数为d的向量zi来代表个数为D的向量xi所包含的有用信息,其中d<D。假设对一张512 512大小的图片,用svm来做分类,最直接的做法是将图按照行或者列展开变成长度为512 512的输入向量xi,跟svm的参数相乘。假如能够将512 512的向量在保留有用信息的情况下降维到100,那么存储输入和参数的空间会减少很多,计算向量乘法的时间也会减少很多。所以降维能够有效的减少计算时间。而高维空间的数据很有可能出现分布稀疏的情况,即100个样本在100维空间分布肯定是非常稀疏的,每增加一维所需的样本个数呈指数级增长,这种在高维空间中样本稀疏的问题被称为维数灾难。降维可以缓解这种问题。而为什么可以降维,这是因为数据有冗余,要么是一些没有用的信息,要么是一些重复表达的信息,例如一张512 512的图只有中心100*100的区域内有非0值,剩下的区域就是没有用的信息,又或者一张图是成中心对称的,那么对称的部分信息就重复了。正确降维后的数据一般保留了原始数据的大部分的重要信息,它完全可以替代输入去做一些其他的工作,从而很大程度上可以减少计算量。例如降到二维或者三维来可视化。 原因 使的数据更加简单易用 降低很多算法的开销 去除噪声 使的结果变得非常易懂 从什么角度出发来降维

《机器学习实战》笔记(一):Ch1 - 机器学习基础

不想你离开。 提交于 2020-01-31 17:46:54
第一章 机器学习基础([代码][ch01] 熟悉 Python 即可。 开发机器学习应用程序步骤 1.收集数据。 2.准备输入数据。 3.分析输入数据。 4.训练算法。 5.测试算法。 6.使用算法。 掌握 numpy 函数库基础 >> from numpy import * 代码托管见Github [ch01]:https://github.com/Lornatang/machine_learning_in_action_py3/tree/master/src/ch01 来源: CSDN 作者: lornatang 链接: https://blog.csdn.net/shiyipaisizuo/article/details/80371490