数据挖掘学习

2023-11-17

文章目录

绪论

定义

也即是数据挖掘的目标:

数据挖掘的定义:
从大量的数据中挖掘那些令人感兴趣的、有用的、隐含的、先前未知的和可能有用的模式或者知识

挖掘过程

数据挖掘的过程:

  • 挖掘目标的定义
  • 数据的准备
  • 数据的探索
  • 模型的建立
  • 模型的评估
  • 模型的部署

在这里插入图片描述

数据准备

  1. 数据的选择
  2. 数据的质量分析
  3. 数据的预处理
    • 数据清洗
    • 数据集成
    • 数据归约
    • 数据变换

在这里插入图片描述

数据探索EDA

对数据进行初步的探究,以便了解数据的特征,为建模的变量选择和算法选择提供依据

  1. 描述性统计
    描述统计包括均值、频率、众数、百分位数、中位数、极差、方差和百分位数等,一般来说描述统计均可以用来探索数据结构,它们均用于探索数据的不同属性

  2. 数据可视化
    数据可视化就是将数据的总体特点以图形的
    方式呈现,用以发现其中的模式。图形简明易懂,
    这个在数据探索中起到很重要的作用,比如常用
    的频次图(见右图)、散点图、箱体图等

  3. 数据探索的建模
    一切可以用于建模的统计方法或计量模型
    均可以用于数据探索

数据仓库

  • 关系数据库
  • 数据仓库
  • 事务数据库
  • 高级数据库系统和信息库
    1. 空间数据库
    2. 时间数据库和时间序列数据库
    3. 流数据
    4. 多媒体数据库
    5. 文本数据库和万维网
    6. 异构数据库和遗产数据

定义:

  1. 从多个数据源搜集的信息
  2. 存放在一致的模式之下

特点:

  • 通过数据立方体提供多维视角
  • 与计算和快速访问汇总数据
    在这里插入图片描述

空间数据库

空间数据库是指在关系型数据库(DBMS)内部对地理信息进
行物理存储。空间数据库中存储的海量数据包括对象的空间
拓扑特征、非空间属性特征以及对象在时间上的状态变化

  • 地理信息系统(GIS)
  • 遥感图像数据
  • 医学图像数据

时间数据库和时序数据库

时间数据库和时序数据库都存放与时间有关的数据

  • 通过研究事物发生发展的过程,有助于揭示事物发展
    的本质规律,可以发现数据对象的演变特征、变化趋势与异
    常检测

流数据

定义:

  • 一组顺序、大量、快速、连续到达的数据序列,一般情况下,
    数据流可被视为一个随时间延续而无限增长的动态数据集合

特点:

  • 与其它数据库相比,在存储、查询、访问、实时性方面都具
    有很高的要求

异构数据和遗产数据

遗产数据库定义:

  • 遗产数据库是一系列的异构数据库系统的集合,包括不同种
    类的数据库系统,像关系数据库、网络数据库、文件系统

特点:

  • 有效利用遗产数据库的关键在于实现不同数据库之间的数据
    信息资源、硬件设备资源和人力资源的合并和共享
  • 数据共享应当达到两点:一是实
    现数据库转换;二是实现数据的透明访问

数据挖掘的模式

  1. 概念/类描述:特性化和区分
  2. 关联分析
  3. 分类和预测
  4. 聚类分析
  5. 离群点分析
  6. 趋势和演变分析

  1. 模型选择:
    在这里插入图片描述
    数据降维我用过的算法小结一下:
  • PCA通过坐标轴的变换,简单有效,维度很容易操作,多少维合适(保留大部分信息的情况下尽可能的降低维度)? 弊端:属性失去可解释性,即降维后的属性都是原来所有属性的线性组合,现实意义无法解释
  • SVD通过坐标系的整体的变换,但是计算稍复杂
  • DSNE:效果最NP,线性映射到某个最佳的维度空间,最大程度的区分开不同群体
  • 因子分析:理论最完备,具有可解释性,但是效果仅限于维度不高的情况

预测模型:

  • 我以为就是传统的回归模型,知道我详细的研究了一下马尔可夫的模型,哇咔咔,深不见底…概率论黑洞…
  • 关联模型,纯纯的数据挖掘,和现实情景很贴切,就是没有真实数据,挖吧挖吧
  1. 模型结构
    在这里插入图片描述

数据准备

数据的定义:

  • 数据是代表定性或定量的信息片段一个变量或一组变量的属性。数据通常被视为最低级别信息和知识从中派生的抽象(也就是基于原数据的抽象表达)

大数据的定义:

  • 大数据是大容量、高速度、多品种的信息资产,需要具有成本效益的创新形式的信息处理以增强洞察力和决策

数据组成

数据由数据对象组成 , 数据对象由属性描述

什么是数据对象?

定义:

  • 就是组成数据集的元素(例如excel表格里的一个单元格),数据格式:样本、数据点、元组等

什么是数据属性?

定义:代表数据对象特征的一个字段 。也称为维、特征、变量(同义词)

属性的类型:

  1. 定类型:可以标记或分类为变量内互斥类别的数据
  2. 二值型
  3. 数值型:离散/连续

数据搜集

从各大数据源、数据库提取

数据质量分析

为什么?

  1. 数据不完整(缺失)
  2. 数据存在噪声
  3. 数据不一致

考虑两个方面:
4. 保证数据的正确性

  1. 保证数据的有效性

数据类型

数据挖掘的数据类型:

  1. 结构化数据:数据库
  2. 半结构化数据:邮件、HTML、报表、资源库
  3. 非结构化数据:视频、音频、图片、文档

考点:描述统计和数据可视化

  • 抽样调查
    • 抽样方法:简单随机抽样、系统抽样、分层抽样、整群抽样、多阶段抽样
    • 抽样完对数据进行校正、有效性检验

描述统计方法:

  1. 总记录数:样本总数,表示数据规模
  2. 唯一值数:唯一值数,表示数据多样性
  3. 空值占比:无效数据的影响程度
  4. 非零占比:非零值的影响程度
  5. 正数占比:正值的影响程度
  6. 负数占比:负值的影响程度

可视化

  1. 直方图:落入某区间的对象频数,顺次连接矩形中点的光滑曲线就是数据分布曲线
  2. 箱线图:最小值、Q1、中位数、Q3、最大值
  3. 方差和标准差:数据散布程度的度量
  4. 散点图:确定两个数值变量是否存在联系、模式、趋势,聚类或离群点的初探索
  5. 热力图:属性的相关性
  6. 小提琴图:箱线与分布结合
  7. KDE图:分布图加窗平滑
  8. QQ图:一个分布到另一个分布是否存在漂移

数据正确性

  1. 缺失值
  2. 数据错误
  3. 度量标准错误(单位)
  4. 编码不一致(度量标志不一)

数据有效性

  • 数据携带的信息量

注数据统计方面的信息, 比如占比、方差、均值、分位数等
方面的信息,以此来了解这些数据包含的信息量程度

方法

  1. 值分析:数据的唯一值、无效值、异常值进行分析
  2. 统计分析:极值、均值、标准差的比值,找出异常的统计学指标
  3. 频数直方图:了解数据的分布

考点:数据预处理

缺失数据

如何缺失的?

  1. 完全随机缺失的
  2. 条件缺失的

缺失值的处理不再赘述了,烂熟于心
各种插补法的比较:
在这里插入图片描述

噪声数据

何为噪声?

定义:一个由测量得到的变量中存在的随机错误或偏差

去噪方法

1. 回归法

  • 用一个回归函数取拟合数据来光滑数据

不是随便选一个回归函数,你可以用线性回归试试,画个散点图

  • 蓝色:正常数据
  • 红色:异常(噪声)数据

然后你会发现满屏红色,哈哈哈哈哈哈哈哈哈哈哈哈~
这很正常~

因为你的线性函数就是判断的标准,现实中的数据没有这么强的线性相关性,而且你还得考虑一个很重要的问题:多重共线性!

  • 在普通的问题中,这是影响你回归模型的最大的因素

So,盘它,LASSO和岭回归或者弹性网就足够了,注意!你的目的不是让模型预测的有多准,而是来划分噪声,ok?

  • 等等,差点忘了,噪声咋办,删掉or替换

2.分箱- 均值平滑

对于具有序列特征的变量用临近的若干数据的均值来替换原始数据的方法

  • 不常用,因为这样会损失或偏离原数据携带的信息量

离群点分析

Q:离群点如何产生的?
A:数据集中含有的数据有些不合理,偏离观测值,属于录入错误
通过聚类等方法来检测离群点,并将其删除,从而实现去噪的方法

分析方法:

  • 统计分析:极差分析,最大值-最小值,判断是否合理
  • 3 σ \sigma σ原则:
    • 数据符合正态分布: P ( ∣ x − μ ∣ > 3 σ ) < 0.003 P(|x-\mu|>3\sigma)<0.003 P(xμ>3σ)<0.003外的数据视为异常,即 [ μ + 3 ∗ σ , μ − 3 σ ] [ \mu+3 *\sigma,\mu-3\sigma] [μ+3σ,μ3σ]

      1. 但是样本均值和样本标准差都不是稳健统计量,其计算本身受极值的影响就非常大
      2. 按照上面的计算方法,这个异常点可能仍在均值三倍标准差的范围内
      3. 因此按照这种方法剔除掉异常值后,需要重新观察数据的分布情况,看是否仍然存在显著异常点,若存在则继续重复迭代去寻找异常点
      • 为什么?

      因为剔除掉极值后,样本的方差可能发生变化了(正如文中所说,它不是一个稳健的估计量),每次剔除通常都会变化,所以需要重复的去做

    • 数据不服从正态分布: z s c o r e zscore zscore远离平均值的多少倍标准差

Z-Score的计算:

  • 标准分数,为该组数据中各个原始数据点脱离该组数据均值的幅度,幅度以标准差为衡量单位。

Z score的计算公式为 Z = ( x − μ ) σ Z = \frac{(x-μ)}{σ} Z=σxμ

Alpha因子的zscore计算。只有当两个因子的分布都为近似正态分布时,基于均值-标准差标准化得到的zscore 才有可比性,否则样本偏度和峰度的影响会使得个股在某一个因子上的得分明显偏大或偏小,其在多因子中的效用被显著放大或缩小,也就是提到的Percential Ranking Problem

  1. 可以通过切比雪夫不等式依然可以对均值的若干倍标准差之外的样本数据量的占比进行估计 P ( ∣ X − μ ∣ > k ∗ σ ) < = 1 k 2 P(|X-\mu|>k * \sigma)<= \frac{1}{k^2} P(Xμ>kσ)<=k21 , 但是问题又来了,随着k增加, 1 k 2 \frac{1}{k^2} k21快速减小,上界偏大,受数据分布的偏度和峰度影响下,这种方法可能会把过量的数据认定为异常点
  2. 我之前了解到的是,针对非正态分布的数据,那就把它往正态分布的数据变换,Box-Cox方法出现在我的眼界之中 Box-Cox公式推导

Box-Cox变换方法:

Box-Cox变换的一个显著优点是通过求变换参数来确定变换形式,而这个过程完全基于数据本身而无须任何先验信息,这无疑比凭经验或通过尝试而选用对数、平方根等变换方式要客观和精确。

Box-Cox变换的目的是为了让数据满足线性模型的基本假定,即线性、正态性及方差齐性,然而经Box-Cox变换后数据是否同时满足了以上假定,仍需要考察验证

