学习自成都中医药大学林薇老师主讲的《医学数据分析与挖掘》

这几篇老文章都是我之前用飞书云文档写的,因转换格式问题,本文之前已写完的文档图片太多了,不想一一转化了,大家可以访问我的飞书云文档来查看这些图片–https://miu7shl031o.feishu.cn/drive/folder/WJiBfqX9klvKNEdpTHccfrEQn3e

第一章: 概论

  1. 从案例出发:

  2. 探索生存质量 《—-》中医症型

关联规则:

大量的数据中发现特征之间或数据之间的相互依赖关系

  1. 人脸数据爬取与识别

分类与回归:

分类是指利用已有样本,也就是训练集,来建立数学模型并进行分类

回归则是过论因变量和自变量之间的关系,也就是目标变量与预测器的关系

  1. 中医体质的划分

聚类:

指在预先不知道类别标签的情况下,恨据信息的相似度原则进行信息聚集的方法

  1. App推送

智能推荐:

联系用户和信息,并利用信息分类用户的兴趣偏好,为用户推荐感兴趣的内容

  1. 癌症预测

时间序列:

强调的是进行一定时间段内的连续遥感观测,提取图像有关特征,并分析其变化过程

与发展规模

  1. 医学数据分析与挖掘的通用流程 (知识发现的核心部分)

  • 目标分析

医学数据背景应用的需求分析

  • 数据抽取

网络爬虫、历史数据、实验数据

抽取标准: 相关性 可靠性 有效性

衡量数据质量的标准: 资料完整无缺 数据准确无误

常见抽样类型:随机抽样、等距抽样、分层抽样、按起始顺序抽样、分类抽样

  • 数据探索

集中趋势、离散趋势、异常值分析、缺失值分析、相关分析、周期性分析

  • 数据预处理

数据清洗、数据转换、数据集成、数据约减

  • 数据建模与评价

关联规则、分类和回归、聚类分折、智能推荐、时间序列

  • 模型反馈

知识及确立的模型部署在应用中不断反馈和迭代

  1. 常用数据分析与挖掘的工具

  • Python

Python是一种面向对象、解释性的计算机程序设计语言,它拥有高效的数据结构

  • R

R是一种由统计计算基金会支持的用于统计计算和图形的编程语言和自由软件环境

  • MATLAB

MATLAB意为矩阵工厂(矩阵实验室),软件主要面对科学计算、可视化以及交互式程序设计的高科技计算环境

  • SPSS

SPSS采用类似EXCEL表格的方式输入与管理数据数据接口较为通用,能方便的从其他数据库中读入数据,输出结果十分美观。

  1. 第一章相关试题

  2. 建立一个模型,通过这个模型根据已知的变量值来预测其他某个变量值属于数据挖掘的哪一类任务?()

A根据内容检索

B建模描述

C预测建模

D寻找模式和规则

  1. 在抽样方法中,当合适的样本容量很难确定时,可以使用的抽样方法是:()

A有放回的简单随机抽样

B无放回的简单随机抽样

C分层抽样

D渐进抽样

  1. 舆情研判,信息科学侧重( ),社会和管理科学侧重突发群体事件管理中的群体心理行为及舆论控制研究,新闻传播学侧重对舆论的本体进行规律性的探索和研究.

A舆论的本体进行规律性的探索和研究

B舆论控制研究

C互联网文本挖掘和分析技术

D用户行为分析

  1. 协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度( ),并将这些用户喜欢的项推荐给有相似兴趣的用户。

A相似

B相同

C推荐

D预测

  1. 大数据科学关注大数据网络发展和运营过程中( )大数据的规律及其与自然和社会活动之间的关系。

A大数据网络发展和运营过程

B规划建设运营管理

C规律和验证

D发现和验证

  1. 什么是KDD?()

A数据挖掘与知识发现

B领域知识发现

C文档知识发现

D动态知识发现

  1. 使用交互式的和可视化的技术,对数据进行探索属于数据挖掘的哪一类任务?()

A探索性数据分析

B建模描述

C预测建模

D寻找模式和规则

  1. 在受试人群中,根据人群的某些体征比如面色红润,口苦,疲乏,舌苔黄腻,畏寒怕冷等特征将这些人的体质分为平和体质,湿热体质,阳虚体质等等。属于数据挖掘的哪一类任务()

A分类

B回归

C关联规则

D聚类

  1. 数据挖掘的挖掘方法包括:( )

A聚类分析

B回归分析

C神经网络

D决策树算法

E关联规则分析

  1. 抽取数据的标准有( )

A相关性

B可靠性

C有效性

D实效性

E准确性

  1. 数据挖掘的主要任务是从数据中发现潜在的规则,从而能更好的完成描述数据、预测数据等任务√
  2. 数据取样时,除了要求抽样时严把质量关外,还要求抽样数据必须在足够范围内有代表性。√
  3. 模型的具体化就是预测公式,公式可以产生与观察值有相似结构的输出,这就是预测值。√
  4. Web数据挖掘是通过数据库的一些属性来预测另一个属性,它在验证用户提出的假设过程中提取信息。×
  5. 数据质量的标准有两个方面,一是资料完整无缺,各类指标项齐全;二是数据准确无误,且反应的都是在正常状态下的水平。√
  6. 在随机抽样这种操作中,首先将样本总体/分成若干层次(或者说分成若干个子集)。每个层次中的观测值都具有相同的被选用的概率,但对不同的层次可以设定不同的概率。×
  7. Python解释器易于扩展,可以使用C语言或C++,来扩展新的功能和数据类型,也可用于可定制化软件中的扩展程序语言。√
  8. 在选定主成分之后,还需要结合应用,对主成分进行解释,给出主成分的实际意义。√
  9. 医学数据分析与挖掘作为知识发现的核心部分,主要有以下几个步骤目标分析,数据抽取,数据探索,数据预处理,数据建模与评价以及模型反馈。√
  10. 进行降维处理、缺失值处理等,都是数据预处理要解决的问题。√

第二章:数据特征分析

  1. 数据类型(各层要熟悉)

img

区间:对于区间属性,值之间的差是有意义的,即存在测量单位。如日历日期、摄氏或华氏温度

比率:对于比率属性,差和比率都是有意义的。如绝对温度、货币量、计数、年龄、电流等

img

首选比率标度属性,可正向转换,一般不做相反方向的转化

  1. 数据的描述性特征

数据集中趋势

指这组数据向某一中心值靠拢的程度,它反映了一组数据中心点的位置所在

常用的表示数据集中趋势的度量

  • 算数平均值

img

优点: ⑴反应灵敏 ⑵计算严密 ⑶计算简单 ⑷简明易解 ⑸适合运算 ⑹受抽样影响少

缺点: ⑴ 易受极端值影响,可以采用修剪平均数; ⑵ 若数据模糊不清,则无法计算平均数

  • 中位数

优点: ⑴中位数计算不依靠数据本身,反应不够灵敏,极端值变化对中 位数无影响;⑵快速估计数据值

缺点:中位数没有均数稳定,计算要先排列数据,不能够进一步计算

  • 众数

一组数据中出现最多的数

优点: 简单而不受极端值影响

缺点: 受分组与数据影响而不稳定,可靠性较差,一组数据可能没有众数或有几个众数

  • k百分位数

将一组数据从小到大排序,并计算相应的累计百分比,处于k%位置的值 称为第k百分位数,用xk%表示

xk%将数据分成两部分,大约有k%的数据小于或等于xk% , 有(100-k)%的数据大于或等于xk%

  • 四分位数

img

Q1又称“较小四分位数”,即25百分位数

Q2 即50百分位数,就是中位

Q3 又称“较大四分位数”,即75百分位数

数据离散趋势

是各变量值远离其中心值的程度(离中程度、变异程度)

描述数据离散趋势的度量

反映各变量值远离其中心值的程度、反映各变量值的稳定性和均匀性、反映集中趋势指标的代表性

  • 极差

是一组数据中最大值与最小值之差,又称范围误差或全距,用R表示

优点:计算方便,容易理解

缺点:

易受极端值左右,

受数据量大小的影响,不够稳定,

不能反映组内其他观察值的变异情况。

  • 四分位数极差

又称内距,是总体中数据居中的50%个体散布的范围,可看作中间1/2数据的极差

公式 IQR=Q3-Q1

优缺点 受极端值的影响相对小,比极差稳定,但没有利用所有数据的信息。

  • 平均绝对离差

是数据集合中各个数值与平均值的距离总和,然后取其平均数

img

缺点: 带有绝对值符号

  • 方差和标准差

计算每个样本值与全体样本平均数之差的平方和的平均数,称为方差

img

标准差反映观察值对均数的变异程度、说明均数的代表性、常与均数配套来使用

  • 离散系数

又称变异系数,是标准差与平均数之比。

img

  1. 数据的相关分析

数值型属性间关系

确定性关系:函数关系,两变量是一一对应的确定关系 如:圆面积与圆半径

非确定性关系:两类现象在发展变化方向与大小方面存在一定联系。一个变量的取值不能由另一个变量唯一确定。 如:体重与体表面积

相关分析 (分析两个数值型属性之间的相关性)

  1. 散点图:将两个属性的成对数据,绘制在直角坐标系中得到的一系列点

目的:观察两个数值型属性之间是否相关、相关的变现形式以及密切程度

正线性相关、负线性相关、零相关

  1. 相关系数:是描述两个数值型属性间相关关系的密切程度与相关方向的指标。(高中的线性回归方程)

img

没有单位,-1≤r≤1

img

两变量间存在直线相关关系,并不表示一定是因果 关系,可能是伴随关系。

卡方(χ2)检验(推断两个标称属性之间的独立性)

建立检验假设,确定显著性水平

计算检验统计量χ2值

img

img

  1. 主成分分析

由于维度较多,数据呈现出越来越稀疏的分布特点,再加上不

同维度之间有一定的相关性,增加了数据挖掘算法的复杂度(维灾难)

用较少数量的、彼此不相关的新维度(主成分)代替原来的维度,并能够解释数据所包含的大部分信息

形式化描述

n 个p维样本组成的数据集合可以表示为一个n×p的矩阵X

主成分分析的主要步骤

  1. 给定10个二维数据 (x1 , x2 ) ,表示成10×2的矩阵形式

img

  1. 将X的每一行(维)进行零均值化

img

  1. 求样本协方差阵C

img

  1. 计算协方差阵C的特征值及对应的标准正交特征向量

img

  1. 将特征向量根据对应特征值大小从上到下按行排列成矩阵

img

  1. 将样本投影到新的坐标系上

img

  1. 确定提取主成分的数目

img

  1. 假设检验

假 设 检 验 的 步 骤

  • 提出原假设(Null hypothesis) 与备择假设(Alternative hypothesis)
  • 确定适当的检验统计量, 并计算检验统计量的值
  • 规定显著性水平α
  • 作出统计决策
  1. 独立样本t检验

应用条件

