我目前正在设计文本文章的推荐系统("有趣"或"不感兴趣"的二进制案例).我的一个规格是它应该不断更新以适应不断变化的趋势.
据我所知,最好的方法是利用支持增量/ 在线学习的机器学习算法.
像Perceptron和Winnow这样的算法支持在线学习,但我不完全确定支持向量机.scikit-learn python库是否支持在线学习?如果是,支持向量机是否可以使用它的算法之一?
我显然没有完全依赖于使用支持向量机,但由于它们的全面性能,它们通常是用于二进制分类的算法.我愿意改变最终最适合的东西.
MySQL版本:5.5.37-0ubuntu0.14.04.1
我目前正在编写一个python脚本,它利用大量的MySQL表和查询来获取存储在表中的倒排索引的结果.
我注意到,在执行查询时选择合适的类型光标的MySQLdb的Python模块中有一个真正对性能影响较大,想知道是否有人能解释或提供了可靠的资源解释其光标时使用.
例如,使用SSCursor执行此查询40次需要7秒:
SELECT Pages.PageID,
Pages.PageName,
Counter AS TermFreq,
Pages.Length,
(Counter / LOG(Length)) AS Weight
FROM Pages
INNER JOIN TermOccurrences ON TermOccurrences.PageID = Pages.PageID
INNER JOIN Terms ON TermOccurrences.TermID = Terms.TermID
WHERE TermName = %s
ORDER BY Weight DESC
LIMIT 20;
Run Code Online (Sandbox Code Playgroud)
使用默认Cursor运行相同的查询40次需要0.004秒.
删除权重计算(计数器/ LOG(长度))使得此查询使用SSCursor再次快速执行.
我正在使用SSCursor,因为它证明在许多其他查询上具有非常优越的性能,然后突然变得非常慢.当它执行得如此之快时,更改回默认的Cursor让我感到惊讶.
编辑:更多的例子.
使用默认光标运行以下40次需要~3秒:
SELECT COUNT(*)
FROM Pages
INNER JOIN TermOccurrences ON TermOccurrences.PageID = Pages.PageID
INNER JOIN Terms ON TermOccurrences.TermID = Terms.TermID
WHERE TermName = %s AND Counter > 2
Run Code Online (Sandbox Code Playgroud)
使用SSCursor运行它大约需要0.002秒.
我对使用matplotlib相当新,并且找不到任何显示两条线的示例,并且它们之间的角度被绘制.
这是我目前的形象:

这是我想要实现的一个例子:

