我正在使用numpy,我的模型涉及密集矩阵矩阵乘法.为了加快速度,我使用OpenBLAS多线程库来并行化numpy.dot函数.
我的设置如下,
$ OMP_NUM_THREADS=8 python test_mul.py
代码,我从https://gist.github.com/osdf/获取
test_mul.py :
import numpy
import sys
import timeit
try:
import numpy.core._dotblas
print 'FAST BLAS'
except ImportError:
print 'slow blas'
print "version:", numpy.__version__
print "maxint:", sys.maxint
print
x = numpy.random.random((1000,1000))
setup = "import numpy; x = numpy.random.random((1000,1000))"
count = 5
t = timeit.Timer("numpy.dot(x, x.T)", setup=setup)
print "dot:", t.timeit(count)/count, "sec"
Run Code Online (Sandbox Code Playgroud)
当我使用OMP_NUM_THREADS = 1 python test_mul.py时,结果是
dot: 0.200172233582 sec
Run Code Online (Sandbox Code Playgroud)
OMP_NUM_THREADS = 2
dot: …Run Code Online (Sandbox Code Playgroud) 我想知道如何在matlab中绘制样本,其中我有精度矩阵和mean作为输入参数.
我知道mvnrnd是一种典型的方法,但它需要协方差矩阵(即精度的倒数)作为参数.
我只有精确矩阵,由于计算问题,我无法反转我的精度矩阵,因为它需要太长时间(我的尺寸约为2000*2000)
我发现很难理解这两种方法之间的区别,pyspark.sql.functions因为PySpark官方网站上的文档信息量不大.例如,以下代码:
import pyspark.sql.functions as F
print(F.col('col_name'))
print(F.lit('col_name'))
Run Code Online (Sandbox Code Playgroud)
结果是:
Column<b'col_name'>
Column<b'col_name'>
Run Code Online (Sandbox Code Playgroud)
那么这两者之间有什么区别?何时应该使用一个而不是另一个?
我正在使用python scikit-learn包中的高斯混合模型来训练我的数据集,但是,当我编码时,我想到了
- G =混合物.GMM(...)
- G.fit(...)
- G.score(总和特征)
得到的对数概率是正实数...为什么?不是对数概率保证为负数?
我知道了.高斯混合模型返回给我的是对数概率"密度"而不是概率"质量",所以正值是完全合理的.
如果协方差矩阵接近单数,那么GMM将不会很好地表现,并且通常意味着数据不适合这样的生成任务
给定一个稀疏的二进制矩阵A(csr,coo,等等)我想制作一个图,这样我可以看到图中的位置(i,j)= white,如果A(i,j)= 1,和(i, j)= A,如果A(i,j)= 0;
对于密集的numpy数组,matshow将完成这项工作.但是,我的稀疏矩阵(例如100000 x 1000000)的维度很大,可以转换为密集阵列.我想知道如何在稀疏矩阵中绘制模式.
谢谢
我想用KL-divergence作为我的指标来聚类我的数据.
在K-means中:
选择群集数量.
随机初始化每个群集的均值.
将每个数据点分配给c具有最小距离值的群集.
将每个群集的平均值更新为分配给它的数据点的平均值.
在Euclidean案例中,只需平均每个向量即可轻松更新均值.
但是,如果我想使用KL-divergence作为我的指标,我该如何更新我的意思呢?
typedef int arr[10]
据我所知,上面的语句为int [10]定义了一个新名称
arr intArray;
Run Code Online (Sandbox Code Playgroud)
相当于
int intArray[10];
Run Code Online (Sandbox Code Playgroud)
但是,我对这样做的惯例感到困惑.在我看来,这
typedef int arr[10]
令人困惑,对我来说是一个明确的方式
typedef int[10] arr
即我将"int [10]"定义为一个名为arr的新类型
但是,编译器不接受这一点.
我可以问为什么?它只是C语言的惯例吗?
关于如何打击阶级不平衡问题,有许多职位和资源,即对少数群体进行过度抽样或对多数群体进行抽样不足.
我也明白,使用准确性来评估不平衡问题的模型性能是错误的.
但是,我没有找到很多资源来讨论为什么ML模型首先在类不平衡问题上失败.仅仅是因为损失函数通常是所有数据点的总和,因此模型倾向于更多地强调多数类数据而不是少数类数据?
其次,在实际应用中,例如欺诈检测或点击预测(发生类失衡),为什么通过训练集的过度(欠)采样来改变分布是一件好事?难道我们不希望分类器反映真实的分布(其本质上是不平衡的)吗?假设我有一个训练的逻辑回归模型来预测欺诈,让我们假设欺诈率是2%.欺诈事件的过度抽样基本上告诉模型欺诈率不是2%,而是50%(比如说).这是一件好事吗?
总结一下.两个问题:
为什么ML模型会在类不平衡设置中失败?是否因为损失函数通常由各个数据点的损失总和组成?
为什么over(under)-sampling本质上改变了模型看待问题的方式,这是一个好方法?为什么不让模型真实地反映出类的分布?
我想要做的是给出一个DataFrame,根据一些指定的列获取前n个元素.RDD API中的top(self,num)正是我想要的.我想知道DataFrame世界中是否有相同的API?
我的第一次尝试如下
def retrieve_top_n(df, n):
# assume we want to get most popular n 'key' in DataFrame
return df.groupBy('key').count().orderBy('count', ascending=False).limit(n).select('key')
Run Code Online (Sandbox Code Playgroud)
但是,我已经意识到这会导致非确定性行为(我不知道确切的原因,但我认为limit(n)不能保证采取哪个n)
python ×3
numpy ×2
pyspark ×2
apache-spark ×1
arrays ×1
blas ×1
c ×1
dataframe ×1
intel-mkl ×1
k-means ×1
matlab ×1
matplotlib ×1
matrix ×1
probability ×1
pyspark-sql ×1
scikit-learn ×1
scipy ×1
statistics ×1
typedef ×1