我正在尝试使用scikit-learn来集群文本文档.总的来说,我找到了解决办法,但我遇到了具体问题.我发现的大多数例子都说明了使用scikit-learn和k-means作为聚类算法的聚类.在我的设置中采用k-means这些例子原则上是有效的.但是,k-means不适合,因为我不知道簇的数量.从我到目前为止所读到的内容 - 如果需要请在这里纠正我 - 在我的情况下,DBSCAN或MeanShift似乎更合适.scikit-learn网站提供了每个群集算法的示例.现在的问题是,对于DBSCAN和MeanShift,我得到了我无法理解的错误,更不用解决了.
我的最小代码如下:
docs = []
for item in [database]:
docs.append(item)
vectorizer = TfidfVectorizer(min_df=1)
X = vectorizer.fit_transform(docs)
X = X.todense() # <-- This line was needed to resolve the isse
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
...
Run Code Online (Sandbox Code Playgroud)
(我的文档已经处理完毕,即已删除了停用词并且已应用了Porter Stemmer.)
当我运行此代码时,我在实例化DBSCAN并调用时收到以下错误fit():
...
File "/usr/local/lib/python2.7/dist-packages/sklearn/cluster/dbscan_.py", line 248, in fit
clust = dbscan(X, **self.get_params())
File "/usr/local/lib/python2.7/dist-packages/sklearn/cluster/dbscan_.py", line 86, in dbscan
n = X.shape[0]
IndexError: tuple index out of range
Run Code Online (Sandbox Code Playgroud)
单击该行dbscan_.py引发错误,我注意到以下行
...
X = np.asarray(X)
n = X.shape[0]
... …Run Code Online (Sandbox Code Playgroud) cluster-analysis machine-learning data-mining dbscan scikit-learn
我的场景很简单:我有一堆新闻文章(目前约为1k),我知道有些文章涉及同一个故事/主题.我现在想根据共享的故事/主题对这些文章进行分组,即基于它们的相似性.
到目前为止我所做的是应用基本的NLP技术,包括删除词和删除词.我还计算了每篇文章的tf-idf向量,并且还可以基于这些tf-idf向量计算例如余弦相似度.但现在随着文章的分组我有点挣扎.我看到两种主要方式 - 可能是相关的 - 来做到这一点:
1)机器学习/聚类:我已经在现有的聚类库中玩了一些,或多或少的成功; 看到这里.一方面,诸如k-means的算法需要簇的数量作为输入,我不知道.其他算法需要指定的参数也不直观(对我而言).
2)图算法:我可以将我的数据表示为图表,其中文章是节点,加权adges表示文章之间的成对(余弦)相似性.有了它,例如,我可以首先删除低于某个阈值的所有边,然后可以应用图算法来查找强连通的子图.
简而言之,我不确定哪里最好离开这里 - 我在这个领域还很新.我想知道是否有一些最佳实践,或某些方法/算法可以(不)应用于某些场景的指南.
(编辑:忘了链接到我的相关问题)
nlp information-retrieval cluster-analysis machine-learning unsupervised-learning
我在我的机器(运行 Ubuntu 18.04 和 Anaconda 和 Python 3.7)中添加了一个 GeForce GTX 1080 Ti,以便在使用 PyTorch 时利用 GPU。两张卡都正确识别:
$ lspci | grep VGA
03:00.0 VGA compatible controller: NVIDIA Corporation GF119 [NVS 310] (reva1)
04:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
Run Code Online (Sandbox Code Playgroud)
NVS 310 处理我的 2 显示器设置,我只想将 1080 用于 PyTorch。我还安装了当前在存储库中的最新 NVIDIA 驱动程序,这似乎没问题:
$ nvidia-smi
Sat Jan 19 12:42:18 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.87 Driver Version: 390.87 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | …Run Code Online (Sandbox Code Playgroud) 我需要测试我的应用程序在睡眠模式下的行为.我在Stackoverflow文章中找到了如何启用睡眠模式.如上所述,模拟器屏幕变黑后大约1分钟.
问题是现在,我无法再次唤醒模拟器.没有点击而不是热键(F7,CTRL + H等)我做错了什么.或者,一般来说,我是否会对睡眠模式产生误解.
原则上,我可以使用真实的设备,但是在这里我无法控制手机进入(深度)睡眠状态,这使得测试变得困难.
我按照我在互联网上找到的方式动态创建一个按钮:
Page = function(...) {
...
};
Page.prototype = {
...
addButton : function() {
var b = content.document.createElement('button');
b.onclick = function() { alert('OnClick'); }
},
...
};
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有工作并抛出以下错误:
Error: [Exception... "Component is not available" nsresult: "0x80040111
(NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: chrome://knowledgizer/content
/knowledgizer.js :: <TOP_LEVEL> :: line 137" data: no]
Source File: chrome://browser/content/tabbrowser.xml Line: 434
Run Code Online (Sandbox Code Playgroud)
setAttribute的解决方案:
b.setAttribute("onClick", "alert('OnClick')");
Run Code Online (Sandbox Code Playgroud)
但是,我希望调用一个类方法(而不是alert),并且b.onclick语法在这方面看起来更好,我希望/想.这个onclick案件是否敏感?因为如果我写
b.onClick = function() {alert("OnClick");} // notice the spelling onclick vs onClick
Run Code Online (Sandbox Code Playgroud)
我没有得到上面的错误,但它仍然无法正常工作,即我没有收到警报.我很感谢任何提示.
作为一个额外的问题:如何在单击按钮时避免重新加载当前页面?我只是想调用一个方法而不是导致页面重新加载.
谢谢和最好的问候,
基督教
我正在开发一个firefox扩展,我想我现在已经对Javascript产生了一个基本的误解,确切地说是'原型'概念.考虑以下最小的例子,注意我设置变量this.demo和this.test时的差异:
var Example = new Array();
Example.Foo = function() {
this.test = null;
this.demo = "World";
};
Example.Foo.prototype = {
initialize : function(resource) {
this.test = "Hello";
this.display();
},
display : function() {
alert(this.test + " " + this.demo);
},
}
window.addEventListener(
"load",
function() {
window.obj = new Example.Foo();
obj.initialize();
},
false
);
Run Code Online (Sandbox Code Playgroud)
打开Firefox时,我得到了预期的输出:
Hello World
Run Code Online (Sandbox Code Playgroud)
只要在js源文件中调用display()',就可以这样工作.但是,当我通过菜单条目中的相应点击调用display()时,例如:
...
<menupopup id="menu_ToolsPopup">
<menuitem label="Example" oncommand="obj.display();"/>
</menupopup>
...
Run Code Online (Sandbox Code Playgroud)
我明白了:
null World
Run Code Online (Sandbox Code Playgroud)
当然,之前已经调用了initialize().
我仍然是Javascript的新手并使用现有代码.因此,我对目前的行为感到困惑.什么是最好的解决方案是工作?
我正在实施处理标签的Google Chrome扩展程序.这包括我获取onCreated,onUpdated和onActivated.每一次,我都使用tabId我的逻辑,最初在处理onCreated事件期间存储在数组中.原则上,一切正常.
但是,我发现了一个小故障.有时,现有选项卡的ID会更改.因此,选项卡具有不在我的数组中的ID,这自然会导致错误.我可以在以下用例中重现此问题:
在这种情况下,会发生两件事:首先,T onUpdated事件的onActivated事件不是事件,而是事件.其次,T现在有一个新ID,通常增加2.
这在我看来远非直观.我甚至称它为bug.有谁知道这里发生了什么?
任何提示都非常感谢!
我有一个集合,其中一些对象具有键foo.我现在尝试查询确实具有此键但不具有特定值的所有对象bar.为此,我使用以下查询:
collection.find({'foo': {'$exists': True}, 'foo': {'$ne': 'bar'}})
Run Code Online (Sandbox Code Playgroud)
我认为这两个标准都是通过逻辑AND连接的.但是,我也得到了没有特征键的对象foo.事实上,当我使用查询时,我得到相同的结果
collection.find({'foo': {'$ne': 'bar'}})
Run Code Online (Sandbox Code Playgroud)
在其他汉斯,如果我使用
collection.find({'foo': {'$exists': True}})
Run Code Online (Sandbox Code Playgroud)
我只是正确地获取了foo所有对象,所以其中一些具有价值bar.
如何制定查询以实现初始结果?是否有一种测试多个标准的顺序?我是否明确指定了两个标准的逻辑AND?
我有一个Android应用程序,它有一个聊天客户端作为其功能之一.聊天客户端使用基于Android 的Smack库的XMPP,并在后台运行Openfire作为XMPP服务器.使用BOSH建立连接整个XMPP连接处理实现为一种服务,即使应用程序的活动不在前台,也可以在后台运行和监听传入消息.到目前为止,一切都很好.
唯一的问题似乎是睡眠模式.在模拟器中(设置为"保持唤醒"时)或使用手机时,XMPP连接正在保持,应用程序可以发送和接收消息.但是,一旦手机进入睡眠模式,XMPP连接就会中断 - 我可以在Openfire服务器的管理控制台中看到用户离线.直观地说,我想一直接收消息,例如WhatsApp.
当然,我在网上搜索过Stackoverflow,但我无法得到明确的答案.用例通常似乎是必须定期执行任务,例如每小时一次.但在聊天客户端的情况下,这似乎并不强烈.因为我认为这是一个常见的用例 - 毕竟,有很多聊天应用程序或带有聊天功能的应用程序 - 这些是我的问题:
如何在手机休眠时更改/扩展我可以收到聊天消息的应用程序?
我偶然发现了WakeLock.这是要走的路还是这些不适合我的用例?
自从Lollipop以来,还有JobScheduler自己使用的API WakeLock.好点?
例如,WhatsApp如何处理这种情况?
另请注意:我使用模拟器进行调试时出现睡眠模式问题.当我在模拟器中关闭"保持唤醒"时,屏幕在1+分钟后变黑并且XMPP连接中断.但我不知道如何在模拟器变黑后重新唤醒/切换模拟器.Android Studio实际上告诉我,设备或其他东西已经消失,我必须重新启动模拟器.
我开始将WebSockets作为将数据从服务器推送到连接客户端的方式.因为我使用python来编写任何类型的逻辑,所以我到目前为止看了Tornado.下面的代码段显示了可以在Web上随处找到的最基本的示例:
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
class WSHandler(tornado.websocket.WebSocketHandler):
def open(self):
print 'new connection'
self.write_message("Hello World")
def on_message(self, message):
print 'message received %s' % message
self.write_message('ECHO: ' + message)
def on_close(self):
print 'connection closed'
application = tornado.web.Application([
(r'/ws', WSHandler),
])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)
实际上,这是按预期工作的.但是,我无法理解如何将这个"集成"到我的应用程序的其余部分.在上面的示例中,WebSocket仅向客户端发送内容作为对客户端消息的回复.如何从"外部"访问WebSocket?例如,要通知所有当前连接的客户端已发生某种事件 - 此事件不是来自客户端的任何类型的消息.理想情况下,我想在我的代码中的某处写一些类似于:
websocket_server.send_to_all_clients("Good news everyone...")
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?或者我对WebSockets(或Tornado)应该如何工作有一个完全的误解.谢谢!