ValueError: Ожидаемый 2D-массив, вместо него получен 1D-массив.Тренировочная модель - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу обучить 12 моделей для моего анализа настроений, так как у меня есть 4 аспекта и 3 полярности (положительная, нейтральная, отрицательная).но я получил такую ​​ошибку

ValueError: Expected 2D array, got 1D array instead:
array=[].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

Я обновил свой код здесь, чтобы сделать его более понятным, вот мой код:

fix = []
for review in dump:
    review['text'] = prep(review['text'])
    temp = {}
    temp['text'] = review['text']
fix.append(temp)

count_vec = []
def count_ngram(index, numb, wrd):
if numb>ngram:
    return
new_word= ""
for elem in word_list[index]:
    if len(wrd)>0:
        new_word = elem+" "+wrd
    else:
        new_word = elem
    if index>0 and numb<ngram:
        count_ngram(index-1, numb+1, new_word)
    if new_word in vec_index:
        count_vec[vec_index[new_word]]+= 1

for elem in fix:
    count_vec = [0]*features
    words = elem['text'].split()
    word_list = []
    for word in words:
        word_set = set()
        length = len(word)
        word_set.add(word)
        word_list.append(word_set)
    l = len(word_list)
    for i in range(l):
        count_ngram(i, 1, "")
    elem['vec'] = count_vec

x_data=[[],[],[],[],[],[],[],[],[],[],[],[],[]]
y_data=[[],[],[],[],[],[],[],[],[],[],[],[],[]]

def check(a):
    x_data[a].append(elem['vec'])
    if elem[str(a)]>0:
        x_data[4+a].append(elem['vec'])
        if elem[str(a)]>1:
           y_data[4+a].append(1)
        else:
           y_data[4+a].append(0)
        y_data[a].append(1)
    else:
      y_data[a].append(0)
for elem in fix:
    for i in range(4):
        check(i+1)

for i in range(12):
    model=svm.SVC(kernel='linear')
    print("training",i+1)
    model.fit(x_data[i+1],y_data[i+1])

Есть ли что-то не так с тем, как я делаюмодель?Первоначально этот код был сделан для изготовления 8 моделей.так что вместо

1 Ответ

0 голосов
/ 25 февраля 2019

Не зная, что находится внутри вашей переменной elem, код до использования svm в значительной степени бесполезен.Но предполагая, что каждый элемент в X и Y будет списком, я бы попытался передать переменную model.fit () как:

model.fit([x_data[i+1]],[y_data[i+1]])

Это первый пример в https://scikit -learn.org / stable / modules / generate / sklearn.svm.SVC.html , где они также используют массивы numpy.Таким образом, в зависимости от того, из чего состоят X и Y, вам может понадобиться преобразовать их также в соответствующие массивы numpy.

...