机器学习—PCA

6.PCA

6.1什么是PCA

6.1.1 PCA的实现思想

主成分分析法(Principal Componentm Analysis)是一个非监督的机器学习算法,主要用于数据降维、去噪声等,简称PCA。

问题1:对于一个二维的特征空间,如何将其降维到一维的特征空间?

解决1:在二维特征空间中找到一条直线,将特征空间中所有的样本点映射到这条直线上。

问题2:降维过程中,数据会发生丢失,如何保持数据的完整性?即如何找到这条直线能最大程度的保证数据的丢失率最低?

解决2:对于二维特征空间,样本可以映射到任意一条直线;在映射直线上,样本间的间距最大时,表示数据保存最完整;这条映射直线称为最佳映射直线。在数据统计中,使用方差来表示数据的离散程度,因此在映射直线上,其样本特征的方差越大,表示样本越离散,说明数据越完整。方差:

问题3:如何找到这条映射直线,使样本特征的方差达到最大值?

解决3:(1)对所有样本特征的均值归零,即demean,特征空间的样本分布如下所示:

(2)求映射直线的方向w=(w1,w2),使样本映射到w后,样本的方差达到最大值,即:

由于对所有样本进行demean处理,因此样本的均值为0;Xproject是一个向量,因此其距离需要求向量的模;Xproject是在映射直线上的向量,而不是在二维特征空间上的向量,如下所示。

(3)Xproject=(Xpro1,Xpro2),X=(X1,X2),w=(w1,w2)并且w是单位向量,推导如下:

即求取w,使有最大值。

问题4:在n维特征空间,该如何进行降维?

解决4:将问题3中的公式推导到n维,如下所示:

求取上式中,w为何值时,有最大值,可以使用梯度上升法来解决。

问题5:如何使用梯度上升法?

解决5:使用迭代公式,其中参数都和梯度下降法一致。

问题6:如何使用梯度上升法来求取

的最大值?

解决6:推导公式如下

其中,

6.1.2自己实现PCA算法

#程序6-1

import numpy as np

import matplotlib.pyplot as plt

 

X = np.empty(shape=(200,2))

X[:,0] = np.random.randint(0,1000,size=200)

X[:,1] = X[:,0]*0.5 + 600 + np.random.normal(6,30,size=200)

 

#demean

def demean(X):

    return X - np.mean(X,axis=0)

X_demean = demean(X)

 

#梯度上升法

def f_x(X,w):

    return sum(X.dot(w)**2)/len(X)

    

def df_x(X,w):

    return 2.*(X.T.dot(X.dot(w))) / len(X)

 

#向量单位化

def unit_vector(w):

    return w/np.linalg.norm(w)

 

#求第一主成分:梯度上升法

def first_component(X,init_w,eta,max_iters=1e4):

    #w是单位向量

w = unit_vector(init_w)

    cur_iters = 0

    while cur_iters < max_iters:

        grad = df_x(X,w)

        last_w = w

        w = w + eta*grad

        w = unit_vector(w)

        if(abs(f_x(X,w)-f_x(X,last_w)) < 1e-8):

            break

        cur_iters += 1

    return w

 

#不需要进行数据归一化

eta = 0.01

#w不能是0向量

init_w = np.random.random(size=X_demean.shape[1])

w = first_component(X_demean,init_w,eta)

print(w)

 

#画图

plt.scatter(X_demean[:,0],X_demean[:,1])

plt.plot([-w[0]*550, w[0]*550], [-w[1]*550, w[1]*550], color='r')

plt.show()

运行结果:

[0.89588346 0.44428912]

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值