Python:Scikit学习中文本数据的StandardScaler问题

时间:2018-12-18 08:22:39

标签: python machine-learning scikit-learn

在使用下面的代码片段时遇到问题

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中的一些文本。 YLabelEncoder.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吗?如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我通过在StandardScaler.fit_transform(X)之外取出Pipeline解决了这个问题。 X此处已启用TfIdfVectorizer.fit_transform。对于Y,我只使用了LabelEncoder。此外,MLPClassifier似乎不是最佳选择,因此,我求助于SGDClassifier。但是,我仍然想知道为什么它不起作用。