|
19、梯度上升法求解PCA第一主成分Demo
求解PCA的步骤:
A、样本的每个特征各自去均值demean
B、梯度上升法求PCA
1、定义目标函数F(x)
2、定义计算梯度的函数(数学公式法 梯度调试法)
3、迭代的过程 搜索优化
- def direction(w):
- # 将w变成单位向量 方向向量
- # np.linalg.norm(w) 求向量的模
- return w / np.linalg.norm(w)
- def gradient_ascent(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
复制代码
注意点:
1、梯度调试法的epsilon要小很多:因为pca中w是单位向量 本身模为1的 w的每一个维度都很小
2、将w变成单位向量 方向向量 np.linalg.norm(w) 求向量的模
3、initial_w代表方向向量 不能为0向量的
4、不能使用数据归一化(均值方差归一化)因为pca本身是让降维后的样本方差最大的 实际上做了一半(让均值为0)
ipynb文件在附件,可提供下载!
视频教程请参考:http://www.ai111.vip/thread-349-1-1.html
东方老师微信:dfy_88888
|
|