У меня есть данные, которые мне нужно центрировать и масштабировать, чтобы они были сосредоточены вокруг начала координат. Затем данные необходимо повернуть так, чтобы направление максимальной дисперсии находилось на оси x. Затем вычисляется среднее значение данных и ковариация. Мне нужно, чтобы первый элемент ковариационной матрицы был равен 1. Я думаю, что это делается путем настройки коэффициента масштабирования, но я не могу понять, каким должен быть коэффициент масштабирования.
Для центрирования данных я убираю среднее, а для поворота использую SVD, но масштабирование по-прежнему моя проблема.
signature = numpy.loadtxt(name, comments = '%', usecols = (0,cols-1))
signature = numpy.transpose(signature)
#SVD to get D so that data can be scaled by 1/(highest singular value in D)
U, D, Vt = numpy.linalg.svd( signature , full_matrices=0)
cs = utils.centerscale(signature, scale=False)
signature = cs[0]
#plt.scatter(cs[0][0],cs[0][1],color='r')
#SVD so that data can be rotated so that direction of most variance is on x-axis
U, D, Vt = numpy.linalg.svd( signature , full_matrices=0)
cs = utils.centerscale(signature, center=False, scalefactor=D[0])
U, D, Vt = numpy.linalg.svd( cs[0] , full_matrices=0)
D = numpy.diag(D)
norm = numpy.dot(D,Vt)
Ниже приведены примеры результатов среднего и cov для norm (в тестовых примерах используется res).
**********************************************************************
Failed example:
print numpy.mean(res, axis=1)
Expected:
[ 7.52074907e-18 -6.59917722e-18]
Got:
[ -1.22008884e-17 2.41126563e-17]
**********************************************************************
Failed example:
print numpy.cov(res, bias=1)
Expected:
[[ 1.00000000e+00 9.02112676e-18]
[ 9.02112676e-18 1.40592827e-01]]
Got:
[[ 4.16666667e-03 -1.57698124e-19]
[ -1.57698124e-19 5.85803446e-04]]
**********************************************************************
1 items had failures:
2 of 4 in __main__.processfile
***Test Failed*** 2 failures.
Все значения не имеют значения, кроме первого элемента ковариационной матрицы, который должен быть равен единице.
Я пытался искать везде и не могу найти ответ. Любая помощь будет оценена по достоинству.