![数据挖掘与算法分析概述_第1页](http://file4.renrendoc.com/view/a09bbf2825b1fa56697ab44122fe0778/a09bbf2825b1fa56697ab44122fe07781.gif)
![数据挖掘与算法分析概述_第2页](http://file4.renrendoc.com/view/a09bbf2825b1fa56697ab44122fe0778/a09bbf2825b1fa56697ab44122fe07782.gif)
![数据挖掘与算法分析概述_第3页](http://file4.renrendoc.com/view/a09bbf2825b1fa56697ab44122fe0778/a09bbf2825b1fa56697ab44122fe07783.gif)
![数据挖掘与算法分析概述_第4页](http://file4.renrendoc.com/view/a09bbf2825b1fa56697ab44122fe0778/a09bbf2825b1fa56697ab44122fe07784.gif)
![数据挖掘与算法分析概述_第5页](http://file4.renrendoc.com/view/a09bbf2825b1fa56697ab44122fe0778/a09bbf2825b1fa56697ab44122fe07785.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据挖掘与算法分析概述技术创新,变革未来智慧IT目 录环境的安装与使用基本术语与线性回归数据挖掘经典算法介绍Python安装与使用推荐使用 Anaconda + PyCharm/distribution/pycharm/download/#section=windowsPython安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Pyth
2、on安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Pytho
3、n安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装Python安装与使用 Anaconda 安装基本术语信息数据知识价值记录、存储数据挖掘应用 通常我们把信息转化为价值,要经历信息、数据、知识、价值四个层面,数据挖掘就是中间的重要环节,是从数据中发现知识的过程。 数据挖掘可以视为机器学习和数
4、据库的交叉,它主要利用机器学习界提供的技术来分析海量数据,利用数据库界提供的技术来管理海量数据。基本术语数据挖掘的用途示例1(关联问题): 经常去超市的同学可能会发现,我们事先在购物清单上列举好的某些商品可能会被超市阿姨摆放在相邻的区域。例如, 面包柜台旁边会摆上黄油、面条柜台附近一定会有老干妈等等。这样的物品摆放会让我们的购物过程更加快捷、轻松。那么如何知道哪些物品该摆放在一块?又或者用户在购买某一个商品的情况下购买另一个商品的概率有多大?这就要利用关联数据挖掘的相关算法来解决。示例2(分类问题): 在嘈杂的广场上,身边人来人往。仔细观察他们的外貌、衣着、言行等我们会不自觉地断论这个人是新疆
5、人、东北人或者是上海人。又例如,在刚刚结束的2015NBA总决赛中,各类权威机构会大量分析骑士队与勇士队的历史数据从而得出骑士队或者勇士队是否会夺冠的结论。基本术语数据挖掘的用途示例3(聚类问题): ”物以类聚,人以群分“,生活中到处都有聚类问题的影子。假设银行拥有若干客户的历史消费记录,现在由于业务扩张需要新增几款面对不同人群的理财产品,那么如何才能准确的将不同的理财产品通过电话留言的方式推荐给不同的人群?这便是一个聚类问题,银行一般会将所有的用户进行聚类,有相似特征的用户属于同一个类别,最后将不同理财产品推荐给相应类别的客户。示例4(回归问题): 回归问题或者称作预测问题同样也是一个生活中
6、相当接地气的应用。大家知道,证券公司会利用历史数据对未来一段时间或者某一天的股票价格走势进行预测。同样,房地产商也会根据地域情况对不同面积楼层的房产进行定价预测。基本术语参考:机器学习,周志华,清华大学出版社编号色泽根蒂敲声1青绿蜷缩浊响2乌黑蜷缩浊响3青绿硬挺清脆4乌黑稍蜷沉闷数据记录的集合称为一个“数据集”。每条记录是关于一个事件或对象的描述,称为一个“示例”或“样本” 。反映事件或对象在某方面的表现或性质的事项,称为“属性”或“特征” 。属性组成的空间,称为“属性空间”或“样本空间”或“输入空间” 。属性上的取值,称为“属性值” 。关于西瓜的数据信息基本术语参考:机器学习,周志华,清华大
7、学出版社编号色泽根蒂敲声1青绿蜷缩浊响2乌黑蜷缩浊响3青绿硬挺清脆4乌黑稍蜷沉闷从数据中学得模型的过程称为“学习”或“训练”。训练过程中使用的数据称为“训练数据”,其中每一个样本称为一个“训练样本”,训练样本组成的集合称为“训练集” 。关于西瓜的数据信息基本术语参考:机器学习,周志华,清华大学出版社编号色泽根蒂敲声好瓜1青绿蜷缩浊响是2乌黑蜷缩浊响是3青绿硬挺清脆否4乌黑稍蜷沉闷否拥有标记信息的示例称为“样例”,所有标记的集合称为“输出空间”。若我们预测的是离散值,例如“好瓜”“坏瓜”,此类学习任务称为“分类”称为“分类” 。关于西瓜的数据信息若我们预测的是连续值,例如西瓜成熟度0.95、0.
8、37,此类学习任务称为 “回归” 。基本术语参考:机器学习,周志华,清华大学出版社编号色泽根蒂敲声好瓜1青绿蜷缩浊响是2乌黑蜷缩浊响是3青绿硬挺清脆否4乌黑稍蜷沉闷否101青绿硬挺清脆否102青绿硬挺浊响否关于西瓜的数据信息学得模型后,使用其进行预测的过程称为“测试”,被预测的样本称为“测试样本”,测试样本的集合称为“测试集”。训练集:测试集:学得模型适用于新样本的能力,称为“泛化”能力。验证集:验证集:是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。基本术语-公式化表述训练数据学习算法模型(映射函数)测试数据预测结果训练数据:编号色泽根蒂敲声好瓜1
9、青绿蜷缩浊响是2乌黑蜷缩浊响是3青绿硬挺清脆否4乌黑稍蜷沉闷否101青绿硬挺清脆否102青绿硬挺浊响否学习目标:基本术语-一个形象的比喻训练集验证集测试集数据集数据课后题模拟考高考课后题+模拟考+高考标签答案答案答案答案 训练集:学生的课本,也就是我们的课后题,学生根据课本里的内容来掌握知识。 验证集:模拟考,通过作业可以知道对模拟考的掌握情况怎么样,发现自己薄 弱部分。 测试集:高考,考的题是平常都没有见过,考察学生举一反三的能力。 数据集:课后题,模拟考,高考的总和。 样 本:所做的每一道题可以看做为一个样本。 标 签:题的答案可以看做标签。基本术语-一个形象的比喻为什么要测试集?训练集直
10、接参与了模型调参的过程,显然不能用来反映模型真实的能力(防止课本死记硬背的学生拥有最好的成绩,即防止过拟合)。验证集参与了人工调参(超参数)的过程,也不能用来最终评判一个模型(刷题库的学生不能算是学习好的学生)。所以要通过最终的考试(测试集)来考察一个学(模)生(型)真正的能力(进行高考作为最后测试)。为什么要验证集?开发模型时总是需要调节模型配置,比如选择层数或每层大小(这叫作模型的超参数)。这个调节过程需要使用模型在验证数据上的性能作为反馈信号。基本术语 监督学习:根据已有的数据集,知道输入和输出结果之间的关系。根据这种已知的关系,训练得到一个最优的模型。也就是说,在监督学习中训练数据既有
11、特征又有标签,通过训练,让机器可以自己找到特征和标签之间的联系,在面对只有特征没有标签的数据时,可以判断出标签。 无监督学习:我们不知道数据集中数据、特征之间的关系(即不知道标签),而是要根据聚类或一定的模型得到数据之间的关系。 半监督学习:一部分数据有标记,一部分数据没有标记。基本术语-机器学习的任务类型监督学习聚类,就是对大量的未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。无监督学习:分类回归分类就是向事物分配标签,聚类就是将相似的事物放在一起定量输出称为回归,或者说是连续变量预测;定性输出称为分类,或者说是离散变量预测。举个
12、例子:预测明天的气温是多少度,这是一个回归任务;预测明天是阴、晴还是雨,就是一个分类任务。最简单的监督学习-线性回归 回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归。Price ($) in 1000sSize in feet2 最简单的监督学习-线性回归 回归在数学上来说是给定一个点集,能够用一条曲线去拟合之,如果这个曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归。Price ($) in 1000sSize in feet2 模型参数最简单的监督学习-线性回归Size
13、 in feet2 (x)Price ($) in 1000s (y)210446014162321534315852178训练集模型表达式模型参数如何选择合适的?最简单的监督学习-线性回归 损失函数xy最简单的监督学习-线性回归 损失函数xy最简单的监督学习-线性回归 损失函数xy模型学习损失函数最小化最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法 梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)梯度的定义梯度的方向是函数增长最快的方向,梯度的反方向是降低最快的方向最
14、简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法梯度下降法损失函数:优化目标:优化步骤:随机初始化改变减小的值,直至达到极小值点最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法梯度下降法10J(0,1)最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法梯度下降法重复下述公式直到收敛学习率初始值?最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法梯度下降法(学习率的影响)学习率控制着学习的步长学习率太小收敛缓慢学习率太大可能导致震荡或收敛失败最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法梯度下降法(初始参数值的影响)01J(0,1
15、)梯度下降法寻找的是局部最优并不一定是全局最优最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题重复下述公式直到收敛梯度下降法线性回归模型最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题同时更新重复下述公式直到收敛最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题(for fixed , this is a function of x)(function of the parameters )最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法
16、解决线性回归问题(for fixed , this is a function of x)(function of the parameters )最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题(for fixed , this is a function of x)(function of the parameters )最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题(for fixed , this is a function of x)(function of the parameters )最简
17、单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题(for fixed , this is a function of x)(function of the parameters )最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题(for fixed , this is a function of x)(function of the parameters )最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题(for fixed , this is a function
18、of x)(function of the parameters )最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题(for fixed , this is a function of x)(function of the parameters )最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性回归问题(for fixed , this is a function of x)(function of the parameters )最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法利用梯度下降法解决线性
19、回归问题(for fixed , this is a function of x)(function of the parameters )最简单的监督学习-线性回归 损失函数最小值计算方法-梯度下降法随机批梯度下降法(处理大数据问题)重复下述公式直到收敛每次随机取一部分样本进行计算最简单的监督学习-线性回归 多元变量线性回归。误差越小越好?欠拟合正常过拟合过小的误差会导致模型出现过拟合。一元线性回归-实战 数据介绍某款产品在某个城市的销售利润与城市人口的数据如下:一元线性回归-实战 代码结构def loadDataSet(filename): 加载文件,将feature存在X中,y存在Y中
20、X = Y = with open(filename, rb) as f: for idx, line in enumerate(f): line = line.decode(utf-8).strip() if not line: continue eles = line.split() if idx = 0: numFeature = len(eles) eles = list(map(float, eles) # 将数据转换成float型 X.append(eles:-1) # 除最后一列都是feature,append(list) Y.append(eles-1) # 最后一列是实际值,
21、同上 return np.array(X), np.array(Y) # 将X,Y列表转化成矩阵加载数据一元线性回归-实战 代码结构定义模型函数def h(theta, X): 定义模型函数 return np.dot(X, theta) # 此时的X为处理后的X一元线性回归-实战 代码结构定义损失函数def J(theta, X, Y): 定义代价函数 m = len(X) return np.sum(np.dot(h(theta,X)-Y).T, (h(theta,X)-Y)/(2 * m)而即一元线性回归-实战 代码结构定义定义梯度下降公式def bgd(alpha, maxloop,
22、epsilon, X, Y): 定义梯度下降公式,其中alpha为学习率控制步长,maxloop为最大迭代次数,epsilon为阈值控制迭代(判断收敛) m, n = X.shape # m为样本数,n为特征数,在这里为2 theta = np.zeros(2, 1) # 初始化参数为零 count = 0 # 记录迭代次数 converged = False # 是否收敛标志 cost = np.inf # 初始化代价为无穷大 costs = # 记录每一次迭代的代价值 thetas = 0: theta0, 0, 1: theta1, 0 # 记录每一轮theta的更新 while cou
23、nt = maxloop: if converged: break # 同步更新theta count = count + 1 theta = theta - alpha / (1.0 * m) * np.dot(X.T, (h(theta, X) - Y) # 一起计算 thetas0.append(theta0) thetas1.append(theta1) cost = J(theta, X, Y) # 更新当前cost costs.append(cost) # 如果收敛,则不再迭代 if cost epsilon: converged = True return theta, cost
24、s, thetas一元线性回归-实战 代码结构X, Y = loadDataSet(./data/ex1.txt)m, n = X.shapeX = np.concatenate(np.ones(m,1), X), axis=1) # 将第一列为1的矩阵,与原X相连alpha = 0.02 # 学习率maxloop = 1500 # 最大迭代次数epsilon = 0.01 # 收敛判断条件result = bgd(alpha, maxloop, epsilon, X, Y)theta, costs, thetas = result # 最优参数保存在theta中,costs保存每次迭代的代价
25、值,thetas保存每次迭代更新的theta值# 到此,参数学习出来了,模型也就定下来了,若要预测新的实例,进行以下即可# Y_predict = h(theta, X_predict)# 以下为训练集的预测值XCopy = X.copy()XCopy.sort(0) # axis=0 表示列内排序yHat = h(theta, XCopy)# 绘制回归直线plt.xlabel(u城市人口(万)plt.ylabel(u利润(万元)plt.plot(XCopy:,1, yHat,color=r)plt.scatter(X:,1.flatten(), Y.T.flatten()plt.show()
26、一元线性回归-实战 代码结构利用sklearn机器学习库classsklearn.linear_model.LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=None) fit_intercept : 默认为True,是否计算该模型的截距。如果使用中心化的数据,可以考虑设置为False,不考虑截距。注意这里是考虑,一般还是要考虑截距normalize: 默认为false. 当fit_intercept设置为false的时候,这个参数会被自动忽略。如果为True,回归器会标准化输入参数:减去平均值,并且除
27、以相应的二范数。copy_X : 默认为True, 否则X会被改写n_jobs: int 默认为1. 当-1时默认使用全部CPUs一元线性回归-实战 代码结构利用sklearn机器学习库可用的methods: fit(X,y,sample_weight=None) X: array, 稀疏矩阵 n_samples,n_features y: array n_samples, n_targets sample_weight: 权重 array n_samples 根据数据学习参数get_params(self, deep=True)返回初始化设置的参数一元线性回归-实战 代码结构利用sklear
28、n机器学习库可用的methods: predict(self, X)score(self, X, y, sample_weight=None)source预测数据评估预测分数1 - u/vu= (y_true - y_pred) * 2).sum() v= (y_true - y_true.mean() * 2).sum()一元线性回归-实战 代码结构利用sklearn机器学习库属性: coef_ : array, shape (n_features, ) or (n_targets, n_features)intercept_ : array coef_ intercept_ 一元线性回归-
29、实战 代码结构利用sklearn机器学习库X, Y = loadDataSet(./data/ex1.txt)print(X.shape)print(Y.shape)reg = LinearRegression().fit(X, Y)print(reg.get_params()print(reg.coef_)print(ercept_)print(reg.predict(np.array(500)(97, 1)(97, 1)copy_X: True, fit_intercept: True, n_jobs: 1, normalize: False1.19303364-3.89578088592
30、.62104122多元线性回归-实战 数据介绍利用sklearn机器学习库根据面积和房间数预测房价100平米、两个房间的房价估价是多少?数据挖掘经典算法逻辑回归1PCA降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机K-均值聚类-简介 从无标签数据中组织数据的结构,从而对样本进行分组,是无监督学习的一种常用聚类方法。聚类示例将无标签的数据集分成两组输入数据不含任何标签将相似的样本划分为一个组K-均值聚类-简介原始数据集划分为2个簇划分为4个簇K-均值聚类-原理 K-means聚类算法流程可以分为四个步骤,需要注意几点:距离度量:欧氏距离、余弦相似度等质心计算:样
31、本均值第1步. 从数据中随机选择K个对象作为初始聚类中心;第2步.计算每个聚类对象到聚类中心的距离来划分K个簇;第3步.计算每个簇的质心作为新的聚类中心;第4步.重复步骤2、3,直到达到最大迭代次数,最后所有样本被分为K个簇。K-均值聚类-原理 K如何选择?K的选择一般是按照实际需求进行决定,或在实现算法时直接给定K值 。 距离度量给定样本 与,常用的距离度量有以下三种:闵可夫斯基距离(Minkowski distance):欧氏距离(Euclidean distance):曼哈顿距离(Manhattan distance):即当 p=2 时的闵可夫斯基距离即当 p=1 时的闵可夫斯基距离 更
32、新“簇中心”对于划分好的各个簇,计算各个簇中的样本点均值,将其均值作为新的簇中心。K-均值聚类-原理K-均值聚类-原理 K-均值算法缺点 K-均值算法由于初始“簇中心”点是随机选取的,因此最终求得的簇的划分与随机选取的“簇中心”有关,也就是说,可能会造成多种 k 个簇的划分情况。这是因为K-均值算法收敛到了局部最小值,而非全局最小值。K-均值聚类-实战 数据介绍按照每一个实例的相似度聚类成多个簇K-均值聚类-实战 代码结构def loadDataSet(filename): 读取数据集 Args: filename: 文件名 Returns: dataMat: 数据样本矩阵 dataMat =
33、 with open(filename, rb) as f: for line in f: # 读取的字节流需要先解码成utf-8再处理 eles = list(map(float, line.decode(utf-8).strip().split(t) dataMat.append(eles) return dataMatK-均值聚类-实战 代码结构def distEclud(vecA, vecB): 计算两向量的欧氏距离 Args: vecA: 向量A vecB: 向量B Returns: 欧式距离 return np.sqrt(np.sum(np.power(vecA-vecB,2)K-
34、均值聚类-实战 代码结构def randCent(dataSet, k): 随机生成k个聚类中心 Args: dataSet: 数据集 k: 簇数目 Returns: centroids: 聚类中心矩阵 m, _ = dataSet.shape # 随机从数据集中选几个作为初始聚类中心 centroids = dataSet.take(np.random.choice(80,k), axis=0) return centroidsK-均值聚类-实战 代码结构def kMeans(dataSet, k, maxIter=20): K-Means Args: dataSet: 数据集 k: 聚类数
35、 Returns: centroids: 聚类中心 clusterAssment: 点分配结果 # 随机初始化聚类中心 centroids = randCent(dataSet, k) init_centroids = centroids.copy() m, n = dataSet.shape # 点分配结果:第一列指明样本所在的簇,第二列指明 该样本到聚类中心的距离 clusterAssment = np.mat(np.zeros(m, 2) # 标识聚类中心是否仍在变化 clusterChanged = True # 直至聚类中心不再变化 iterCount = 0 while clust
36、erChanged and iterCount maxIter: iterCount += 1 clusterChanged = False # 分配样本到簇 for i in range(m): # 计算第i个样本到各个聚类中心的距离 minIndex = 0 minDist = np.inf for j in range(k): dist = distEclud(dataSeti, :, centroidsj, :) if dist array ptsInCluster = dataSetnp.nonzero(clusterAssment:, 0.A = cent)0 if ptsInCl
37、uster.shape0 0: # 计算均值并移动 centroidscent, : = np.mean(ptsInCluster, axis=0) return centroids, clusterAssment, init_centroidsK-均值聚类-实战 代码结构dataMat = np.mat(loadDataSet(data/testSet.txt)m, n = np.shape(dataMat)set_k = 4centroids, clusterAssment, init_centroids = kMeans(dataMat, set_k)clusterCount = np.
38、shape(centroids)0# 我们这里只设定了最多四个簇的样式,所以前面如果set_k设置超过了4,后面就会出现index errorpatterns = o, D, , scolors = b, g, y, blackfig = plt.figure()title = kmeans with k=.format(set_k)ax = fig.add_subplot(111, title=title)for k in range(clusterCount): # 绘制聚类中心 ax.scatter(centroidsk,0, centroidsk,1, color=r, marker=
39、+, linewidth=20) # 绘制初始聚类中心 ax.scatter(init_centroidsk,0, init_centroidsk,1, color=purple, marker=*, linewidth=10 ) for i in range(m): # 绘制属于该聚类中心的样本 ptsInCluster = dataMatnp.nonzero(clusterAssment:,0.A=k)0 ax.scatter(ptsInCluster:,0.flatten().A0, ptsInCluster:,1.flatten().A0, color=colorsk, marker=
40、patternsk)plt.show()K-均值聚类-实战 代码结构利用sklearn机器学习库classsklearn.cluster.KMeans(n_clusters=8,init=k-means+,n_init=10,max_iter=300,tol=0.0001,precompute_distances=auto,verbose=0,random_state=None,copy_x=True,n_jobs=None,algorithm=auto) KMeans类的主要参数有: 1) n_clusters: 即我们的k值,一般需要多试一些值以获得较好的聚类效果。 2)max_iter:
41、 最大的迭代次数。 3)n_init:用不同的初始化质心运行算法的次数。由于K-Means是结果受初始值影响的 局部最优的迭代算法,因此需要多跑几次以选择一个较好的聚类效果,默认是10,一般不需要改。如果你的k值较大,则可以适当增大这个值。 4)init: 即初始值选择的方式,可以为完全随机选择random,优化过的k-means+或者自己指定初始化的k个质心。一般建议使用默认的k-means+。 5)algorithm:有“auto”, “full” or “elkan”三种选择。“full”就是我们传统的K-Means算法, “elkan”是elkan K-Means算法。默认的auto则
42、会根据数据值是否是稀疏的,来决定如何选择full和“elkan”。一般数据是稠密的,那么就是 “elkan”,否则就是full”。一般来说建议直接用默认的autoK-均值聚类-实战 代码结构利用sklearn机器学习库fit(self, X)fit_predict(self, X) KMeans类的主要方法:对数据X聚类对数据X聚类且计算每一个样本点对应的类别索引predict(self, X)预测新输入的样本对应的最近的聚类中心X:ndarray数据类型K-均值聚类-实战 代码结构利用sklearn机器学习库import numpy as npimport matplotlib.pyplot
43、 as pltfrom sklearn.cluster import KMeansfrom sklearn.datasets import make_blobsplt.figure(figsize=(12, 12)n_samples = 1500random_state = 200X, y = make_blobs(n_samples=n_samples, random_state=random_state)# Incorrect number of clustersy_pred = KMeans(n_clusters=3, random_state=random_state).fit_pre
44、dict(X)plt.plot()plt.scatter(X:, 0, X:, 1, c=y_pred)plt.title(kmeans)plt.show()K-均值聚类-实战 代码结构利用sklearn机器学习库K-Means+ 由于 K-means 算法的分类结果会受到初始点的选取而有所区别,因此有提出这种算法的改进: K-means+ ,其实这个算法也只是对初始点的选择有改进而已,其他步骤都一样。初始质心选取的基本思路就是,初始的聚类中心之间的相互距离要尽可能的远。K-Means+ 数据集中共有8个样本,分布以及对应序号如右图所示: 聚类中心选取示例 假设经过步骤一后6号点被选择为第一个
45、初始聚类中心,那在进行步骤二时每个样本的D(x)和被选择为第二个聚类中心的概率如下表所示:K-Means+ 聚类中心选取示例 其中的P(x)就是每个样本被选为下一个聚类中心的概率。最后一行的Sum是概率P(x)的累加和,用于轮盘法选择出第二个聚类中心。方法是随机产生出一个01之间的随机数,判断它属于哪个区间,那么该区间对应的序号就是被选择出来的第二个聚类中心了。 例如1号点的区间为0,0.2),2号点的区间为0.2, 0.525)。 从上表可以直观的看到第二个初始聚类中心是1号,2号,3号,4号中的一个的概率为0.9。而这4个点正好是离第一个初始聚类中心6号点较远的四个点。 这也验证了K-me
46、ans的改进思想:即离当前已有聚类中心较远的点有更大的概率被选为下一个聚类中心。数据挖掘经典算法逻辑回归1PCA降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机PCA-简介 数据降维 在实际生产生活中,我们所获得的数据集在特征上往往具有很高的维度,对高维度的数据进行处理时消耗的时间很大,并且过多的特征变量也会妨碍查找规律的建立。如何在最大程度上保留数据集的信息量的前提下进行数据维度的降低,是我们需要解决的问题。 对数据进行降维有以下优点:(1)使得数据集更易使用 (2)降低很多算法的计算开销 (3)去除噪声 (4)使得结果易懂PCA-简介 数据降维如何降维可以保
47、留尽可能多的信息?PCA-简介数据降维 数据降维的优化目标就是:(1)对于 2 维降到 1 维:找到一个投影方向,使得投影误差和最小。(2)对于 n 维降到 k 维:找到 k 个向量定义的 k 维投影平面,使得投影 误差和最小。 那么投影误差又是什么呢? 投影误差即为,每一个样本点到投影向量或者投影平面的距离。 投影误差和即为所有样本点到投影向量或投影平面的距离的和。PCA-简介数据降维为什么将“投影误差和最小”作为优化目标?投影误差和 假设对于原样本中,位于第一象限的三个样本点属于类别“A”,位于第三象限的两个样本点属于类别“B”。经过投影后,仅左边可保留类别信息。PCA-简介 数据降维如何
48、寻找投影误差最小的方向? 寻找到方差最大的方向即可。方差最大与投影误差最小这两个优化目标其实本质上是一样的。希望投影后的投影值尽可能分散PCA-简介主成分分析(Principal Component Analysis, PCA)是最流行的降维算法,通过把数据从高维映射到低维来降低特征维度,同时保留尽可能多的信息。广泛应用于降维、有损数据压缩、特征提取、数据可视化等领域。是一种无监督的学习方式。 数据降维PCA-简介进行主成分分析有两个目的: 1. 在保留尽可能多的信息的前提下,降低维度。 2. 各样本在新的维度上,没有相关关系(线性)。 也就是不能根据一个维度的值就能大概推测(线性)另一个维度
49、的值。主成分分析第一条原则是新的变量要尽量分散,因为这样代表差异性大,蕴含了更多的信息。第二条原则是新的变量之间线性无关,这样就尽量消除了冗余信息。PCA-简介 PCA算法思路 PCA的算法思路主要是:数据从原来的坐标系转换到新的坐标系,由数据本身决定。转换坐标系时,以方差最大的方向作为坐标轴方向,因为数据的最大方差给出了数据的最重要的信息。第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选择的是与第一个新坐标轴正交且方差次大的方向。重复该过程,重复次数为原始数据的特征维数。PCA-深入分析 数学基础PCA-简介 PCA算法思路 有了前述两条原则以后,那应该具体怎样一步步实现?对
50、于分散程度的度量,我们知道,通常用方差表示。而对于相关性的度量,协方差是一个常见的度量方式。 所以,上述目标转换为: 每个新变量的方差尽量大,新变量之间的协方差为0。PCA-简介 PCA算法思路举个例子,有两个变量的矩阵A为:目标转换为: 协方差矩阵的对角线上元素尽量大,其它元素为0,也就是需要进行对角化。PCA-简介 PCA算法思路协方差矩阵是实对称矩阵,这里需要利用实对称矩阵的一个性质:nxn的实对称矩阵一定可以找到n个单位正交的特征向量,一定可以对角化,特征向量是进行对角化的转移矩阵,特征值组成对角矩阵。因此,问题转化为特征值分解,然后取较大的特征值。 对协方差矩阵进行特征值分解,特征值
51、从大到小排序组成新的协方差矩阵,对应的特征向量(单位正交基)就组成了转移矩阵Q。所以,转换后新的变量C=QA。PCA-简介 PCA算法思路完成变换以后,降维就很容易。新协方差矩阵对角线元素是方差,是包含信息量的度量,而对角线元素从大到小排列,所以只需取前k个变量(列)即可。k具体是多少,可以指定,也可以先计算所有方差的和S,如果前n个方差的和大于了95%*S,那么k就取n。PCA-深入分析 算法过程 缺点分析数据维度降低并不代表特征的减少,因为降维仍旧保留了较大的信息量,对结果过拟合问题并没有帮助。不能将降维算法当做解决过拟合问题方法。如果原始数据特征维度并不是很大,也并不需要进行降维。PCA
52、-实例 要求将二维数据降为1维 解决步骤因为这个矩阵的每行已经是零均值,这里我们直接求协方差矩阵:求解后特征值和特征向量为:PCA-实例 最后我们用P的第一行乘以数据矩阵,就得到了降维后的表示:降维投影结果如右图:标准化后的特征向量为:因此我们的矩阵P是:PCA-实战sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)n_components: int, float, None 或 string,PCA算法中所要保留的主成分个数,也即保留下来的特征个数,如果 n_components = 1,将把原始数据降到
53、一维;如果赋值为string,如n_components=mle,将自动选取特征个数,使得满足所要求的方差百分比;如果没有赋值,默认为None,特征个数不会改变(特征数据本身会改变)。copy:True 或False,默认为True,即是否需要将原始训练数据复制。whiten:True 或False,默认为False,即是否白化,使得每个特征具有相同的方差。PCA-实战 PCA对象的属性explained_variance_ratio_:返回所保留各个特征的方差百分比,如果n_components没有赋值,则所有特征都会返回一个数值且解释方差之和等于1。n_components_:返回所保留的
54、特征个数。PCA-实战 PCA常用方法fit(X): 用数据X来训练PCA模型。fit_transform(X):用X来训练PCA模型,同时返回降维后的数据。transform(X):将数据X转换成降维后的数据,当模型训练好后,对于新输入的数据,也可以用transform方法来降维。PCA-实战import numpy as npimport matplotlib.pyplot as pltfrom sklearn.decomposition import PCAX = np.array(-1, -1, -2, -1, -3, -2, 1, 1, 2, 1, 3, 2)#pca = PCA(n
55、_components=2)#newX = pca.fit_transform(X)print(X)#print(newX)#print(pca.explained_variance_ratio_)pca = PCA(n_components=1)newX = pca.fit_transform(X)print(newX)#print(pca.explained_variance_ratio_)plt.scatter(X:, 0, X:, 1,marker=o)plt.scatter(newX:, 0, newX:, 0*0,color=r)plt.show()数据挖掘经典算法逻辑回归1PCA
56、降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机K-近邻算法-简介 给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的 k 个实例,这 k 个实例的多数属于某个类,就把该输入实例分为这个类。 定义绿色点属于什么类别?当 k=3 时,结果见第一个圆环内,此时红色实例点为2个,蓝色实例点为1个,因此将未知点判定为红色类别。当 k=5 时,结果见第二个圆环内,此时红色实例点为2个,蓝色实例点为3个,因此将未知点判定为蓝色类别。K-近邻算法-分析 给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的 k 个实例,这 k 个实例的多数
57、属于某个类,就把该输入实例分为这个类。 定义回顾K-近邻算法的三大要素距离的度量:一般使用欧氏距离K值的选择:结果对k值敏感,一般通过交叉验证选择分类决策规则:投票法K-近邻算法-步骤输入:输出:输入训练数据K-近邻算法-优缺点分析 训练样本是否要一视同仁?在训练集中,有些样本可能是更值得依赖的。可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响。weight = 1 / (distance + const) 性能问题?KD树Ball树暴力匹配K-近邻算法-优缺点分析 优点 缺点精度高对异常值不敏感无数据输入假定计算复杂度高空间复杂度高样本不平衡时分类错误几率较高K-近
58、邻算法-实战class sklearn.neighbors.NearestNeighbors(n_neighbors=5, algorithm=auto, leaf_size=30, metric=minkowski, p=2, metric_params=None, n_jobs=None, *kwargs) K近邻算法n_neighbors : int, optional (default = 5) 邻居的个数algorithm : auto, ball_tree, kd_tree, brute, optional ball_tree BallTree kd_tree KDTree bru
59、te 暴力搜索. auto 根据数据自动选择leaf_size:使用BallTree 或 KDTree时需指定,影响计算速度,具体问题具体对待metric: 距离度量类型,cityblock, cosine, euclidean, l1, l2, manhattanP:闵式距离时的范数metric_params:自定义距离度量函数K-近邻算法-实战 K近邻算法fit(X) 学习KNN模型kneighbors(X) 寻找最近的K个点常用成员方法K-近邻算法-实战 K近邻算法from sklearn.neighbors import NearestNeighborsimport numpy as
60、np # 快速操作结构数组的工具X = np.array(-1, -1, -2, -1, -3, -2, 1, 1, 2, 1, 3, 2) # 样本数据test_x = np.array(-3.2, -2.1, -2.6, -1.3, 1.4, 1.0, 3.1, 2.6, 2.5, 1.0, -1.2, -1.3) # 设置测试数据# test_x=X # 测试数据等于样本数据。这样就相当于在样本数据内部查找每个样本的邻节点了。nbrs = NearestNeighbors(n_neighbors=2, algorithm=ball_tree).fit(X) # 为X生成knn模型dist
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论