|
20、PCA求解前n个主成分的方向向量
- def direction(w):
- # 将w变成单位向量 方向向量
- # np.linalg.norm(w) 求向量的模
- return w / np.linalg.norm(w)
- def gradient_ascent_first_pca(df, X, initial_w, learn_rate, n_iters, epsilon = 1e-8):
- w = direction(initial_w)
- for step in range(n_iters):
- last_w = w
- w = w + learn_rate * df(w, X)
- # 注意:pca求解时 需要变为单位向量
- w = direction(w)
- if(abs(f(last_w, X) - f(w, X)) < epsilon):
- break
- return step, w
复制代码- def gradient_ascent_first_pca_n(n, X, learn_rate, n_iters, epsilon = 1e-8):
- assert 0 < n <= X.shape[1], 'n>0且n不能大于样本特征数'
- X_pca = X
- X_pca = demean(X_pca)
- result = []
- for i in range(n):
- # 这里的w代表方向向量 不能为0向量的
- initial_w = np.random.random(size=X_pca.shape[1])
- step, w = gradient_ascent_first_pca(df_math, X_pca, initial_w, learn_rate=0.001, n_iters=10000)
- print(step, w)
- result.append(w)
- X_pca = X_pca - X_pca.dot(w).reshape(-1, 1) * w
-
- return result
复制代码
ipynb文件在附件,可提供下载!
视频教程请参考:http://www.ai111.vip/thread-349-1-1.html
东方老师微信:dfy_88888
|
|