传递了稀疏矩阵,但需要密集数据。使用 X.toarray() 转换为密集 numpy 数组

问题描述 投票:0回答:4

代码如下,我尝试使用 GBRT 回归树的训练数据,相同的数据适用于其他分类器,但对于 GBRT 给出上述错误。请帮忙:

dataset = load_files('train')
vectorizer = TfidfVectorizer(encoding='latin1')
X_train = vectorizer.fit_transform((open(f).read() for f in dataset.filenames)) 
assert sp.issparse(X_train)     
print("n_samples: %d, n_features: %d" % X_train.shape)
y_train = dataset.target
def benchmark(clf_class, params, name):
    clf = clf_class(**params).fit(X_train, y_train)
python scikit-learn
4个回答
17
投票

我在尝试使用

GradientBoostingClassifier
加载的数据来训练
load_svmlight_files
时遇到了同样的问题。通过将稀疏矩阵转换为 numpy 数组来解决。

X_train.todense()

5
投票

因为sklearn请求X(训练数据)中的GBRT

array-like
而不是
sparse matrix
sklearn-gbrt

我希望这可以帮助你!


1
投票

问题在于你使用了sklearn的OneHotEncoder。

您需要使用以下内容:

从 sksurv.preprocessing 导入 OneHotEncoder


1
投票
最新版本的

OneHotEncoder

 库不再支持 
sklearn
。代码修改为用户
ColumnTransformer
.

from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([('town', OneHotEncoder(), [0])], remainder = 'passthrough')

X = ct.fit_transform(X).toarray()

© www.soinside.com 2019 - 2024. All rights reserved.