有关双聚类的论述。
产生双聚类的数据可以使用函数,
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_执行混乱方法,将原数据进行重排。
从其具体实现上可以看出,下面进行重排代码的功能是类似的:
sklearn.cluster.bicluster.SpectralCoclustering
实现双聚类的主要算法,给算法fit后,可以调用model.biclusters得到双聚类的
相应各类下标元组。
model.row_labels_ 及 model.column_labels_分别返回行列下标,当
对其进行重排时,可以返回几个按序分割的双聚类图片。(np.argsort)
下面是示例代码:
将上面的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+是一种排除。
该函数完成对于在doc中首字母为'_'或数字的以 ‘#NUMBER’来替换,否则保持的方法,
这里有一些一般性的概念,但基本上token可以看做是对于字符串流的一些提取,不要深究。
这里有一个有关stop_words的相关处理,停词指没有意义的词,
通过Python包 stop-words可以将英文中常用的停词取出, 如:
from stop_words import get_stop_words
get_stop_words("english")
会返回英语中常用的停词。
这涉及文本挖掘数据预处理中的数据清洗。
下面会考虑上面的算法在文本挖掘中的应用,细节余后作为讨论。
产生双聚类的数据可以使用函数,
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")
会返回英语中常用的停词。
这涉及文本挖掘数据预处理中的数据清洗。
下面会考虑上面的算法在文本挖掘中的应用,细节余后作为讨论。