sklearn 谱聚类与文本挖掘初步(一)

有关双聚类的论述。
产生双聚类的数据可以使用函数,
sklearn.datasets.make_biclusters(shape = (row, col), n_clusters, noise, \
shuffle, random_state)
n_clusters 指定聚类数据产生的个数, noise指定使用的Gaussian噪声的标准差。
其返回的是一个元组,即生成的数据,不同类的行标,不同类的列标。


from sklearn.datasets import sample_generator as sg 
sg.shuffle_执行混乱方法,将原数据进行重排。
从其具体实现上可以看出,下面进行重排代码的功能是类似的:


def _shuffle(data, random_state=None):
    generator = check_random_state(random_state)
    n_rows, n_cols = data.shape
    row_idx = generator.permutation(n_rows)
    col_idx = generator.permutation(n_cols)
    result = data[row_idx][:, col_idx]
    return result, row_idx, col_idx




sklearn.cluster.bicluster.SpectralCoclustering
实现双聚类的主要算法,给算法fit后,可以调用model.biclusters得到双聚类的
相应各类下标元组。
model.row_labels_ 及 model.column_labels_分别返回行列下标,当
对其进行重排时,可以返回几个按序分割的双聚类图片。(np.argsort)


下面是示例代码:
import numpy as np 
from matplotlib import pyplot as plt 


from sklearn.datasets import make_biclusters 
from sklearn.datasets import samples_generator as sg 
from sklearn.cluster.bicluster import SpectralCoclustering 
from sklearn.metrics import consensus_score


data, rows, columms = make_biclusters(shape = (300, 300), n_clusters = 5, noise = 5, \
shuffle = False, random_state = 0)


plt.matshow(data, cmap = plt.cm.Blues)
plt.title("Original datasets")


data, row_idx, col_idx = sg._shuffle(data, random_state = 0, ) 
plt.matshow(data, cmap = plt.cm.Blues)
plt.title("Shuffled datasets")


model = SpectralCoclustering(n_clusters = 5, random_state = 0)
model.fit(data)
score = consensus_score(model.biclusters_, (rows[:, row_idx], columms[:, col_idx]))


print "consensus_score: {:.3f}".format(score)




fit_data = data[np.argsort(model.row_labels_)]
fit_data = fit_data[:, np.argsort(model.column_labels_)]


plt.matshow(fit_data, cmap = plt.cm.Blues)
plt.title("After biclustering; rearranged to show biclusters")


plt.show()




将上面的n_clusters换为二维数组所得到的相应结果就是分块为非对角线的形式,是更为
一般化的分类方法。(虽然也属双聚类),相关的函数可以参考下面的函数及相关,
较为容易的方式
SpectralBiclustering




Python默认的正则表达式仅仅能够匹配ascii编码所规定的若干字符,要想将其扩展为更为一般的
Unicode需要特别声明,如re.compile(u'(?u)\\b\\w\\w+\\b')
中的(?u)就将相应的字符集扩充为Unicode字符集。(扩大匹配范围)
也就是说这个规定是指向Python2的正则表达式的,Python3对于Unicode是默认匹配。


\b用于匹配单词字符\w i.e.[A-Za-z0-9_]与非单词字符\W之间的字符,
此正则表达式的作用在于匹配至少要有两位数字或字符\\w\\w+,对于仅有一位的情况
\w或直接匹配更多位的情况\w+是一种排除。


def number_aware_tokenizer(doc):
token_pattern = re.compile(u'(?u)\\b\\w\\w+\\b')
tokens = token_pattern.findall(doc)
tokens = ["#NUMBER" if token[0] in "0123456789_" else token for token in tokens]


return tokens




该函数完成对于在doc中首字母为'_'或数字的以 ‘#NUMBER’来替换,否则保持的方法,


这里有一些一般性的概念,但基本上token可以看做是对于字符串流的一些提取,不要深究。


这里有一个有关stop_words的相关处理,停词指没有意义的词, 
通过Python包 stop-words可以将英文中常用的停词取出, 如:
from stop_words import get_stop_words 
get_stop_words("english")
会返回英语中常用的停词。
这涉及文本挖掘数据预处理中的数据清洗。
下面会考虑上面的算法在文本挖掘中的应用,细节余后作为讨论。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在搜索中,我发现网上竟然没有一个完整的关于Python实现的中文文本聚类的相关资料。大部分文本聚类的资料都是关于Kmeans聚类的原理、Java实现、R语言实现等。然而,我找到了一个关于Python实现中文文本聚类的代码。这段代码使用了sklearn库中的CountVectorizer模块,将文本中的词语转换为词频矩阵,然后计算词频并输出结果。如果你对Python文本聚类感兴趣,这段代码可以作为一个基础。另外,如果你希望了解更多关于Python基础语法的知识,我还找到了一篇名为《Python从零到壹》的文章,其中包含了关于基础语法、条件语句、循环语句、函数、文件操作、CSV文件读写以及面向对象的内容。希望这些资料能对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python进行中文文本聚类(切词以及Kmeans聚类)](https://blog.csdn.net/m0_55389447/article/details/121011384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [[Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解](https://blog.csdn.net/Eastmount/article/details/119464508)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值