gpt4 book ai didi

python - 使用 CountVectorizer 在 python 中 todense 时出现内存错误

转载 作者:行者123 更新时间:2023-11-30 09:05:52 25 4
gpt4 key购买 nike

这是调用todense()时我的代码和内存错误,我正在使用GBDT模型,想知道是否有人有解决内存错误的好主意?谢谢。

  for feature_colunm_name in feature_columns_to_use:
X_train[feature_colunm_name] = CountVectorizer().fit_transform(X_train[feature_colunm_name]).todense()
X_test[feature_colunm_name] = CountVectorizer().fit_transform(X_test[feature_colunm_name]).todense()
y_train = y_train.astype('int')
grd = GradientBoostingClassifier(n_estimators=n_estimator, max_depth=10)
grd.fit(X_train.values, y_train.values)

详细的错误消息,

in _process_toarray_args
return np.zeros(self.shape, dtype=self.dtype, order=order)
MemoryError
...

问候,林

最佳答案

这里有很多错误:

for feature_colunm_name in feature_columns_to_use:
X_train[feature_colunm_name] = CountVectorizer().fit_transform(X_train[feature_colunm_name]).todense()
X_test[feature_colunm_name] = CountVectorizer().fit_transform(X_test[feature_colunm_name]).todense()

1) 您尝试将多个列(CountVectorizer 的结果是一个二维数组,其中列代表特征)分配给单个列“feature_columm_name”数据框。那是行不通的,并且会产生错误。

2) 您在测试数据上再次拟合 CountVectorizer,这是错误的。您应该在测试数据上使用与在 trainind 数据上使用的相同的 CountVectorizer 对象,并且仅调用 transform(),而不是 fit_transform()

类似于:

cv = CountVectorizer()
X_train_cv = cv.fit_transform(X_train[feature_colunm_name])
X_test_cv = cv.transform(X_test[feature_colunm_name])

3) GradientBoostingClassifier 适用于稀疏数据。文档中尚未提及(似乎文档中存在错误)。

4)您似乎正在将原始数据的多列转换为词袋形式。为此,您需要使用许多 CountVectorizer 对象,然后将所有输出数据合并到一个数组中,并将其传递给 GradientBoostingClassifier。

更新:

您需要进行如下设置:

# To merge sparse matrices
from scipy.sparse import hstack

result_matrix_train = None
result_matrix_test = None

for feature_colunm_name in feature_columns_to_use:
cv = CountVectorizer()
X_train_cv = cv.fit_transform(X_train[feature_colunm_name])

# Merge the vector with others
result_matrix_train = hstack((result_matrix_train, X_train_cv))
if result_matrix_train is not None else X_train_cv

# Now transform the test data
X_test_cv = cv.transform(X_test[feature_colunm_name])
result_matrix_test = hstack((result_matrix_test, X_test_cv))
if result_matrix_test is not None else X_test_cv

注意:如果您还有其他列没有通过 Countvectorizer 进行处理,因为它们已经是数字等,您想要将其与 result_matrix_train 合并,您也可以通过以下方式执行此操作:

result_matrix_train = hstack((result_matrix_test, X_train[other_columns].values)) 
result_matrix_test = hstack((result_matrix_test, X_test[other_columns].values))

现在使用这些来训练:

...
grd.fit(result_matrix_train, y_train.values)

关于python - 使用 CountVectorizer 在 python 中 todense 时出现内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52194375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com