Как классифицировать, используя классификатор SVM? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь создать классификатор SVM для своего набора данных, я знал, что классификатор SVM работает с 2D-массивом, но этот код не работает, потому что программа видит newtemp2 как 3D-массив, поэтому я хочу знать, что я должен сделать, чтобы мои данные использовали svm classifier.

    train_setfeat = []
    train_setlabel = []
    newtemp2=[]
    for vector in newtemp:
        newtemp2.append(np.reshape(vector, (431, 19)))
        #convert each vector to 2d array

    j = 0
    for vector in newtemp2:
        if j < 2100: # 70 % for train

            train_setfeat.append(vector)
            train_setlabel.append(classlabels[j])
            j += 1
        else:
            break


    test_setfeat = []
    test_setlabel = []
    j = 0
    for vector in newtemp2:
        if j < 2997 and j >= 2100:   #20 % for test
            test_setfeat.append(vector)
            test_setlabel.append(classlabels[j])
        if j>= 3000:
            break
        j += 1

    classifier1 = svm.SVC(kernel='linear')
    classifier1.fit(train_setfeat, train_setlabel)
#sample of newtemp data
newtemp =[
    (0.05,0.0,0.0,0.02,0.0),
    (0.0,0.0,0.0,0.02,0.0),
    (0.05,0.0,0.0)]

Каждое предложение в наборе данных представляет собой вектор 0.0, если слово найдено, иначе укажите вес слова

1 Ответ

0 голосов
/ 18 июня 2019

У вас есть некоторые проблемы при создании вашего тренировочного набора с использованием комбинации списков и массивов numpy.

Попробуйте эту часть кода, следует решить вашу проблему, заменив строку 3-5 следующим кодом:

N=len(newtemp)
newtemp2=np.empty(N,431,19)
i=0;
for vector in newtemp:
    newtemp2[i,:]=np.reshape(vector, (431, 19)))
    i+=1

Вы можете сделать то же самое для остального кода

...