我似乎无法掌握如何在Python

问题描述

我的任务是将Parzen窗口与径向基函数内核一起使用,以确定要赋予给定点的标签

我的训练数据集有4个维度(每点4个特征)。 我的训练标签集包含我的训练集中(这是一维数组)中所有点的标签(可以为0、1、2,...,具体取决于我们拥有的班级数量)。 我的测试数据集包含几个具有4维的点,但是没有标签,所以它是一个nx4数组。

我们有兴趣为测试数据集中的每个点提供标签

我首先计算rdf内核$ k(x_i,x)$ :(使用python和numpy)

for (i,ex) in enumerate(test_data):

    squared_distances = (np.sum((np.abs(ex - self.train_inputs)) ** 2,axis=1)) ** (1.0 / 2)
    k = np.exp(- squared_distances/2*(np.square(self.sigma)))

我们假设test_data看起来像这样:

[[  0.40614   1.3492   -1.4501   -0.55949]
 [ -1.3887   -4.8773    6.4774    0.34179]
 [ -3.7503  -13.4586   17.5932   -2.7771 ]
 [ -3.5637   -8.3827   12.393    -1.2823 ]
 [ -2.5419   -0.65804   2.6842    1.1952 ]]

ex是测试数据集中的一个点。这里以一个例子为例:

[ 0.40614  1.3492  -1.4501  -0.55949]

self.train_inputs是训练数据集,看起来像这样

[[ 3.6216   8.6661  -2.8073  -0.44699]
 [ 4.5459   8.1674  -2.4586  -1.4621 ]
 [ 3.866   -2.6383   1.9242   0.10645]
 ...
 [-1.1667  -1.4237   2.9241   0.66119]
 [-2.8391  -6.63    10.4849  -0.42113]
 [-4.5046  -5.8126  10.8867  -0.52846]]

k一个数组,其中包含每个x_i(在self.training_inputs中)与我们当前的测试点x(在代码中为ex)之间的所有距离。

k = [0.99837982 0.9983832  0.99874063 ... 0.9988909  0.99706044 0.99698724]

它的长度与self.train_inputs中的点数相同。

我对径向基函数的理解是,训练点距测试点越近,k值(当前训练点,测试点)越大。但是k不能超过1或小于0。

因此,目标是选择最接近测试点的训练点。我们通过查看哪个在k中具有最大的价值来做到这一点。然后我们获取其索引,并在仅包含标签的数组上使用相同的索引。因此,我们得到了我们希望测试点采用的标签

代码中,它转换为此代码(附加代码位于上面的第一个代码段的下方):

best_arg = np.argmax(k) #selects the greatest value in k and gives back its index.
classes_pred[i] = self.train_labels[best_arg] #we use the index to select the label in the train labels array.

self.train_labels如下:

[0. 0. 0. ... 1. 1. 1.]

方法适用于ex = [ 0.40614 1.3492 -1.4501 -0.55949] k = [0.99837982 0.9983832 0.99874063 ... 0.9988909 0.99706044 0.99698724]

818表示包含当前k中最大值的索引,而1.作为给定self.train_labels[818] = 1.标签

但是,似乎我做错了。考虑到我的老师已经实施的算法,我会弄错一些标签(尤其是当我们有两个以上的班级时)。我的问题是我做错了吗?如果是,在哪里?我是机器学习的新手。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)