独立性(Independence)

组内变量值 间彼此独立一基础性条件

正态性(Normality)

不同组样本均来自正态总体一第一条件

方差齐性(Homogeneity/.Equality of variance)

独立样本均数比较时,两样本对应的总体方差相同一第二条件

  1. 第二章相关试题

  2. 下列有关个人信息的指标,属于序数属性的是()

A学历

B民族

C职业

D考试成绩

  1. 下列说法错误的是()。

A有时为了数据分析的方便,可将高级属性转化为比他低级的属性,一般不能做相反方向的转化。

B数据属性转化顺序:标称属性→序数属性→区间标度属性→比率属性

C数据属性的类型大的来说分为定性和定量两种。

D实际工作中,首选比率属性,其次是区间标度属性,再次是序数属性,最后是标称属性。

  1. 下列属于二元属性的是()

A血压值

B流感病毒检测结果

C身高

D血型

  1. 肝炎病人的住院天数是()

A区间标度属性

B比率标度属性

C标称属性

D序数属性

  1. 一组数据中出现次数最多的变量值称为()。

A算术平均值

B众数

C中位数

D标准差

  1. 离散趋势是指 () 。

A变量值的远离其中心值的程度

B变量值的平均水平

C变量值的分配

D变量值的大小

  1. 主成分分析后每一个新的变量可以表示为()

A某个原变量

B新变量的线性组合

C原来部分变量的线性组合

D原来所有变量的线性组合

  1. 标准差数值越小,则()。

A反映变量值越集中,算术平均值代表性越好。

B反映变量值越分散,算术平均值代表性越差。

C反映变量值越集中,算术平均值代表性越差。

D反映变量值越分散,算术平均值代表性越好。

  1. 当两组或多组资料的变异度进行比较时,应采用离散系数的情况是()

A均数相差悬殊

B标准差相差悬殊

C度量单位不同

D资料来自不同地区

E资料来自不同时期

  • 离散系数(Coefficient of Variation,CV)是衡量数据离散程度的统计量,它是标准差与均数的比值,用来比较不同数据集的变异程度。当均数相差悬殊时,直接比较标准差的大小可能不具有可比性,因为标准差会随着均数的增大而增大。此时,使用离散系数可以消除均数差异的影响,更公平地比较不同数据集的变异度。
  1. 下列指标中属于集中趋势指标的有()

A算术平均值

B众数

C中位数

D百分位数

E极差

  1. 比率标度属性能提供关于顺序、差异以及比率关系的信息,关键之处在于“真正零值”能够被定义。√
  2. 当资料分布的末端无确切数据时不能计算算术平均值。√
  3. 样本量增大时,极差可能会增大√
  4. 方差的单位与原始数据的单位相同×
  5. 卡方检验中,卡方统计量用来衡量所有单元格的观测值与理论值的差异大小。√
  6. 卡方检验中,卡方统计量越大,越有理由拒绝H0。√
  7. 相关系数∣r∣越接近于0,说明相关的密切程度越强。×
  8. 在选定主成分之后,还需要结合应用,对主成分进行解释,给出主成分的实际意义。√
  9. 主成分分析是一种统计方法,通过正交变换将一组可能存在相关性的变量转换为一组线性无关的变量,转换后的这组向量称为主成分。√
  10. 主成分分析方法是一种数据降维的方法。√

第三章:数据处理

  1. 数据的清洗

缺失值处理

数据缺失机制分为以下三种:

  • 完全随机缺失
  • 随机缺失
  • 非随机缺失

处理缺失值的方法可分为3类:删除记录、数据插补和不处理

img

主要讲的两个插值方法

拉格朗日插值法

img

牛顿插值法

具有承袭性和易于变动节点的 特点。

img

重复值处理

记录重复

在某企业的药品发货记录表中,利用列表(list)对用品名称去重,查看所有的品牌名称:

def delRep(list1):
list2 = []
for i in list1
if i not in list2:
list2.append(i) //老师说这个append会考个两分的
return list2
names = list(data['品牌名称']) # 提取品牌名称
name = delRep(names) # 使用自定义的去重函数去重

还可以利用集合(set)元素为唯一的特性去重:

