题解
题面描述
已知一个包含 N 个样本、每个样本有 M 个特征以及对应的类别标签的数据集。要求基于有监督的度量学习算法(即线性判别分析 LDA 的思想),计算样本之间的距离矩阵,并按照如下步骤进行:
- 读取数据
输入包含第一行两个整数 N 和 M,接下来 N 行每行包含 M+1 个数,其中前 M 个为特征值,最后一个为类别标签。
P2836.第2题-度量学习算法
题目内容
你是一家电子商务公司的数据分析师、负责构建产品推荐系统。为了提高推荐的准确性,你决定使用度量学习(Metric Learning)来学习一个能够反映产品之间相似度的距离函数。你的目标是实现一个度量学习算法,根据产品的特征数据计算样本之间的距离矩阵,用于推荐系统中。
请你编写一个程序,使用 Python 和 NumPy 库,对给定的产品特征数据集,基于有监督的度量学习算法实现马哈拉诺比斯距离(Mahalanobis Distance)。具体要求如下:
1.读取输入数据集,包含 (N) 个样本,每个样本有 (M) 个特征,以及对应的类别标签。
2.计算类内和类间散度矩阵:
3.计算最优投影矩阵(W):
- 通过最大化 (tr((WTSWW)−1(WTSBW))) ,求得最优投影矩阵 (W) 。
4.将样本映射到新的空间,计算欧氏距离矩阵:
5.输出距离矩阵:
- 输出一个 (N×N) 的距离矩阵,矩阵中的每个元素表示样本之间的距离,保留四位小数,使用 {va1:.4f} 格式化输出。
输入描述
输出描述
- 输出 (N) 行,每行包含 (N) 个浮点数,表示距离矩阵的行,数值之间用空格分隔,保留四位小数,使用 {val:.4f} 格式化输出。
补充说明
通过最大化类间散度和类内散度之比,找到最优投影方向。
SW=∑c∑xi∈c(xi−μc)(xi−μc)T
SB=∑cNc(μc−μ)(μc−μ)T
其中,(Nc) 为类别 (c) 的样本数量,(μ) 为全局均值。
通过解广义特征值问题 (SW−1SBW=λW) ,取前 (K) 个特征向量构成 (W) 。
当 SW 不可逆时,可添加正则化项。
样例1
输入
6 2
1.0 2.0 A
1.5 1.8 A
5.0 8.0 B
6.0 9.0 B
1.0 0.6 A
5.5 9.5 B
输出
0.0000 0.3914 5.9263 7.2240 0.5149 6.9429
0.3914 0.0000 5.5349 6.8325 0.9063 6.5515
5.9263 5.5349 0.0000 1.2977 6.4411 1.0166
7.2240 6.8325 1.2977 0.0000 7.7388 0.2811
0.5149 0.9063 6.4411 7.7388 0.0000 7.4577
6.9429 6.5515 1.0166 0.2811 7.4577 0.0000