经过这样的一个变换,例如就取对数,它会缩小数据之间的距离,这样可能会使得原来是异常值的点变为不是异常值,数据分布也不一定满足正态分布

  • 但是这种变换得到的数据分布往往都有明显的对称性,与正态分布的相似性更高
  • 只有取正值的数据才能使用Box-Cox变换,对于一些数据是负数或者为零,在Box-Cox变换之前,需要在所有值上加一个正数,使得所有数据为正。但这种移动是主观确定的
MAD(中值绝对偏差):

针对均值标准差方法的改进,把均值和标准差替换成稳健统计量,样本均值用样本中位数代替,样本标准差用样本MAD代替,通常把偏离中位数三倍以上的数据作为异常值,和均值标准差方法比,中位数和MAD的计算不受极端异常值的影响,结果更加稳健

MAD:在这里插入图片描述

箱线图

箱线图上其实也会注明异常值,假设Q1和Q3分别为数据从小到大排列的25%分位数 Q 1 Q1 Q1和75%分位数 Q 3 Q3 Q3(上下四分位数),记 I Q R (四分位距) = Q 1 − Q 3 IQR(四分位距)=Q1−Q3 IQR(四分位距)=Q1Q3

( − ∞ , Q 1 − 3 ∗ I Q R ) ⋃ ( Q 3 + 3 ∗ I Q R , + ∞ ) (−∞,Q1−3∗IQR)⋃(Q3+3∗IQR,+∞) (,Q13IQR)(Q3+3IQR,+)区间里的数据标识为异常点

  • 分位数也是稳健统计量, 因此Boxplot 方法对极值不敏感
  • 但如果样本数据正偏严重,且右尾分布明显偏厚时,Boxplot 方法会把过多的数据划分为异常数据

偏度调整:

样本偏度定义采用了MedCouple方法:
m d = m e d i a n ( x i , i = 1 , 2 , 3 , . . . , n ) md = median(x_i , i=1,2,3,...,n) md=median(xi,i=1,2,3,...,n)
m c = m e d i a n ( ( x i − m d ) − ( m d − x j ) x i − x j , x i > = m d ; x j < = m d ) mc = median(\frac{(x_i-md)-(md-x_j)}{x_i-x_j},x_i >= md ; x_j <= md) mc=median(xixj(ximd)(mdxj),xi>=md;xj<=md)

上下限L和U:
在这里插入图片描述

  • 区间 ( − ∞ , L ) ⋃ ( U , + ∞ ) (−∞,L)⋃(U,+∞) (,L)(U,+)上的点视为异常点。和原始Boxplot 方法相比,当样本数据分布右偏时,此法会提升正常数据区间上限的数值;样本数据左偏时,则会降低正常数据区间下限的数值

局部离群因子LOF

基于密度的离群点检测方法的关键步骤在于给每个数据点都分配一个离散度,其主要思想是:针对给定的数据集,对其中的任意一个数据点,如果在其局部邻域内的点都很密集,那么认为此数据点为正常数据点

而离群点则是距离正常数据点最近邻的点都比较远的数据点。通常有阈值进行界定距离的远近。在基于密度的离群点检测方法中,最具有代表性的方法是局部离群因子检测方法 (Local Outlier Factor, LOF)。

  • 核心:样本点跟周围邻居的密度对比

LOF通过计算一个数值score来反映一个样本的异常程度。这个数值的大致意思是:一个样本点周围的样本点所处位置的平均密度比上该样本点所在位置的密度。比值越大于1,则该点所在位置的密度越小于其周围样本所在位置的密度,这个点就越有可能是异常点。

d i s t a n c e ( A , B ) = m a x { d i s t a n c e k ( B ) , d i s t a n c e ( A , B ) } distance(A,B) = \\max\{distance_k(B),distance(A,B)\} distance(A,B)=max{distancek(B),distance(A,B)}

  • 距离A点最近的k个点B,它们到A点的距离被认为是相当的,等于D(A,B)

A 点局部可达密度 : l r d ( A ) = 1 ∑ B > N k ( A ) d i a t a n c e k ( A , B ) / k A点局部可达密度:lrd(A) = \frac{1}{\sum{_{B>N_k(A)}}diatance_k(A,B)/k} A点局部可达密度:lrd(A)=B>Nk(A)diatancek(A,B)/k1

N k ( A ) N_k(A) NkA是A点的k距离邻域, 也就是要计算A点与邻域内每一个点的距离

  • 表示的意义是:A点的k距离邻域内的点到A点的平均可达距离

在这里插入图片描述
给每个数据点都分配一个依赖于邻域密度的离群因子 LOF,进而判断该数据点是否为离群点。

  • 若异常分数 LOF 接近1,则说明样本点p的局部密度跟邻居的接近。
  • 若异常分数 LOF 小于1,表明p处于一个相对密集的区域,不像一个异常点。
  • ​ 若异常分数 LOF 远大于1,表明p跟其他点比较疏远,很可能是一个异常点

代码:

import pandas as pd
from sklearn.neighbors import LocalOutlierFactor
def lof(data, predict=None, k=5, method=1, plot=False):
    
    # 判断是否传入测试数据,若没有传入则测试数据赋值为训练数据
    try:
        if predict == None:
            predict = data.copy()
    except Exception:
        pass
    predict = pd.DataFrame(predict)
    # 计算 LOF 离群因子
    clf = LocalOutlierFactor(n_neighbors=k + 1, algorithm='auto', contamination=0.1, n_jobs=-1)
    clf.fit(data)
    # 记录 k 邻域距离
    predict['k distances'] = clf.kneighbors(predict)[0].max(axis=1)
    # 记录 LOF 离群因子,做相反数处理
    predict['local outlier factor'] = -clf._decision_function(predict.iloc[:, :-1])
    # 根据阈值划分离群点与正常点
    outliers = predict[predict['local outlier factor'] > method].sort_values(by='local outlier factor')
    inliers = predict[predict['local outlier factor'] <= method].sort_values(by='local outlier factor')
    return outliers, inliers
clf.fit(data)

#获取第 k 距离邻域内的每一个点到中心点的距离
clf.kneighbors(data)

#获取每一个样本点的 LOF 值,该函数范围 LOF 值的相反数,需要取反号
-clf._decision_function(data)