print('去重前品牌总数为:', len(names)) 
name_set = set(names) # 利用set的特性去重
print('去重后品牌总数为:', len(name_set)

pandas提供了一个名为drop_duplicates的去重方法。该方法只对 DataFrame或Series类型有效。

pandas.DataFrame.drop_duplicates(subset=None,keep='first',inplace=False)

img

属性内容重复

属性内容重复是指数据中存在一个或多个属性名称不同,但数据完全相同。当需要去除 连续型属性重复时,可以利用属性间的相似度,去除两个相似度为1的属性的其中一个

corr_ = data[['品牌标签', '仓库标签']].corr(method='kendall') 
print('kendall相似度为:\n', corr_)

除了使用相似度矩阵进行属性去重之外,可以通过pandas库的DataFrame.equals()方法进行属性去重。

pandas.DataFrame.equals(other)

异常值处理

img

  1. 数据的变换

简单函数变换

简单函数变换是对原始数据进行某些数学函数变换,常用的包括平方、开方、取对数、差分运算等。

最小-最大标准化

最小-最大标准化也称为离差标准化,是对原始数据的线性变换,将数值映射到[0,1]之间。

img

其中, max为样本数据的最大值, min为样本数据的最小值。max-min 为极差。

零-均值标准化

零-均值标准化也叫标准差标准化,经过处理的数据的均值为0,标准差为1。

img

其中x为原始数据的均值,S为原始数据的标准差,零-均值标准化是当前用得最多的数据标准化方法。

小数定标标准化

通过移动属性值的小数位数,将属性值映射到[-1,1]之间,移动的小数位数 取决于属性值绝对值的最大值

img

其中k为属性值中绝对值最大的数值的位数。

数据离散化

將连续的数据进行分段,使其变为一段段离散化的区间

离散化的方法:

无监督学习的方式

有监督学习的方式

分段的原则有星于等距离、等频率、聚类或优化的方法

离散化的过程:

img

常用的离散化方法:

img

独热编码(重点,可能考到代码)

独热编码即One-Hot编码,又称一位有效编码,是处理类型数据较好的方法,主要是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候都只有一个编码位有效。

独热编码有以下优点:

  • 将离散型属性的取值扩展到欧氏空间,离散型属性的某个取值就对应欧氏空间的某个点。
  • 对离散型属性使用独热编码,可以让属性之间的距离计算更为合理。

在Python中使用scikit-learn库中preprocessing模块的OneHotEncoder函数进行独热编码

以书上的 示例2-16为参考记忆代码:–亲测可以跑通

from sklearn import preprocessing
import numpy as np
enc=preprocessing.OneHotEncoder() #这行代码创建了一个OneHotEncoder类的实例,并将这个实例赋值给变量enc。OneHotEncoder是preprocessing模块中用于进行独热编码的类。
productData=np.array([[0,0,3],[1,1,0],[2,2,1],[1,0,2],[0,1,2]]) #这行代码使用numpy库创建了一个二维数组productData。这个数组包含了5行3列的数据,每行代表一个产品的数据,每列代表一个特征。
enc.fit(productData) #这行代码使用fit方法来拟合OneHotEncoder实例enc。fit方法会根据输入的数据来学习如何进行独热编码,即确定哪些特征是分类特征,以及每个分类特征中有多少个不同的类别。
Ohe=enc.transform(productData) #这行代码使用transform方法来转换productData数组。transform方法将原始数据转换为独热编码形式。转换后的数据存储在变量Ohe中。
print (Ohe.toarray())
  1. 数据的合并

多表合并

  • 堆叠合并数据

使用pandas库的concat函数可以实现横向堆叠和纵向堆叠,concat函数的基本使用格式 和常用参数说明如下:

分为横向堆叠和纵向堆叠

img

使用pandas库的concat函数可以实现横向堆叠和纵向堆叠

除了concat函数之外,pandas库的append()方法也可以用于纵向合并两张表

  • 主键合并数据

主键合并,即通过一个或多个键将两个数据集的行连接起来。

img

pandas库中的merge函数(pandas.merge())和join()方法(pandas.DataFrame.join())都可以实现主键合并,但两者的实现方式并不相同

使用join()方 法时,两个主键的名字必须相同

  • 重叠合并数据

数据分析和处理过程中偶尔会出现两份数据的内容几乎一致的情况,但是某些属性在其中 一张表上是完整的,而在另外一张表上的数据则是缺失的。这时除了使用将数据一对一比较, 然后进行填充的方法外,还有一种方法就是重叠合并

img

分组聚合

分组是使用特定的条件将元数据进行划分为多个组。聚合是对每个分组中的数据执行某些

操作,最后将计算结果进行整合。

img

  1. 使用groupby0方法拆分数据
pandas.DataFrame.groupby()
  1. 使用agg()方法聚合数据

agg()方法和aggregate()方法都支持对每个分组应用某函数

pandas.DataFrame.agg()
pandas.DataFrame.aggregate()
  1. 使用apply()方法聚合数据

apply()方法类似于agg()方法,能够将函数应用于每一列。不同之处在于,与agg()方法相比, apply()方法传入的函数只能够作用于整个DataFrame或Series,而无法像agg()方法一样能够对不 同字段应用不同函数来获取不同结果。

pandas.DataFrame.apply()
  1. 使用transform()方法聚合数据

transform()方法能够对整个DataFrame的所有元素进行操作。

以药品详情表为例,对销量和售价使用pandas库的transform()方法进行翻倍:

detail[['counts', 'amounts']].transform(lambda x: x * 2).head(4)
  1. 第三章相关试题

  2. ( )的目的缩小数据的取值范围,使其更适合于数据挖掘算法的需要,并且能够得到和原始数据相同的分析结果

A数据清洗

B数据集成

C数据变换

D数据归约

  1. 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?()

A频繁模式挖掘

B分类和预测

C数据预处理

D数据流挖掘

  1. 下面哪种不属于数据预处理的方法? ()

A变量代换

B离散化

C聚集

D估计遗漏值

  1. 假设12个销售价格记录组已经排序如下:5, 10,11,13, 15,35, 50, 55,72,92,204, 215 使用如下每种方法将它们划分成四个箱。等频(等深)划分时,15在第几个箱子内?()

A第一个

B第二个

C第三个

D第四个

  1. 以下哪种方法不属于特征选择的标准方法:()

A嵌入

B过滤

C包装

D抽样

  1. 下面哪个属于映射数据到新的空间的方法?()

A傅立叶变换

B特征加权

C渐进抽样

D维归约

  1. 数据仓库是随着时间变化的,下面的描述不正确的是()

A数据仓库随时间的变化不断增加新的数据内容

B捕捉到的新数据会覆盖原来的快照

C数据仓库随事件变化不断删去旧的数据内容

D数据仓库中包含大量的综合数据,这些综合数据会随着时间的变化不断地进行重新综合

  1. MapReduce的Map函数产生很多的( )

Akey

Bvalue

C<key,value>

DHash

  1. 噪声数据的产生原因主要有:()

A数据采集设备有问题

B在数据录入过程中发生了人为或计算机错误

C数据传输过程中发生错误

D由于命名规则或数据代码不同而引起的不一致

E数据资料自然产生

  1. 进行多表合并时,使用pandas库的可以实现横向堆叠和纵向堆叠()

Aconcat函数

Bappend()方法

Cmerge函数

Djoin()方法

Egroupby()

  1. 对遗漏数据的处理方法主要有:忽略该条记录;手工填补遗漏值;利用默认值填补遗漏值;利用均值填补遗漏值;利用同类别均值填补遗漏值;利用最可能的值填充遗漏值。√
  2. 数据规范化指将数据按比例缩放(如更换大单位),使之落入一个特定的区域(如0—1)以提高数据挖掘效率的方法。规范化的常用方法有:最大—最小规范化、零-均值规范化、小数定标规范化。√
  3. 原始业务数据来自多个数据库或数据仓库,它们的结构和规则可能是不同的,这将导致原始数据非常的杂乱、不可用,即使在同一个数据库中,也可能存在重复的和不完整的数据信息,为了使这些数据能够符合数据挖掘的要求,提高效率和得到清晰的结果,必须进行数据的预处理。√
  4. 孤立点在数据挖掘时总是被视为异常、无用数据而丢弃。×
  5. 维归约可以去掉不重要的属性,减少数据立方体的维数,从而减少数据挖掘处理的数据量,提高挖掘效率。√
  6. 分组是使用特定的条件将元数据进行划分为多个组。√
  7. agg()方法和aggregate()方法都支持对每个分组应用某函数,但是不包括Python内置函数或自定义函数×
  8. 特征离散化以后,起到了简化了模型的作用,降低了模型过拟合的风险。√
  9. 最小-最大标准化也称为离差标准化,是对原始数据的线性变换,将数值映射到[0,1]之间。√
  10. 处理缺失值的方法可分为3类:删除记录、数据插补和不处理。√

第四章: 关联规则挖掘

  1. 基于候选项集产生-测试策略的频繁模式挖掘算法

关联规则分析

关联规则分析也称为购物篮分析,目的是从大量数据中找出各项之间的关联关系,如关联规则“面包=>牛奶”,其中面包称为规则的前项,而牛奶称为后项。

img

重点记忆Apriori

Apriori算法

关联规则和频繁项集

支持度(Support):项集A、B同时发生的概率称为关联规则的支持度。

img

置信度(可信度Confidence):项集A发生,则项集B发生的概率为关联规则的置信度

img

提升度:含有A的条件下,同时含有B的概率,与B总体发生的概率之比。也 就是A对B的置信度与B总体发生的概率之比

img

强关联规则:

  1. 先寻找满足最小支持度的频繁项集
  2. 然后在频繁项集中寻找满足最小置信度的关联规则

最小支持度和最小置信度:

最小支持度是用户或专家定义的衡量支持度的一个阈值,表示项目集在统计意义上 的最低重要性;最小置信度是用户或专家定义的衡量置信度的一个阈值,表示关联规则 的最低可靠性。同时满足最小支持度阈值和最小置信度阈值的规则称作强规则

项集与频繁项集:

项集是项的集合。包含k个项的项集称为k项集,如集合{人参、附子、甘草}是一个3 项集。 项集的出现频数是所有包含项集的事务计数,又称作绝对支持度或支持度计数。如 果项集I的相对支持度满足预定义的最小支持度阈值,则I是频繁项集。

Apriori算法的主要思想是找出存在于事务数据集中的最大的频繁项集,再利 用得到的最大频繁项集与预先设定的最小置信度阈值生成强关联规则。

Apriori的性质

频繁项集的所有非空子集也必须是频繁项集。根据该性质可以得出:向不是频 繁项集的项集 中添加事务 ,新的项集 一定也不是频繁项

步骤:

  • 设定最小支持度和最小置信度
  • 根据最小支持度找出所有的频繁项集
  • 根据最小的置信度发现强关联规则

按ppt上的案例应该可以快速入门这一算法

img

img

img

img

  1. 基于Apriori算法的中医证型关联规则挖掘

不必理会,看不懂

  1. 不需要产生候选项集的 频繁模式挖掘算法

FP-growth算法

流程:

首先构造FP树,然后利用它来挖掘频繁 项集。在构造FP树时,需要对数据集扫 描两边,第一遍扫描用来统计频率, 第二遍扫描至考虑频繁项集

多层关联规则挖掘算法

多层关联规则(Multilevel Rules)是一种基于概念分层的关联规则挖掘方法,概念 层次结构通常用概念树来表示,按照一般到特殊的顺序以偏序的形式排列

  1. 第四章相关试题

  2. 某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?()

A关联规则发现

B聚类

C分类

D自然语言处理

  1. 设X={1,2,3}是频繁项集,则可由X产生( )个关联规则.

A4

B5

C6

D7

由于 𝑋X 包含3个项,我们可以生成以下子集 𝑌:
{1}, {2}, {3}(单个项集)
{1,2}, {1,3}, {2,3} (两个项的组合)
{1,2,3}(整个项集本身)
对于每个子集 𝑌Y,我们都可以生成一个关联规则 𝑌⇒𝑍Y⇒Z,其中 𝑍Z 是 𝑋X 中不在 𝑌Y 中的项集。
具体来说:
对于 𝑌={1}Y={1},可以生成 {1}⇒{2,3}。
对于 𝑌={2}Y={2},可以生成 {2}⇒{1,3}。
对于 𝑌={3}Y={3},可以生成 {3}⇒{1,2}。
对于 𝑌={1,2}Y={1,2},可以生成 {1,2}⇒{3}。
对于 𝑌={1,3}Y={1,3},可以生成 {1,3}⇒{2}。
对于 𝑌={2,3}Y={2,3},可以生成 {2,3}⇒{1}。
对于 𝑌={1,2,3},通常不生成规则,因为没有剩余的项集可以作为规则的后件。
  1. 考虑下面的频繁3—项集的集合:{1,2,3},{1,2,4},{1,2,5},{1,3,4},{1,3,5},{2,3,4},{2,3,5},{3,4,5}假定数据集中只有5个项,采用合并策略,由候选产生过程得到4-项集不包含( )

A1,2,3,4

B1,2,3,5

C1,2,4,5

D1,3,4,5

  • 合并两个频繁k-项集,以生成一个新的k+1-项集,前提是这两个k-项集有(k-1)个共同的项。
  1. 在图集合中发现一组公共子结构,这样的任务称为( )

A频繁子集挖掘

B频繁子图挖掘

C频繁数据项挖掘

D频繁模式挖掘

  1. 下面购物篮能够提取的3—项集的最大数量是多少()
TID项集
1牛奶,啤酒,尿布
2面包,黄油,牛奶
3牛奶,尿布,饼干
4面包,黄油,饼干
5啤酒,饼干,尿布
6牛奶,尿布,面包,黄油
7面包,黄油,尿布
8啤酒,尿布
9牛奶,尿布,面包,黄油
10啤酒,饼干

A1

B2

C3

D4

  1. 可用作数据挖掘分析中的关联规则算法有().

A决策树、对数回归、关联模式

BK均值法、SOM神经网络

CApriori算法、FP-Tree算法

DRBF神经网络、K均值法、决策

  1. 关联规则的评价指标是:().

A均方误差、均方根误差

BKappa统计、显著性检验

C支持度、置信度

D平均绝对误差、相对误差

  1. 分析顾客就医行为,以便有针对性的向其推荐感兴趣的就医服务,属于()问题。

A关联规则挖掘

B分类与回归

C聚类分析

D时序预测

  1. 利用Apriori算法计算频繁项集可以有效降低计算频繁集的时间复杂度。在以下的购物篮中产生支持度不小于3的候选3—项集,在候选2-项集中需要剪枝的是( ) 。
TID项集
1面包、牛奶
2面包、尿布、啤酒、鸡蛋
3牛奶、尿布、啤酒、可乐
4面包、牛奶、尿布、啤酒
5面包、牛奶、尿布、可乐

A啤酒、尿布

B啤酒、面包

C面包、尿布

D啤酒、牛奶

E面包、牛奶

  1. Apriori算法的计算复杂度受( )影响。

A支持度阀值

B项数(维度)

C事务数

D事务平均宽度

E极差

  1. 比率标度属性能提供关于顺序、差异以及比率关系的信息,关键之处在于“真正零值”能够被定义。√
  2. 当资料分布的末端无确切数据时不能计算算术平均值√
  3. 在图集合中发现一组公共子结构,这样的任务称为频繁子图挖掘。√
  4. 决策树方法通常用于关联规则挖掘。×
  5. Apriori算法是一种典型的关联规则挖掘算法。√
  6. 关联规则挖掘过程是发现满足最小支持度的所有项集代表的规则。×
  7. 可信度是对关联规则的准确度的衡量×
  8. 利用先验原理可以帮助减少频繁项集产生时需要探查的候选项个数。√
  9. 先验原理可以表述为:如果一个项集是频繁的,那包含它的所有项集(应该是非空子集)也是频繁的×
  10. 回归分析通常用于挖掘关联规则。×

第五章: 分类与回归算法

  1. 分类与回归概述

分类:分类算法构造一个分类模型,模型的输入为样本的属性值,输出为对应的类别,将每个样本映射到预先定义好的类别。

回归: 回归算法则是建立两种或两种以上变量间相互依赖的函数模型,然后使用函数模型预测目标的值。

常用的分类与回归算法

img

最近邻分类

K近邻(K-Nearest Neighbor,KNN)算法是一种常用的监督学习方法 。其原理非常简单:对于给定测试样本,基于指定的距离度量找出 训练集中与其最近的k个样本,然后基于这k个“邻居”的信息来进行预测

img

确定预测样本类别: 1. 投票法 2. 平均法

使用scikit-learn库中neighbors模块的KNeighborsClassifier类可以实现K近 邻算法对数据进行分类

具体使用实例(亲测可跑通)

# 导入所需的库
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, accuracy_score

# 加载数据集
iris = load_iris()
X = iris.data # 特征数据
y = iris.target # 标签数据

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化KNeighborsClassifier对象
# n_neighbors=3 表示选择最近的3个邻居
# weights='uniform' 表示所有邻居的权重相同
knn = KNeighborsClassifier(n_neighbors=3, weights='uniform')

# 训练模型
knn.fit(X_train, y_train)

# 预测测试集
y_pred = knn.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

# 打印分类报告
print(classification_report(y_test, y_pred))

# 可视化KNN决策边界(可选)
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# 为了可视化,我们只取两个特征
X = iris.data[:, :2] # 只取前两个特征
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练模型
knn.fit(X_train, y_train)

# 创建网格以绘制决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),
np.arange(y_min, y_max, 0.1))

