与sklearn的PCA不同,TruncatedSVD的解释方差比率不是降序.我查看了源代码,似乎他们使用不同的方式计算解释的方差比:
U, Sigma, VT = randomized_svd(X, self.n_components,
n_iter=self.n_iter,
random_state=random_state)
X_transformed = np.dot(U, np.diag(Sigma))
self.explained_variance_ = exp_var = np.var(X_transformed, axis=0)
if sp.issparse(X):
_, full_var = mean_variance_axis(X, axis=0)
full_var = full_var.sum()
else:
full_var = np.var(X, axis=0).sum()
self.explained_variance_ratio_ = exp_var / full_var
Run Code Online (Sandbox Code Playgroud)
PCA:
U, S, V = linalg.svd(X, full_matrices=False)
explained_variance_ = (S ** 2) / n_samples
explained_variance_ratio_ = (explained_variance_ /
explained_variance_.sum())
Run Code Online (Sandbox Code Playgroud)
PCA使用sigma直接计算explain_variance,由于sigma按降序排列,explain_variance也按降序排列.另一方面,TruncatedSVD使用变换矩阵的列的方差来计算explain_variance,因此方差不一定按降序排列.
这是否意味着我需要explained_variance_ratio从头TruncatedSVD开始排序才能找到前k个主要组件?
我一直在阅读scumpy.org上的numpy i:j:k切片教程.在第二个例子后,它说
假设n是要切片的维度中的元素数.然后,如果我没有给出其默认值为0 K> 0和N - 1为ķ<0 .如果没有给出j,则对于k> 0,默认为n ; 对于k <0,默认为-1.如果没有给出k,则默认为1.
然而:
>>> import numpy as np
>>> x = np.array([0,1,2,3,4])
>>> x[::-1]
array([4, 3, 2, 1, 0])
Run Code Online (Sandbox Code Playgroud)
如果j默认为-1,那么x[:-1:-1]应该相当于x[::-1],但是
>>> x[:-1:-1]
array([], dtype=int64)
>>> x[:-(len(x)+1):-1]
array([4, 3, 2, 1, 0])
Run Code Online (Sandbox Code Playgroud)
而
>>> x[:-(len(x)+1):-1]
array([4, 3, 2, 1, 0])
Run Code Online (Sandbox Code Playgroud)
因此当 …
当我们持久化 RDD 并对其执行操作时,Spark UI 的“存储”选项卡将显示有关该 RDD 的一些信息。然而,一旦作业完成,Spark历史服务器中的存储选项卡就是一个空白页。这似乎是 Spark 中的一个问题(SPARK-16859)。我想知道这个问题是否仍然存在。
我使用Eigen库及其块操作,根据https://eigen.tuxfamily.org/dox/group__TutorialBlockOperations.html,这些块都是左值和右值.但是以下程序无法编译:
#include "Eigen/Dense"
#include <iostream>
int main() {
Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> m(4, 4);
m << 1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16;
Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> &column = m.col(0);
}
Run Code Online (Sandbox Code Playgroud)
在这个程序中,我想使用列作为矩阵m的引用,这样我就可以就地改变元素.错误消息是:
test_eigen_rvalue.cc: In function ‘int main()’:
test_eigen_rvalue.cc:11:73: error: invalid initialization of non-const reference of type ‘Eigen::Matrix<float, -1, -1>&’ from an rvalue of type ‘Eigen::DenseBase<Eigen::Matrix<float, -1, -1> >::ColXpr {aka Eigen::Block<Eigen::Matrix<float, -1, -1>, -1, 1, true>}’
Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> &column = m.col(0); …Run Code Online (Sandbox Code Playgroud) 我使用spark-shell来试验Spark的HashPartitioner.错误如下所示:
scala> val data = sc.parallelize(List((1, 3), (2, 4), (3, 6), (3, 7)))
data: org.apache.spark.rdd.RDD[(Int, Int)] = ParallelCollectionRDD[0] at parallelize at <console>:24
scala> val partitionedData = data.partitionBy(new spark.HashPartitioner(2))
<console>:26: error: type HashPartitioner is not a member of org.apache.spark.sql.SparkSession
val partitionedData = data.partitionBy(new spark.HashPartitioner(2))
^
scala> val partitionedData = data.partitionBy(new org.apache.spark.HashPartitioner(2))
partitionedData: org.apache.spark.rdd.RDD[(Int, Int)] = ShuffledRDD[1] at partitionBy at <console>:26
Run Code Online (Sandbox Code Playgroud)
第三次操作有效时,第二次操作失败.为什么spark-shell会在org.apache.spark.sql.SparkSession的包中找到spark.HashPartitioner而不是org.apache.spark?
我在 vim 中打开了两个窗口,并试图在窗口之间切换,但不小心按下了Ctrl+w+Tab(而不是Ctrl + w + h)。如果光标当前在#include <boost/multi_array.hpp>,vim 将打开一个新的水平新窗口并打开文件 /usr/include/boost/multi_array/extent_range.hpp,并将光标留在该行上namespace multi_array{。
如果我在.bashrrc文件中并在 a 上做同样的事情export,它将打开另一个窗口并.bashrc再次打开,光标位于export第一次出现。
我试图搜索这个快捷方式的用途,但找不到任何。我还检查了我的.vimrc但没有看到任何键映射。
apache-spark ×2
python ×2
c++ ×1
eigen ×1
numpy ×1
partitioner ×1
pca ×1
scikit-learn ×1
slice ×1
svd ×1
vim ×1