clf._predict(data) 则按照原先设置的 contamination 输出判断结果(按比例给出判断结果,异常点返回-1,非异常点返回1

致命缺点:

  • 必须不存在大于等于 k 个重复的点。当这样的重复点存在的时候,这些点的平均可达距离为零,局部可达密度就变为无穷大
  • 所有k diantance计算要去重

孤立森林

大多数基于模型的异常检测算法会先 ”规定“ 正常点的范围或模式,如果某个点不符合这个模式,或者说不在正常范围内,那么模型会将其判定为异常点

孤立森林的创新点包括以下四个:

  1. Partial models:在训练过程中,每棵孤立树都是随机选取部分样本(Bagging思想);
  2. No distance or density measures:不同于 KMeans、DBSCAN 等算法,孤立森林不需要计算有关距离、密度的指标,可大幅度提升速度,减小系统开销;
  3. Linear time complexity:因为基于 ensemble,所以有线性时间复杂度。通常树的数量越多,算法越稳定;
  4. Handle extremely large data size:由于每棵树都是独立生成的,因此可部署在大规模分布式系统上来加速运算。

算法思想:

我们用一个随机超平面对一个数据空间进行切割,切一次可以生成两个子空间(也可以想象用刀切蛋糕)。接下来,我们再继续随机选取超平面,来切割第一步得到的两个子空间,以此循环下去,直到每子空间里面只包含一个数据点为止

这好像和决策树回归有异曲同工之妙!通过区域划分的思想来判断/预测值!

那到底怎么区分呢?

直观上来看,我们可以发现,那些密度很高的簇要被切很多次才会停止切割,即每个点都单独存在于一个子空间内,但那些分布稀疏的点,大都很早就停到一个子空间内了

  • 稀疏的点是不是很有可能是离群点 , 惊!

算法过程:

  1. 从训练数据中随机选择 Ψ 个点作为子样本,放入一棵孤立树的根节点;
  2. 随机指定一个维度,在当前节点数据范围内,随机产生一个切割点 p —— 切割点产生于当前节点数据中指定维度的最大值与最小值之间(决策点划分);
  3. 此切割点的选取生成了一个超平面,将当前节点数据空间切分为2个子空间:把当前所选维度下小于 p 的点放在当前节点的左分支,把大于等于 p 的点放在当前节点的右分支;
  4. 在节点的左分支和右分支节点递归步骤 2、3,不断构造新的叶子节点,直到叶子节点上只有一个数据(无法再继续切割) 或树已经生长到了所设定的高度 。在这里插入图片描述
    X i X_i Xi 处于密度较高的区域,因此切割了十几次才被分到了单独的子空间,而 X o X_o Xo落在边缘分布较稀疏的区域,只经历了四次切分就被 “孤立” 了。
  • 然后用集成的思想,整合全部树的结果,计算每次切分结果的平均值,即计算异常分数 s。 对于每个样本 x,需要对其综合计算每棵树的结果

在这里插入图片描述

  • h(x) 为 x 在每棵树的高度,
  • c(Ψ) 为给定样本数 Ψ 时路径长度的平均值,用来对样本 x 的路径长度 h(x) 进行标准化处理

异常得分S:

  1. 如果异常得分接近 1,那么一定是异常点;

  2. 如果异常得分远小于 0.5,那么一定不是异常点;

  3. 如果异常得分所有点的得分都在 0.5 左右,那么样本中很可能不存在异常点。

官方文档:

sklearn.ensemble.IsolationForest(
              *, 
              n_estimators=100, 
              max_samples='auto', 
              contamination='auto', 
              max_features=1.0, 
              bootstrap=False, 
              n_jobs=None, 
              random_state=None, 
              verbose=0,               warm_start=False)

例子:

# 加载模型所需要的的包
import numpy   as np
import pandas  as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest

# 模型训练
iforest = IsolationForest(n_estimators=100, max_samples='auto',  
                          contamination=0.05, max_features=4,  
                          bootstrap=False, n_jobs=-1, random_state=1)




#  fit_predict 函数 训练和预测一起 可以得到模型是否异常的判断,-1为异常,1为正常
df['label'] = iforest.fit_predict(X) 

# 预测 decision_function 可以得出 异常评分
df['scores'] = iforest.decision_function(X) 

# 我们看看哪些预测为异常的
df[df.label==-1]

#可视化1
df['anomaly'] = df['label'].apply(lambda x: 'outlier' if x==-1  else 'inlier') 
fig = px.histogram(df,x='scores',color='anomaly') 
fig.show()

#可视化2
fig = px.scatter_3d(df,x='petal width (cm)', 
                       y='sepal length (cm)', 
                       z='sepal width (cm)', 
                       color='anomaly')
fig.show()

考点:数据集成

元数据集成:将多个数据源中的数据整合到一个一致的存储中

  • 注意的问题实体识别问题,要匹配来自不同数据源的现实世界中的实体(比如两个表中两个不同的属性代表着一个含义)

属性集成:对现实世界中的同一实体,来自不同数据源的属性值可能是不
同的

  • 注意的问题数据表示不同、数据的度量不同

数据规约

原因:

  1. 数据仓库中往往存有海量数据,在其上进行复杂的数据分
    析与挖掘需要很长的时间

  2. 通过数据归约可以得到比元数据小得多的数据集,但可以
    产生相同的(或几乎相同的)分析结果

目的:
得到能够与原始数据集近似等效甚至更好但数据量却较少的数据集

策略:

  • 维归约:减少所考虑的随机变量或属性个数。
    • 特征选择,降维,找出最小属性集,使得数据类的概率分布尽可能地接近使用所有属性得到的原分布
  • 数量规约:用较小的数据表示替换原数据。
    • 抽样…逐渐筛选、逐级抽样的过程
  • 数据压缩:使用变换,得到原数据的规约或压缩表示

考点:特征提取

  1. 主成分分析
  2. 线性判别分析
  3. 奇异值分解 SVD
  4. 算法提取,决策树、随机森林

考点: 数据量规约

  1. 属性子集选择
    • PCA
  2. 样本选择:筛选、抽样
  3. 数据聚合:尺度变换
    - 哈尔小波分解
    -
  4. 调整类分布:处理类别不平衡

数据变换

定义:将数据从一种表示形式变为另一种表现形式的过程

  • 标准化:
    数据的标准化是将数据按比例缩放,使之落入一个小的特定区间。其中最典型的是0-1标准化和Z-score标准化

离散化

  1. 算法需要
  2. 克服数据中隐藏的缺陷
  3. 有利于非线性数据的诊断和描述

离散化指把连续型数据切分为若干“段”,也就是分箱的过程

离散化就是把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。

例如:
原数据为:{ 1, 999 , 100000 ,15 } 处理之后为:{ 1,3,4,2 }

原数据为:{100,200},{20,50000},{1,400}; 处理之后为:{3,4},{2,6},{1,5};

模型中,同一线性系数应该对所有可能的计数值起作用。过大的计数值对无监督学习方法也会造成破坏,比如k-均值聚类,它使用欧氏距离作为相似度函数来测量数据点之间的相似度。数据向量某个元素中过大的计数值对相似度的影响会远超其他元素,从而破坏整体的相似度测量

  • 距离分箱-无监督
value, cutoff = pd.cut(df['mean radius'], bins=4, retbins=True, precision=2)
  • 等频分箱-无监督
value, cutoff = pd.qcut(s1, 3, retbins=True)
  • 利用聚类分箱-无监督
  • 信息熵分箱-有监督
  • 基于决策树分箱-有监督
  • 卡方分箱-有监督

聚类离散化

通过聚类算法(K-Means算法)将连续属性值进行聚类,处理聚类之后的到的k个簇。聚类考虑数据属性值的分布以及数据点的邻近性,因此可以产生高质量的离散化结果

model_kmeans = KMeans(n_clusters=4,random_state=0)
kmeans_result = model_kmeans.fit_predict(data_reshape)
df['amount_cut'] = kmeans_result

  • 聚类结果标签就是离散值

信息熵分箱

信息熵可以衡量区分能力,当特征按照某个分隔点划分为上下两部分后能达到最大的信息增益,那么这就是一个好的分隔点
利用信息增益最大化的方法寻找连续变量的最优切点,当切点确定后,将连续变量一分为二,分为两部分数据集,在这两部分数据集中用同样的方法循环切分,直到信息增益的值小于停止标准为止

决策树分箱

import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
import numpy as np

# bc = load_breast_cancer()
# df = pd.DataFrame.from_records(data=bc.data, columns=bc.feature_names)
# df['target'] = bc.target
print(df.sample(5)[["mean radius","target"]])

print("-----------------")

dt = DecisionTreeClassifier(criterion='entropy', max_depth=3) # 树最大深度为3
dt.fit(df['mean radius'].values.reshape(-1, 1), df['target'])

print(dt.tree_.feature) # 存放每个节点所采用的特征
print(dt.tree_.threshold) # 存放每个节点特征的阈值
print(dt.tree_.children_left) # 存放经过特征和阈值分裂之后的左孩子
print(dt.tree_.children_right) # 存放经过特征和阈值分裂之后右孩子

print("-----------------")
# 取出这课决策树的所有叶节点的分割点的阈值
print(np.where(dt.tree_.children_right > -1))
qtsr = dt.tree_.threshold[np.where(dt.tree_.children_right > -1)]
print(qtsr)

print(np.where(dt.tree_.children_left > -1))
qts = dt.tree_.threshold[np.where(dt.tree_.children_left > -1)]
print(qts)

print("-----------------")

qts = np.sort(qts)
res = [np.round(x, 3) for x in qts.tolist()]

print(res)

卡方分箱

它主要包括两个阶段:初始化阶段和自底向上的合并阶段。
1、初始化阶段:
首先按照属性值的大小进行排序(对于非连续特征,需要先做数值转换,然后排序),然后每个属性值单独作为一组。
2、合并阶段:
(1)对每一对相邻的组,计算卡方值。
(2)根据计算的卡方值,对其中最小的一对邻组合并为一组。
(3)不断重复(1),(2)直到计算出的卡方值都不低于事先设定的阈值或者分组数达到一定的条件(如,最小分组数5,最大分组数8)。
简单来讲,卡方分箱就是不断的计算相邻区间的卡方值(卡方值越小表示分布越相似),将分布相似的区间(卡方值最小的)进行合并,直到相邻区间的分布不同,达到一个理想的分箱结果。理想的分箱是在同一个区间内标签的分布是相同的。

feature_selection.chi2


在这里插入图片描述

在这里插入图片描述

聚类

距离聚类:
最小距离距离:挑类间最小距离的两个点合并,合并计算新距离矩阵时,选取距离小的

最大距离距离:挑类间最小距离的两个点合并,合并计算新距离矩阵时,`选取距离大的

考点: 数据探索性分析

构造衍生变量:通过已有变量,通过不同形式的组合而衍生出的变量

方法:

  1. 对多个列进行组合 (加减乘除,造属性)
  2. 分类汇总
  3. 对某个变量进行分解
  4. 对时间属性进一步提取时序特征(增长率,差分…)
  5. 评价性衍生变量 (好坏)

描述统计与可视化

  1. 算数平均值
  2. 中位数
  3. 标准差
  4. 方差
  5. 极差
  6. 偏度
  7. 峰度
  8. 分位数

Q - Q 图: 一个分布到另一个分布的漂移程度

频繁模式和关联规则挖掘

  • Support(支持度):表示某个项集出现的频率,也就是包含该项集的交易数与总交易数的比例
  • Confidence(置信度):表示当A项出现时B项同时出现的频率,记作{A→B}。换言之,置信度指同时包含A项和B项的交易数与包含A项的交易数之比。

频繁项集定义:

项集X的支持度计数是否大于最小支持度,大于等于,则为频繁项集

推理:项集X为某闭频繁项集的子集,一定频繁。

强规则:频繁且置信度大于最小置信度的规则

闭频繁项集:

  • 项集X的直接超集的支持度不等于项集X的支持度,那么项集X为闭频繁项集
  • 闭项集包含了频繁项集的完整信息

极大频繁项:项集X是频繁项集,X的所有超集均是非频繁项集,那么X为极大频繁项集

Apriori算法

基本思想:

  • 任何非频繁项集的超集都是不频繁的
  • 频繁项集的非空子集肯定是频繁的

算法过程:

  1. 扫描数据库,累计每一个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合
  2. 使用频繁1项集的集合,找出频繁2项集的集合,如此循环直到找不到k频繁项集
  3. 每次生成k个项集都需要完整扫描一次数据库(因为需要统计项集的支持度
  • 连接:扫描数据库中的所有事务,寻找k频繁项集(k项集筛选得到)
  • 剪枝:频繁k项集组合生成k+1频繁项集(排列组合,笛卡儿积+支持度筛选)
    • 如何剪枝?如何发现候选集的某子集是非频繁的,那么这个候选集必然非频繁
    • 给定一个k项集,只需要判断它的k-1项集是否频繁就行
  • 迭代以上两步,直到k

置信度高并非可信

D=10000
{DVD}=7500
{Tape}=6000
{DVD,Tape}=4000
S(Tape -> DVD)=4000/10000 = 0.4
C(Tape -> DVD)=4000/6000 = 0.66

FP-Growth

Apriori算法:需要重复扫描数据库,生成候选集集合,再筛选出频繁项集
FP-Growth:

  1. 采用分治策略,无需产生候选集
  2. 将数据库压缩到频繁模式树
  3. 压缩后的数据库分成条件数据库

算法流程

  • 扫描数据,得到所有频繁1项集的计数,去除原始数据非频繁1项集,然后按支持度降序排序
  • 读入排序后的数据集,按照排序后的顺序插入FP树中
    • 树具有层级特征
    • 必须从根节点开始
  • 如果有共有祖先,共用祖先支持度计数+1
  • 新节点出现,项头表对应的节点会通过节点链表链接上新节点
  • 从项头表底部(叶节点)依次向上找到条件模式基
    • 若叶节点唯一:条件模式基为支持度计数为共有祖先的支持度计数
    • 若不唯一:条件模式基支持度计数为 取出该节点的根路径重新计算该叶子节点根路径上公用祖先计数
  • 从条件模式基递归生成频繁项集

考点:置信度评价

  • 置信度 c o n f i d e n c e ( A − 》 B ) = P ( B ∣ A ) = P ( A U B ) P ( A ) confidence(A-》B) = P(B|A)= \frac{P(AUB)}{P(A)} confidenceAB=PBA=P(A)P(AUB)
  • 提升度 l i f t ( A − 》 B ) = c o n f i d e n ( A − 》 B ) P ( B ) = P ( B ∣ A ) P ( B ) = P ( A U B ) P ( A ) ∗ P ( B ) lift(A-》B) = \frac{confiden(A-》B)}{P(B)} = \frac{P(B|A)}{ P(B)}= \frac{P(AUB)}{ P(A)* P(B)} liftAB=PBconfidenAB=PBPBA=PAPBPAUB
    • 小于1,负相关
    • 大于1,正相关
    • 等于1,相互独立
  • 不平衡比 I R ( A , B ) = ∣ S ( A ) − S ( B ) ∣ S ( A ) + S ( B ) − S ( A U B ) IR(A,B)= \frac{|S(A)-S(B)|}{S( A)+S(B) - S(AUB)} IRAB=S(A)+S(B)S(AUB)S(A)S(B)
    • 等于0,二者方向相同,平衡
    • 二者差值越大,越不平衡

考点:基于规则的分类器

分类过程:

  1. 训练过程生成一系列规则
  2. 分类阶段发现测试实例触发的规则
  • 互斥:一条记录只能触发一个规则

考点: 评价指标

  • 准确率: acc = n+ / n , 问题:准确率高的规则可能覆盖率低
  • 似然比: R = 2 ∗ ∑ i = 1 k f i l o g ( f i / e i ) R = 2*\sum^k_{i=1}f_ilog(f_i/e_i) R=2i=1kfilog(fi/ei)
    • k是类的个数
    • fi是被规则覆盖的类i的样本的频数
    • ei:即期望频数( 随机猜测频数 )= 该规则所有类覆盖总数*该类出现总数/总样本数
  • L a p l a c e = n + + 1 n + k Laplace = \frac{n_+ +1} { n+k} Laplace=n+kn++1 (n是覆盖总数,n+是覆盖的正例数)
  • FOIL信息增益:
    • 原来有p0个正例,n0个反例
    • 加了规则覆盖后有p1个正例,n1个反例
    • F O I L = p 1 ∗ [ l o g 2 ( p 1 / p 1 + n 1 ) − l o g 2 ( p 0 / p 0 + n 0 ) ] FOIL =p_1* [log_2(p_1/p_1+n_1) - log_2(p_0/p_0+n_0)] FOIL=p1[log2(p1/p1+n1)log2(p0/p0+n0)]

考点:聚类

考量数据是否可以进行聚类

熵:可以反馈特征子集的聚类质量

E = ∑ i = 1 m [ p i l o g ( p i ) + ( 1 − p i ) l o g ( 1 − p i ) ] E = \sum^m_{i=1}[p_ilog(p_i)+(1-p_i)log(1-p_i)] E=i=1m[pilog(pi)+(1pi)log(1pi)]

  • 多簇数据集具有较小的熵,均匀分布熵很大
  • pi为所有采用得到的距离中,第i个距离区间所占比例

霍普金统计:空间统计量,描述数据的空间分布特征

H = ∑ i = 1 n d s i ∑ i = 1 n d s i + d r i H=\frac{\sum^n_{i=1}d_{si}}{\sum^n_{i=1}d_{si}+d_{ri}} H=i=1ndsi+drii=1ndsi

  • 均匀分布时,H=0.5
  • 聚集时:H>0.5

思想:现有数据集D,dri从D中采集所得,又从D中采样数据得到d_si,如果D是均匀分布的,dri和dsi相接近,H=0.5 ; 如果D不是均匀分布,dsi大于dri,那么H>0.5


代表点

  1. 分配阶段:根据距离函数,将每个数据点分配到S中距离它最近的代表点
  2. 优化阶段:对于每个簇,使得局部目标函数(簇内距离的和)最小化

Kmeans:

均方误差:

J = ∑ ∣ ∣ x − m i ∣ ∣ 2 m i = 1 n i ∑ x J = \sum||x-m_i||^2 \\ m_i= \frac{1}{n_i}\sum x J=∣∣xmi2mi=ni1x

  • 一开始是随机抽取质心,之后是以簇内均值作为质心
    • 适用于球状数据集,不适合非凸形状的簇
    • 对噪声和离群点敏感,少量的异常值极大的影响簇均值

K-medians :

J = ∑ ∣ ∣ x i − y i ∣ ∣ J= \sum ||x_i-y_i|| J=∣∣xiyi∣∣

  • y i y_i yi是每一个维度代表点的中值
  • 代表点可能不属于原数据集,对异常点不敏感

K-mediods :

  • 思想:将初始化的代表点集合S与数据集中选择的点进行交换(逐个尝试选择最优),来迭代更新S(改进为正时才替换)
  • 更替的代价函数:平均相异度

概率聚类

每个簇都是一个概率分布,该概率分布的参数在训练中获得,一般由EM算法估计

  • 每个数据都有一个归属概率,选择归属概率最大的簇

图聚类

  • 将数据转换成图进行分析
    • 转换方法:通过使用近邻图来定义成对相似性
    • 定义对象间的距离函数
  • 将每个数据定义为对象,每个对象都是单个节点
  • 找最近邻点
    • 如果两对象之间的距离小于特定的阈值,那么两对象之间存在一条边
    • 分别计算两阶段之间的k近邻,如果是k近邻的,加一条边,可以为互近邻
  • 核函数计算相似性

思想:

将图映射到多维空间,进行切图,使得切图的总代价最小(子图内点对之间权值大,子图间边权值较小)

层次聚类

自底向上:

  1. 初始化距离矩阵M
  2. 找到M中最近的两个簇i和j
  3. 将簇i和j合并,删除i和j两列,加上合并后的行列
  4. 更新距离矩阵M(最小、最大)

单链接:i和j更新过程中取最小值
全连接:i和j更新过程中先最大、后最小值
平均链接:取i和j的平均距离
均值链接: 取i和j距离的绝对值


BIRCH算法

自顶向下:

  • 引入CF树的层次结构
    1. 每个节点由多个聚类特征组成
    2. 每个聚类特征包含若干数据点
  • 基于叶子节点进行聚类

聚类特征CF(超球体)

  1. CF用一个三元组概括描述各簇的信息,每一个CF都可以用(N,LS,SS)表示
  2. 假设某簇有N个D维数据点,矢量LS是各点每一维的线性求和(一阶矩),多元组
  3. 标量SS,是各数据点每一维的平方和(二阶矩),多元组

CF(N,(x1,x2…),(x1^2, x2^2…))

CF的三个统计量:

  1. 簇质心 LS/N
  2. 成员对象到质心的平均距离 r = ∑ ( x i − x 0 ) 2 / N r = \sum(x_i-x_0)^2/N r=(xix0)2/N
  3. 簇直径:簇中两两数据点的平均距离 D = ( ∑ i ∑ j ( x i − x j ) 2 ) / N ( N − 1 ) 1 / 2 D=(\sum_i\sum_j(x_i-x_j)^2)/N(N-1)^{1/2} D=(ij(xixj)2)/N(N1)1/2

多阶段聚类

算法流程:

  • 数据点输入,通过计算直径或者半径和阈值比较(即是否在超球体内部)
  • 在超球体内部,加入 C F i CF_i CFi (距离最近的CF)
  • 不在超球体内部,新建 C F i CF_i CFi
  • 叶子节点是否大于最大节点数,大于分裂
  • 枝节点是否大于最大节点数,大于分裂
  • 对叶子节点进行聚类,稀疏簇:叶子节点内部离群的簇,进行删除,稠密簇:进行合并生成更大的簇

Chameleon

  • 考虑每个节点邻近的K个节点,即,只有最接近节点的K个节点会被认为与节点存在链接
  • 使用动态建模确定一对簇之间的相似度(簇中对象的连接情况和簇的邻近性)

步骤:

  1. 构造稀疏图:生成k近邻图
  2. 图划分算法,将K近邻图划分为大量相对较小的子簇
    - 边割最小
    - 大簇被切成小簇,其被切断的边的权值之和最小
  3. 使用凝聚层次聚类算法,基于子簇的相似度反复合并子簇
  4. 划分依据:互联性RI、近邻性RC(簇与簇之间的相似性)

概率凝聚层次聚类

  • 当距离计算无法进行时
  • 距离度量难以选择时

描述:

  1. 生成一个概率模型,一般选分布函数(高斯分布、伯努利分布),由模型参数确定
  2. 训练过程中,找出最佳的拟合观测参数
  1. 每个对象一个簇
  2. 找出一对簇Ci和Cj
  3. 簇合并度量准则: d i s t ( C i , C j ) = − l o g P ( C i U C j ) P ( C i ) P ( C j ) dist(C_i,C_j) = - log\frac{P(C_iUC_j)}{P(C_i)P(C_j)} dist(Ci,Cj)=logP(Ci)P(Cj)P(CiUCj)
  4. 如果 l o g P ( C i U C j ) P ( C i ) P ( C j ) log\frac{P(C_iUC_j)}{P(C_i)P(C_j)} logP(Ci)P(Cj)P(CiUCj)> 0,就合并两个簇 ,代表质量有提升
  • 缺点:结构不确定,可能具有多个描述数据的层次结构

DBSCAN

半径r,密度p

  1. 创建一个图,若每两个核心点是连接到一起的(密度可达),并且他们之间的距离在r内,则两个点之间连一条边
  2. 找出所有的连通子图
  3. 为每个边界点(稀疏点)找到一个与之有最强连接的连通子图
  4. 每个连通子图中的点作为簇

  • 有效发现任意形状的簇
    在这里插入图片描述
    优点:
  1. 可以对任意形状的稠密数据集进行聚类
  2. 可以在聚类过程中发现异常点,对数据集中的异常点不敏感
  3. 聚类结果没有偏倚

缺点:

  1. 样本集密度不均匀、聚类间距差非常大时,聚类质量较差,这时用DBSCAN聚类不合适
  2. 参合组合对结果影响大

考点:聚类评估

聚类簇数的选择

  1. 经验: k = ( n / 2 ) 1 / 2 k = (n/2)^{1/2} k=n/21/2
  2. 肘方法:

1.对于n个点的数据集,迭代计算k(从1到n),每次聚类完成后计算每个点到其所属的簇中心的距离平方和(簇内方差和)
2. 平方和逐渐减少直到0
3. 在这个平方和变化时,会出现一个拐点,即下降率突然变缓,这个拐点的k值即为所求

轮廓系数

对于其中的一个点 i 来说:

  • 计算簇内距离:a(i) = average (i向量到所有它属于的簇中其它点的距离)
    • 自身簇的紧凑性
  • 计算簇外距离:b(i) = min (i向量到某一不包含它的簇内的所有点的平均距离)
    • 和其他簇的分离程度

那么 i 向量轮廓系数就为:
在这里插入图片描述

可见轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。

  • 将所有点的轮廓系数求平均,就是该聚类结果总的轮廓系数。
    a(i) :i向量到同一簇内其他点不相似程度的平均值
    b(i) :i向量到其他簇的平均不相似程度的最小值

离群点检测

离群点定义:离群点是在数据集中偏离大部分数据的数据,使人怀疑这些数据的偏离并非由随机因素产生,而是完全产生于不同的机制

噪声:一个测量变量中的随机误差或偏差,包括错误的值,偏离期望的孤立点

基于密度

全局:

  • 直方图估计,根据数据的分布进行检测
  • 核密度估计,确定数据中的稀疏区域以报告异常点

局部:

  • LOF

基于聚类

思想:

  1. 基于聚类产生簇,寻找远离簇的数据点
  2. 考虑对象和它最近簇之间的距离

FindCBLOF:

  • 核心:检测簇中的离群点
  1. 聚类,按类别数量降序排序,分为大簇和小簇

  2. 赋予每个点一个基于簇的离群点检测因子CBLOF

    • 大簇:簇的大小 * 点与簇之间的相似性
    • 小簇:簇的大小 * 与最近的大簇之间的相似性
  3. CBLOF的值越大,与该簇越相似,越不是离群点

计算CBLOF因子,也就是一个点到最近的大簇的距离。

  • 如果这个点是大簇里面的点,直接计算他到簇中心的距离即可。
  • 如果这个点不是大簇点,分别计算其到所有大簇的距离,选最小的作为因子。

基于分类

one-class SVM :二分类的思想,只用判别是或者不是

SVDD:采用一个超球体而不是一个超平面来做划分

  • 特征空间中获得数据周围的球形边界
  • 最小化超球体的体积

孤立森林

  • 利用决策树的特点,多次对特征空间进行划分,然后观察“孤立”一个点的难易程度
  • 异常点往往在深度比较浅的叶子节点(一下子就划分出来的)

ARIMA

AR(p):

  • 自回归,用p个历史值预测当前值,p称为阶数,用PACF自相关系数确定p

I(d):

  • 差分,将非平稳的数据转换成平稳数据,后一个减去前一个

MA(q):

  • 移动平均,当前预测值等于q个历史预测误差的回归预测值,q为阶数,ACF系数确定q

考点:距离以及相似性

对称属性:属性的取值同等重要
非对称属性:属性的取值不同等重要

标称属性(nominal attribute):

  • 代表某种类别、编码或者状态。 比如头发颜色如黑色、棕色、黄色等。 标称属性值不具有有意义的序且并不是定量的。 众数是该属性的人中心趋势度量
  • 距离计算: d ( i , j ) = p − m p d(i,j) = \frac{p-m}{p} d(i,j)=ppm

序数属性

  • 大小是有意义的,可进行排序
  • 优秀、一般、良好

数值属性

  • 分数

影响距离计算的因素

  1. 领域相关性: 数据特征的重要性不一样;不相关特征叠加效应
  2. 高维度 (维度增加数据点之间的距离越来越难以区别,无法表达语义距离)- > Lp范数
  3. 分布特征
    • 全局:马氏距离 、ISOMAP 测地距离 ;
    • 局部:共享最近邻相似度
  4. 噪声

马氏距离:到分布中心点的距离
IOSMAP:测地距离

不寻常相似度的重要意义:

  1. 医疗数据,发现异常值,癌症、糖尿病
  2. 不寻常类别属性值匹配权重大于常出现值

TF-IDF

  • 余弦度量:
    c o s ( x , y ) = ∑ i = 1 d x i y i ∑ i = 1 d x i 2 y i 2 cos(x,y) = \frac{\sum^{d}_{i=1}x_iy_i}{\sqrt{\sum^{d}_{i=1}x_i^{2}y_i^{2}}} cos(x,y)=i=1dxi2yi2 i=1dxiyi
  • TF: 词频,在文档中出现的频率
    在这里插入图片描述
  • n:文章的总词数
  • ni: 该词在文档中出现的次数

在这里插入图片描述

  • i d i = l o g ( n n i + 1 ) id_i = log(\frac{n}{n_i+1}) idi=log(ni+1n)
  • 如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0 。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数

TF-IDF = TF * IDF

阻尼函数f(x):针对词频(xi)的,将词频取根号,或者log

TF-IDF = f(TF)* IDF

智能优化算法

形象综述:

“袋鼠跳”问题

既然我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰(尽管袋鼠本身不见得愿意那么做)。所以求最大值的过程就转化成一个“袋鼠跳”的过程。

作为对比下面简单介绍“袋鼠跳”的几种方式。

  1. 爬山法(最速上升爬山法)

    从搜索空间中随机产生邻近的点,从中选择对应解最优的个体,替换原来的个体,不断重复上述过程。因为爬山法只对“邻近”的点作比较,所以目光比较“短浅”,常常只能收敛到离开初始位置比较近的局部最优解上面。对于存在很多局部最优点的问题,通过一个简单的迭代找出全局最优解的机会非常渺茫。(在爬山法中,袋鼠最有希望到达最靠近它出发点的山顶,但不能保证该山顶是珠穆朗玛峰,或者是一个非常高的山峰。因为一路上它只顾上坡,没有下坡。)

  2. 模拟退火:

    这个方法来自金属热加工过程的启发。在金属热加工过程中,当金属的温度超过它的熔点(Melting Point)时,原子就会激烈地随机运动。与所有的其它的物理系统相类似,原子的这种运动趋向于寻找其能量的极小状态。在这个能量的变迁过程中,开始时,温度非常高, 使得原子具有很高的能量。随着温度不断降低,金属逐渐冷却,金属中的原子的能量就越来越小,最后达到所有可能的最低点
    利用模拟退火的时候,让算法从较大的跳跃开始,使到它有足够的“能量”逃离可能“路过”的局部最优解而不至于限制在其中,当它停在全局最优解附近的时候,逐渐的减小跳跃量,以便使其“落脚 ”到全局最优解上。(在模拟退火中,袋鼠喝醉了,而且随机地大跳跃了很长时间。运气好的话,它从一个山峰跳过山谷,到了另外一个更高的山峰上。但最后,它渐渐清醒了并朝着它所在的峰顶跳去。)

  3. 遗传算法:

    模拟物竞天择的生物进化过程,通过维护一个潜在解的群体执行了多方向的搜索,并支持这些方向上的信息构成和交换。是以面为单位的搜索,比以点为单位的搜索,更能发现全局最优解。(在遗传算法中,有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠,并希望存活下来的袋鼠是多产的,在它们所处的地方生儿育女。)(或者换个说法。从前,有一大群袋鼠,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。于是只好在那里艰苦的生活。海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。)

遗传算法GA

遗传算法的实现过程

遗传算法的实现过程实际上就像自然界的进化过程那样。

首先寻找一种对问题潜在解进行“数字化”编码的方案。(建立表现型和基因型的映射关系)然后用随机数初始化一个种群(那么第一批袋鼠就被随意地分散在山脉上),种群里面的个体就是这些数字化的编码。

接下来,通过适当的解码过程之后(得到袋鼠的位置坐标),用适应性函数对每一个基因个体作一次适应度评估(袋鼠爬得越高,越是受我们的喜爱,所以适应度相应越高)。
用选择函数按照某种规定择优选择(我们要每隔一段时间,在山上射杀一些所在海拔较低的袋鼠,以保证袋鼠总体数目持平。)。让个体基因变异(让袋鼠随机地跳一跳)。

然后产生子代(希望存活下来的袋鼠是多产的,并在那里生儿育女)。

  • 遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解。(你不必去指导袋鼠向那边跳,跳多远。)而只要简单的“否定”一些表现不好的个体就行了。(把那些总是爱走下坡路的袋鼠射杀,这就是遗传算法的精粹!

所以我们总结出遗传算法的一般步骤:

   开始循环直至找到满意的解。

1.评估每条染色体所对应个体的适应度。

2.遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。

3.抽取父母双方的染色体,进行交叉,产生子代。

4.对子代的染色体进行变异。

5.重复2,3,4步骤,直到新种群的产生。

结束循环。

编码方式: 二进制、浮点数

  1. 选择的作用:优胜劣汰,适者生存;

  2. 交叉的作用:保证种群的稳定性,朝着最优解的方向进化;

  3. 变异的作用:保证种群的多样性,避免交叉可能产生的局部收敛。

  • 物竞――适应度函数(fitness function)

    自然界生物竞争过程往往包含两个方面:生物相互间的搏斗与及生物与客观环境的搏斗过程。但在我们这个实例里面,你可以想象到,袋鼠相互之间是非常友好的,它们并不需要互相搏斗以争取生存的权利。它们的生死存亡更多是取决于你的判断。因为你要衡量哪只袋鼠该杀,哪只袋鼠不该杀,所以你必须制定一个衡量的标准。而对于这个问题,这个衡量的标准比较容易制定:袋鼠所在的海拔高度。(因为你单纯地希望袋鼠爬得越高越好。)所以我们直接用袋鼠的海拔高度作为它们的适应性评分。即适应度函数直接返回函数值就行了。

  • 天择――选择函数(selection)

    自然界中,越适应的个体就越有可能繁殖后代。但是也不能说适应度越高的就肯定后代越多,只能是从概率上来说更多。

参考链接


模拟退火

模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合一定的概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。

突跳概率

结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,那么具体的更新解的机制是什么呢?如果新解比当前解更优,则接受新解,否则基于Metropolis准则判断是否接受新解。接受概率为:

在这里插入图片描述
如上公式,假设当前时刻搜索的解为 x t x_t xt,对应的系统能量(目标函数)为E_t,对搜索点施加随机扰动,产生新解 x t + 1 x_{t+1} xt+1,相应地,系统能量为E_{t+1},那么系统对搜索点 x t x_t xt x t + 1 x_{t+1} xt+1转变的接受概率就为上公式

  • 假设开始状态在A,随着迭代次数更新到B局部最优解,这时发现更新到B时,能量比A要低,则说明接近最优解了,因此百分百转移.

  • 状态到达B后,发现下一步能量上升了,如果是梯度下降则是不允许继续向前的,而这里会以一定的概率跳出这个坑,这个概率和当前的状态、能量等都有关系.

  • 如果B最终跳出来了到达C,又会继续以一定的概率跳出来,直到到达D后,就会稳定下来。

算法实质分两层循环,在任一温度水平下,随机扰动产生新解,并计算目标函数值的变化,决定是否被接受。由于算法初始温度比较高,这样,使E增大的新解在初始时也可能被接受,因而能跳出局部极小值,然后通过缓慢地降低温度,算法就最终可能收敛到全局最优解,具体流程为:

在这里插入图片描述

  • 流程图:
    在这里插入图片描述

粒子群优化算法

  • 粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟
    • 粒子仅具有两个属性:速度和位置
    • 速度代表移动的快慢,位置代表移动的方向。

鸟被抽象为没有质量和体积的微粒(点),并延伸到N维空间,粒子i在N维空间的位置表示为矢量Xi=(x1,x2,…,xN),飞行速度表示为矢量Vi=(v1,v2,…,vN)

每个粒子都有一个由目标函数决定的适应值(fitness value),并且知道自己到目前为止发现的最好位置(pbest)和现在的位置Xi。这个可以看作是粒子自己的飞行经验。

除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好位置(gbest)(gbest是pbest中的最好值),这个可以看作是粒子同伴的经验。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

在这里插入图片描述
对于公式(1):

  • 公式(1)的第①部分称为【记忆项】,表示上次速度大小和方向的影响;

  • 公式(1)的第②部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分

  • 公式(1)的第③部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

在这里插入图片描述


标准PSO算法的流程

1)初始化一群微粒(群体规模为N),包括随机位置和速度;

2)评价每个微粒的适应度;

3)对每个微粒,将其适应值与其经过的最好位置pbest作比较,如果较好,则将其作为当前的最好位置pbest;

4)对每个微粒,将其适应值与其经过的最好位置gbest作比较,如果较好,则将其作为当前的最好位置gbest;

5)根据公式(2)、(3)调整微粒速度和位置;

6)未达到结束条件则转第2)步。

迭代终止条件根据具体问题一般选为最大迭代次数Gk或(和)微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。

参考链接


蚁群算法

算法基本思想:

  1. 根据具体问题设置多只蚂蚁,分头并行搜索
  2. 每只蚂蚁完成一次周游后,在行进的路上释放信息素,信息素量与解的质量成正比。
  3. 蚂蚁路径的选择根据信息素强度大小(初始信息素量设为相等),同时考虑两点之间的距离,采用随机的局部搜索策略。这使得距离较短的边,其上的信息素量较大,后来的蚂蚁选择该边的概率也较大。
  4. 每只蚂蚁只能走合法路线(经过每个城市1次且仅1次),为此设置禁忌表来控制。
  5. 所有蚂蚁都搜索完一次就是迭代一次,每迭代一次就对所有的边做一次信息素更新,原来的蚂蚁死掉,新的蚂蚁进行新一轮搜索。
  6. 更新信息素包括原有信息素的蒸发和经过的路径上信息素的增加。
  7. 达到预定的迭代步数,或出现停滞现象(所有蚂蚁都选择同样的路径,解不再变化),则算法结束,以当前最优解作为问题的最优解。

在这里插入图片描述
在这里插入图片描述


  • 流行度:物品的流行度指对物品产生过行为的用户的总数

    • 用户越活跃,越倾向于浏览冷门的商品
  • 召回率

    • 对该用户推荐多少个物品用户真喜欢 与 用户喜欢的物品 之比
    • 推荐的客观效果
  • 精度

    • 对该用户推荐多少个物品用户真喜欢 与 推荐的物品之比
    • 推荐的准不准,主观效果
  • 覆盖率:推荐商品的数量占总商品数的比例

协同过滤


协同:就是利用群体的行为来做决策(推荐),生物上有协同进化的说法,通过协同的作用,让群体逐步进化到更佳的状态。

  • 通过用户的持续协同作用,最终给用户的推荐会越来越准

过滤:就是从可行的决策(推荐)方案(标的物)中将用户喜欢的方案(标的物)找(过滤)出来。

协同过滤分为基于用户的协同过滤和基于标的物(物品)的协同过滤两类算法。


先说缺点:

  1. 随着网站的用户数目越来越大,计算用户的兴趣相似度矩阵将越来越困难,复杂度与用户数呈平方关系
  2. 基于用户的推荐很难解释

ItemCF

  • 物以类聚,就是计算出每个标的物最相似的标的物列表,我们就可以为用户推荐用户喜欢的标的物相似的标的物,这就是基于物品(标的物)的协同过滤
    在这里插入图片描述
  • ItemCF并不是利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度

计算步骤

计算物品之间的相似度

w i j = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ w_{ij} = \frac{|N(i)\cap N(j)|}{|N(i)|} wij=N(i)N(i)N(j)

  • 分子:同时喜欢物品i和j的用户数

  • 公式理解:

    • 喜欢物品i的用户中是有多少喜欢物品j
    • 物品的相似度来源于用户,用户的历史兴趣列表给物品贡献相似度
  • 问题:

    • 物品j太过于热门,所有的用户都喜欢,相似度为1,那么j与热门的物品都有很大的相似度
  • 缓解:加阻尼函数,惩罚权重
    w i j = ∣ N ( i ) ∩ N ( j ) ∣ ∣ N ( i ) ∣ ∗ ∣ N ( j ) ∣ w_{ij} = \frac{|N(i)\cap N(j)|}{\sqrt{|N(i)|*|N(j)|}} wij=N(i)N(j) N(i)N(j)

建立用户-物品倒排表:

  • 每个用户建立一个包含他喜欢的物品的列表
  • 过程:由用户的历史物品列表,遍历生成物品相似度矩阵
def ItemSimilarity(train):
	#通过用户计算物品的相似度
	C = dict{}
	N = dict{}	# 记录用户/物品遍历次数,用于归一化
	for users,items in train.items():
		for i in items:
			N[i] += 1
			for j in items:
				if i==j : # 矩阵对角线排除
					continue 
				C[i][j] += 1
	# 计算最后的相似度系数矩阵
	W = dict{}
	for i,related_items in C.items():
		for j , cij in related_items():
			W[u][v] = cij / math.sqrt(N[i]*N[j]) # cij本身就是两物品出现次数的加和,这里就行归一化
	return W

生成推荐列表

得到物品的相似度矩阵后,计算用户u对一个物品的兴趣:
p u j = ∑ i ∈ N ( u ) ∩ S ( j , K ) w j i ∗ r u i p_{uj}= \sum_{i\in N(u) \cap S(j,K)}w_{ji} * r_{ui} puj=iN(u)S(j,K)wjirui

  • N(u) : 用户喜欢的物品的集合
  • S(j,K):和物品j最相似的K个物品的集合
  • wji : 物品j和i的相似度
  • rui:用户u对i的兴趣(兴趣得定义,例如:用户对该物品有过行为
"""
生成推荐排名 rank  , K 是个比较关键的超参数
"""
def recommondation(train, user_id ,W ,K):
	rank = dict{}
	ru = train[user_id] #(物品,兴趣) :用户喜欢某个物品,和对该物品的兴趣
	for i,pi in ru.items(): # 遍历用户的喜欢物品的集合和兴趣
		# 遍历和物品i最相似的top K 个物品,用相似度矩阵该物品行的相似度就行排序
		for j,wj in sorted(W[i].items(),\
						key=itemgetter(1),reverse=True)[0:K]:
			if j in ru: # 去除掉用户已经喜欢的,即已经在用户喜欢列表内的
				continue
			# 剩下的就隐含的、可能喜欢的,同时进行解释哪些物品参与了贡献
			rank[j].weight += pi * wj
			rank[j].reason[i] = pi * wj
	return rank
			
				
  • K 是个比较关键的超参数,可提升精度和召回,但是K增加覆盖率必然降低

考虑用户活跃度

100万个商品,有一个用户买了80%的商品,那他的相似度矩阵相当的大,80w * 80w,但他是商户,买东西不是自己的兴趣,那么他的贡献度应该很小才对
提出了IUF,用户活跃度对数的倒数的参数:活跃的用户对物品的贡献度应该低于不活跃的用户
w i j = ∑ u ∈ N ( i ) ∩ N ( j ) l o g ( 1 + ∣ N ( u ) ∣ ) ∣ N ( i ) ∣ ∣ N ( j ) ∣ w_{ij}=\sum_{u \in N(i)\cap N(j)}\frac{log(1+|N(u)|)}{\sqrt{|N(i)||N(j)|}} wij=uN(i)N(j)N(i)∣∣N(j) log(1+N(u))

  • 说白了就是惩罚活跃的用户
  • IUF 提高了覆盖率,降低了流行度

归一化

  • ItemCF的相似度矩阵按最大值归一化,可以提高推荐的准确率。
    w i j = w i j max ⁡ w i j w_{ij} = \frac{w_{ij}}{\max w_{ij}} wij=maxwijwij

为什么这样做呢?

一般情况下,ItemCF类内的相似度要大于类间的相似度,这样的话推荐的都是一类的。这样归一化后,类间和类内的推荐几率和数目应该一样

基于用户

人以群分,就是我们可以将与该用户相似的用户喜欢过的标的物的标的物推荐给该用户(而该用户未曾操作过),这就是基于用户的协同过滤。

在这里插入图片描述

步骤

找到相似的用户集合

  • 计算两个用户的相似度
    • 通过用户的物品列表的长度计算
    • w A B = ∣ N ( u ) ∩ N ( v ) ∣ ∣ N ( i ) ∣ ∗ ∣ N ( j ) ∣ w_{AB}=\frac{|N(u)\cap N(v)|}{\sqrt{|N(i)|*|N(j)|}} wAB=N(i)N(j) N(u)N(v)
    • 这里的绝对值是长度
def UserSimilarity(train):
	W = dict{} # 通过物品集建立用户相似度矩阵
	for u in train.keys():
		for v in train.keys():
			if u==v:
				continue
			W[u][v] = len(train[u] & train[v])
			W[u][v] /= math.sqrt(train[u])*len(train[v])
	return W
  • 两两用户之间计算相似度开销太大,且矩阵稀疏,很多用户没有对相同商品产生行为
    • 错误想法: 详细来说就是,用户的物品列表长度不一,直接存的话方阵大部分是空的,给0的话开销也很大,用物品的倒排表的意义就是,减少物品列表很长的用户和物品列表很短的

    • 正解:开销大不是矩阵的存储开销大,而是计算用户和用户的相似度的开销大,为什么大呢?用户和用户之间的商品列表差别太大了,交集很大几率为0,那矩阵里面很大一部分为0
    • 存储开销无法避免,计算开销可以不要计算为0的相似度,倒过来去计算不为0的,只要分子不为0,相似度必不为0
    • 所以用物品倒排表,两用户出现在一个物品列表中就加1,这样来计算相似度
def UserSimilarity(train):
	# 建立倒排表
	item_users = dict{}
	for u,items in train.items():
		for i in item.keys(): # 遍历物品列表
			if i not in item_users:
				item_users[i] = set()
			item_users.add(u)
	# 计算频率
	C = dict{}
	N = dict{}
	for i,users in item_users.items():
		for u in users:
			N[u] += 1
			for v in users:
				if u==v:
					continue
				C[u][v]+=1
	# 计算相似度
	W = dict{}
	for u, related_users in C.items():
		for v, cuv in related_users.item():
			W[u][v]= cuv / math.sqrt(N[u]*N[v])
	
	return W
	

推荐列表

def Recommend(user,train,W):
	rank = dict{}
	interacted_items = train[user]
	# 相似度Top K 排序
	for v, wuv in sorted(W[u].items, key=itemgetter(1), \
						reverse=True) [0:K]:
		if i in interacted_items:
			# 已知用户喜欢列表的东西就不推荐了
			continue			
		rank[i] += wuv * rvi
	return rank	

协同过滤的核心是怎么计算标的物之间的相似度以及用户之间的相似度

在这里插入图片描述
在这里插入图片描述

公式的分子:就是下图矩阵中对应的i列和j列中同一行中的两个元素(红色矩形中的一对元素)相乘,并且将所有行上第i列和第j列的元素相乘得到的乘积相加

公式中分母:是第i行与第i行按照上面类似的方法相乘再相加后开根号的值,再乘以第j行与第j行按照上面类似的方法相乘再相加后开根号的值。

ALS算法

ALS算法是基于模型的推荐算法。

基本思想:

对稀疏矩阵进行模型分解,评估出缺失项的值,以此来得到一个基本的训练模型。然后依照此模型可以针对新的用户和物品数据进行评估。ALS是采用交替的最小二乘法来算出缺失项的。交替的最小二乘法是在最小二乘法的基础上发展而来的。

在这里插入图片描述

  • ALS的核心思想是:将用户和物品都投射到k维空间,也就是说假设有k个隐向量特征,至于这个k个隐向量是什么不用关系(可能是标签,年龄,性别等),将每个用户和每个物品都用k维的向量来表示,把他们的内积近似为打分值,这样便可以得到近似的评分。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

考试题

数据挖掘导论课后习题:
专栏
第二章
第三章
第四章



第一章 绪论
一.判断题(共10题,83.0分)
下面各项是否是数据挖掘任务?
1根据性别划分公司的顾客
我的答案:× 得分: 8.3分正确答案:× 答案解析: 这属于简单的数据库查询
2根据可盈利性划分公司的顾客
我的答案:× 得分: 8.3分正确答案:× 答案解析: 这是简单的会计计算
3计算公司的总销售额
我的答案:× 得分: 8.3分正确答案:× 答案解析: 这是简单的会计计算
4按学生的标识号对学生数据库进行排序
我的答案:× 得分: 8.3分正确答案:× 答案解析: 这是简单的数据库查询
5 预测掷骰子的结果
我的答案:× 得分: 8.3分正确答案:× 答案解析: 由于每一面都是同等概率,属于概率计算;如果概率是不同等,根据历史数据预测结果则更类似于数据挖掘任务
6 使用历史记录预测某公司未来的股价价格
我的答案:√ 得分: 8.3分正确答案:√ 答案解析: 需要建立模型来预测股票价格,属于数据挖掘领域中的预测模型,可以使用回归来建模,或使用时间序列分析
7 监测病人心率的异常变化
我的答案:√ 得分: 8.3分正确答案:√ 答案解析: 需要建立正常心率行为模型,并预警非正常心率行为。这属于数据挖掘领域的异常检测。若有正常和非正常心率行为样本,则可看作一个分类问题
8 监视地震活动的地震波
我的答案:√ 得分: 8.3分正确答案:√ 答案解析: 需要建立与地震活动相关的不同波形的模型,并预警波形活动。这属于数据挖掘领域的分类问题
9 提取声波的频率
我的答案:× 得分: 8.3分正确答案:× 答案解析: 属于信号处理问题
10 为用户提供电影推荐
我的答案:√ 得分: 8.3分正确答案:√ 答案解析: 典型推荐问题
二.简答题(共2题,17.0分)
1 举例说明数据挖掘、数据分析、机器学习、人工智能的概念以及区别。
正确答案:
数据挖掘是:从海量的业务数据中识别出巨量数据中有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程。数据挖掘受到很多学科领域的影响,其中数据库、机器学习、统计学无疑影响最大。简言之,对数据挖掘而言,数据库提供数据管理技术,机器学习和统计学提供数据分析技术。
数据分析,是指使用适当的统计分析方法(如聚类分析、相关性分析等)对收集来的大量数据进行分析,从中提取有用信息和形成结论,并加以详细研究和概括总结的过程。
机器学习:利用经验(以数据的形式存在)来改善计算机系统自身的性能,是人工智能的核心研究领域之一,也是计算机科学的子领域,同时也是人工智能的一个分支和实现方式。同时给出了形式化的描述:对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么就称这个计算机程序在从经验E学习。
人工智能:是使计算机模拟或实现人类的学习行为,以获取新的知识和技能,使之不断改善自身的性能。
区别:我们可以把数据挖掘理解为一种类型的工作,或工作中的某种成分,机器学习是帮助完成这个工作的方法,所以说机器学习和数据库是数据挖掘的两大支撑技术。统计学、数据库和人工智能共同构造了数据挖掘技术的三大支柱,许多成熟的统计方法构成了数据挖掘的核心内容。数据分析是把数据变成信息的工具,数据挖掘是把信息变成认知的工具,如果我们想要从数据中提取一定的规律(即认知)往往需要数据分析和数据挖掘结合使用。从数据分析的角度来看,绝大多数数据挖掘技术都来自机器学习领域,但机器学习研究往往并不把海量数据作为处理对象,因此,数据挖掘要对算法进行改造,使得算法性能和空间占用达到实用的地步。同时,数据挖掘还有自身独特的内容,即关联分析。
我的答案:
一、 概念
数据挖掘:一般是指从大量的数据中通过算法搜索隐藏于其中信息的过程。
数据分析:是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程;
机器学习:通过计算机实现并采用特定算法学习和识别被测对象的隐含规律和联系,并做出智能决策;
人工智能:是使计算机模拟或实现人类的学习行为,以获取新的知识或技能,使之不断改善自身的性能;
二、区别
1、数据挖掘通常与计算机科学有关,更多针对内部企业行业小众化的数据挖掘,数据挖掘主要发现的是问题和诊断;
2、数据分析就是进行做出针对性的分析和诊断;
3、机器学习强调学习(任务➡训练过程➡模型表现P),而不是计算机程序;
4、人工智能包括了数据挖掘和机器学习,人工智能是目的、结果。机器学习是方法、工具; 批语 回答正确
2 当前主流的数据挖掘工具有哪些?下载其中一个工具,尝试简单操作。
正确答案: 1、 Weka WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。 2、 Rapid Miner RapidMiner是世界领先的数据挖掘解决方案,在一个非常大的程度上有着先进技术。它数据挖掘任务涉及范围广泛,包括各种数据艺术,能简化数据挖掘过程的设计和评价。 3、 Orange Orange是一个基于组件的数据挖掘和机器学习软件套装,它的功能即友好,又很强大,快速而又多功能的可视化编程前端,以便浏览数据分析和可视化,基绑定了 Python以进行脚本开发。它包含了完整的一系列的组件以进行数据预处理,并提供了数据帐目,过渡,建模,模式评估和勘探的功能。其由C++ 和 Python开发,它的图形库是由跨平台的Qt框架开发。 4、 Knime KNIME (Konstanz Information Miner) 是一个用户友好,智能的,并有丰演的开源的数据集成,数据处理,数据分析和数据勘探平台。 5、 jHepWork jHepWork是一套功能完整的面向对象科学数据分析框架。 Jython宏是用来展示一维和二维直方图的数据。该程序包括许多工具,可以用来和二维三维的科学图形进行互动。 6、 Apache Mahout Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下免费使用。该项目已经发展到了它的最二个年头,目前只有一个公共发行版。Mahout 包含许多实现,包括集群、分类、CP 和进化程序。此外,通过使用 Apachehadoop库,Mahout 可以有效地扩展到云中。 7、 ELKI ELKI(Environment for Developing KDD-Applications Supported by Index-Structures)主要用来聚类和找离群点。ELKI是类似于weka的数据挖掘平台,用java编写,有GUI图形界面。可以用来寻找离群点。 8、 Rattle Rattle(易于学习的 R 分析工具)提供数据的统计和可视化摘要,将数据转换成容易建模的形式,从数据中构建无监督和监督模型,以图形方式呈现模型的性能,并得出新的数据集。
第二章 数据仓库
一.简答题(共5题,100.0分)
1 数据仓库与数据库的本质区别是什么?
我的答案: 1、数据库用于事务处理,数据仓库用于决策分析; 2、数据库保持事务处理的当前状态,数据仓库既保存过去的数据又保存当前的数据; 3、数据仓库的数据是大量数据库的集成; 4、对数据库的操作比较明确,操作数据量少,对数据仓库操作不明确,操作数据量大。5、数据库是细节的、在存取时准确的、可更新的、一次操作数据量小、面向应用且支持管理; 6、数据仓库是综合或提炼的、代表过去的数据、不更新、一次操作数据量大、面向分析且支持决策。 数据库:是一种逻辑概念,用来存放数据的仓库。通过数据库软件来实现。数据库由很多表组成,表是二维的,一张表里可以有很多字段。字段一字排开,对应的数据就一行一行写入表中。数据库的表,在于能够用二维表现多维关系。目前市面上流行的数据库都是二维数据库。如:Oracle、DB2、MySQL、Sybase、MS SQL Server等。 数据仓库:是数据库概念的升级。从逻辑上理解,数据库和数据仓库没有区别,都是通过数据库软件实现的存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大得多。数据仓库主要用于数据挖掘和数据分析,辅助领导做决策。
2 OLAP、OLTP全称是什么?两者有何区别?
我的答案: 操作型处理:叫联机事务处理OLTP(On-Line Transaction Processing,),也可以称面向交易的处理系统, 1、它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。2、OLTP是传统关系数据库的主要应用,主要是基本的、日常的事务处理,如银行交易。 分析型处理:叫联机分析处理OLAP(On-Line Analytical Processing), 1、是数据仓库的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。2、OLAP具有汇总、合并和聚集功能,以及从不同角度观察信息的能力,支持多维分析和决策。
3 说明数据仓库与数据挖掘的关系
我的答案: 1一般情况下,进行数据挖掘之前,都会先用各个数据库中的数据构建数据仓库,再在数据仓库的基础之上进行挖掘。2数据挖掘是在数据仓库中进行数据深层分析的一种必不可少的手段。3数据仓库并不是进行数据挖掘必需的条件,数据挖掘可以不在建立数据仓库的基础上进行。
4 什么是元数据?元数据在数据仓库中有什么作用?
我的答案: 元数据:是对数据描述的基础,是数据的数据。
元数据的作用:
1用来对数据仓库中的各种数据进行描述。
2用来组织和管理并挖掘信息资源。
3描述系统的具体功能要求、执行程序和系统的整体过程。
4为数据模型提供存储说明和存储格式,便于扩展。
5 说明数据仓库的4个特点
我的答案: 1、数据仓库的数据是面向主题的
2、数据仓库的数据是集成的
3、数据仓库的数据是不可更新的
4、数据仓库的数据是随时间不断变化的
第三章 分类
一.单选题(共10题,50.0分)
1 决策树中不包含一下哪种结点
A、 根结点 B、 内部结点 C、 外部结点 D、 叶结点
正确答案: C 我的答案:C得分: 5.0分
2 以下哪项关于决策树的说法是错误的
A、 冗余属性不会对决策树的准确率造成不利的影响
B、 子树可能在决策树中重复多次
C、 决策树算法对于噪声的干扰非常敏感
D、 寻找最佳决策树是NP完全问题
正确答案: C 我的答案:C得分: 5.0分
3 以下关于人工神经网络(ANN)的描述错误的有
A、 神经网络对训练数据中的噪声非常鲁棒
B、 可以处理冗余特征
C、 训练ANN是一个很耗时的过程
D、 至少含有一个隐藏层的多层神经网络
正确答案: A 我的答案:A得分: 5.0分
4 在ID3算法中信息增益是指
A、 信息的溢出程度 B、 信息的增加效益 C、 熵增加的程度最大 D、 熵减少的程度最大
正确答案: D 我的答案:D得分: 5.0分
5 分类是一种( )学习
A、 无监督 B、 半监督 C、 监督 D、 以上都错
正确答案: C 我的答案:C得分: 5.0分
6 朴素贝叶斯分类算法是基于( )的朴素假定
A、 类条件相关 B、 类条件独立 C、 类条件正相关 D、 类条件负相关
正确答案: B 我的答案:B得分: 5.0分
7 下列哪项说法不正确
A、 人工智能是对人类智能的模拟
B、 人工神经元是对生物神经元的模拟
C、 生物神经信号由树突传递给轴突
D、 人工神经元的激活函数可以有多种设计
正确答案: C 我的答案:C得分: 5.0分
8 贝叶斯网络起源于贝叶斯统计学,是以( )为基础的有向图模型,它为处理不确定知识提供了有效方法。
A、 线性代数 B、 逻辑学 C、 概率论 D、 信息论
正确答案: C 我的答案:C得分: 5.0分
9 SVM算法的性能取决于( )
A、 核函数的选择 B、 软间隔参数 C、 核函数的参数 D、 以上所有
正确答案: D 我的答案:D得分: 5.0分
10 以下有关支持向量机说法不正确的是( )
A、 具有很好的推广能力 B、 采用结构化风险最小化原理
C、 是凸二次优化问题 D、 得到的是局部最优解
正确答案: D 我的答案:D得分: 5.0分

二.判断题(共10题,50.0分)
1 神经网络对噪音数据具有高承受能力,并能对未经过训练的数据具有分类能力,但其需要很长的训练时间,因而对于有足够长训练时间的应用更合适。
我的答案:√ 得分: 5.0分正确答案:√
2 数据分类由两步过程组成:第一步,建立一个聚类模型,描述指定的数据类集或概念集;第二步,使用模型进行分类。
我的答案:× 得分: 5.0分正确答案:×
3 分类规则的挖掘方法通常有:决策树法、贝叶斯法、人工神经网络法、粗糙集法和遗传算法。
我的答案:√ 得分: 5.0分正确答案:√
4 对于SVM分类算法,待分样本集中的大部分样本不是支持向量,移去或者减少这些样本对分类结果没有影响。
我的答案:√ 得分: 5.0分正确答案:√
5 Bayes法是一种在已知后验概率与类条件概率的情况下的模式分类方法,待分样本的分类结果取决于各类域中样本的全体。
我的答案:× 得分: 5.0分正确答案:×
6 分类是预测数据对象的离散类别,预测是用于数据对象的连续取值。
我的答案:√ 得分: 5.0分正确答案:√
7 反向传播算法中要先计算靠近输入层参数的梯度,再计算靠近输出层参数的梯度
我的答案:× 得分: 5.0分正确答案:×
8 贝叶斯网络具有的条件独立性是结点与其后代结点条件独立
我的答案:× 得分: 5.0分正确答案:×
9 支持向量是最靠近决策表面的数据点
我的答案:√ 得分: 5.0分正确答案:√
10 数据有噪声,有重复值,不会导致SVM算法性能下降
我的答案:× 得分: 5.0分正确答案:×

第四章 数据预处理
一.单选题(共10题,100.0分)
1 假设16个销售价格记录组已经排序如下:21, 68,15 , 57 , 95 ,30, 126 , 89 , 50, 5, 34, 70, 46, 2,108, 10。将它们划分成四个箱。等频划分时,50在第几个箱子内?( )
A、 第一个 B、 第二个 C、 第三个 D、 第四个
正确答案: C 我的答案:C得分: 10.0分
2 下面哪个不属于数据的属性类型:( )
A、 标称 B、 相异 C、 区间 D、 序数
正确答案: B 我的答案:B得分: 10.0分
3 下列关于等距离分箱的说法中错误的是()
A、 等距离分箱能使每个区间内包含的取值个数大致相同
B、 等距离分箱可能导致属于某些的取值非常多,而某些由非常少
C、 若区间个数为k,每个区间的间距为L=(max-min)/k
D、 又称为等宽度分箱
正确答案: A
4 下列关于数据规范化说法错误的是()
A、 数据规范化是为了避免不同属性的不平等地位
B、 数据规范化又称数据标准化
C、 数据规范化是将属性的取值范围统一
D、 数据规范化是为了给重要的属性赋予更大的权重
正确答案: D 我的答案:D得分: 10.0分
5 数据预处理的任务不包括()
A、 数据规范化和离散化 B、 特征提取和特征选择 C、 数据分类 D、 数据清洗
正确答案: C 我的答案:C得分: 10.0分
6 缺失值处理方法中错误的是()
A、 对于所有属性都可以使用均值 B、 对于离散属性或定性属性使用众数
C、 转换为分类问题或数值预测问题 D、 对于分类属性,使用同类对象属性值的均值
正确答案: A 我的答案:A得分: 10.0分
7 使用零均值规范化方法,年收入属性的均值为65,标准差为12,则年收入59万元规范化后为()
A、 -0.2 B、 0.2 C、 0.5 D、 -0.5
正确答案: D 我的答案:D得8 使用最小-最大法进行数据规范化,需要映射的目标区间为【0,100】,原来的取值范围是【-10,10】。根据等比映射的原理,一个值8映射到新区间后的值是()
A、 80 B、 85 C、 90 D、 95
正确答案: C 我的答案:C得分: 10.0分
9 列哪些选项能表示序数属性的数据集中趋势度量()
A、 标准差 B、 四分位数 C、 极差 D、 众数
正确答案: D 我的答案:D得分: 10.0分
10 下列对客户相关属性描述中,不是标称属性的是()
A、 身份证号 B、 性别 C、 年龄 D、 婚姻状况
正确答案: C 我的答案:C得分: 10.0分
第五章 聚类
一.单选题(共10题,100.0分)
1 下列描述正确的是( )
A、 分类和聚类都是有指导的学习
B、 分类和聚类都是无指导的学习
C、 分类是有指导的学习,聚类是无指导的学习
D、 分类是无指导的学习,聚类是有指导的学习
正确答案: C
2 简单地将数据对象集划分成不重叠的子集,使得每个数据对象恰在一个子集中,这种聚类类型称作( )
A、 层次聚类 B、划分聚类 C、非互斥聚类 D、模糊聚类
正确答案: B 我的答案:B得分: 10.0分
3 关于K均值聚类说法不正确的是()
A、算法可能终止于局部最优解 B、簇的数目k必须事先给定
C、对噪声和离群点数据敏感 D、适合发现非凸形状的簇
正确答案: D 我的答案:D得分: 10.0分
4 闵可夫斯基距离表示为曼哈顿距离时p为()
A、1 B、2 C、3 D、4
正确答案: A 我的答案:A得分: 10.0分
5 有关聚类的说法中错误的是()
A、无须有标记的样本
B、可以用于提取一些基本特征
C、可以解释观察数据的一些内部结构和规律
D、聚类分析一个簇中的数据之间具有高差异性
正确答案: D 我的答案:D得分: 10.0分
6 K中心点算法每次迭代的计算复杂度是()
A、 O(1) B、 O(k) C、 O(nk) D、 O(k(n-k)2)
正确答案: D 我的答案:D得分: 10.0分

7 如果有m个点,DBSCAN算法在最坏的情况下的时间复杂度为( )
A、 O(m) B、 O(mlogm) C、 O(m2) D、 O(logm)
正确答案: C 我的答案:C得分: 10.0
8 DBSCAN能够聚类以下哪种形状的数据( )
A、 球形 B、 环状 C、 方型 D、 以上都可以
正确答案: D 我的答案:D得分: 10.0分
9 DBSCAN之所以难以有效处理高维数据,其主要原因是( )
A、 数据的形状太复杂 B、 簇的大小未知 C、 噪声点过多 D、 开销过大
正确答案: D 我的答案:
10 K均值算法中,当相似度函数采用( )时,合适的质心是簇中各点的中位数。 A、 曼哈顿距离 B、 欧几里得距离 C、 余弦距离 D、 马氏距离
正确答案: A 我的答案:A得分: 10.0分

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据挖掘学习 的相关文章

  • 排序算法6-归并排序

    1 什么是归并排序 归并排序是建立在归并操作上的一种有效的排序算法 该算法是采用分治法 Divide and Conquer 的一个非常典型的应用 将已有序的子 序列合并 得到完全有序的序列 即先使每个子序列有序 再使子序列段间有序 若将两
  • 电路端接电阻与信号完整性

    信号沿着传输线传播时 每时每刻阻抗都可能发生变化 例如 PCB走线的宽度或者厚度发生变化 PCB过孔 PCB转角 PCB上的电阻 电容 电感 接插件和器件引脚都会产生阻抗变化 若走线的瞬时阻抗 只和传输线的横截面积和材质特性有关 发生变化
  • keil使用arm_math文件报错

    引入该文件后编译报错 application arm math h 306 error 35 error directive Define according the used Cortex cor 添加如下全局宏定义 USE HAL DR
  • 如何将任意数据保存到以太坊区块链?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 虽然有北大博士讲 95 的区块链项目都没有前途 但我们知道区块链还是有它的优势 比如数据的不可篡改性对于版权保护有相当大的意义 而地址的匿名性则有其他潜在的用途 那么 如何
  • TensorFlow、PyTorch 和 Keras

    1 可用的 RNN 类型 在寻找 NLP 问题的深度学习解决方案时 循环神经网络 RNN 是开发人员最流行的首选架构 因此 从这个角度来比较框架是有意义的 所有正在考虑的框架都具有允许我们创建简单 RNN及其更进化的变体的模块 门控循环单元
  • V4l2框架基础知识(二)

    V4L2对uvc USB video class 免驱usb设备的编程框架 主要用于采集USB摄像头 采集方式 打开视频设备 设置视频设备的属性 缩放 裁剪等 在linux编程中直接使用ioctl 函数对设备I O通道进行管理 V4L2操作

随机推荐

  • 一文看懂PPP协议——PPP协议简介

    今天给大家介绍一下PPP协议的相关内容 文章浅显易懂 特别适合0基础同学 本文主将主要从PPP概述 PPP链路建立过程和PPP认证三个角度对PPP协议进行讲解 一 PPP概述 PPP point to point协议 即点对点协议 是数据链
  • unity获取用户鼠标与键盘操作

    Unity鼠标键盘输入 代码写在Update 函数中 屏幕坐标的原点在屏幕的左下角 1 通过Input API 获得鼠标的操作信息 1 获得鼠标的坐标位置 Input mousePosition 2 检测鼠标按下 Input GetMous
  • oracle如何去列的重复,oracle重复列只显示一次的实现

    CREATE TABLE test ob id VARCHAR 32 ob name VARCHAR 32 INSERT INTO test VALUES A001 A001 a INSERT INTO test VALUES A001 A
  • YOLOE,2022年新版YOLO解读

    前言 这是2022年第一个关于YOLO的改版 该版本由百度提出 称之为YOLOE 是目前各项指标sota的工业目检测器 性能sota且部署相对友好 该检测器的设计机制包括 Anchor free无锚盒机制 可扩展的backbone和neck
  • Spring的工作原理(二)IOC-DI

    目录 Spring的工作原理 二 IOC DI 一 什么是IOC 什么是DI 1 1 IOC Inversion of Control 控制反转 1 2 DI Dependency Injection 依赖注入 二 IOC控制反转基础知识
  • 【Python】ChineseCalendar包简介

    ChineseCalendar 是一个 Python 包 用于获取中国传统日历信息 这个包提供了中国农历 二十四节气 传统节日 黄历等信息 你可以使用以下命令来安装这个包 pip install ChineseCalendar 安装完成后
  • iOS开发 将html加载到页面上

    记得要引入头文件 import WebKit WebKit h weakself myWebView WKWebView alloc initWithFrame CGRectMake 0 206 weakself view com widt
  • stm32入门自学笔记

    一 二极管 二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件 二极管就是由一个由 P 型半导体和 N 型半导体形成的 PN 结加上相应的电极引线及管壳封装而成的 NPN和PNP型三极管的作用 1 NPN三极管 基极加高电压 集
  • PRBS笔记

    1 概述 PRBS 伪随机二进制序列 也称为伪随机码 通常被用来测试高速信号的信号质量 伪随机 也说明了该码流并不是真正的随机 而是具有特性属性 码流由 多项式 决定 具有重复周期 PRBS具有多种阶数 如PRBS7 PRBS15 PRBS
  • reify:rxjs: timing reifyNode:node_modules/@vue/cli/node_modules——————npm run dev报错-npm初始化错误

    金钱不够 全靠技术 创建vue3的问题总结 reify rxjs timing reifyNode node modules vue cli node modules卡死不动 npm run dev报错 全局安装webpack 总结 rei
  • ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your

    以下是解决问题的过程 没整理 root localhost flush privileges bash flush 未找到命令 root localhost mysql uroot p Enter password Welcome to t
  • Java 获取季度开始时间结束时间,获取日期所在月份,获取所在季度

    根据季度数获取季度的开始时间结束时间 public static Map
  • STM32【复习串口】

    串口复习加深理解笔记 杂谈 USART FLAG TXE发送缓冲区空标志 说明可以往数据寄存器写入数据了 但并不代码数据发送完成了 USART FLAG TC发送完成标志 这个才是代表USART在缓冲区的数据发送完成了 即从机接收到了数据
  • 目标检测 获得的boundingbox 绘制并且保存

    可能我是读了一个假的研究生 这么简单的弄了3个小时 本来打算用现成的 可是一直保存不了 后面没办法自己写了一个 其中 VOC BBOX LABEL NAMES是list数组 保存对应的标签名 如果类别多的话可以用循环来写 我写在第二个代码上
  • SQL数据库创建失败,提示无法创建列出的某些文件名

    在学习SQL的时候出现了很多低级错误 如下 use master CREATE DATABASE SQL2012Db ON PRIMARY NAME Sql2012Data FILENAME E Program Files Microsof
  • Android总结之链式调用(方法链)

    前言 最近在学习总结Android属性动画的时候 发现Android的属性动画设计采用了链式调用的方式 然后又回顾了一下了以前接触的开源框架Glide也是采用链式调用的方式 还有最近火的一塌糊涂的RxJava也是采用链式调用 为何如此之多的
  • STM32---stm32f103c8t6与stm32f103zet6之间的代码移植转换

    目录 一 将c8t6转换为zet6 1 修改启动文件 2 修改芯片 3 将MD修改为HD 4 下载器的修改 5 修改完成 编译成功 二 将zet6转换为c8t6 一 将c8t6转换为zet6 1 修改启动文件 最终结果如下 2 修改芯片 将
  • RedHat8(RHEL8)超详细安装教程--图文解说版

    目录 一 RHEL8介绍 二 产品地址 三 安装 1 文件 gt 新建虚拟机 快捷键 Ctrl N 2 这里我们选择 自定义 即可 gt 下一步 3 兼容性 保持默认 gt 下一步 4 稍后安装 gt 下一步 5 选择 Linux 操作系统
  • OBJ转GLTF

    obj转gltf的方法较多 这里采用cesium 1 下载cesuim开发包 2 进入cesium根目录 npm下载obj2gltf 没有npm的 自行安装 npm install obj2gltf save 3 将 obj mlt等文件复
  • 数据挖掘学习

    文章目录 绪论 定义 挖掘过程 数据准备 数据探索EDA 数据仓库 空间数据库 时间数据库和时序数据库 流数据 异构数据和遗产数据 数据挖掘的模式 数据准备 数据组成 什么是数据对象 什么是数据属性 数据搜集 数据质量分析 数据类型 考点