# 预测网格点的类别
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

# 绘制决策边界和训练样本
plt.figure()
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, edgecolors='k')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())
plt.title('3-Class classification (K = 3)')
plt.show()

线性回归模型

img

使用scikit-learn库中linear_model模块的LinearRegression类可以建立 线性回归模型

下面是一个实例

# 导入所需的库
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np

# 创建一些示例数据
# 假设我们有一组数据点,x是特征,y是目标变量
np.random.seed(0)
X = 2 * np.random.rand(100, 1) # 100个样本,1个特征
y = 4 + 3 * X + np.random.randn(100, 1) # y = 4 + 3x + 噪声

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化LinearRegression对象
lr = LinearRegression()

# 训练模型
lr.fit(X_train, y_train)

# 预测测试集
y_pred = lr.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f'Mean squared error: {mse:.2f}')
print(f'Coefficient of determination (R^2): {r2:.2f}')

# 打印模型参数
print(f'Slope (weight): {lr.coef_}')
print(f'Intercept: {lr.intercept_}')

逻辑回归模型

img

使用scikit-learn库中linear_model模块的LogisticRegression类可以建立逻 辑回归模型

# 导入所需的库
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 创建一些示例二分类数据
X, y = make_classification(n_samples=1000, n_features=20,
n_informative=2, n_redundant=10,
random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化LogisticRegression对象
# 默认情况下,solver='lbfgs',penalty='l2'(正则化项)
log_reg = LogisticRegression(max_iter=1000)

# 训练模型
log_reg.fit(X_train, y_train)

# 预测测试集
y_pred = log_reg.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

# 打印混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print('Confusion Matrix:')
print(conf_matrix)

# 打印分类报告
class_report = classification_report(y_test, y_pred)
print('Classification Report:')
print(class_report)

# 打印模型的权重和截距
print('Model Coefficients:')
print(log_reg.coef_)
print(f'Intercept: {log_reg.intercept_}')
  1. 模型评价

分类模型评价

对于分类模型的评价,常用的模型评价指标包括了准确率、精确率、反馈率、混淆矩阵和ROC曲线等

imgimg

imgimg

接收者操作特征曲线(Receiver Operating Characteristic curve,ROC曲 线)是一种非常有效的模型评价方法,可为选定临界值给出定量提示。

回归模型评价

对于回归模型,常用的模型评价指标包括了绝对误差 与相对误差、误差分析中的综合指标(平均绝对误差、 均方误差、均方根误差)、平均绝对百分误差和 Kappa统计量等

imgimg

Kappa统计是比较两个或多个观测者对同一事物,或观测者对同一事物的两次 或多次观测结果是否一致,将由随机造成的一致性和实际观测的一致性之间的 差别大小作为评价基础的统计指标。

  1. 决策树算法

决策树是一树状结构,它的每一个叶节点对应着一个分类,非叶节点 对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划 分成若干个子集。

纯度的度量

img

常用的决策树算法:

img

img

使用scikit-learn库中tree模块的DecisionTreeClassifier类可以建立决策树模 型

  1. 支持向量机算法

支持向量机(Support Vector Machines,SVM)的思想是 在样本空间中找到一个划分超平面,将不同类别的样本分开。

在样本空间中,划分超平面可通过线性方程来描述

imgimg

线性支持向量机

基本步骤

  • 将原问题转化为凸优化问题
  • 通过构建拉格朗日函数,将原问题对偶化。
  • 对对偶化后的问题进行求解。

非线性支持向量机

将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分

然而由于映射后的特征空间维数可能很高,直接计算通常是很困难的, 为了避开这个障碍,会利用已知的核函数直接进行计算:

img

使用scikit-learn库中svm模块的SVC类可以实现支持向量机算法对 数据进行分类

  1. 集成学习算法

集成学习算法通过组合多种学习算法来获得比任何单独的学习算法具 有更好的预测性能的估计器。对于训练集数据,我们通过训练若干个 个体学习器(individual learner),通过一定的结合策略,就可以最终 形成一个强学习器,以达到博采众长的目的

Bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的 随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以 分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来 得到最终的强学习器

Bagging

Bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的 随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以 分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来 得到最终的强学习器

随机森林

随机森林(Random Forest,RF)是Bagging的一个拓展,RF在以决策树 为基分类器构建Bagging学习器的基础上,进一步在决策树的训练过程 中引入了随机属性选择

Boosting

Boosting(提升)是一个可将弱学习器提升为强学习器的算法。这个 算法的工作机制为:赋予一个相等的初始权重给每个训练样本;迭代 地学习k个分类器,学习得到弱学习器1之后,更新权重,使得后面的 分类器更关注误分类的训练样本;最后的分类器组合每个个体分类器 的表决结果

使用scikit-learn库中ensemble模块的GradientBoostingClassifier类可以建 立梯度提升决策树模型

梯度提升机

梯度提升机(Gradient Boosting Machine,GBM)是一种Boosting的方法,其提高 模型精度的方法与传统Boosting对正确、错误样本进行加权不同,该模型通过在残差减 少的梯度(Gradient)方向上建立一个新的模型,从而降低新模型的残差(Residual)。 即每个新模型的建立是为了使得之前模型的残差往梯度方向减少

Stacking

Stacking集成学习方法是指训练一个模型用于组合其他各个模型。首先 我们先训练多个不同的模型(初级学习器),然后把之前训练的各个 模型的输出为输入来训练一个模型(次级学习器),以得到一个最终 的输出

使用scikit-learn库中ensemble模块的StackingClassifier类可以建立 Stacking分类模型

  1. 丹参生长影响指标筛选

看不懂

  1. 肺癌转移影响因素及生存分析

看不懂

  1. 第五章相关试题

  2. 下列问题,属于回归的是()

A通过症状判别证型

B胃癌术后五年期生存率分析

C根据影像对病程分期

D根据患者证症推荐医生

我觉得这个答案应该是B,但是老师给的答案是C

  1. 下列说法错误的是()。

A支撑向量机可以用来进行拟合函数。

B支撑向量机可以用于多分类问题。

C支撑向量机需要大量训练样本。

D支撑向量机通过核函数将数据映射到高维空间,从而能够解决非线性问题。

  1. 患者试纸检测结果是阳性,实际真实值是阴性,则试纸结果是()

A TP

B TN

C FP

D FN

  • TP (True Positive):真正例,即检测结果为阳性且实际也是阳性。
  • TN (True Negative):真负例,即检测结果为阴性且实际也是阴性。
  • FP (False Positive):假正例,即检测结果为阳性但实际是阴性。
  • FN (False Negative):假负例,即检测结果为阴性但实际是阳性。
  1. 在医学疾病筛查中,希望尽量小的是()

A Recall

B Precision

C Accuracy

D 漏检率

  1. 当Kappa(),说明已经取得相当满意的一致程度。

A在区间[-1,1]内

B大于等于0.75时

CKappa=1

DKappa<0.4

  1. 下面是SVM算法中需要指定的超参数 () 。

A C

B alpha

C bias

D omiga

  1. ROC曲线下方的面积就是()

A LOT

B TPR

C FPR

D AUC

  1. ()算法只适用于离散的描述属性。

A ID3

B C4.5

C CART决策树

D SLIQ

  1. 常见的非线性映射核有()

ARBF核

B多项式核

Csigmoid核

D拉普拉斯核

ESobel核

  1. 集成学习有如下几种方式()

ABagging

BBoosting

CAdaboost

DStacking

EID3

  1. K近邻(K-Nearest Neighbor,KNN)算法是一种常用的监督学习方法。√
  2. 最近邻算法是K近邻算法的一个特例。√
  3. 决策树算法通常按照纯度的增加来选择拆分属性√
  4. C4.5决策树生成算法相对于ID3算法的重要改进是使用信息增益率来选择节点属性。√
  5. 为了评价回归模型,一般让模型预测单个点的值进行评价以免受到噪声影响而不准×
  6. 当Kappa>0时,说明有意义,Kappa愈大,说明一致性愈好。√
  7. Bagging算法中个体学习器间存在强依赖关系。×
  8. Bagging的个体弱学习器的训练集是通过随机采样得到的。√
  9. 随机森林RF算法是Stacking的一个拓展×
  10. 均方误差开根号后就变成均方根误差√

第六章: 聚类算法

  1. 聚类算法概述

与分类不同,聚类分析是在没有给定划分类别的情况下,根据数据相似度进行样本分组 的一种方法。聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度将他们 划分为若干组,划分的原则是组内样本最小化而组间(外部)距离最大化。

img

距离度量

常见距离度量有:

img

聚类算法评价指标

聚类分析仅根据样本数据本身将样本分组,组内的对象相互之间是相似的(相关的),而 不同组中的对象是不同的(不相关的)。组内的相似性越大,组间差别越大,聚类效果就越好。

常见评价法有:

img

  1. 基于划分的聚类算法

K-Means聚类

K-Means算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分 为预定的类数K,采用距离作为相似性的衡量指标,即认为两个对象的距离越近,相似度就越大。

1.相似度度量

2.算法过程

K均值算法的具体步骤如下:

(1)从N个样本数据中随机选取K个对象作为初始的聚类中心。

(2)分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中。

(3)所有对象分配完成后,重新计算K个聚类的中心。

(4)与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转步骤(2),否则转步骤 (5)

(5)当质心不发生变化时停止并输出聚类结果

3.目标函数

使用误差平方和准则(Sum Squared Error,SSE)作为度量聚类质量的目标函数, 对于两种不同的聚类结果,选择误差平方和较小的分类结果

4.具体实现

使用scikit-learn库中cluster模块的KMeans类可以实现K-Means聚类算法对数据进行聚类

二分K均值聚类

  • 使用小批量的样本而不是整个数据集对群集质心进行更新
  • 通过 MiniBatchKMeans 类实现的
  • 优化的主配置是“ n _ clusters ”超参数,设置为数据中估计的群集数量

K中心点算法

  • 为每个簇随意选择一个代表对象
  • 剩余对象根据其与代表对象的距离分配给最近的一个簇
  • 反复用非代表对象来代替代表对象,改进聚类质量
  1. 信用卡风险识别模型

看不懂

  1. 基于层次的聚类算法

层次聚类

试图在不同层次上对样本集进行划分 进而达到形成树形的聚类结构

在运用层次聚类法时,需要对类与类之间的距离做出规定,按照规定的不同,形成了基于 最短距离、最长距离和平均距离的层次聚类法

img

聚集系统法具体步骤

(1) 输入样本集合、对聚类簇函数做出规定给出聚类的簇数。

(2) 将每个样本点作为单独的一簇。

(3) 计算任何两个簇之间的距离。

(4) 按照距离最近原则合并簇。

(5) 若当前聚类簇数未到达规定的聚类簇数,则返回步骤(3) 否则聚类结束。

(6) 输出聚类结果。

使用scikit-learn库中cluster模块的AgglomerativeClustering类可以实现层次聚类算法对数 据进行聚类

BIRCH算法

阶段一:扫描数据库,构造一棵能够存放 于内存中的CF树。

阶段二:选用一个聚类算法对CF树的叶 节点聚类,把稀疏的簇当做离群点删除, 把稠密的簇合并为更大的簇

CF

img

  • 从根节点root 开始递归往下,计算当前条目与要插入数据点之间 的距离,寻找距 离最小的那个路径,直到找到与该数据点最接近 的叶节点中的条目。
  • 比较计算出的距离是否小于阈值T,如果小于则当前条目吸收该数 据点;反之,则 继续第三步。
  • 判断当前条目所在叶节点的条目个数是否小于L,如果是,则直接 将数据点插入作 为该数据点的新条目,否则需要分裂该叶节点。
  1. 道地药材文本数据挖掘

看不懂

  1. 基于密度的聚类算法

密度聚类

以样本点在空间分布上的稠密程度为依据进 行聚类 p若区域中的样本密度大于某个阈值,则将相 应的样本点划入与之相近的簇中

DBSCAN算法

(1) 输入样本集合、初始化距离参数 ,数目参数 。

(2) 确定核心对象集合。

(3) 在核心对象集合中,随机选择一个核心对象作为种子。

(4) 依据簇划分原则生成一个簇,并更新核心对象集合。

(5) 若核心对象集合为空,则算法结束,否则返回步骤(3)。

(6) 输出聚类结果

使用scikit-learn库中cluster模块的DBSCAN类可以实现密度聚类算法对数据进行聚类

OPTICS算法

  • 为聚类分析生成一个增广的簇排序
  • 排序代表了各样本点基于密度的聚类结构

对象p的核心距离是 指是p成为核心对象 的最小E’ 。如果p不 是核心对象,那么p 的核心距离没有任何 意义。

对象q到对象p的可达距离是 指p的核心距离和p与q之间 欧几里得距离之间的较大值。 如果p不是核心对象,p和q 之间的可达距离没有意义

基本过程:

(1) 创建两个队列,有序队列和结果队列。

(2) 如果所有样本集D中所有点都处理完毕,则算法结束。否则,选择一个未处理(即不在结果队列中)且为核心对象的样本点,找到其所 有直接密度可达样本点,如果该样本点不存在于结果队列中,则将其放 入有序队列中,并按可达距离排序;

(3)如果有序队列为空,则跳至步骤2,否则,从有序队列中取出第一 个样本点(即可达距离最小的样本点)进行拓展,并将取出的样本点保 存至结果队列中,如果它不存在结果队列当中的话。

(4)算法结束,输出结果队列中的有序样本点。

  1. 第六章相关试题

  2. 当不知道数据所带标签时,可以使用哪种技术促使带同类标签的数据与带其他标签的数据相分离?()

A分类

B聚类

C关联分析

D回归

  1. 通过聚集多个分类器的预测来提高分类准确率的技术称为 ()

A组合(ensemble)

B聚集(aggregate)

C合并(combination)

D投票(voting)

  1. 简单地将数据对象集划分成不重叠的子集,使得每个数据对象恰在一个子集中,这种聚类类型称作()

A层次聚类

B划分聚类

C非互斥聚类

D模糊聚类

  1. 在基本K均值算法里,当邻近度函数采用()的时候,合适的质心是簇中各点的中位数.

A曼哈顿距离

B平方欧几里德距离

C余弦距离

D切比雪夫距离

  1. DBSCAN是一种()。

A分类器

B聚类算法

C关联分析算法

D特征选择算法

  1. 将两个簇的邻近度定义为不同簇的所有点对的平均逐对邻近度,它是一种凝聚层次聚类技术。

AMIN(单链)

BMAX(全链)

C组平均

DWard方法

  1. 将两个簇的邻近度定义为两个簇合并时导致的平方误差的增量,它是一种凝聚层次聚类技术。

AMIN(单链)

BMAX(全链)

C组平均

DWard方法

  1. 关于K均值和DBSCAN的比较,以下说法不正确的是()。

AK均值丢弃被它识别为噪声的对象,而DBSCAN一般聚类所有对象

BK均值使用簇的基于原型的概念,而DBSCAN使用基于密度的概念。

CK均值很难处理非球形的簇和不同大小的簇,DBSCAN可以处理不同大小和不同形状的簇

DK均值可以发现不是明显分离的簇,即便簇有重叠也可以发现,但是DBSCAN会合并有重叠的簇。

  1. 以下属于聚类算法的是()。

AK—Means

BDBSCAN

CApriori

DKNN

EBayes

  1. 都属于簇有效性的监督度量。

A轮廓系数

B共性分类相关系数

C熵

DF度量

E余弦距离

  1. 聚类是指将物理或抽象对象的集合分组成为由类似的对象组成的多个类的过程√
  2. 用于分类的离散化方法之间的根本区别在于是否使用类信息。√
  3. 简单地将数据对象集划分成不重叠的子集,使得每个数据对象恰在一个子集中,这种聚类类型称作划分聚类。√
  4. 在基本K均值算法里,当邻近度函数采用曼哈顿距离的时候,合适的质心是簇中各点的中位数。√
  5. 聚类是这样的过程:它找出描述并区分数据类或概念的模型(或函数),以便能够使用模型预测类标记未知的对象类。×
  6. 在聚类分析当中,簇内的相似性越大,簇间的差别越大,聚类的效果就越差。×
  7. 聚类分析可以看作是一种非监督的分类。√
  8. K均值是一种产生划分聚类的基于密度的聚类算法,簇的个数由算法自动地确定×
  9. 基于邻近度的离群点检测方法不能处理具有不同密度区域的数据集。√
  10. 如果一个对象不强属于任何簇,那么该对象是基于聚类的离群点。√

第七章:算法应用,看一遍即可,重点记住题

第七章相关试题

  1. 关于随机抽样,下列说法正确的是()。

A抽样时应使得总体中的每一个个体都有同等机会被抽取

B研究者在抽样时应精心挑选个体,以使样本更能代表总体

C随机抽样即随意抽取个体

D为确保样本具有更好的代表性,样本量越大越好

  1. 报上登出了国内20家大医院的名单,名单按他们在近三年中病人死亡率的高低排序。专家指出不能把名单排列的顺序作为评价医院医疗水平的标准。以下各项,如果是真的,都能做论据支持专家的结论,除了哪一项()。

A这20家医院中,有5家医院依靠国家资助从国外引进了多项先进、大型和配套的医疗设备,其余15家都没有。

B有些医院,留病人住院的时间长,病人死亡率因此较高;有些医院,往往较早地动员患绝症而救治无望的病人出院,病人死亡率因此较低。

C这20家医院中,有2家老人医院和3家儿童医院。

D20家医院中,有2家是肿瘤医院。

  1. 下列哪项检验不适用χ2检验()。

A两样本均值比较

B两样本率比较

C构成比比较

D拟合优度检验

A. 两样本均值比较 - 这通常使用t检验或ANOVA(方差分析)来完成,而不是χ2检验。
B. 两样本率比较 - 可以使用χ2检验来分析两个独立样本的分类变量频率是否相同。
C. 构成比比较 - 这通常指的是比较不同类别的构成比例,χ2检验可以用于此目的。
D. 拟合优度检验 - 这是检验实际观测值与理论值是否一致的检验,χ2检验是常用的方法之一。
  1. 为研究矽肺患者肺功能的变化情况,某医院对I、II期肺硅沉着病患者各35名测定其肺活量,得到I期患者的均值2700ml,标准差137ml;II期患者均值2800ml,标准差125ml,欲求I、II期肺硅沉着病患者的肺活量是否有显著性差异,宜采用什么统计方法()。

Aχ2检验

Bt检验

Clogit回归

D秩和检验

A. χ2检验 - 适用于分类数据的关联性检验,不适用于比较两个独立样本的均值。
B. t检验 - 适用于比较两个独立样本的均值,特别是当样本量较小(通常小于30)且数据近似正态分布时。由于这里每组样本量为35,且没有提到数据分布,如果数据近似正态分布,t检验是合适的。
C. logit回归 - 用于二分类结果变量的回归分析,不适用于比较两个独立样本的均值。
D. 秩和检验 - 又称为Mann-Whitney U检验,适用于两个独立样本的非参数比较,当数据不满足正态分布或方差不齐时使用。
  1. 下表为某项指标频数分布表,描述其集中趋势宜采用什么指标()。
组段频数频率百分比(%)
10~350.3535
20~450.4545
30~150.1515
40~40.044
50~6010.011
合计1001100

A算数均数

B几何均数

C中位数

D百分位数

  1. 某医生研究复方哌唑嗪对高血压的治疗效果,以复方降压片为对照,结果如下表,问两种药物效果有无显著性差别,宜采用何种统计方法()。
治疗例数有效例数有效率(%)
复方哌唑嗪403587.5
复方降压片302066.67

Aχ2检验

Bt检验

C方差分析

D秩和检验

  1. 某地区某病患病率20%,随机从该地抽出50人,则患病人数的数学期望和方差分别为多少()。

A25和8

B10和2.8

C25和64

D10和8

  1. 已知σ2时,区间()的含义是()。

img

A95%的总体均值在此范围内

B样本均值的95%置信区间

C95%的样本均值在此范围内

D总体均值的95%置信区间

  1. 下列选项中,哪几项是实验设计的基本原则()。

A盲法的原则

B对照的原则

C重复的原则

D随机化的原则

E多中心的原则

  1. 下列有关直线回归的论述中,正确的是()。

A满足所有点距离直线垂直距离平方和最小

B满足残差平方和最小

C拟合方法为最小二乘法

D满足所有点距离直线竖直距离平方和最小

E满足所有点距离直线的绝对值距离最小

  1. LSTM网络在分类上属于深度学习方法。√
  2. OR值、RR值属于病因学指标。√
  3. 样条方法属于非线性方法。√
  4. 机器学习方法在分类上属于深度学习的一种。×
  5. 线性回归分析中,决定系数R2是衡量拟合效果优劣的一个指标。√
  6. 线性回归系数与pearson相关系数在假设检验上是等效的。√
  7. 同一个资料,计算相关系数与回归系数,两个系数的正负号是相反的。×
  8. 在做回归分析时,需要先做散点图查看分布和趋势。√
  9. 回归分析要求样本满足残差独立性√
  10. 深度学习方法可以用于回归也可以用于分类。√

期末考试题:

  1. 单选题(2分)

()作为知识发现的核心部分,指的是从数据集合中自动抽取隐藏在数据中的那些有价值的信息的过程

A数据挖掘

B人工智能

C机器学习

D模式识别

正确答案: A

  1. 单选题(2分)

()是指在大量的数据中发现特征之间或数据之间的相互依赖关系。

A分类

B回归

C关联规则

D聚类

正确答案: C

  1. 单选题 (2分)

在受试人群中,根据人群的某些体征比如面色红润,口苦,疲乏,舌苔黄腻,畏寒怕冷等特征将这些人的体质分为平和体质,湿热体质,阳虚体质等等。属于数据挖掘的哪一类任务()

A分类

B回归

C关联规则

D聚类

正确答案: D

这里的关键区别在于是否有预先定义的标签:
如果我们已经有了体质类型的标签,并且我们的目标是训练一个模型,以便能够根据新的体征特征预测体质类型,那么这是一个分类问题。
如果我们没有标签,而是希望算法根据体征特征自动将人群分组,那么这是一个聚类问题。
  1. 单选题 (2分)

( )用于联系用户和信息,并利用信息分类用户的兴趣偏好,为用户推荐感兴趣的内容

A聚类

B智能推荐

C时间序列分析

D回归

正确答案: B

  1. 单选题 (2分)

下列数据属于序数属性的是()。

A红细胞计数

B门诊就诊人数

C患者的病情分级

D住院患者费用支付方式

正确答案: C

  1. 单选题 (2分)

某年某地六岁女孩成长发育情况如下:身高均数为119cm,标准差为4.56cm,体重均数为20kg,标准差为1.16kg,欲比较两者的变异程度,应选用的指标是()。

A算数平均数

B标准差

C离散系数

D极差

本题得分: 2分

正确答案: C

  1. 单选题 (2分)

算术平均值与中位数相比,其特点是()。

A不易受极端值的影响

B能充分利用数据的信息

C更适用于开口数据(无确切端点值)资料

D更适用于分布不明确资料

本题得分: 2分

正确答案: B

  1. 单选题 (2分)

对3×2表资料做卡方检验,其自由度为(B)。

A1

B2

C3

D4

正确答案: B

  1. 单选题 (2分)

Mapreduce适用于 ()。

A任意应用程序

B任意可在windows servet2008上运行的程序

C可以串行处理的应用程序

D可以并行处理的应用程序

正确答案: D

  1. 单选题 (2分)

将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?( )

A 频繁模式挖掘

B分类和预测

C数据预处理

D数据流挖掘

正确答案: C

  1. 单选题 (2分)

下面哪种不属于数据预处理的方法? ()

A变量代换

B离散化

C聚集

D估计遗漏值

正确答案: D

  1. 单选题 (2分)

假设12个销售价格记录组已经排序如下:5, 10, 11, 13, 15, 35, 50, 55, 72, 92, 204, 215 使用如下每种方法将它们划分成四个箱。等频(等深)划分时,15在第几个箱子内? ( )

A第一个

B第二个

C第三个

D第四个

正确答案: B

  1. 单选题 (2分)

发现关联规则的算法通常要经过以下三个步骤:连接数据,作数据准备;给定最小支持度和( ),利用数据挖掘工具提供的算法发现关联规则;可视化显示、理解、评估关联规则。

A最小兴趣度

B最小置信度

C最大支持度

D最小可信度

正确答案: B

  1. 单选题 (2分)

规则I-〉j,“有可能”,等于所有包含I的购物篮中同时包含J的购物篮的比例,为( )。

A置信度

B可信度

C兴趣度

D支持度

正确答案: A

  1. 单选题 (2分)

考虑下面的频繁3—项集的集合:{1,2,3},{1,2,4},{1,2,5},{1,3,4},{1,3,5},{2,3,4},{2,3,5},{3,4,5}假定数据集中只有5个项,采用合并策略,由候选产生过程得到4-项集不包含()。

A1,2,3,4

B1,2,3,5

C1,2,4,5

D1,3,4,5

正确答案: C

  1. 单选题 (2分)

在图集合中发现一组公共子结构,这样的任务称为 ( )。

A频繁子集挖掘

B频繁子图挖掘

C频繁数据项挖掘

D频繁模式挖掘

正确答案: B

  1. 单选题 (2分)

关于聚类的目标,下面说法不正确的是()。

A使聚类内部对象之间的距离尽可能小

B使它们之间具有很低的相似度

C常见的距离度量有:幂距离

D距离或相似性度量对于聚类算法是非常重要的

正确答案: B

  1. 单选题 (2分)

假设在城市中,要从一个十字路口到另一个十字路口,驾驶距离显然不是两点间的直线距离,实际驾驶距离就是 ( )。

A幂距离

B切比雪夫距离

C欧式距离

D曼哈顿距离

正确答案: D

  1. 单选题 (2分)

余弦相似度更加关注两个向量在()上的差异

A大小

B方向

C密度

D距离

正确答案: B

  1. 单选题 (2分)

刻画k均值聚类的特点,采用的是哪一类准则函数来作为聚类的准则函数。( )

A均值

B误差平方和准则(Sum Squared Error,SSE)

C方差

D标准差

正确答案: B

  1. 单选题 (2分)

当Kappa( ),说明已经取得相当满意的一致程度。

A在区间[-1,1]内

B大于等于0.75时

CKappa=1

DKappa<0.4

正确答案: B

  1. 单选题 (2分)

下面是SVM算法中需要指定的超参数 ()。

AC

Balpha

Cbias

Domiga

正确答案: A

  1. 单选题 (2分)

ROC曲线下方的面积就是( )。

ALOT

BTPR

CFPR

DAUC

正确答案: D

  1. 单选题 (2分)

()算法只适用于离散的描述属性。

AID3

BC4.5

CCART决策树

DSLIQ

正确答案: A

  1. 多选题 (4分)

集成学习有如下几种方式()。

ABagging

BBoosting

CAdaboost

DStacking

EID3

正确答案: A,B,D (少选不得分)

  1. 多选题 (4分)

数据挖掘的主要功能包括概念描述、趋势分析、孤立点分析及( )等方面。

A挖掘频繁模式

B分类和预测

C聚类分析

D偏差分析

E抽样

正确答案: A,B,C,D (少选不得分)

  1. 多选题 (4分)

下列属于定量属性的是()

A区间标度属性

B比率标度属性

C二元属性

D多元属性

E序数属性

正确答案: A,B (少选不得分)

  1. 多选题 (4分)

数据预处理方法主要有( )。

A数据清洗

B数据集成

C数据变换

D数据归约

E数据分析

正确答案: A,B,C,D (少选不得分)

  1. 多选题 (4分)

下表是一个购物篮,假定支持度阈值为40%,其中( )是频繁闭项集。

ID项集
1面包、牛奶、尿布
2面包、牛奶、尿布、啤酒
3牛奶、尿布、鸡蛋
4面包、尿布、啤酒、鸡蛋
5啤酒、鸡蛋

A面包、牛奶、尿布

B面包、啤酒

C尿布、啤酒

D啤酒、鸡蛋

E面包、尿布、啤酒、鸡蛋

正确答案: A,D (少选不得分)

  1. 多选题 (4分)

K-平均算法的聚类过程为()。

A任意选择k个对象作为初始的簇中心

B计算其它对象与这k个中心的距离,然后把每个对象归入离它“最近”的簇

C计算各簇中对象的平均值,然后重新选择簇中心(离平均值“最近”的对象值

D重复第2第3步直到簇中心不再变化为止

正确答案: A,B,C,D (少选不得分)

  1. 判断题

数据探索主要包括:集中趋势、离散趋势、异常值分析、缺失值分析、相关分析、周期性分析等。()

正确答案: 正确

  1. 判断题

抽取数据的标准有,相关性,可靠性,有效性。()

正确答案: 正确

  1. 判断题

在主成分分析中,每个主成分都是原始变量的线性组合,且各个主成分之间线性无关。()

正确答案: 正确

  1. 判断题

确定保留哪些主成分,通常既考虑累计贡献率又考虑特征值大小。()

正确答案: 正确

  1. 判断题

pandas库中的merge函数和join()方法都可以实现主键合并。()

正确答案: 正确

  1. 判断题

数据清洗(Data cleaning)是 对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。()

正确答案: 正确

  1. 判断题

transform()方法能够对整个DataFrame的所有元素进行操作。()

正确答案: 正确

  1. 判断题

同时满足最小支持度阈值和最大置信度阈值的规则称作强规则。()

正确答案: 错误

  1. 判断题

FP-growth算法在求每个潜在的频繁项集时都需要扫描一次数据集。()

正确答案: 错误

  1. 判断题

基于划分的算法最明显的优点就是,只需要扫描两遍数据库T,I/O开销比Apriori算法增加。()

正确答案: 错误

  1. 判断题

多层关联规则(Multilevel Rules)是一种基于概念分层的关联规则挖掘方法,概念分层是一种映射,它将低层概念映射到高层概念。()

正确答案: 正确

  1. 判断题

BIRCH是一种分类器。()

正确答案: 错误

  1. 判断题

组平均将两个簇的邻近度定义为不同簇的所有点对的平均逐对邻近度,它是一种凝聚层次聚类技术。()

正确答案: 正确

  1. 判断题

DBSCAN在最坏情况下的时间复杂度是O(m2)。()

正确答案: 正确

  1. 判断题

K均值丢弃被它识别为噪声的对象,而DBSCAN一般聚类所有对象。()

正确答案: 错误

摘选于讨论区中的问题,可能是考试中会出现的内容

代码出题方式为填空,所以可以重点记忆标记的代码行

  1. 医学数据中,尤其是中医学数据中,如何来清洗数据。

选自林薇老师的回答:

在Python中,可以使用pandas库进行数据清洗,例如:

import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
# 删除重复行
df = df.drop_duplicates()
# 填充缺失值
df.fillna(0, inplace=True)
  1. 使用Python实现Apriori算法:

选自林薇老师的示例:

使用Python实现Apriori算法的示例代码:

from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

# 假设我们有以下事务数据集
dataset = [['苹果', '香蕉', '橙子'],
['苹果', '橙子'],
['橙子', '香蕉'],
['苹果', '香蕉', '橙子'],
['香蕉', '橙子'],
['苹果', '橙子'],
['苹果', '香蕉']]

# 使用Apriori算法找到频繁项集
frequent_itemsets = apriori(dataset, min_support=0.5, use_colnames=True)

# 生成关联规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)

# 打印结果
print("频繁项集:")
print(frequent_itemsets)
print("\n关联规则:")
print(rules)

在这个例子中,我们首先使用mlxtend.frequent_patterns.apriori函数来找到频繁项集。min_support参数设置为0.5,表示项集在数据集中出现的最小支持度。use_colnames参数设置为True,表示使用列名作为项集的标识符。然后,我们使用mlxtend.frequent_patterns.association_rules函数来生成关联规则。在这个例子中,我们使用confidence作为度量标准,并设置最小阈值为0.7。最后,我们打印出频繁项集和关联规则的结果。

  1. 数据转换

选自林薇老师的示例代码

import pandas as pd
# 从CSV文件中读取数据
df = pd.read_csv('input.csv')
# 数据转换
# 假设我们要将'column_name'列中的字符串转换为整数
df['column_name'] = df['column_name'].astype(int)
# 将转换后的数据保存到新的CSV文件中
df.to_csv('output.csv', index=False)
  1. 要实现文本分类、python常见代码是什么

选自林薇老师的示例代码

假设我们有一些文档,需要将它们分类为两个类别(类别1和类别2)。我们可以首先将文档转化为向量形式(即词袋模型),然后使用Scikit-learn的逻辑回归模型进行分类。

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
import pandas as pd

# 假设我们有以下文档:
documents = [
'This is a document about the first topic.',
'This document is about the second topic.',
'And this one is about the third topic.',
'Is this document about the first or the second topic?',
'This is the second document.',
'Is this document about the first or the second topic?',
'This document is about the first topic.',
'I wonder if this document is about the first or the second topic?',
'This is the third document.'
]

# 将文档转化为向量形式:
vectorizer = CountVectorizer()
vectorized_docs = vectorizer.fit_transform(documents)

# 划分训练集和测试集:
train_docs, test_docs = vectorized_docs[:-2], vectorized_docs[-2:]

# 使用逻辑回归模型进行训练:
classifier = LogisticRegression()
classifier.fit(train_docs, ['first', 'second', 'third', 'first', 'second', 'first', 'second', 'first', 'third'])

# 对测试集进行预测:
predicted = classifier.predict(test_docs)

# 输出预测结果:
print(predicted)

这个例子中,我们使用了逻辑回归模型,但实际上还有很多其他的模型可以选择,比如支持向量机(SVM)、朴素贝叶斯、决策树等。此外,还可以使用深度学习模型,如卷积神经网络(CNN)或递归神经网络(RNN)等。在选择模型时,需要根据具体的问题和数据来进行权衡。

  1. 简述拉格朗日插值法和牛顿差值法的异同

相同点:

  1. 插值原理:拉格朗日插值法和牛顿插值法都是基于插值原理,即通过在已知数据点之间构建一个多项式函数来逼近这些点。
  2. 多项式性质:两种方法得到的结果都是多项式函数,这些多项式函数通过已知数据点,并且满足插值条件。

不同点:

  1. 插值多项式的构造方式:拉格朗日插值法通过构造一个基于拉格朗日基函数的插值多项式来进行插值。而牛顿插值法则是通过计算差商并构建牛顿插值多项式来进行插值。

  2. 运算量与复杂性:拉格朗日插值法在每次增加一个新的插值节点时,都需要重新计算所有的基函数因此其计算量相对较大,尤其是在插值节点较多的情况下。而牛顿插值法则通过差商表的逐步构建,可以在增加新的插值节点时只更新部分差商,因此其计算量相对较小。

  3. 数值稳定性:在某些情况下,拉格朗日插值法可能会出现龙格现象(Runge’s Phenomenon),即插值多项式在插值区间的端点附近可能会出现较大的振荡。而牛颅插值法则在某些情况下表现出更好的数值稳定性。

  4. 如何将异常值处理与缺失值处理的方法联系起来

  5. 原因关联:异常值和缺失值有时可能源于相同的原因。例如,某些数据可能因为测量设备故障、数据录入错误或其他原因而同时出现异常或缺失。因此,在处理这些值时,可能需要同时考虑异常值和缺失值的处理方法。

  6. 处理方法的互补性:在某些情况下,可以使用异常值处理方法来处理缺失值,反之亦然。例如,如果数据集中的某个特征是数值型的,那么可以使用该特征的均值、中位数或众数来填充缺失值或替换异常值。同样,插值法既可以用于填充缺失值,也可以用于替换异常值。

  7. 处理顺序的灵活性:在某些情况下,可能需要先处理异常值,然后再处理缺失值。例如,如果异常值对后续的数据分析产生较大影响,那么可以先将其替换或删除,然后再对剩余的缺失值进行处理。反之,如果缺失值的数量较多,可能会对后续的数据分析产生较大影响,那么可以先填充缺失值,然后再对可能出现的异常值进行处理。

  8. 独热编码(one-hot encoding)和标签编码(label encoding)的区别

独热编码和标签编码是常用的分类数据编码方式。标签编码将每个类别映射为整数值,保留了顺序关系,但可能引入假设关系。独热编码将每个类别转换为二进制向量,适用于无序类别数据,不会引入假设关系。标签编码维持数据维度不变,而独热编码会增加维度。标签编码适用于有序类别数据,而独热编码适用于无序类别数据。

  1. 机器学习中常见编码方式:标签编码、序列编码、独热编码、频数编码、目标编码的区别与联系,如何在python中实现

  2. 标签编码:

①将类别型变量映射为整数标签,适用于有序类别数据。

②保留了类别之间的顺序关系。

③Python实现:

from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
encoded_labels = encoder.fit_transform(labels)
  1. 序列编码:

①将序列数据中的词汇或符号编码为整数序列。

②用于处理文本或时间序列数据。

③Python实现:

from keras.preprocessing.text import Tokenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
  1. 独热编码:

①将每个类别转换为二进制向量,适用于无序类别数据。

②不会引入类别之间的顺序关系。

③Python实现:

from sklearn.preprocessing import OneHotEncoder
encoded_features = OneHotEncoder().fit_transform(features.reshape(-1, 1)).toarray()
  1. 频数编码:

①将每个类别映射为其出现的频率,用于有序或无序类别数据。

②可以帮助模型学习类别的频率信息。

③Python实现:

freq_encoding = df['category'].value_counts(normalize=True)
df['category_freq_encoded'] = df['category'].map(freq_encoding)
  1. 目标编码:

①将类别型变量的每个类别的目标变量均值编码为数值。

②用于处理分类问题的特征编码。

③Python实现:

import category_encoders as ce
encoder = ce.TargetEncoder()
encoded_features = encoder.fit_transform(features, target)
  1. python中,进行缺失值处理的时候,请简单描述牛顿插值法和拉格朗日插值法的示例代码

#牛顿插值法:
import numpy as np
def newton_interpolation(x, y, x_new):
n = len(x)
f = np.zeros((n, n))
# 初始化f矩阵
for i in range(n):
f[i, 0] = y[i]
# 计算差商
for j in range(1, n):
for i in range(n-j):
f[i, j] = (f[i+1, j-1] - f[i, j-1]) / (x[i+j] - x[i])
# 计算插值结果
result = f[0, 0]
for i in range(1, n):
term = f[0, i]
for j in range(i):
term *= (x_new - x[j])
result += term
return result
# 示例数据
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 4, 9, 16])
x_new = 2.5
# 插值
result = newton_interpolation(x, y, x_new)
print("牛顿插值结果:", result)




