我基于EM(期望最大化算法)在Python中构建了一个半监督版的NLTK Naive Bayes.然而,在EM的一些迭代中,我得到负的对数似然(EM的对数似然性在每次迭代中必须是正的),因此我相信我的代码中肯定会有一些错误.仔细检查我的代码后,我不知道为什么会这样.如果有人能在我的代码中发现任何错误,我们将非常感激:
EM算法主循环
#initial assumptions:
#Bernoulli NB: only feature presence (value 1) or absence (value None) is computed
#initial data:
#C: classifier trained with labeled data
#labeled_data: an array of tuples (feature dic, label)
#features: dictionary that outputs feature dictionary for a given document id
for iteration in range(1, self.maxiter):
#Expectation: compute probabilities for each class for each unlabeled document
#An array of tuples (feature dictionary, probability dist) is built
unlabeled_data = [(features[id],C.prob_classify(features[id])) for id in …Run Code Online (Sandbox Code Playgroud) python machine-learning nltk unsupervised-learning naivebayes
谁能解释一下prcomp和princomp函数之间的主要区别是什么?
有什么特别的理由让我选择一个而不是另一个吗?如果这是相关的,我正在研究的应用类型是基因组(表达)数据集的质量控制分析.
谢谢!
我已经有了一种聚类图形的方法,因此聚类过程不是问题.我想要做的是,一旦我们将所有节点聚集在一起 - 用Python绘制聚类图,如下所示:

我查看了networkx,igraph和graph-tool,但它们似乎是在进行聚类,而不是绘图.我应该使用什么库来绘制已经聚类的图形的任何想法和命题,这将最大限度地减少交叉链接的数量?
python graph cluster-analysis graph-drawing unsupervised-learning
我有大约一千个潜在的调查项目作为字符串向量,我想减少到几百.通常,当我们谈论数据减少时,我们有实际数据.我将项目管理给参与者并使用因子分析,PCA或其他一些降维方法.
就我而言,我没有任何数据.只是项目(即文本字符串).我想通过消除具有相似含义的项目来减少集合.据推测,如果实际给予参与者,他们将是高度相关的.
我一直在阅读有关文本分析的聚类方法.这个SO问题展示了我在不同的例子中看到过的方法.OP指出,群集解决方案并不能完全回答他/她的问题.以下是在我的案例中如何应用(令人不满意):
# get data (2 columns, 152 rows)
Run Code Online (Sandbox Code Playgroud)
使用样本项的dput()链接到text.R文件
# clustering
library(tm)
library(Matrix)
x <- TermDocumentMatrix( Corpus( VectorSource(text$item) ) )
y <- sparseMatrix( i=x$i, j=x$j, x=x$v, dimnames = dimnames(x) )
plot( hclust(dist(t(y))) )
Run Code Online (Sandbox Code Playgroud)
该图显示项目145和149是聚类的:
145"让你知道你不被通缉"
149"让你知道他爱你"
这些项目共享相同的词干,"让你知道",这可能是聚类的原因.从语义上讲,它们是对立的.
OP与他/她的例子有类似的挑战.一位意见提供者指出wordnet包装是一种可能的解决方案.
问题(根据反馈编辑)
我怎样才能阻止像145和149这样的项目进行聚类,因为它们共享干?
问题重点较少的次要问题:有人在这里看到更好的解决方案吗?我遇到的许多方法都涉及监督学习,测试/训练数据集和分类.我相信我正在寻找的是更多的语义相似性/聚类(例如,FAC pdf).
关于确定数据集中群集数量的维基百科文章表明,在使用层次聚类时,我不需要担心这样的问题.然而,当我尝试使用scikit-learn的 凝聚聚类时,我发现我必须将聚类的数量作为参数"n_clusters"提供 - 没有它我得到两个聚类的硬编码默认值.在这种情况下,如何为数据集选择正确数量的聚类?维基文章错了吗?
artificial-intelligence cluster-analysis machine-learning unsupervised-learning scikit-learn
我有一个表示时间序列的数据框,例如:
时间戳: 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28...
值: 0|0|3|6|3|3|6|3|3|6 |3 |0 |0 |0 |1 |3 |7 |0 |0 |1 |3 |7 |1 |3 |7 |3 |6 |3 ...
目标是对不同的模式(可以在随机位置)进行分类并标记值.这意味着找到模式:
并将数据框扩展到
时间戳: 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28...
值: 0|0|3|6|3|3|6|3|3|6 |3 |0 |0 |0 |1 |3 |7 |0 |0 |1 |3 |7 |1 |3 |7 |3 |6 |3 ...
标签: c|c|a|a|a|a|a|a|a|a |a |c |c |c |b |b |b |c |c |b |b |b |b |b |b |a |a |a ...
注意,这种图案没有相同的长度.
问题是什么样的算法可用于这种无监督的学习问题,并且可能另外哪些库/框架可用于实现这样的任务.
提前致谢!
machine-learning time-series self-organizing-maps hidden-markov-models unsupervised-learning
我使用 scikit-learn 的亲和传播实现对一组实体名称进行聚类,并使用修改后的 Jaro-Winkler 距离作为相似性度量,取得了令人鼓舞的结果,但我的聚类仍然太多(即误报太多。)
我在 scikit-learn 文档中看到存在一个影响集群数量的“偏好”参数,其描述如下:
偏好:类似数组,形状(n_samples,)或浮点数,可选
每个点的偏好 - 偏好值较大的点更有可能被选为样本。样本的数量,即集群的数量,受输入偏好值的影响。如果偏好不作为参数传递,它们将被设置为输入相似度的中值。[0]
然而,当我开始修改这个值时,我发现一个非常窄的值范围给了我太多的集群 ( preference=-11.13) 或太少的集群 ( preference=-11.11)。
有什么方法可以确定偏好参数的“合理”值应该是多少?为什么我无法获得非极端数量的集群?
类似问题:
在我的项目中,我曾使用k均值对组之间的数据进行分类,但是我对Scikit-learn的k均值的计算存在问题-速度非常慢。我需要加强它。
我尝试将更n_jobs改为-1,但是速度仍然很慢!
有什么建议如何加快?
python machine-learning k-means unsupervised-learning scikit-learn
我正在学习非线性聚类算法,并且遇到了这个二维图。我想知道哪种聚类算法和超参数组合可以很好地聚类该数据。

就像人类会将这五个尖峰聚类一样。我希望我的算法能够做到。我尝试了KMeans,但它只是水平或垂直聚集。我开始使用GMM,但无法获得所需聚类的超参数。
cluster-analysis k-means unsupervised-learning data-science gmm
我需要训练一个双向LSTM模型以识别离散语音(单个数字从0到9),我已经录制了100个扬声器的语音。接下来我该怎么办?(假设我将它们分成单个的.wav文件,每个文件包含一个数字)我将使用mfcc作为网络功能。
此外,如果我要使用支持CTC(连接主义者时间分类)的库,我想知道数据集的差异。
speech-recognition unsupervised-learning recurrent-neural-network
python ×4
scikit-learn ×3
k-means ×2
r ×2
data-science ×1
gmm ×1
graph ×1
naivebayes ×1
nltk ×1
pca ×1
text-mining ×1
time-series ×1