import numpy as np
from numpy.random import multivariate_normal, random, poisson
from numpy.linalg import eigh, norm, svd
from scipy.stats import expon
import matplotlib.pyplot as plt
from sklearn import linear_model
from functools import partial
def generate_sample(num_of_sample, dim_of_sample):
return multivariate_normal(np.zeros([dim_of_sample]), np.eye(dim_of_sample), num_of_sample)
def generate_E(left_lambda, right_lambda, samples):
def generate_matrix(dim, _lambda):
base_matrix = np.zeros([dim, dim])
for i in range(base_matrix.shape[0]):
for j in range(i):
base_matrix[i][j] = random()
for i in range(base_matrix.shape[0]):
for j in range(base_matrix.shape[0])[i:]:
base_matrix[i][j] = base_matrix[j][i]
orth_matrix = eigh(base_matrix)[1]
lambda_vector = np.random.random_sample((base_matrix.shape[0] ,)) * _lambda
return np.dot(np.dot(orth_matrix.T, np.diag(lambda_vector)), orth_matrix)
return np.dot(np.dot(generate_matrix(samples.shape[0], left_lambda), samples), generate_matrix(samples.shape[1], right_lambda))
def E_for_singular(max_lambda, lambda_num, num_of_sample, dim_of_sample):
ListRequire = []
lambda_vector = np.linspace(max_lambda / lambda_num, max_lambda, lambda_num - 1)
for _lambda in lambda_vector:
singular_vector = svd(generate_E(_lambda, _lambda, generate_sample(num_of_sample, dim_of_sample)))[1]
ListRequire.append(singular_vector[-1] / singular_vector[0])
return (lambda_vector ,ListRequire)
'''
E_vectors = E_for_singular(10, 100, 1000, 10)
print E_vectors[0]
print E_vectors[1]
'''
#The conclusion of E_for_singula
近似因子模型
最新推荐文章于 2022-08-29 17:28:25 发布