一、实验目标
《数据挖掘》课程是一门专业主干课,本课程实验的主要目的是使学生通过实验加深对数据挖掘流程和数据挖掘算法原理的理解,以提高学生的学习兴趣和实践动手能力。
二、实验对象
本实验开设对象为 19大数据本科 专业学生,本课程为必修课程。
三、课程简介
数据挖掘实验课程是大数据专业的核心课程之一。通过本课程的学习和实验,使学生掌握数据挖掘原理及应用,学会将传统的数据分析方法与用于处理大量数据的复杂算法相结合,利用数据库关联技术和大量以机器学习为基础的数据分析技术,为数据库中的知识发现提供有效支撑。
通过本课程的学习,可了解数据挖掘的基本概念和主要思想,掌握典型的机器学习算法以及利用python实现数据挖掘与机器学习的过程。
四、实验内容
编号 |
实验内容 |
课时 |
实验类型 |
完成情况 |
1 |
Python数据预处理 |
2 |
必修 |
实验报告 |
2 |
线性回归分析 |
2 |
必修 |
实验报告 |
3 |
逻辑回归分析 |
2 |
必修 |
实验报告 |
4 |
关联分析 |
2 |
必修 |
实验报告 |
5 |
分类分析 |
2 |
必修 |
实验报告 |
6 |
文本分类分析 |
2 |
必修 |
实验报告 |
7 |
聚类分析 |
2 |
必修 |
实验报告 |
8 |
据挖掘综合案例分析 |
2 |
必修 |
实验报告 |
五、实验条件
硬件: 微型计算机、常用网络设备
软件: Windows 7 操作系统、python、anaconda等
六、成绩评定办法
1.实验成绩的评定
成绩的评定依据两个方面:考勤成绩和考核成绩,前者占总评的30%,后者占总成绩的70%。
考勤内容包括:是否按时到场;是否按进度要求完成任务;是否认真填写实验日记;是否保持实验设备完好无损等。
2.考核办法
要求学生独立完成任务,并结合学生的动手能力,独立分析问题、解决问题的能力和创新精神,成绩分优、良、中、及格和不及格五等。其中,各等级的评判标准为:
⑴优秀标准:能独立完成课题要求;能正确回答老师的提问;平时表现好,认真编写实验报告。
⑵良好标准:能完成课题要求;基本上能正确回答老师的提问;平时表现较好,认真编写实验报告。
⑶中等标准:基本上能完成课题要求;基本能正确回答老师的提问;平时表现较好,能编写实验报告。
⑷及格标准:能完成课题的主要要求;平时表现较好,能编写实验报告。
⑸不及格标准:上课不认真,缺课迟到多,不能完成课题要求;不认真填写实验、不上交实验报告。
一、数据挖掘的基本概念
数据挖掘(Data Mining)是人工智能和数据库领域研究的热点问题,是指从大量有噪声的、不完全的、模糊和随机的数据中,提取出隐含在其中的、事先不知道但具有潜在利用价值的信息的过程。
这个定义包括几层含义:数据必须是真实的、大量的并且含有噪声的;发现的是用户感兴趣的可以接受、理解和运用的知识;仅支持特定的问题,并不要求放之四海而皆准的知识。
数据挖掘--从大量数据中寻找其规律的技术,是统计学、数据库技术和人工智能技术的综合。
二、数据挖掘的基本框架及流程
(1)数据挖掘的基本框架
1.数据集选取
一般数据集是已经存在的或者至少知道如何获得的(访问某个资料库,网上过滤抓取需要的数据,问卷调查手动收集等)。数据集的选取对数据挖掘模式是否有趣起决定作用。一般的数据挖掘模式有频繁模式,用于预测分析的分类和回归模式,聚类分析模式等,代表着数据挖掘的某种目的
2.数据预处理
(1)数据清理
(2)数据集成
(3)数据归约
(4)数据变换和数据离散化
3.数据分析算法
最经典的莫过于频繁模式挖掘了,对象为事物出现的次数。如著名的啤酒尿布。其中最典型的算法为Apriori算法,包括连接和剪枝。其中有置信度,支持度,频繁项集最小置信度阈值等重要概念,到相关分析中还有提升度,全置信度,Kulczy和余弦等判断标准和零不变度量考虑。
数据挖掘不仅仅用于挖掘频繁模式之间的联系,还常常用来分类和聚类。
分类的一般过程为用分类算法分析训练数据,然后用检验数据评估分类规则的准确率。常用的分类准则有决策树归纳、属性选择度量、树剪枝等,具体的常见算法有朴素贝叶斯(前提属性之间相互独立),贝叶斯信念网络,k-最近邻分类,遗传算法,神经网络,模糊集方法等。
聚类是无监督学习。聚类的常见划分方法有k-均值和k-中心点,都是基于抽象距离的(实际度量为密度,网格等)。还有比较高级版本的,例如基于概率的。聚类中有很多重要的概念,如划分准则,簇的离散型,相似性度量,聚类空间。聚类其实就是自己按照一定的理解尝试去定制标准进行分类,然后检验自己的标准(尤其是离群点)。
4.分析总结改进
(2)数据挖掘流程
第一步,对数据的了解和可视化
1、几行几列,有多少个特征,多少样本
2、是否有缺失值,看看缺失值的情况
3、看数据类型,是否有一些字符型数据,因为后续的模型需要用到的是数值型数据。
4、对数据做个可视化,看看数据长什么样
第二步,对目标的了解以及对数据的初步处理
1、对数据挖掘的目标要有所理解,通过理解,可以进行这一步的主要分析
2、缺失值:通过对数据以及目标的理解,看看 a、是否可以直接删除该缺失数据 b、如果不能删除,用什么样的方法填充它比较好,常见的有均值,中位数,或者拉格朗日法,牛顿法等填充。这个填充要基于对数据的了解,才方便自己选择具体方法进行处理,例如你的数据可能是由于低于某些仪器的检测下限所造成缺失的,那么可以用0来填充。
3、异常值:看数据是否处于异常,可以用 3σ原则,PCA,箱线图等等,至于是否要处理也要看建模的目标对于异常值的考虑。
第三步,数据预处理
主要是对数据进行归一化,标准化,字符型数据转化成数值性数据,包括min-max,z-score, one-hot
第四步,特征工程
经历了数据的预处理之后,接下去就是进行特征工程了,特征工程顾名思义就是对数据里面的特征进行一个操作,选择后续可以提高模型效果的特征。
1、相关性分析,选择一些与目标强相关性的特征
2、递归法,一开始,可以让所有特征进入模型,之后利用模型选择出来的important_feature得到重要特征,再选择top n的特征(n由自己选择)进入模型训练
3、还有其他一些方法(后续补充)
第五步,建立模型
在进行特征工程之后,我们一般会建立2-3个模型,来比较这几个模型在这个任务上哪个模型更好。
例如:分类模型:KNN、贝叶斯分类、决策树、随机森林、SVM、逻辑回归。。。
回归模型:简单线性回归、多重线性回归、一元非线性回归、lasso回归、岭回归。。。
聚类模型:k-means、DBSCAN密度法、层次聚类法。。。
那么一般这些模型都可以直接使用sklearn中对应的模型。
第六步,模型优化
选择好模型之后,对于模型性能的进一步优化也是非常重要的,
模型的参数优化:网格搜索、随机搜索,选择最优的模型参数
k-折交叉验证,避免过拟合
模型评价:一般模型评价有准确率(分类模型),或者RMSE,R2(回归模型)等,当然也有F1-score(分类问题里面数据不平衡情况)等。
Python是一种功能强大的、开源的、解释性、面向对象计算机编程语言,内建有各种高级数据结构,支持模块和包,支持多种平台并可扩展。Python语言简洁、易学习、易阅读,并在数据统计、机器学习方面得到广泛应用,是人工智能研究领域中一个非常重要的工具。
Jupyter Notebook(Julia+Python+R = Jupyter)基于Web技术的交互式计算文档格式,支持Markdown和Latex语法,支持代码运行、文本输入、数学公式编辑、内嵌式画图和其他如图片文件的插入,是一个对代码友好的交互式笔记本。
conda:一个工具,用于包管理和环境管理,其中:包管理与pip类似,管理python第三方;环境管理能够允许用户使用不同版本的Python,并能灵活切换
Win+R:运行CMD命令;
conda –V:显示python版本,说明环境变量设置成功;
conda upgrade -all :先把所有工具包进行升级
包的安装和卸载:
conda install xxx #xxx为包名
conda remove xxx
pip install xxx
pip uninstall xxx
一、实验目的
1.掌握数据预处理的方法、基本流程及代码实现。
2.掌握数据清洗的方法及代码实现。
3.掌握缺失值、异常值的处理及数据编码。
4.掌握数据变换及数据离散化的原理、方法及代码实现。
二、实验设备
硬件: 微型计算机、常用网络设备
软件: Windows 7 操作系统、python、anaconda等
三、相关准备知识
一、数据预处理简介
数据预处理是从数据中检测,纠正或删除损坏、不准确或不适用于模型的记录过程
可能面对的问题有:数据类型不同,比如有的是文字,有的是数字,有的含时间序列,数据质量不行
有噪声、有异常、有缺失、数据出错,量纲不一,有重复
数据预处理的目的:让数据适应模型,匹配模型的需求。
二、数据预处理方法
1. 去除唯一属性
唯一属性通常是一些id属性,这些属性并不能刻画样本自身的分布规律,所以简单地删除这些属性即可。
2. 处理缺失值
缺失值处理的三种方法:①删除含有缺失值的数据;②删除含有缺失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的);③缺失值补全。
常见的缺失值补全方法:均值插补、同类均值插补、建模预测、高维映射、多重插补、极大似然估计、压缩感知和矩阵补全。
(1)均值插补
如果样本属性的距离是可度量的,则使用该属性有效值的平均值来插补缺失的值;
如果的距离是不可度量的,则使用该属性有效值的众数来插补缺失的值。
(2)同类均值插补
首先将样本进行分类,然后以该类中样本的均值来插补缺失值。
(3)建模预测
将缺失的属性作为预测目标来预测,将数据集按照是否含有特定属性的缺失值分为两类,利用现有的机器学习算法对待预测数据集的缺失值进行预测。
该方法的根本的缺陷是如果其他属性和缺失属性无关,则预测的结果毫无意义;但是若预测结果相当准确,则说明这个缺失属性是没必要纳入数据集中的;一般的情况是介于两者之间。
(4)高维映射
将属性映射到高维空间,采用独热码编码(one-hot)技术。将包含K个离散取值范围的属性值扩展为K+1个属性值,若该属性值缺失,则扩展后的第K+1个属性值置为1。
这种做法是最精确的做法,保留了所有的信息,也未添加任何额外信息,若预处理时把所有的变量都这样处理,会大大增加数据的维度。这样做的好处是完整保留了原始数据的全部信息、不用考虑缺失值;缺点是计算量大大提升,且只有在样本量非常大的时候效果才好。
(5)多重插补(MultipleImputation,MI)
多重插补认为待插补的值是随机的,实践上通常是估计出待插补的值,再加上不同的噪声,形成多组可选插补值,根据某种选择依据,选取最合适的插补值。
3. 特征编码
(1)特征二元化
特征二元化的过程是将数值型的属性转换为布尔值的属性,设定一个阈值作为划分属性值为0和1的分隔点。
(2)独热编码(One-HotEncoding)
独热编码采用N位状态寄存器来对N个可能的取值进行编码,每个状态都由独立的寄存器来表示,并且在任意时刻只有其中一位有效。
独热编码的优点:能够处理非数值属性;在一定程度上扩充了特征;编码后的属性是稀疏的,存在大量的零元分量。
4. 数据标准化、正则化
数据标准化是将样本的属性缩放到某个指定的范围。
数据标准化的原因:某些算法要求样本具有零均值和单位方差;需要消除样本不同属性具有不同量级时的影响:①数量级的差异将导致量级较大的属性占据主导地位;②数量级的差异将导致迭代收敛速度减慢;③依赖于样本距离的算法对于数据的数量级非常敏感。
min-max标准化(归一化):对于每个属性,设minA和maxA分别为属性A的最小值和最大值,将A的一个原始值x通过min-max标准化映射成在区间[0,1]中的值x',其公式为:新数据=(原数据 - 最小值)/(最大值 - 最小值)
z-score标准化(规范化):基于原始数据的均值(mean)和标准差(standarddeviation)进行数据的标准化。将A的原始值x使用z-score标准化到x'。z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。新数据=(原数据- 均值)/ 标准差
均值和标准差都是在样本集上定义的,而不是在单个样本上定义的。标准化是针对某个属性的,需要用到所有样本在该属性上的值。
正则化:数据正则化是将样本的某个范数(如L1范数)缩放到到位1,正则化的过程是针对单个样本的,对于每个样本将样本缩放到单位范数。
5. 特征选择(降维)
从给定的特征集合中选出相关特征子集的过程称为特征选择。
进行特征选择的两个主要原因是:减轻维数灾难问题;降低学习任务的难度。
进行特征选择必须确保不丢失重要特征。
常见的特征选择类型分为三类:过滤式(filter)、包裹式(wrapper)、嵌入式(embedding)。
过滤式选择:该方法先对数据集进行特征选择,然后再训练学习器。特征选择过程与后续学习器无关。Relief是一种著名的过滤式特征选择方法。
包裹式选择:该方法直接把最终将要使用的学习器的性能作为特征子集的评价原则。其优点是直接针对特定学习器进行优化,因此通常包裹式特征选择比过滤式特征选择更好,缺点是由于特征选择过程需要多次训练学习器,故计算开销要比过滤式特征选择要大得多。
嵌入式选择
常见的降维方法:SVD、PCA、LDA
四、实验步骤
1.导入数据预处理相关的包
2.准备好数据并读取数据
3.初步探索数据
4.简单数据处理
5.重复值的处理
6.异常值的处理
对于建模来说,通常会删掉异常值
但是对于业务来说,异常值中可能包含有更多的价值
7.缺失值的处理
df.isnull() #查看缺失值
df.notnull() #查看不是缺失值的数据
df.dropna() #删除缺失值
df.fillna() #填补缺失值
8.对特征进行编码
9.对数据进行标准化或者归一化
五、实验要求
1.对数据进行观察,学会分析数据的特点及异常情况。
4.要求掌握数据预处理各流程的分析过程及代码实现。
六、拓展分析及思考
1.如何针对不同的数据进行分析探索,发现存在的问题及规律
一、实验目的
1、理解线性回归算法的原理
2、掌握回归问题的开发流程
3、掌握使用python实现线性回归模型
二、实验设备
硬件: 微型计算机、常用网络设备
软件: Windows 7 操作系统、python、anaconda等
三、相关准备知识
在生活中存在很多相互制约又相互依赖的关系,这些关系主要有确定关系和非确定关系。
确定关系指变量之间存在明确的函数关系,如圆的周长与半径之间的关系。
非确定关系指各变量之间虽然有制约依赖关系,但无法用确定的函数表达式来表示,如人的血压与体重之间存在密切关系,但无法找到一个能准确表达其关系的函数,变量之间存在的这种非确定性关系,称为相对关系。
事实上,有一些确定关系,由于测量误差的影响,也经常表现出某种程度的不确定性。
对于不确定的关系,通过大量观测数值,可以发现其中变量间存在的统计规律。通过回归分析,可以表明自变量和因变量之间的显著关系或者表明多个自变量对一个因变量的影响强度。
回归问题在形式上与分类问题十分相似,但是在分类问题中预测值y是一个离散变量,它代表通过特征x所预测出来的类别;而在回归问题中,y是一个连续变量。
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。例如,司机的鲁莽驾驶与道路交通事故数量之间的关系,最好的研究方法就是回归。
它表明自变量和因变量之间的显著关系;
它表明多个自变量对一个因变量的影响强度
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。
具体来说,回归分析法指利用数据统计原理,对大量统计数据进行数学处理,并确定因变量与某些自变量的相关关系,建立一个相关性较好的回归方程(函数表达式),并加以外推,用于预测今后因变量变化的分析。回归分析通常用于预测分析,时间序列模型以及发现变量之间的因果关系。
根据因变量和自变量的函数表达式分为线性回归分析和非线性回归分析。线性回归是回归分析中最基本的方法。
回归分析可以简单理解为数据分析与预测,通过对数据进行分析实现预测,也就是适当扩大已有自变量的取值范围,并承认该回归方程在扩大的定义域内成立。一般来说,回归分析的主要过程和步骤如下:
(1)收集一组包含因变量和自变量的数据;
(2)根据因变量和自变量之间的关系,初步设定回归模型;
(3)求解合理的回归系数;
(4)进行相关性检验,确定相关系数;
(5) 利用模型对因变量作出预测或解释,并计算预测值的置信区间。
建立多元线性回归模型时,为了保证回归模型具有优良的解释能力和预测效果,应首先注意自变量的选择,其准则是:
(1)自变量对因变量必须有显著的影响,并呈密切的线性相关;
(2)自变量与因变量之间的线性相关必须是真实的,而不是形式上的;
(3)自变量之间应具有一定的互斥性,即自变量之间的相关程度不应高于自变量与因变量之间的相关程度;
(4)自变量应具有完整的统计数据,其预测值容易确定。
多元线性回归的假设检验及其评价
1 将回归方程中所有变量作为一个整体来检验它们与因变量之间是否具有线性关系(方差分析法、复相关系数);
2 对回归方程的预测或解释能力做出综合评价(决定系数);
3 在此基础上进一步对各个变量的重要性作为评价(偏回归平方和、t检验和标准回归系数)。
四、实验步骤
1.导入相关的包及读取数据
2.对数据进行初步探索
3.划分训练集及测试集
4.建立线性回归模型
5.评估模型
五、实验要求
学生必须认真阅读实验指导书,学会如何构建线性回归模型,掌握线性回归模型的开发流程。
六、思考题
哪种类型的实际问题适合选用线性回归算法构建模型
一、实验目的
1、理解逻辑回归算法的原理
2、掌握逻辑回归问题的开发流程
3、掌握使用python实现构建逻辑回归模型
二、实验设备
硬件: 微型计算机、常用网络设备
软件: Windows 7 操作系统、python、anaconda等
三、相关准备知识
在生活中存在很多相互制约又相互依赖的关系,这些关系主要有确定关系和非确定关系。
确定关系指变量之间存在明确的函数关系,如圆的周长与半径之间的关系。
非确定关系指各变量之间虽然有制约依赖关系,但无法用确定的函数表达式来表示,如人的血压与体重之间存在密切关系,但无法找到一个能准确表达其关系的函数,变量之间存在的这种非确定性关系,称为相对关系。
事实上,有一些确定关系,由于测量误差的影响,也经常表现出某种程度的不确定性。
对于不确定的关系,通过大量观测数值,可以发现其中变量间存在的统计规律。通过回归分析,可以表明自变量和因变量之间的显著关系或者表明多个自变量对一个因变量的影响强度。
回归问题在形式上与分类问题十分相似,但是在分类问题中预测值y是一个离散变量,它代表通过特征x所预测出来的类别;而在回归问题中,y是一个连续变量。
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。例如,司机的鲁莽驾驶与道路交通事故数量之间的关系,最好的研究方法就是回归。
它表明自变量和因变量之间的显著关系;
它表明多个自变量对一个因变量的影响强度
回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。
具体来说,回归分析法指利用数据统计原理,对大量统计数据进行数学处理,并确定因变量与某些自变量的相关关系,建立一个相关性较好的回归方程(函数表达式),并加以外推,用于预测今后因变量变化的分析。回归分析通常用于预测分析,时间序列模型以及发现变量之间的因果关系。
根据因变量和自变量的函数表达式分为线性回归分析和非线性回归分析。线性回归是回归分析中最基本的方法。
回归分析可以简单理解为数据分析与预测,通过对数据进行分析实现预测,也就是适当扩大已有自变量的取值范围,并承认该回归方程在扩大的定义域内成立。一般来说,回归分析的主要过程和步骤如下:
(1)收集一组包含因变量和自变量的数据;
(2)根据因变量和自变量之间的关系,初步设定回归模型;
(3)求解合理的回归系数;
(4)进行相关性检验,确定相关系数;
(5) 利用模型对因变量作出预测或解释,并计算预测值的置信区间。
逻辑回归算法是一种广义的线性回归分析方法,它仅在线性回归算法的基础上,利用Sigmoid函数对事件发生的概率进行预测。也就是说,在线性回归中可以得到一个预测值,然后将该值通过逻辑函数进行转换,将预测值转为概率值,再根据概率值实现分类。逻辑回归常用于数据挖掘、疾病自动诊断和经济预测等领域。
四、实验步骤
1.导入相关的包及读取数据
2.划分训练集及测试集并进行归一化
3.建立逻辑回归模型
五、实验要求
学生必须认真阅读实验指导书,学会如何构建逻辑回归模型,掌握逻辑回归模型的开发流程。理解逻辑回归与线性回归的区别与联系。
六、思考题
哪种类型的实际问题适合选用逻辑回归算法构建模型,逻辑回归算法的优缺点?
一、实验目的
1、理解关联分析算法的原理。
2、掌握关联分析的分析、开发流程。
3、掌握使用python实现关联分析数据挖掘。
二、实验设备
硬件: 微型计算机、常用网络设备
软件: Windows 7 操作系统、python、anaconda等
三、 相关准备知识
关联规则分析用于在一个数据集中找出各数据项之间的关联关系,广泛用于购物篮数据、生物信息学、医疗诊断、网页挖掘和科学数据分析中。
关联规则分析又称购物篮分析,最早是为了发现超市销售数据库中不同商品之间的关联关系。
采用关联模型比较典型的案例:
“尿布与啤酒”的故事
“飓风与蛋挞”
关联规则分析通过量化的数字描述某物品的出现对其他物品的影响程度,是数据挖掘中较活跃的研究方法之一。目前,常用的关联规则分析算法如表6-1所示。
关联规则分析最早是为了发现超市销售数据库中不同商品间的关联关系。
频繁模式(Frequent Pattern)是指频繁出现在数据集中的模式(如项集,子序列或子结构)。
挖掘频繁模式可以揭示数据集的内在的、重要的特性,可以作为很多重要数据挖掘任务的基础,比如:
1. 关联规则的表示形式
模式可以用关联规则(Association Rule)的形式表示。例如购买计算机也趋向于同时购买打印机,可以用如下关联规则表示。
规则的支持度(Support)和置信度(Confidence)是规则兴趣度的两种度量,分别反映规则的有用性和确定性。
2.频繁项集和闭项集
同时满足最小支持度阈值(min_sup)和最小置信度阈值(min_conf)的规则称为强关联规则。
一般来说,关联规则的挖掘可以看作两步的过程:
(1)找出所有频繁项集,该项集的每一个出现的支持度计数≥ min_sup;
(2)由频繁项集产生强关联规则,即满足最小支持度和最小置信度的规则。
由于第2步的开销远小于第1步,因此挖掘关联规则的总体性能由第1步决定。第1步主要是找到所有的频繁k项集,而在找频繁项集的过程中,需要对每个k项集,计算支持度计数以发现频繁项集,k项集的产生过程如图6.1
因此,项集的个数太大严重影响算法的效率。为了克服这一困难,引入闭频繁项集和极大频繁项集的概念。
项集X在数据集D中是闭的(Closed),如果不存在X的真超项集Y使得Y与X在D中具有相同的支持度计数。
Apriori算法产生k项频繁集的过程主要包括连接和剪枝两步。
(2)剪枝
Ck是Lk的超集,Ck的成员不一定全部是频繁的,但所有频繁的k项集都包含在Ck中。为了减少计算量,可以使用Apriori性质,即如果一个k项集的(k-1)子集不在Lk-1中,则该候选不可能是频繁的,可以直接从Ck删除。这种子集测试可以使用所有频繁项集的散列树快速完成。
四、实验步骤
1. 安装关联分析需要的python库
pip install mlxtend
2. 导入相关数据
import pandas as pd
item_list = [['牛奶','面包'],
['面包','尿布','啤酒','土豆'],
['牛奶','尿布','啤酒','可乐'],
['面包','牛奶','尿布','啤酒'],
['面包','牛奶','尿布','可乐']]
item_df = pd.DataFrame(item_list)
# from mlxtend.preprocessing import TransactionEncode
import mlxtend
te = mlxtend.preprocessing.TransactionEncoder()
df_tf = te.fit_transform(item_list)
df = pd.DataFrame(df_tf,columns=te.columns_)
display(df)
3. 计算频繁项集
from mlxtend.frequent_patterns import apriori
#use_colnames=True表示使用元素名字,默认的False使用列名代表元frequent_itemsets=apriori(df,min_support=0.05,use_colnames=True)
frequent_itemsets.sort_values(by='support',
ascending=False,inplace=True)
4. 选择2频繁项集
print(frequent_itemsets[frequent_itemsets.itemsets.apply(lambda x: len(x))==2])
五、实验要求
1.独立完成实验内容,撰写实验报告
2. 思考关联分析的原理,总结关联分析数据挖掘的流程
六、拓展分析及思考
下面事务数据库中有5个事务,设min_sup=60%,min_conf=80%,分别用Apriori和FP-growth算法找出频繁项集。
一、实验目的
1、掌握分类问题数据挖掘的流程
2、理解分类问题各个算法的原理
3、掌握不同分类算法的实现流程
4、掌握使用python实现各个分类算法
二、实验设备
硬件: 微型计算机、常用网络设备
软件: Windows 7 操作系统、python、anaconda等
三、相关准备知识
分类是一种重要的数据分析形式。数据分类也称为监督学习,包括学习阶段(构建分类模型)和分类阶段(使用模型预测给定数据的类标号)两个阶段。数据分类方法主要有决策树归纳、贝叶斯分类、K-近邻分类、支持向量机SVM等方法。
决策树属于经典的十大数据挖掘算法之一,是一种类似于流程图的树型结构,其规则就是if…then…的思想,用于数值型因变量的预测和离散型因变量的分类。决策树算法简单直观,容易解释,而且在实际应用中具有其他算法难以比肩的速度优势。
决策树的构建原理
决策树是树状结构,它的每个叶结点对应着一个分类,非叶结点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分为若干子集。ID3、C4.5和CART算法都采用贪心(即非回溯)方法,以自顶向下递归的分治方式构造,随着树的构建,训练集递归地被划分为子集。
树剪枝
随着决策树深度的增加,模型的准确度肯定会越来越好。但是对于新的未知数据,模型的表现会很差,产生的决策树会出现过分适应数据的问题。而且,由于数据中的噪声和孤立点,许多分枝反映的是训练数据中的异常,对新样本的判定很不精确。为防止构建的决策树出现过拟合,需要对决策树进行剪枝。决策树的剪枝方法一般有预剪枝和后剪枝方法。
K近邻(k-Nearest Neighbor Classification,KNN)算法是机器学习算法中最基础、最简单的算法之一,属于惰性学习法。
KNN算法基于类比学习,即通过将给定的检验元组与和它相似的元组进行比较来学习。训练元组用n个属性描述,每个元组代表n维空间的一个点。所有的训练元组都存放在n维模式空间中。
当给定一个未知元组时,KNN搜索模式空间,根据距离函数计算待分类样本X和每个训练样本的距离(作为相似度),选择与待分类样本距离最小的K个样本作为X的K个最近邻,最后以X的K个最近邻中的大多数样本所属的类别作为X的类别。
如图7-4所示,有方块和三角形两类数据,它们分布在二维特征空间中。假设有一个新数据(圆点)需要预测其所属的类别,根据“物以类聚”,可以找到离圆点最近的几个点,以它们中的大多数点的类别决定新数据所属的类别。如果k = 3,由于圆点近邻的3个样本中,三角形占比2/3,则认为新数据属于三角形类别。同理,k = 5,则新数据属于正方形类别。
支持向量机(Support Vetor Machine,SVM)是一种对线性和非线性数据进行分类的方法。SVM 使用一种非线性映射,把原训练数据映射到较高的维上,在新的维上,搜索最佳分离超平面。
支持向量机是一种对线性和非线性数据进行分类的方法。它使用一种非线性映射,把原始训练数据映射到较高的维上,在新的维上,搜索最佳分离超平面。
SVM可分类为三类:线性可分的线性SVM、线性不可分的线性SVM、非线性SVM。如果训练数据线性可分,则通过硬间隔最大化学习一个线性分类器即线性可分支持向量机,也称为硬间隔支持向量机;如果训练数据近似线性可分,则通过软间隔最大化学习得到一个线性分类器即线性支持向量机,也称为软间隔支持向量机;对于数据非线性可分的情况,通过扩展线性SVM的方法,得到非线性的SVM,即采用非线性映射把输入数据变换到较高维空间,在新的空间搜索分离超平面。
1. 数据线性可分的情况
SVM的主要目标是找到最佳超平面,以便在不同类的数据点之间进行正确分类。超平面的维度等于输入特征的数量减去1。图7-5显示了分类的最佳超平面和支持向量(实心的数据样本)。
贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理(Bayes Theorem)为基础,采用了概率推理方法。
贝叶斯定理提供了一种计算假设概论的方法。
随机森林
随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树。想象组合分类器中的每个分类器都是一棵决策树,因此分类器的集合就是一个“森林”。更准确说,每一棵树都依赖于独立抽样,并与森林中所有树具有相同分布的随机向量值。随机森林是利用多个决策树对样本进行训练、分类并预测的一种算法,主要应用于回归和分类场景。在对数据进行分类的同时,还可以给出各个变量的重要性评分,评估各个变量在分类中所起的作用。分类时,每棵树都投票并且返回得票最多的类。
随机森林算法流程
(1)训练总样本的个数为N,则单棵决策树从N个训练集中有放回的随机抽取N个作为此单棵树的训练样本
(2)令训练样例的输入特征的个数为M,m远远小于M,则我们在每棵决策树的每个结点上进行分裂时,从M个输入特征里随机选择m个输入特征,然后从这m个输入特征里选择一个最好的进行分裂。m在构建决策树的过程中不会改变。
(3)每棵树都一直这样分裂下去,直到该结点的所有训练样例都属于同一类,不需要剪枝。
四、实验背景
RMS泰坦尼克号的沉没是历史上最臭名昭着的沉船之一。1912年4月15日,在首次航行期间,泰坦尼克号撞上冰山后沉没,2224名乘客和机组人员中有1502人遇难。这场轰动的悲剧震撼了国际社会,并导致了更好的船舶安全条例。
海难导致生命损失的原因之一是没有足够的救生艇给乘客和机组人员。虽然幸存下来的运气有一些因素,但一些人比其他人更有可能生存,比如妇女,儿童和上层阶级。
在这个挑战中,我们要求你完成对哪些人可能生存的分析。特别是,我们要求您运用机器学习的工具来预测哪些乘客幸免于难。
五、实验步骤
1.读取数据
2.筛选特征
3.处理缺失值
4.纠正索引
5.编码
6.特征和标签拆分开
7.划分训练集和测试集
8.标准化
9.建模
10.调参、优化
六、实验要求
1.独立完成实验内容,撰写实验报告
七、拓展分析及思考
1.分类各个算法有什么优缺点?
2.不同的算法如何进行调参
一、实验目的
1、掌握文本分类问题数据挖掘的流程
2、理解朴素贝叶斯算法的原理
3、掌握使用python实现朴素贝叶斯算法
二、实验设备
硬件: 微型计算机、常用网络设备
软件: Windows 7 操作系统、python、anaconda等
三、相关准备知识
分类是一种重要的数据分析形式。数据分类也称为监督学习,包括学习阶段(构建分类模型)和分类阶段(使用模型预测给定数据的类标号)两个阶段。
贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理(Bayes Theorem)为基础,采用了概率推理方法。
贝叶斯定理提供了一种计算假设概论的方法。
多项式朴素贝叶斯(Multinomial Naïve Bayes)经常被用于处理多分类问题,比起原始的朴素贝叶斯分类效果有了较大的提升。其公式如下:
Scikit-learn模块中有Naïve Bayes子模块,包含了各种贝叶斯算法。关键在于将分类器设置为朴素贝叶斯分类器,接着调用分类器训练并进行分类。
四、实验步骤
1.导入相关的包及读取数据
2.划分训练集和测试集
3.进行特征抽取
4.建模
六、实验要求
1.独立完成实验内容,撰写实验报告
七、拓展分析及思考
一、实验目的
1、掌握聚类问题数据挖掘的流程
2、理解聚类算法的原理
3、掌握聚类算法的实现流程
4、掌握使用python实现聚类算法
二、实验设备
硬件: 微型计算机、常用网络设备
软件: Windows 7 操作系统、python、anaconda等
三、相关准备知识
无监督学习(Unsupervise Learning)着重于发现数据本身的分布特点。与监督学习(Supervised Learning)不同,无监督学习不需要对数据进行标记。从功能角度讲,无监督学习模型可以发现数据的“群落”,同时也可以寻找“离群”的样本。另外,对于特征维度非常高的数据样本,同样可以通过无监督学习进行数据降维,保留最具有区分性的低维度特征。
聚类是一个将数据对象集划分为多个组或簇的过程,使得簇内的数据对象具有很高的相似性,但不同簇间的对象具有很高的相异性。
随着聚类分析技术的蓬勃发展,目前已有很多类型的聚类算法。但很难对聚类方法进行简单的分类,因为这些类别的聚类可能重叠,从而使得一种方法具有一些交叉的特征。一般而言,聚类算法被划分为以下几类:
1.划分方法
2.基于层次的方法
3.基于密度的方法
4.局域网格的方法
聚类分析中最广泛使用的算法为K-Means聚类算法。
给定一个n个对象或元组的数据库,一个划分方法构建数据的k个划分,每个划分表示一个簇,k<=n,而且满足:
(1)每个组至少包含一个对象;
(2)每个对象属于且仅属于一个组。
划分时要求同一个聚类中的对象尽可能地接近或相关,不同聚类中的对象尽可能地远离或不同。K-Means算法是一个迭代的优化算法,最终使得下面均方误差最小。
K-Means算法:
用于划分的K-Means算法,其中每个簇的中心都用簇中所有对象的均值来表示。K-Means聚类模型所采用的迭代算法直观易懂且非常实用。但是具有容易收敛到局部最优解和需要预先设定簇的数量的缺陷。
簇间距离度量
1. 最短距离法(最大相似度)
最短距离被定义为两个类中最靠近的两个对象间的距离为簇间距离。
2.最长距离法(最小相似度)
最长距离被定义为两个类中最远的像个对象间的距离为簇间距离。
3. 类平均法
计算两类中任意两个对象间的距离的平均值作为簇间距离
层次聚类应用
Python中层次聚类的函数是A gglomerativeClustering(),最重要的参数有3个:n_clusters为聚类数目,affinity为样本距离定义,linkage是类间距离的定义,有3种取值:
ward:组间距离等于两类对象之间的最小距离
average:组间距离等于两组对象之间的平均距离
complete:组间距离等于两组对象之间的最大距离
基于密度的聚类算法的主要思想是:只要邻近区域的密度(对象或数据点的数目)超过某个阈值 ,就把它加到与之相近的聚类中。也就是说,对给定类中的每个数据点,在一个给定范围的区域中必须至少包含某个数目的点。
基于密度的聚类算法代表算法有:DBSCAN算法、OPTICS算法及DENCLUE算法等。
聚类评估用于对在数据集上进行聚类的可行性和被聚类方法产生的结果的质量进行评估。聚类评估主要包括以下任务:
1. 估计聚类趋势
2. 确定数据集中的划分簇数
3. 测定聚类质量
聚类质量的测定
2. 内在方法
内在方法用于没有基准可用时的聚类质量评估,通过考察簇的分离情况和簇的紧凑度进行聚类评估。
轮廓系数(Silhouette Coefficient)是一种内在评估方法。
四、实验步骤
1.导入相关的包及准备数据
2.数据可视化
3.建模
4.可视化
5.模型评估
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
for n_clusters in [2,3,4,5,6,7]:
n_clusters = n_clusters
fig, (ax1, ax2) = plt.subplots(1, 2)
fig.set_size_inches(18, 7)
ax1.set_xlim([-0.1, 1])
ax1.set_ylim([0, X.shape[0] + (n_clusters + 1) * 10])
clusterer = KMeans(n_clusters=n_clusters, random_state=10).fit(X)
cluster_labels = clusterer.labels_
silhouette_avg = silhouette_score(X, cluster_labels)
print("For n_clusters =", n_clusters,"The average silhouette_score is :", silhouette_avg)
sample_silhouette_values = silhouette_samples(X, cluster_labels)
y_lower = 10
for i in range(n_clusters):
ith_cluster_silhouette_values = sample_silhouette_values[cluster_labels == i]
ith_cluster_silhouette_values.sort()
size_cluster_i = ith_cluster_silhouette_values.shape[0]
y_upper = y_lower + size_cluster_i
color = cm.nipy_spectral(float(i)/n_clusters)
ax1.fill_betweenx(np.arange(y_lower, y_upper),ith_cluster_silhouette_values,facecolor=color ,alpha=0.7)
ax1.text(-0.05,y_lower + 0.5 * size_cluster_i, str(i))
y_lower = y_upper + 10
ax1.set_title("The silhouette plot for the various clusters.")
ax1.set_xlabel("The silhouette coefficient values")
ax1.set_ylabel("Cluster label")
ax1.axvline(x=silhouette_avg, color="red", linestyle="--")
ax1.set_yticks([])
ax1.set_xticks([-0.1, 0, 0.2, 0.4, 0.6, 0.8, 1])
colors = cm.nipy_spectral(cluster_labels.astype(float) / n_clusters)
ax2.scatter(X[:, 0], X[:, 1],marker='o' ,s=8,c=colors )
centers = clusterer.cluster_centers_
ax2.scatter(centers[:, 0], centers[:, 1], marker='x',c="red", alpha=1, s=200)
ax2.set_title("The visualization of the clustered data.")
ax2.set_xlabel("Feature space for the 1st feature")
ax2.set_ylabel("Feature space for the 2nd feature")
plt.suptitle(("Silhouette analysis for KMeans clustering on sample data with n_clusters = %d" % n_clusters),fontsize=14, fontweight='bold')
plt.show()
五、实验要求
1、独立完成实验报告
六、拓展分析及思考
1.聚类和分类有什么区别?
2.如何度量聚类效果
一、实验目的
1、掌握使用随机森林算法建模
2、掌握数据挖掘开发流程
3、掌握使用python实现数据挖掘
4、掌握预测建模及对模型进行评估
二、实验设备
硬件: 微型计算机、常用网络设备
软件: Windows 7 操作系统、python、anaconda等
三、实验步骤
一、良/恶性乳腺肿瘤预测
1.读取数据
2.查看数据的基本信息
3.统计数据属性中的空缺值
4. 划分训练集和测试集
5. 对数据进行标准化处理
6. 建模
7. 模型评估
二、图像的聚类分割
1.导入相关的模块和数据
2. 显示图像的基本信息和图像大小
3. 显示图像的颜色模式
4.对图像数据进行聚类并显示每个像素的簇标号
5. 显示分割后的图像
五、 实验要求
1、独立完成实验报告
七、拓展分析及思考
1、思考分类和聚类的区别
2、思考分类和聚类的开发流程