#拉格朗日插值法:
import numpy as np
def lagrange_interpolation(x, y, x_new):
n = len(x)
result = 0
for i in range(n):
term = y[i]
for j in range(n):
if i != j:
term *= (x_new - x[j]) / (x[i] - x[j])
result += term
return result
# 示例数据
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 4, 9, 16])
x_new = 2.5
# 插值
result = lagrange_interpolation(x, y, x_new)
print("拉格朗日插值结果:", result)
  1. Pandas提供了更强大的聚合功能,如groupby()agg()函数,允许根据某些列对数据进行分组并应用聚合函数。试举例说明

使用pandas中的groupby()函数和agg()函数可以对数据执行聚合操作。以”Product”和”Region”两列对销售额进行求和和平均值的计算。

import pandas as pd
# Create a sample data frame
data = {'Product': ['A', 'B', 'A', 'B', 'C', 'C'],
'Region': ['East', 'East', 'West', 'West', 'East', 'West'],
'Sales': [10, 20, 30, 40, 50, 60]}
df = pd.DataFrame(data)
# Group by 'Product' and 'Region', and compute sum and mean of 'Sales'
grouped = df.groupby(['Product', 'Region'])['Sales'].agg(['sum', 'mean'])
print(grouped)

从输出结果可以看出,groupby()函数根据”Product”和”Region”两列对数据进行分组,agg()函数计算了每组数据的”Sales”列的总和和平均值。

