【问题标题】:ValueError: Expected 2D array, got 1D array instead. Training modelValueError:预期的二维数组,而不是一维数组。训练模型
【发布时间】:2019-02-14 23:03:21
【问题描述】:

我想为我的情绪分析训练 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 个模型而制作的。所以,而不是

【问题讨论】:

    标签: python scikit-learn sentiment-analysis


    【解决方案1】:

    在不知道 elem 变量中的内容的情况下,使用 svm 之前的代码在很大程度上没有帮助。但是假设 X 和 Y 中的每个元素都是一个列表,我会尝试将变量传递给 model.fit() 为:

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

    这是第一个例子 https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html,他们也使用 numpy 数组。因此,再次取决于 X 和 Y 的组成部分,您可能还需要将它们转换为适当的 numpy 数组。

    【讨论】:

    • 感谢您的回复,我已更新我的代码以使其更清晰。你能弄清楚我的代码会发生什么吗?我已经尝试过你的建议,但我遇到了另一个不同的错误。
    猜你喜欢
    • 2020-06-05
    • 2019-03-28
    • 2021-03-01
    • 2022-01-22
    • 2021-04-16
    • 2018-01-15
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多