首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HashingVectorizer后输入形状错误

HashingVectorizer后输入形状错误
EN

Stack Overflow用户
提问于 2017-07-16 19:10:33
回答 2查看 338关注 0票数 1

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

我使用了特性散列来映射使用HashingVectorizer()的204567单词。我有一个热编码标签,并使用Perceptron()模型来解决这个多类分类问题。

代码语言:javascript
复制
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)

有更好的方法来编码标签吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-17 10:53:54

我修改了我的代码如下,现在它开始工作了:

代码语言:javascript
复制
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改为多层Perceptron分类器,虽然我不完全确定这是如何工作的。欢迎解释。现在,我必须使用n-g模型来处理同样的问题,并比较结果。

票数 2
EN

Stack Overflow用户

发布于 2017-07-16 19:18:33

函数np_utils.to_categorical()需要一个class vector作为参数,您给出了一个形状

见文档:

to_categorical

代码语言:javascript
复制
to_categorical(y, num_classes=None)

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

例如与categorical_crossentropy一起使用。

参数

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

输入的二进制矩阵表示。

所以

代码语言:javascript
复制
target = np_utils.to_categorical(y)

提供错误类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45132387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档