나는 원점을 중심으로 중심에 놓고 크기를 조정해야하는 데이터가 있습니다. 그런 다음 최대 분산의 방향이 x 축에 있도록 데이터를 회전해야합니다. 그런 다음 데이터의 평균과 공분산을 계산합니다. 공분산 행렬의 첫 번째 요소가 1이되어야합니다. 이것은 스케일링 팩터를 조정하여 이루어 졌다고 생각하지만 스케일링 팩터가 무엇인지 알아낼 수 없습니다.공분산 행렬의 첫 번째 요소가 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 결과의 예 (시험 예는 고해상도를 사용).**********************************************************************
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.
모든 값은 공분산 행렬의 첫 번째 요소를 제외하고는 관계가 없으며 1이어야합니다.
나는 어디에서나 시도해 보았으며 답을 찾을 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.
감사합니다. 덕분에 많은 도움이되었습니다. – luke417