scikit-learn HashingVectorizer 在稀疏矩阵上的应用

在scikit-learn中,如何对已经存在于scipy.sparse矩阵中的数据运行HashingVectorizer?

我的数据采用svmlight格式,因此我使用sklearn.datasets.load_svmlight_file加载数据,并得到一个scipy.sparse矩阵进行处理。

scikit-learn中的TfidfTransformer可以接受这样的稀疏矩阵进行转换,但是如何将相同的稀疏矩阵提供给HashingVectorizer来使用呢?

编辑:是否有一系列方法调用可以用于稀疏矩阵,可能使用FeatureHasher

编辑2:在与用户cfh的有益讨论后,我的目标是从输入:从svmlight数据获得的稀疏计数矩阵,到输出:一个类似于HashingVectorizer提供的标记出现矩阵。这该如何实现?

我提供了一个示例代码,并非常希望能得到一些关于如何实现的帮助,提前感谢:

from sklearn.feature_extraction.text import TfidfTransformerimport numpy as npfrom sklearn.feature_extraction.text import HashingVectorizerfrom scipy.sparse import csr_matrix# 示例数据X_train = np.array([[1., 1.], [2., 3.], [4., 0.]])print "X_train: \n", X_train# 转换为scipy.sparse.csr.csr_matrix,以与load_svmlight_file的输出保持一致X_train_crs = csr_matrix(X_train)print "X_train_crs: \n", X_train_crs   # 在这个csr矩阵上运行TfidfTransformer()没有问题,可以得到转换后的csr矩阵transformer = TfidfTransformer()tfidf = transformer.fit_transform(X_train)print "tfidf: \n", tfidf# 如何使用HashingVectorizer处理X_train_crs ?hv = HashingVectorizer(n_features=2)

回答:

哈希基本上是将词语随机组合到较少数量的桶中。对于已经计算好的频率矩阵,你可以这样模拟这个过程:

n_features = X_train.shape[1]n_desired_features = n_features / 5buckets = np.random.random_integers(0, n_desired_features-1, size=n_features)X_new = np.zeros((X_train.shape[0], n_desired_features), dtype=X_train.dtype)for i in range(n_features):    X_new[:,buckets[i]] += X_train[:,i]

当然,你可以根据需要调整n_desired_features。请确保在测试数据上也使用相同的buckets

如果你需要对稀疏矩阵做同样的事情,你可以这样做:

M = coo_matrix((repeat(1,n_features), (range(n_features), buckets)),               shape=(n_features,n_desired_features))X_new = X_train.dot(M)

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注