img

  1. 关联规则算法实现

示例数据集

dataset = [[‘牛奶’, ‘面包’, ‘黄油’],

​ [‘面包’, ‘黄油’, ‘尿布’],

​ [‘牛奶’, ‘尿布’, ‘鸡蛋’, ‘黄油’],

​ [‘面包’, ‘牛奶’, ‘尿布’, ‘鸡蛋’],

​ [‘面包’, ‘尿布’, ‘黄油’, ‘鸡蛋’]]

from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules
from mlxtend.preprocessing import TransactionEncoder
import pandas as pd

# 示例数据集
data = [['牛奶', '面包', '黄油'],
['面包', '黄油', '尿布'],
['牛奶', '尿布', '鸡蛋', '黄油'],
['面包', '牛奶', '尿布', '鸡蛋'],
['面包', '尿布', '黄油', '鸡蛋']]

# 使用 TransactionEncoder 将数据集转换为适合Apriori算法的格式
te = TransactionEncoder()
te_ary= te.fit(data).transform(data)
df = pd.DataFrame(te_ary, columns=te.columns_)

# 使用 Apriori 算法计算频繁项集
frequent_itemsets = apriori(df, min_support=0.4, use_colnames=True)

#使用association_rules函数生成关联规则
rules=association_rules(frequent_itemsets,metric="confidence",min_threshold=0.7)

