簡體   English   中英

稀疏矩陣上的scikit-learn HashingVectorizer

[英]scikit-learn HashingVectorizer on sparse matrix

在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 TfidfTransformer
import numpy as np
from sklearn.feature_extraction.text import HashingVectorizer
from scipy.sparse import csr_matrix

# example data
X_train = np.array([[1., 1.], [2., 3.], [4., 0.]])
print "X_train: \n", X_train
# transform to scipy.sparse.csr.csr_matrix to be consistent with output from load_svmlight_file
X_train_crs = csr_matrix(X_train)
print "X_train_crs: \n", X_train_crs   
# no problem to run TfidfTransformer() on this csr matrix to get a transformed csr matrix
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(X_train)
print "tfidf: \n", tfidf
# How do I use the HashingVectorizer with X_train_crs ?
hv = HashingVectorizer(n_features=2)

散列基本上將單詞隨機組合到較少數量的存儲桶中。 使用已經計算出的頻率矩陣,您可以像這樣進行仿真:

n_features = X_train.shape[1]
n_desired_features = n_features / 5
buckets = 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM