输入文本数据被标记化:
data ['tokenised'] ['hasan','minhaj','responds','netflix','pulling','episode','comedy','show','saudi','arab']
用0填充数据,以使所有标记化文本长度相等(在本例中为51):
len(data['tokenised'][0])
51
100维的字向量称为: embeddings_index = dict() f =打开('glove.6B.100d.txt') 对于f中的行: 值= line.split() 字=值[0] coefs = np.asarray(values [1:],dtype ='float32') embeddings_index [word] =系数 f.close()
输入数据令牌被转换为其向量形式:
def word2vec(tokens,max_size,dim):
print(tokens)
vec = np.zeros((max_size,dim))
for ind,tok in enumerate(tokens):
if(tok==0):
vec[ind] = vec[ind]
else:
try:
print(ind)
vec[ind] = embeddings_index[tok]
except KeyError:
continue
return vec
data['w2v'][0]
array([[-0.41133001, -0.20108999, -0.54119998, ..., -0.67202002,
0.14799 , -0.055051 ],
[ 0.049478 , 0.26212001, -0.78268999, ..., -0.14226 ,
-0.32286 , 0.13525 ],
[-0.14078 , 0.6573 , 0.44602001, ..., -0.55290002,
0.19839001, 0.39563 ],
...,
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ],
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ],
[ 0. , 0. , 0. , ..., 0. ,
0. , 0. ]])
现在我每个文本的长度为51个单词,每个单词都由100维矢量表示(如data ['w2v']中所示)。 数据['w2v'] [0] .shape (51,100) 所有数组的尺寸均相同,即(51,100),所有数组元素均为浮点型。
data ['w2v']是数据框的一列。
在火车测试中分割数据: x_train,x_test,y_train,y_test =
train_test_split(data ['w2v'],data ['class'],test_size = 0.2,stratify = data ['class'])
x_train.shape #series data type
(10248,)
x_train[7].shape #2D array
(51, 100)
在将SVM模型与2D numpy数组拟合时,出现以下错误: 型号= LinearSVC(C = 0.3) model.fit(x_train,y_train) ValueError:设置具有序列的数组元素。
注意: 所有的numpy数组都具有相同的形状(51,100)。
请提出应该如何处理此错误? 我应该如何修改x_train以便可以训练模型?
答案 0 :(得分:0)
您的x_train
当前为三维。到目前为止,您所做的工作是使每个训练示例x_train[i]
都是(51,100)数组,即x_train
的形状为(n_samples,51,100)。
调用fit
方法时,x_train
的形状必须为(n_samples, n_features)
(直接来自docs)。因此,您需要将每个输入的51x100数组缩减为一维数组/向量。您可以通过-
x_train
的形状为(n_samples, 5100)
,或者