print("频繁项集:")
print(frequent_itemsets)
print("\n关联规则:")
print(rules)
  1. 利用Apriori算法对中药组方进行关联规则分析

示例数据集

dataset = [[‘当归’, ‘川芎’, ‘人参’],

​ [‘川芎’, ‘人参’, ‘茯苓’],

​ [‘当归’, ‘茯苓’, ‘甘草’, ‘人参’],

​ [‘川芎’, ‘当归’, ‘茯苓’, ‘甘草’],

​ [‘川芎’, ‘茯苓’, ‘人参’, ‘甘草’]]

from apyori import apriori

# 示例数据集
dataset = [['当归', '川芎', '人参'],
['川考', '人参', '茯苓'],
['当归', '茯苓', '甘草', '人参'],
['川芎', '当归', '茯苓', '甘草'],
['川芎', '茯苓', '人参', '甘草']]

# 应用Apriori算法
min_support = 0.3 # 设置最小支持度阈值
min_confidence = 0.7 # 设置最小置信度阈值
min_lift = 1.2 # 设置最小提升度阈值
min_length = 2 # 设置最小项集长度

results = list(apriori(dataset, min_support=min_support, min_confidence=min_confidence, min_lift=min_lift, min_length=min_length))

# 输出频繁项集和关联规则
print("频繁项集:")
for item in results:
print(item.items, "Support:", round(item.support, 4))

print("\n关联规则:")
for rule in results:
for outcome in rule.ordered_statistics:
print(", ".join(item for item in outcome.items_base), "=>", ", ".join(item for item in outcome.items_add), "Confidence:", round(outcome.confidence, 4), "Lift:", round(outcome.lift, 4))
  1. 利用fp-growth算法进行中药组方关联规则挖掘

