在使用下面的代码片段时遇到问题
text_clf = Pipeline([('scale',StandardScaler(with_mean=False)),('clf',OneVsRestClassifier(MLPClassifier(learning_rate = 'adaptive', solver = 'lbfgs',random_state=9000)))])
parameters = {'clf__estimator__alpha':[10.0 ** ~ np.arange(1, 7).any()],'clf__estimator__hidden_layer_sizes': [(100,),(50,)],'clf__max_iter': [1000,500],'clf__estimator__activation':('relu','tanh')}
grid = GridSearchCV(text_clf, parameters, cv=3, n_jobs=-1, scoring= 'accuracy')
with parallel_backend('threading'):
grid.fit(X,Y)
在上述情况下,X = TfidfVectorizer().fit_transform(X_raw)
,其中X_raw
是存储在pd.DataFrame
中的一些文本。 Y
是LabelEncoder.fit_transform(Y_raw)
,其中Y_raw
就像[['apple','lemon'],['orange','lemon'],['guava','watermelon'],........,['orange'],['orange','watermelon']]
。请注意,苹果,橙子等绝对不能排在上面列表的第二位。
问题是错误
NotFittedError: This StandardScaler instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.
我早些时候使用过这个StandardScaler,它在Y_raw
是单值列表(即[['apple'],['orange']...]
)时实际上工作得很好。是因为LabelEncoder
吗?如何解决这个问题?
答案 0 :(得分:0)
我通过在StandardScaler.fit_transform(X)
之外取出Pipeline
解决了这个问题。 X
此处已启用TfIdfVectorizer.fit_transform
。对于Y
,我只使用了LabelEncoder
。此外,MLPClassifier
似乎不是最佳选择,因此,我求助于SGDClassifier
。但是,我仍然想知道为什么它不起作用。