【问题标题】:why a better performance (silhouette score) in python 2.7 than 3.6?为什么 python 2.7 的性能(剪影分数)比 3.6 更好?
【发布时间】:2019-04-15 06:49:41
【问题描述】:

我在 SoF 上阅读了很多关于 Python 2.7 和 3.6 之间速度差异的信息。但我的问题更多是关于两个版本之间的性能。

我用于文档聚类:TF-IDF + KMeans 和分数轮廓来评估我的聚类的同质性。

通过从 Python 3.6 切换到 Python 2.7,我的剪影分数提高了+0.20!

**有人能解释一下吗? ** 谢谢!

代码:

tfidf = TfidfVectorizer(
    stop_words=my_stopwords_str, 
    max_df=0.95, 
    min_df=5, 
    token_pattern=r'\w{3,}',
    max_features=20)

tfidf.fit(data_final.all_text)
data_vect = tfidf.transform(data_final.all_text)

num_clusters = 15

kmeans = KMeans(n_clusters=num_clusters, init='k-means++', 
max_iter=300).fit(data_vect_lsa)
kmeans_predict = KMeans(n_clusters=num_clusters, init='k-means++', max_iter=300).fit_predict(data_vect_lsa)


silhouette_score(data_vect, labels = kmeans_predict, metric='euclidean')

Python 2.7 的输出是:

0.58234789374593758

Python 3.6 的输出是:

0.37524101598378656    

【问题讨论】:

  • 如果没有更多细节(最好包括代码),很难回答这个问题。
  • 感谢您的建议,我编辑我的帖子!
  • TfidfVectorizerKMeans 来自哪个库?一般来说,要寻找的东西可能是除法——除法运算符/ 的行为在 Python3 中整数从下限变为真除法,如果代码中某处有两个整数的隐藏除法,这可能解释了数值差异
  • 很可能,这取决于您使用的。什么版本?另一件事,尝试显式设置随机种子。

标签: python python-3.x python-2.7 cluster-analysis


【解决方案1】:

再试一次。一个样本是不够的。

K-means 从随机设置开始,可能只找到局部最优值。

多次运行时看到不同的结果是很常见的。

【讨论】:

  • 特别是,随机种子在不同版本中可能会有所不同。
  • 好吧,现在种子根本没有固定,所以每次运行都可能不同。但当然版本差异也会改变生成的随机值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 2014-06-19
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多