HashingVectorizer之后的输入形状错误Sklearn错误

时间:2017-07-16 19:10:33

标签: python-3.x machine-learning scikit-learn nlp keras

我有204567个单词,其中21010是唯一的。每个单词都与一个唯一标签相关联。总共有46个唯一标签。

我使用功能哈希来使用HashingVectorizer()映射204567个单词。我有一个热门编码标签,并使用Perceptron()模型来解决这个多类别的分类问题。

from keras.utils import np_utils
from sklearn.feature_extraction.text import HashingVectorizer 
from sklearn.linear_model import Perceptron
from sklearn.preprocessing import LabelEncoder

vect = HashingVectorizer(decode_error='ignore', n_features=2**15,
                          preprocessor=None)
X = vect.transform(X_train)

encoder = LabelEncoder()
y = encoder.transform(y_train)
target = np_utils.to_categorical(y)

ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0)
ppn.fit(X, target)

但是,我收到以下错误:ValueError: bad input shape (204567, 46)

是否有更好的方法对代码进行编码?

P.S。请解释错误和可能的解决方案

2 个答案:

答案 0 :(得分:2)

我按如下方式更改了我的代码,现在它正在运行:

from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import np_utils
from numpy import array   

vec = HashingVectorizer(decode_error = 'ignore', n_features = 2**15)
X = vec.fit_transform(X_train) 

values = array(y_train)

label_encoder = LabelEncoder()
integer_encoded = label_encoder.fit_transform(values)

encoded = np_utils.to_categorical(integer_encoded)
print(X.shape)
print(encoded.shape)

clf = MLPClassifier(activation = 'logistic', solver = 'adam', 
                    batch_size = 100, learning_rate = 'adaptive', 
                    max_iter = 20, random_state = 1, verbose = True )
clf.fit(X, encoded)
print('Accuracy: %.3f' %clf.score(X, encoded))

我将我的模型从Perceptron改为Multi Layer Perceptron Classifier,虽然我不完全确定它是如何工作的。欢迎解释。 现在我必须使用n-gram模型处理相同的问题并比较结果。

答案 1 :(得分:0)

函数Country1:string, Picture:string, CreateDate:string){ this.CustomerID = CustomerID 需要Country1:string, Picture:string, CreateDate:string) { this.CustomerID = CustomerID 作为参数,你给出了一个形状

参见文档:

<强> to_categorical

np_utils.to_categorical()

将类向量(整数)转换为二进制类矩阵。

E.g。用于categorical_crossentropy。

<强>参数

y:要转换为矩阵的类向量(从0到num_classes的整数)。 num_classes:类的总数。 返回

输入的二进制矩阵表示。

所以

class vector

为您提供错误类型