模拟中医药方剂的数据集

data = [

​ [‘黄连’, ‘黄芩’, ‘黄柏’, ‘栀子’],

​ [‘麻黄’, ‘桂枝’, ‘杏仁’, ‘甘草’],

​ [‘银花’, ‘连翘’, ‘桔梗’, ‘薄荷’],

[‘川芎’, ‘麻黄’, ‘桔梗’, ‘杏仁’],

… 添加更多方剂

]

from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import fpgrowth Graph
from mlxtend.frequent_patterns import association_rules

# 模拟数据集
data = [
['黄连', '黄芩', '黄柏', '栀子'],
['麻黄', '桂枝', '杏仁', '甘草'],
['银花', '连翘', '桔梗', '薄荷'],
['川芎', '麻黄', '桔梗', '杏仁'],
# ...添加更多方剂
]

# 数据预处理
te = TransactionEncoder()
te_ary = te.fit(data).transform(data)
df = pd.DataFrame(te_ary, columns=te.columns_)

# FP-growth模型
frequent_itemsets = fpgrowth(df, use_colnames=True)

# 生成关联规则
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)

# 打印关联规则
print(rules)
  1. 寻找针灸治疗功能性胃肠病的选穴规律关联规则

img

dataset = [
['公孙', '解溪', '太仓', '足三里'],
['公孙', '劳宫', '通里', '大陵', '膻中'],
['公孙', '厉兑', '胃俞', '大都'],
['公孙', '内关'],
['公孙', '天枢', '水分', '内庭'],
['公孙', '天枢', '水分', '内庭'],
['公孙', '中脘'],
['公孙', '巨阙', '中脘', '厉兑'],
['公孙', '中脘', '太白', '中魁'],
['公孙', '中脘', '足三里', '解溪'],
['劳宫', '中魁', '中脘', '足三里', '大陵', '支沟', '上脘', '脾俞', '胃俞', '中脘', '太白', '下脘', '食关'],
['中脘', '太白', '下脘', '食关'],
['劳宫', '中渚', '支沟', '中脘'],
['脾俞', '章门', '期门', '太白', '中脘'],
['俞府', '灵墟', '巨阙', '率谷', '神藏']

]
# 数据预处理:转换数据格式
te = TransactionEncoder()
transaction_te = te.fit(dataset).transform(dataset)
df = pd.DataFrame(transaction_te, columns=te.columns_)
print(df)
# 设置最小支持度(例如:0.2,表示项集在所有事务中出现的频率至少为20%)
min_support = 0.2
# 设置最小置信度(例如:0.7,表示规则的置信度至少为70%)
min_confidence = 0.25
# 找出频繁项集
frequent_items = fpgrowth(df, min_support, use_colnames=True)
# 生成关联规则
rules = association_rules(frequent_items, metric="confidence", min_threshold=0.5)
# 打印频繁项集和关联规则
print("频繁项集:\n", frequent_items)
print("关联规则:\n", rules[['antecedents', 'consequents', 'support', 'confidence', 'lift']])
  1. 针灸治疗头痛

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
import networkx as nx
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题

# 针灸处方数据
data = [
['眉冲', '颞颥', '涌泉', '风门', '小海', '水沟'],
['期门', '水沟', '神道', '涌泉', '风门'],
['水沟','涌泉','风门','人迎','悬颅','水沟','涌泉','风门'],
['腕骨','小海','水沟','目窗','天冲','风池','悬颅','水沟','涌泉','风门'],
['神庭','风门','水沟','人迎','悬颅','水沟','涌泉','风门'],
['曲差','悬颅','神道','涌泉','风门'],
['本神','涌泉','风门'],
['通天','神道','涌泉','风门'],
['承灵','水沟','目窗','天冲','风池','悬颅','水沟','涌泉','风门'],
['神道','涌泉','风门','人迎','悬颅','水沟','涌泉','风门'],
['命门','目窗','天冲','风池','悬颅','水沟','涌泉','风门'],
['大杼','风门','风府','水沟'],
['风门','神道','涌泉','风门'],
['悬颅','水沟','涌泉','风门'],
['悬颅','目窗','天冲','风池','悬颅','水沟','涌泉','风门'],
['悬厘','水沟','风府','水沟'],
['阳白','涌泉','风门涌泉','风门'],
['攒竹','涌泉','风门','人迎','悬颅','水沟','涌泉','风门'],
['温溜','悬颅','水沟','涌泉','风门'],
['清冷渊','人迎','悬颅','水沟','涌泉','风门'],
['消泺','目窗','天冲','风池','悬颅','水沟','涌泉','风门'],
['小海','水沟'],
['丰隆','悬颅','水沟','涌泉','风门'],
['束骨','人迎','悬颅','水沟','涌泉','风门'],
['人迎','悬颅','水沟','涌泉','风门'],
['目窗','天冲','风池','悬颅','水沟','涌泉','风门'],
['孔最','悬颅','水沟','涌泉','风门'],
['商丘','目窗','天冲','风池','悬颅','水沟','涌泉','风门'],
['百会','水沟'],
['后顶','目窗','天冲','风池','悬颅','水沟','涌泉','风门']
]


# 使用TransactionEncoder转换数据
te = TransactionEncoder()
te_ary = te.fit(data).transform(data)
df = pd.DataFrame(te_ary, columns=te.columns_)

# 找出频繁项集
frequent_itemsets = apriori(df, min_support=0.02, use_colnames=True) # 根据数据量调整min_support

# 计算关联规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.5)


# 打印关联规则
print(rules[['antecedents', 'consequents', 'support', 'confidence', 'lift']])

# 创建网络图
G = nx.DiGraph()

# 添加节点和边
for index, row in rules.iterrows():
antecedents = list(row['antecedents']) # 将frozenset转换为list
consequents = list(row['consequents']) # 将frozenset转换为list
# 为每个关联规则添加一条边,同时检查antecedents和consequents是否已经存在于图中
for ante in antecedents:
if ante not in G:
G.add_node(ante)
for conseq in consequents:
if conseq not in G:
G.add_node(conseq)
if ante != conseq:
G.add_edge(ante, conseq, weight=row['confidence'])

# 绘制网络图
pos = nx.spring_layout(G)
edge_colors = [G[u][v]['weight'] for u, v in G.edges()]
nx.draw(G, pos, with_labels=True, node_color='skyblue', node_size=700, edge_color=edge_colors, alpha=0.5)
plt.show()
  1. 成人自闭症进行聚类实现

import pandas as pd

# 加载文件
file_path = 'F:\\下载\\autism_screening成人自闭症.csv'
autism_data = pd.read_csv(file_path)

# 统计数据中各列中缺失值的数量
missing_values = autism_data.isnull().sum()
missing_values

# 使用平均年龄填充“年龄”列中的缺失值
autism_data['age'].fillna(autism_data['age'].mean(), inplace=True)

# 再次统计数据中各列中缺失值的数量,确定缺失值是否填充
missing_values_after_filling = autism_data.isnull().sum()
missing_values_after_filling

# 选择聚类的特征
features = ['A1_Score', 'A2_Score', 'A3_Score', 'A4_Score', 'A5_Score',
'A6_Score', 'A7_Score', 'A8_Score', 'A9_Score', 'A10_Score', 'age', 'result']

# 将每个特征的数据标准化为平均值为0,标准差为1的类
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
autism_data[features] = scaler.fit_transform(autism_data[features])

autism_data[features].head()

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei'

# 确定要测试的 k 个值的范围
k_values = range(1, 11)

# 创建一个列表来存储每个 k 值的聚类效果值
inertia_list = []

# 遍历 k 值并拟合模型
for k in k_values:
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(autism_data[features])
inertia_list.append(kmeans.inertia_)

# 绘制“肘部曲线”
plt.figure(figsize=(10, 5))
plt.plot(k_values, inertia_list, marker='o', linestyle='--')
plt.title('肘部曲线图')
plt.xlabel('value of K')
plt.ylabel('Distortion')
plt.grid(True)
plt.show()


# 定义一个函数来运行 KMean 并绘制给定 k 值的聚类
def plot_clusters(data, feature1, feature2, k_values):
plt.figure(figsize=(15, 8))
for i, k in enumerate(k_values, 1):
# 进行 KMeans 聚类
kmeans = KMeans(n_clusters=k, random_state=42)
data['cluster'] = kmeans.fit_predict(data[[feature1, feature2]])

# 绘制聚类结果
plt.subplot(1, len(k_values), i)
for j in range(k):
# 根据聚类结果绘制散点图
plt.scatter(data[data['cluster'] == j][feature1],
data[data['cluster'] == j][feature2],
label=f'Cluster {j}')
plt.xlabel(feature1)
plt.ylabel(feature2)
plt.title(f'KMeans Clustering with {k} Clusters')
plt.legend()
plt.tight_layout()
plt.show()


# 选择要进行聚类的特征
feature1 = 'result' # x轴
feature2 = 'age' # y轴

# 定义要绘制的 k 值
k_values = [2, 3, 4]

# 绘制不同 k 值的聚类
plot_clusters(autism_data, feature1, feature2, k_values)

# 使用 k=3 运行k均值聚类
kmeans = KMeans(n_clusters=3, random_state=42)
autism_data['cluster'] = kmeans.fit_predict(autism_data[features])

autism_data[['cluster'] + features].head()

# 首先获取每个聚类的中心点
cluster_centers = kmeans.cluster_centers_

# 查看每个聚类的中心点
cluster_centers_df = pd.DataFrame(cluster_centers, columns=features)
cluster_centers_df.index.name = 'Cluster'
cluster_centers_df.reset_index(inplace=True)
cluster_centers_df
# 计算每个聚类中出现的自闭症次数(Class / ASD列)
cluster_class_counts = autism_data.groupby(['cluster', 'Class/ASD']).size().unstack().fillna(0)
cluster_class_counts
  1. 贝叶斯分类

import pandas as pd

# 导入高斯朴素贝叶斯分类器
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
# 导入计算分类模型的准确率的库
from sklearn.metrics import accuracy_score

# 导入数据集
data = pd.read_excel("F:\Desktop\表1.xlsx")

print(data.head())
# 分离特征和标签
X = data[['身高(英尺)', '体重(磅)', '脚掌(英寸)']]
y = data['性别']

# 将数据集划分为训练集和测试集
# 训练集包含80%的数据,测试集包含20%的数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化高斯朴素贝叶斯分类器
nb_classifier = GaussianNB()
# 拟合数据
nb_classifier.fit(X_train, y_train)

# 预测测试集中的数据,以验证分类器准确率
y_pred = nb_classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(accuracy)

# 导入预测数据
test_data = pd.read_excel("F:\Desktop\表2.xlsx")

# 预测数据表2的性别属性
test_data['性别预测'] = nb_classifier.predict(test_data[['身高(英尺)', '体重(磅)', '脚掌(英寸)']])

# 显示预测结果
test_data[['记录', '性别预测']]