zoukankan      html  css  js  c++  java
  • 数据的相似性和相异性我们可以怎么分析

    在数据挖掘中,在确定适用的算法模型之后,应该让我们的数据也能适用我们的算法。例如聚类,最近邻分类等算法,在这些算法中我们往往需要给我们的数据分类,相似的分为一类,不相似的分为不同类。 比如为了精准营销,商店需要建立顾客画像,得出具有类似特征(例如类似的收入,居住区域和年龄,职业等)的顾客组。也就是我们需要一个评判标准,评估对象之间比较的相似或不相似程度的标准,也就是数据的相似性和相异性。

    数据矩阵和相异性矩阵

    说到相似性和相异性,我们要先说说数据矩阵和相异性矩阵。

    数据矩阵,上个图先看下。

    也叫对象-属性结构:这种数据结构用关系表的形式或 n*p ( n 个对象 p 个属)矩阵存放 n 个数据对象,每行对应一个对象 。

    相异性矩阵,如图

    也叫对象-对象结构:存放 n 个对象两两之间的邻近度。 d(i,j)是对象i和对象j之间的相异性的度量。一般来说,d(i,j是个非负数)。当i和j高度相似或‘接近’时,它的值接近于0,越不同,这个值越大。

    那么我们也可以由相异性度量推出相似性。例如,对于标称属性来说。

    我们了解完数据矩阵和相异性矩阵后,接下来讲讲不同数据属性的度量相异性的方法。我们在这里详细得讲了数据属性,每种属性的相异性度量是不一样的。

    标称属性的临近性度量

    标称属性可以取两个或多个状态。例如color是一个标称属性它可以有5种状态:黄,红,绿,粉红,蓝。两个对象i和j之间的相异性可以根据不匹配率来计算。如下图所示

    其中,i,j 是对象,m 是匹配的数目(就是 i 和 j 取值相同状态的属性数),而 p 是刻画对象的属性总数

    数据属性的相异性

    度量数据属性数据的相异性,有很多种方法。被广泛应用得有欧几里得距离,曼哈顿距离,闵柯夫斯基距。

    计算前提是:我们应该让数据规范化。比如高度有可能是米或者寸,我们应该先统一它们的单位。规范化方法我们在数据预处理的时候会讲。这里我们知道什么是规范化就可以了。

    最流行的距离度量是欧几里得距离公式,如下所示

    其中Xi1,Xi2分别是i对象的属性们,Xj1,Xj2分别是j对象的属性们。 另一个著名的度量方法是曼哈顿距离,如下

    二元属性的邻近性度量

    我们先来讲讲对称和非对称二元属性刻画的对象间的相异性和相似度度量。那么我们怎么计算两个二元属性之间的相异性呢。

    前文我们说到二元属性只有两种状态:0 或 1.例如患者的属性smoker,1表示抽烟,0表示不抽烟。假如所有的二元属性都看做具有相同的权重,则我们可以得到一个行列表 如图

    上图中, q 是对象 i 和 j 都取 1 的属性数,r 是在对象 i 中取 1,在对象 j 中取 0 的属性数,s 是在对象 i 中取 0,在对象 j 中取 1 的属性数,而 t 是对象 i 和对象 j 中都取 0 的属性数。属性的总数 p,

    其中 p=q+r+s+t。

    对称的二元属性,每个状态都同样重要,因此基于二元属性的相异性称作对称的二元相异性。如果对象i和j的相异性都用对称的二元属性刻画,则i和j的相异性为,如图所示 

    那么对于不对称的二元属性,,两个状态不是一样重要的。取值为0 的意义很小,我们可以忽略不计,我们称作非对称的二元相似性。所以i和j的相异性为,如图所示

    这个也叫 Jaccard系数,它是比较常用的一个系数。

    接下来我们来看看如何利用我们上面所说的度量方法来度量患者之间的相异性

    下面是一张患者记录关系表,如图

    假如一个患者的记录表包含属性name(姓名),gender(性别),fever(发烧),cough(咳嗽),test-1,test-2,test-3,test-4。其中name是对象标识符,gender是对称属性。其它的属性都是非对称二元。

    对于非对称属性,值 Y (yes)和 P (positive)被设置为 1,值 N (no)被设置为 0.假设三个对象之间的距离只基于非对称属性来计算。那么三个患者 Jack,Mary,Jim 两两之间的距离 d(Jack,Jim) = ?

    分析:

    Jack和Jim之间的非对称属性fever(1,1),cough(0,1),test-1(1,0),test-2(0,0),test-3(0,0),test-4(0,0),根据非对称属性相异性的算法,我们不把(0,0)列入参考, q(1,1)的个数为 1, r(1,0)的个数为1,s(0,1)的个数为 1,根据非对称属性

    d(i,j)=(r+s)/(q+r+s) 得出

    d(Jack,Jim) = (1 + 1)/(1 + 1 + 1) = 0.67

    同理我们能得出:

    d(Jack,Mary)=(0 + 1)/(2 + 0 + 1) = 0.33

    d(Jim,Mary)= (1 + 2)/(1 + 1 + 2) = 0.75

    最后比较得出

    因此这些度量显示 Jim 和 Mary不大可能患类似的疾病,因此他们具有最高的相异性以及Jcak和Mary最有可能患类似的疾病。

    相信通过上面的介绍,我们基本对如何度量数据的相异性和相似性有一个基本的概念,这是聚类的一个基础算法,有着广泛的应用,后面我们讲聚类的时候会在提及。

    推荐阅读 :
    从分治算法到 MapReduce
    Actor并发编程模型浅析
    大数据存储的进化史 --从 RAID 到 Hadoop Hdfs
    一个故事告诉你什么才是好的程序员

    更多干货,欢迎关注公众号,哈尔的数据城堡,关注免费领取学习资料~

  • 相关阅读:
    Python命名规范
    安装pywin32模块
    深度学习框架
    更快速的学习掌握新知识
    使用 Docker + SSH代理 来实现访问内网网站
    magento Too many arguments, expected arguments "command".
    使用 Prestissimo 提高 composer 下载速度
    使用Lebab 将 Javascript ES5 转 ES6
    分享网络上学习英语的方法或技巧
    使用 Expo 的错误 WebSocket connection to 'ws://localhost:19002/debugger-proxy?role=debugger&name=Chrome' failed: Error during WebSocket handshake: Unexpected response code: 400
  • 原文地址:https://www.cnblogs.com/Alear/p/10219513.html
Copyright © 2011-2022 走看看