数据预处理——邻近度

本文介绍了几种常见的距离度量方法,包括欧氏距离、曼哈顿距离、切比雪夫距离及闵可夫斯基距离,并探讨了它们在不同应用场景下的优缺点。此外,还介绍了针对二元数据的相似度测量方法,如简单匹配系数、Jaccard系数及余弦相似性等。

邻近度(proximity)

两个对象之间的相似度和相异度。
相似度(similarity):衡量两个对象相似程度的数字度量,通常在0(不相似)和1(完全相似)之间。
相异度(dissimilarity):又称为距离,衡量两个对象差异程度的数值度量,对象越类似相异度越低。通常[0,1]之间取值,但也有0到正无穷取值。
相似性和相异性之间可以进行转化。
s作为相似度符号;d作为相异度符号。

1.针对单一属性类型的邻近度测量

x,y是两个对象
在这里插入图片描述

2.序数属性的邻近度测量

序数属性,比如“差、一般、还ok、好、非常好”这五个就组成序数属性,可以采用把属性映射到0-1当中的整数范围进行度量,但是在进行算数技术的过程中,其实对于结果的解释性会不佳。

3.对连续数据对象邻近度测量——距离

3.1欧氏距离,两点间直线距离。
(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:
在这里插入图片描述
(3)两个n维向量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧氏距离:
在这里插入图片描述
也可以用表示成向量运算的形式:
在这里插入图片描述
3.2曼哈顿距离:
要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”。
在这里插入图片描述
(1)二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离
在这里插入图片描述
(2)两个n维向量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的曼哈顿距离
在这里插入图片描述
3.3切比雪夫距离
国际象棋国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?自己走走试试。你会发现最少步数总是max(| x2-x1 | , | y2-y1 | ) 步。有一种类似的一种距离度量方法叫切比雪夫距离。
在这里插入图片描述
(1)二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离
在这里插入图片描述
(2)两个n维向量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的切比雪夫距离
在这里插入图片描述
3.4闵可夫斯基距离(MinkowskiDistance)
闵氏距离不是一种距离,而是一组距离的定义。
两个n维变量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:
在这里插入图片描述
其中p是一个变参数。
当p=1时,就是曼哈顿距离
当p=2时,就是欧氏距离
当p→∞时,就是切比雪夫距离
根据变参数的不同,闵氏距离可以表示一类的距离。

举个例子:二维样本(身高,体重),其中身高范围是150190,体重范围是5060,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。
简单说来,闵氏距离的缺点主要有两个:(1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。(2)没有考虑各个分量的分布(期望,方差等)可能是不同的。
3.5标准欧氏距离的定义
  标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。先将各个分量都“标准化”到均值、方差相等,然后计算距离。
标准化后的值 = ( 标准化前的值 - 分量的均值 ) /分量的标准差

3.6. 马氏距离(MahalanobisDistance)
马氏距离在测量数据间相关程度高的时候效果佳。
(1)马氏距离定义
有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:
在这里插入图片描述
而其中向量Xi与Xj之间的马氏距离定义为:

若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成欧式距离:
在这里插入图片描述

距离的通用性质:

距离可以用来衡量相似性或者相异性,通常距离有三个性质
非负性:距离d>=0
对称性:d(x,y,z…)=d(…,z,y,x)
三角不等式性:对于x,y,z,d(x,z)<=d(x,y)+d(y,z)
但是在距离度量相似性的时候三角不等式性通常不成立,换言之,存在非对称的相似性度量。

为什么欧式距离用的最多?最被优先采用呢?

因为欧式距离的平方更好的被求导,单调的。

4.二元的数据对象邻近度度量

二元数据:两个仅包含二院属性的对象之间的相似度测量成为相似度系数(similarity coefficient),x=(0,1,1,1,0,1,0,…),y=(1,1,0,0,0,0,0,0,…)。比如是否问题等。两个对象分别可以生成四个量:
在这里插入图片描述

4.1简单匹配系数
比如用于判断是非题目的答案的比较等。
在这里插入图片描述

4.2jaccard系数
比如在买东西时候,1是买,0是不买,通常我们在比较客户买的两种商品数量的时候,我们常不考虑00这类的情况。换言之,也就是jaccard系数度量非对称的二元对象效果更好,克服稀疏的0值带来的困扰
在这里插入图片描述
当变成两个集合的时候
p:样本A与B都是1的维度的个数
q:样本A是1,样本B是0的维度的个数
r:样本A是0,样本B是1的维度的个数
s:样本A与B都是0的维度的个数在这里插入图片描述
Jaccard距离:
在这里插入图片描述
jaccard扩展到非二元属性时的度量:
Tanimoto系数
在这里插入图片描述
4.3余弦相似性

余弦相似性不考虑量值,也就是不考虑x,y的长度,只是考虑x和y的夹角。比如文本数据分析,对于1000字两个文档,文档1“我”字出现10次,“你”字出现19次;文档2里“我”字出现13次,“你”字出现11次。因此x=(10,19),y=(13,11)。在计算时候余弦相似性公式会把“标准化”将分子分母约去,使得最后结果到0-1之间。
在这里插入图片描述
在这里插入图片描述

对象之间的属性的邻近度度量——相关性

相关性
对象之间的属性度量问题,也就是度量变量的。比如有完全正相关,完全负相关,线性相关等等。

皮尔逊相关系数——衡量线性相关性
在这里插入图片描述

5。邻近度选择考虑。。。

数据类型(连续或二值、词向量…)
数据稀疏?
连续型数据的差异

ps.作为小白,参考蛮多前人资料,后续慢慢学,慢慢补充!

### 温数据预处理的MATLAB实现 在MATLAB中进行温数据预处理涉及多个步骤,包括但不限于数据加载、缺失值填充、异常检测与修正以及单位转换等操作。以下是具体的实现方式: #### 数据加载 可以利用 `readtable` 函数读取存储温数据的文件(如CSV或Excel)。假设有一个名为 `temperature_data.csv` 的文件,则可以通过以下代码将其导入MATLAB环境: ```matlab data = readtable('temperature_data.csv'); ``` 此命令会创建一个表格变量 `data`,其中包含了原始温记录[^2]。 #### 缺失值处理 对于可能存在的缺失值,可以选择删除含有缺失值的行或者采用插值法填补这些空白区域。下面展示两种常见策略之一——线性插值来替代丢失的数据项: ```matlab % 找出所有NaN位置并执行线性插值 cleanedData = fillmissing(data, 'linear'); ``` 这里调用了 `fillmissing` 方法,并指定 `'linear'` 参数指示它应该基于相邻数值之间的直线关系估算未知数值得到清理后的数据集 `cleanedData`[^2]。 #### 异常值识别与校正 为了提高分析准确性,还需要考虑剔除那些明显偏离正常范围内的极端观测值。一种简单有效的方法是比较每个测量点与其周围几个最近邻近点平均值大小差异程;如果超过设定阈值则认为它是离群点并将之替换为局部均值或其他合理估计量。 ```matlab windowSize = 5; % 定义滑动窗口宽 threshold = 3; % 设定倍率标准差作为判断依据 movingAvg = movmean(cleanedData.Temperature, windowSize); % 计算移动平均 stdDeviation = std(movmad(cleanedData.Temperature, windowSize)); % 获取标准偏差 outliersIdx = abs(cleanedData.Temperature - movingAvg) > threshold * stdDeviation; correctedTemps = cleanedData.Temperature; correctedTemps(outliersIdx) = movingAvg(outliersIdx); ``` 上述脚本定义了一个固定长为五的时间序列片段用于评估当前时刻附近趋势变化情况并通过比较实际读数同预期理论曲线之间差距决定哪些样本属于潜在错误案例进而实施调整动作[^2]。 #### 单位统一化/标准化变换 假如不同来源采集来的温标体系有所区别(比如摄氏 vs 开尔文),那么有必要先完成必要的数学运算使得最终呈现形式保持一致以便后续进一步统计建模工作顺利开展下去。 ```matlab if strcmpi(char(cleanedData.Units), 'K') || ... strcmpi(char(cleanedData.Units), 'Kelvin') correctedTempsCelsius = correctedTemps - 273.15; else correctedTempsCelsius = correctedTemps; end ``` 这段逻辑检查原表头字段 Units 是否标明采用了绝对零起始计量尺如果是的话就减去相应偏移量转化为国际通用表达习惯即摄氏等级表示法[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值