我已经为此问题忙了一整天,但毫无进展
我设法在一行TfidfVectorizer代码中解决了这个问题
这是我正在使用的代码
from sklearn.feature_extraction.text import CountVectorizervectorizer = CountVectorizer()vectorizer.fit(xtrain) X_train_count = vectorizer.transform(xtrain)X_test_count = vectorizer.transform(xval)X_train_countfrom keras.models import Sequentialfrom keras import layersinput_dim = X_train_count.shape[1] # Number of featuresmodel = Sequential()model.add(layers.Dense(10, input_dim=input_dim, activation='relu'))model.add(layers.Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])model.summary()history = model.fit(X_train_count, ytrain, epochs=10, verbose=False, validation_data=(X_test_count, yval), batch_size=10)
但当我改为
from sklearn.feature_extraction.text import TfidfVectorizer#TF-IDF initializervectorizer = TfidfVectorizer(max_df=0.8, max_features=1000)vectorizer.fit(xtrain) X_train_count = vectorizer.transform(xtrain)X_test_count = vectorizer.transform(xval)X_train_countfrom keras.models import Sequentialfrom keras import layersinput_dim = X_train_count.shape[1] # Number of featuresmodel = Sequential()model.add(layers.Dense(10, input_dim=input_dim, activation='relu'))model.add(layers.Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])model.summary()history = model.fit(X_train_count, ytrain, epochs=10, verbose=False, validation_data=(X_test_count, yval), batch_size=10)
唯一改变的只是这两行
from sklearn.feature_extraction.text import TfidfVectorizervectorizer = TfidfVectorizer(max_df=0.8, max_features=1000)
然后我得到了这个错误
InvalidArgumentError: indices[1] = [0,997] is out of order. Many sparse ops require sorted indices.
Usetf.sparse.reorder
to create a correctly ordered copy.[Op:SerializeManySparse]
如何修复这个问题?为什么会发生这种情况?
回答:
vectorizer.transform(...)
生成一个稀疏数组,这对keras来说不好。你只需要将其转换为一个简单的数组。这很简单,只需使用:
vectorizer.transform(...).toarray()