我有一个数据集,其中每条记录可以包含不同数量的功能。 总共有56个功能,每个记录可以包含1到56个此功能的记录。
每个特征都像一个标志,所以或存在于数据集中,如果存在,则存在另一个值double,它将值放在其中。
我知道是否有可能使用不同的功能为每条记录训练我的kNN算法,所以例如一条记录有3个特征加上标签,另一条记录有4个特征加上标签等等。
我正在尝试用Python实现它,但我不知道我该怎么做。
答案 0 :(得分:1)
是的,这绝对是可能的。你需要考虑的一件事是距离测量。
用于kNN分类器的默认距离通常是欧几里德距离。但是,欧几里德距离需要具有相同数量的特征(维度)的记录(向量)。
您使用的距离测量,在很大程度上取决于您认为应该使记录相似的内容。
如果两个记录的特征之间存在对应关系,那么您知道记录x的特征i描述了与记录y中的特征i相同的特征,您可以调整欧几里德距离。例如,您可以忽略缺失的维度(如果一个记录中缺少某个要素,则不会增加距离)或惩罚缺少的维度(这样,只要记录中缺少某个要素,就会添加一定的惩罚值)
如果两个记录的特征之间没有对应关系,则必须查看设定距离,例如最小匹配距离或豪斯多夫距离。
答案 1 :(得分:0)
数据集中的每个实例都应由相同数量的要素表示。如果您有具有可变数量的要素的数据(例如,每个数据点是x和y的向量,其中每个实例具有不同的点数),那么您应该将这些点视为缺失值。
因此,您需要处理缺失的值。例如:
修改强>
首先,您需要将数据转换为更好的格式。目前,每个功能都由两列表示,这不是一个非常好的技术。因此,我建议重新构建数据如下:
+------+------------+-----------+----------+--------+
| ID | Feature1 | Feature2 | Feature3 | Label |
+-------------------+-----------+----------+--------+
| 1 | 15.12 | ? | 56.65 | True |
| 2 | ? | 23.6 | ? | True |
| 3 | ? | 12.3 | ? | False |
+-------------------+-----------+----------+--------+
然后你可以用?
替换缺失值(用0
表示)(这取决于每个特征的"含义")或者使用我和之前已经提到过。