赞
踩
将所有得点从二维降到一维数据:
将
所有的点更加趋近原来点间的分布情况,这些样本点映射到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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。