我通常会看看Matplotlib画廊,以了解如何执行某些任务,但似乎没有任何相似之处.
我已经开始学习如何使用OpenMP作为大学课程的一部分.作为实验练习,我们获得了一个需要并行化的系列程序.
我们首先了解了False Sharing的危险性,尤其是在为循环并行更新数组时.
但是,我发现很难将以下代码片段转换为可并行执行的任务,而不会导致错误共享:
int ii,kk;
double *uk = malloc(sizeof(double) * NX);
double *ukp1 = malloc(sizeof(double) * NX);
double *temp;
double dx = 1.0/(double)NX;
double dt = 0.5*dx*dx;
// Initialise both arrays with values
init(uk, ukp1);
for(kk=0; kk<NSTEPS; kk++) {
for(ii=1; ii<NX-1; ii++) {
ukp1[ii] = uk[ii] + (dt/(dx*dx))*(uk[ii+1]-2*uk[ii]+uk[ii-1]);
}
temp = ukp1;
ukp1 = uk;
uk = temp;
printValues(uk,kk);
}
Run Code Online (Sandbox Code Playgroud)
我的第一反应是尝试分享ukp1:
for(kk=0; kk<NSTEPS; kk++) {
#pragma omp parallel for shared(ukp1)
for(ii=1; ii<NX-1; ii++) {
ukp1[ii] …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试连接到R中的redshift数据库.这需要通过SSL连接完成,但我似乎无法找到指定要使用的证书文件路径的选项dbConnect.谷歌并没有出人意料地提供帮助.
是否真的难以通过R建立与红移的postgres SSL连接,或者我只是错过了一些基本的东西?
在最终设法让我的代码用OpenCL编译之后,我似乎无法让输出二进制文件运行!这是在我的Linux笔记本电脑上运行Kubuntu 13.10 x64
我得到的错误是(从cl :: Error打印):
ERROR: clGetPlatformIDs
-1001
Run Code Online (Sandbox Code Playgroud)
我找到了这篇文章,但似乎没有一个明确的解决方案.
我把自己加入了视频组,但这似乎不起作用.
关于ICD配置文件......我不确定我需要做什么 - 这不应该包含在cuda工具包中吗?如果没有,我在哪里下载一个?
编辑:我的系统中似乎有一个ICD文件在/usr/share/nvidia-331/nvidia.icd下.它包含以下文本:
libnvidia-opencl.so.1
Run Code Online (Sandbox Code Playgroud)
我系统中唯一类似于此的文件是:
/usr/lib/nvidia-331/libnvidia-opencl.so.331.20
Run Code Online (Sandbox Code Playgroud)
我的ICD资料有点不对吗?有谁知道修复它的方法?
我有一个需要使用一类分类系统的问题。我目前正在使用 python 进行开发,因此我正在使用 sci-kit learn 进行机器学习任务。
从他们的文档来看,OneClassSVM 应该能够按预期工作(仅为训练提供正面示例),但生成的模型给了我非常不准确的结果 - 即使在原始训练数据上也是如此。
X = generate_data() # Generate matrix of tf-idf document vectors
cls = OneClassSVM(kernel='rbf', gamma=0.1, nu=0.1)
cls.fit(X)
y = cls.predict(X)
print y[y == 1].size / y.size
Run Code Online (Sandbox Code Playgroud)
上面(简化的)代码片段在训练数据上返回了 40-55% 的准确度分数。它在新数据上的表现要差得多(正如人们所期望的那样),几乎所有的结果都是不正确的。
40-55% 的准确率本质上与随机分类器一样好,那么我做错了什么?我曾尝试使用参数gamma和nu,但这似乎对我没有太大作用。
我知道 OneClassSVM 实现利用了 Scholkopf 等人提出的技术。al 和替代方法是支持向量数据描述技术(Tax 和 Duin),但这不是在 scikitlearn 中实现的,需要我自己实现 libsvm 的接口。最重要的是,据我所知,SVDD 与 OneClassSVM 实现一样准确,因此有可能根本无法解决我的问题。
生成的训练数据是由标准 tf-idf 表示的文档矩阵。
我有两个一维 numpy 向量va,vb它们用于通过将所有对组合传递给函数来填充矩阵。
na = len(va)
nb = len(vb)
D = np.zeros((na, nb))
for i in range(na):
for j in range(nb):
D[i, j] = foo(va[i], vb[j])
Run Code Online (Sandbox Code Playgroud)
就目前情况而言,由于 va 和 vb 相对较大(4626 和 737),这段代码需要很长时间才能运行。然而,我希望这可以得到改进,因为使用cdistscipy 中的方法执行类似的过程具有非常好的性能。
D = cdist(va, vb, metric)
Run Code Online (Sandbox Code Playgroud)
我显然知道 scipy 具有在 C 中而不是在 python 中运行这段代码的好处 - 但我希望有一些我不知道的 numpy 函数可以快速执行它。
python ×5
c ×2
scikit-learn ×2
c++ ×1
linux ×1
matplotlib ×1
mysql ×1
numpy ×1
nvidia ×1
opencl ×1
openmp ×1
pandas ×1
performance ×1
qt ×1
qt-creator ×1
r ×1
sql ×1
svm ×1
unit-testing ×1