PAC

博客探讨了如何通过主成分分析(PCA)将二维数据降维至一维,以最大化样本间的方差。PCA首先通过将数据归零来消除均值影响,然后利用梯度上升法寻找使样本方差最大的轴。文章提供了实现PCA的代码示例,展示了数据归零化的过程,并对比了PCA与线性回归的区别。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将所有得点从二维降到一维数据:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
所有的点更加趋近原来点间的分布情况,这些样本点映射到X轴和Y轴的距离多非常的大,这样他们的区分度会更加的明显。如何找到样本间间距最大的轴呢?
在这里插入图片描述
使用一个什么样的指标来定义样本间的间距呢?-----答:方差。
方差:描述样本分布疏密的一个指标。方差越大代表样本间越稀疏,方差越小,代表样本间越紧密。
在这里插入图片描述

在这里插入图片描述
问题:找到一个轴,使得样本空间的所有点映射到这个轴后,方差最大?
答:第一步:将样例的均值归零。
即将所有的样本多减去这批样本整体的均值。
原图:
在这里插入图片描述
样本归0后:即移动坐标轴。使得每一个样本在每一个维度均值为0.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
主成分分析法即变成求目标函数最大值的问题了:这里采用梯度上升法求解(搜索的方法)。
在这里插入图片描述
主成分分析法和线性回归的区别:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

求数据的主成分

代码部分

import numpy as np
import matplotlib.pyplot as plt

X = np.empty((100, 2))
X[:,0] = np.random.uniform(0., 100., size=100)
X[:,1] = 0.75 * X[:,0] + 3. +np.random.normal(0, 10., size=100)
plt.scatter(X[:,0],X[:,1])
plt.show()

# 对数据进行demean(归一化)
def demean(X):
    # 相当于对X这个矩阵在行(axis=0)这个方向上求一个均值,最终求得的结果是每一列的均值。
    return X - np.mean(X, axis=0)

在这里插入图片描述
在这里插入图片描述

使用数据归零化

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

X = np.empty((100, 2))
X[:,0] = np.random.uniform(0., 100., size=100)
X[:,1] = 0.75 * X[:,0] + 3. +np.random.normal(0, 10., size=100)
plt.scatter(X[:,0],X[:,1])

plt.show()

# 对数据进行demean(归一化)
def demean(X):
    # 相当于对X这个矩阵在行(axis=0)这个方向上求一个均值,最终求得的结果是每一列的均值。
    return X - np.mean(X, axis=0)
def demean(X):
    return X - np.mean(X,axis=0)
X_demean = demean(X)
plt.scatter(X_demean[:,0],X_demean[:,1])
plt.show()

def f(w,x):
    return np.sum((x.dot(w)**2))/len(x)
def df_math(w,x):
    return x.T.dot(X.dot(w))*2./len(x)
def df_debug(w, X,epsilon=0.0001):
    res = np.empty(len(w))
    for i in range(len(w)):
        w_1 = w.copy()
        w_1[i] += epsilon
        w_2 =c.copy()
        w_2[i] -=epsilon
        res[i] = (f(w_1,X) - f(w_2,X))/(2 * epsilon)
        return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土豆娃potato

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值