我发现很难将理论与实施联系起来.我很感激帮助知道我的理解错误.
符号 - 粗体大写的矩阵和粗体字母小写字母的向量
是一个数据集
观察,每个
变量.所以,鉴于这些观察
- 维数据向量,
- 维主轴是
,为
在
哪里
是目标维度.
列
形成一个正交的基础
功能和输出
是最小化平方重建误差的主成分投影:
数据模型是
X(i,j) = A(i,:)*S(:,j) + noise
Run Code Online (Sandbox Code Playgroud)
其中PCA应在X上完成以获得输出S. S必须等于Y.
问题1:减少的数据Y不等于模型中使用的S. 我的理解在哪里错了? …
我希望减少维数,使得它返回的维度是循环的.
ex)如果我将12d数据减少到2d,在0和1之间归一化,那么我希望(0,0)与(.9,.1)同等地接近(.9,.9).
我的算法是什么?(python实现的奖励积分)
PCA给了我2d数据平面,而我想要数据的球面.
合理?简单?固有的问题?谢谢.
在NLP中,特征的维度总是很大.例如,对于一个项目,特征的维度几乎是20万(p = 20,000),每个特征是0-1整数,以显示特定单词或二元组是否在纸上呈现(一篇论文)是R ^ {p} $)中的数据点$ x \.
我知道功能之间的冗余是巨大的,因此减小尺寸是必要的.我有三个问题:
1)我有10万个数据点(n = 10,000),每个数据点有10万个特征(p = 10,000).进行降维的有效方法是什么?R ^ {n\times p} $中的矩阵$ X \是如此巨大,以至于PCA(或SVD,截断的SVD都可以,但我不认为SVD是减少二进制特征尺寸的好方法)和Bag单词(或K-means)很难直接在$ X $上进行(当然,它很稀疏).我没有服务器,我只是用我的电脑:-(.
2)如何判断两个数据点之间的相似性或距离?我认为欧几里德距离可能不适用于二进制特征.L0规范怎么样?你用什么?
3)如果我想使用SVM机器(或其他内核方法)进行分类,我应该使用哪个内核?
非常感谢!
text nlp machine-learning dimension-reduction dimensionality-reduction
我正在使用大约4500个变量的二进制类随机森林.这些变量中的许多变量高度相关,其中一些变量只是原始变量的分位数.我不太确定将PCA用于减少维数是否明智.这会增加模型性能吗?
我希望能够知道哪些变量对我的模型更重要,但如果我使用PCA,我只能说出哪些PC更重要.
提前谢谢了.
我正在使用t-SNE python实现来降低维度,X其中包含100个实例,每个实例由cnn可视化的1024个参数描述.
X.shape = [100,1024]
X.dtype = float32
当我跑:
Y = tsne.tsne(X)
Run Code Online (Sandbox Code Playgroud)
在第23行的tsne.py中弹出第一个警告:
RuntimeWarning:在log H = Math.log(sumP)+ beta*Math.sum(D*P)/ sumP中遇到的除以零
然后在以下几行中会出现更多类似警告的警告:
RuntimeWarning:在divide中遇到无效值
最后,我在处理过程中的每次迭代后得到这个结果:
迭代xyz:错误是nan
代码以"错误"结束,最后得到一个空的散点图.
编辑:
- >我用不同的数据集尝试过它,它运行得很好.但是我也需要它来处理我的第一组(似乎导致问题的那个)
题 :
有谁知道这可能导致什么?有解决方法吗?
因子分析的一个标志是它允许非正交潜在变量.
例如,在R中,可以通过rotation参数来访问此功能factanal.有没有这样的规定sklearn.decomposition.FactorAnalysis?显然它不在争论中 - 但也许还有另一种方法来实现这一目标?
遗憾的是,我无法找到许多此功能的使用示例.
python factor-analysis dimensionality-reduction scikit-learn
我有:
def __init__(self, feature_dim=15, hidden_size=5, num_layers=2):
super(BaselineModel, self).__init__()
self.num_layers = num_layers
self.hidden_size = hidden_size
self.lstm = nn.LSTM(input_size=feature_dim,
hidden_size=hidden_size, num_layers=num_layers)
Run Code Online (Sandbox Code Playgroud)
然后我收到一个错误:
RuntimeError: The size of tensor a (5) must match the size of tensor b (15) at non-singleton dimension 2
Run Code Online (Sandbox Code Playgroud)
如果我将两个尺寸设置为相同,那么错误就会消失。但我想知道我的数字input_size是否很大,比如 15,我想将隐藏特征的数量减少到 5,为什么不应该这样工作?
我将 SVD 包与 R 一起使用,我可以通过将最低奇异值替换为 0 来降低矩阵的维数。但是当我重新组合矩阵时,我仍然具有相同数量的特征,我无法找到如何有效删除源矩阵中最无用的特征,以减少其列数。
例如我现在正在做的事情:
这是我的源矩阵 A:
A B C D
1 7 6 1 6
2 4 8 2 4
3 2 3 2 3
4 2 3 1 3
Run Code Online (Sandbox Code Playgroud)
如果我做:
s = svd(A)
s$d[3:4] = 0 # Replacement of the 2 smallest singular values by 0
A' = s$u %*% diag(s$d) %*% t(s$v)
Run Code Online (Sandbox Code Playgroud)
我得到 A',它具有相同的尺寸(4x4),仅用 2 个“组件”进行重建,并且是 A 的近似值(包含较少的信息,可能较少的噪声等):
[,1] [,2] [,3] [,4]
1 6.871009 5.887558 1.1791440 6.215131
2 3.799792 7.779251 2.3862880 4.357163
3 2.289294 …Run Code Online (Sandbox Code Playgroud) r feature-extraction svd dimensionality-reduction matrix-factorization
我已经计算了一个距离矩阵,并且正在尝试两种方法来可视化它。这是我的距离矩阵:
delta =
[[ 0. 0.71370845 0.80903791 0.82955157 0.56964983 0. 0. ]
[ 0.71370845 0. 0.99583115 1. 0.79563006 0.71370845
0.71370845]
[ 0.80903791 0.99583115 0. 0.90029133 0.81180111 0.80903791
0.80903791]
[ 0.82955157 1. 0.90029133 0. 0.97468433 0.82955157
0.82955157]
[ 0.56964983 0.79563006 0.81180111 0.97468433 0. 0.56964983
0.56964983]
[ 0. 0.71370845 0.80903791 0.82955157 0.56964983 0. 0. ]
[ 0. 0.71370845 0.80903791 0.82955157 0.56964983 0. 0. ]]
Run Code Online (Sandbox Code Playgroud)
考虑从1到7 的标签,1确实接近6和7,并且更接近4。
起初我尝试使用 tSNE 降维:
from sklearn.preprocessing …Run Code Online (Sandbox Code Playgroud) 我想使用 pca 降维来降低大小为 (5,3844) 的矩阵的维数。I got this error n_components=1000 must be between 0 and min(n_samples, n_features)=2 with svd_solver='full'.
我尝试了超过 5 周的时间来寻找如何做到这一点。
任何帮助,将不胜感激。
coeffs = wavedec(y, 'sym5', level=5)
cA5,cD5,cD4,cD3,cD2,cD1=coeffs
result = []
common_x = np.linspace(0,3844, len(cD1))
for c in [cD5,cD4,cD3,cD2,cD1]:
x = np.linspace(0, 3844, len(c))
f = interp1d(x, c)
result.append(f(common_x)) #(5,3844)
pca = PCA(n_components=1000)
pca.fit(result)
data_pca = pca.transform(result)
print("original shape: ", result.shape) ##(5,3844)
print("transformed shape:", data_pca.shape)
Run Code Online (Sandbox Code Playgroud)