Как мы можем предоставить явные тестовые данные и обучить данные в SVM вместо использования функции train_test_split? - PullRequest
0 голосов
/ 07 сентября 2018

Я планирую предоставить тестовый и обучающий наборы данных явно алгоритму и не использовать метод train_test_split для случайного разбиения данных на test и train соответственно.

И я хочу, чтобы данные проверок и меток оставались в одном файле во время тестирования и обучения модели.

Может кто-нибудь из вас, пожалуйста, предложить мне относительно того же ...

Мой код:

from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.model_selection import train_test_split
from sklearn.svm import LinearSVC
from sklearn.metrics import average_precision_score
from sklearn.metrics import confusion_matrix

with open("/Users/xyz/Desktop/reviews.txt") as f:
    reviews = f.read().split("\n")
with open("/Users/xyz/Desktop/labels.txt") as f:
    labels = f.read().split("\n")

reviews_tokens = [review.split() for review in reviews]


onehot_enc = MultiLabelBinarizer()
onehot_enc.fit(reviews_tokens)


X_train, X_test, y_train, y_test = train_test_split(reviews_tokens, labels, test_size=0.20, random_state=None)

lsvm = LinearSVC()
lsvm.fit(onehot_enc.transform(X_train), y_train)
accuracy_score = lsvm.score(onehot_enc.transform(X_test), y_test)

print("Accuracy score of SVM:" , accuracy_score)

Test.txt

review,label
Colors & clarity is superb,positive
Sadly the picture is not nearly as clear or bright as my 40 inch Samsung,negative

Train.txt:

review,label
The picture is clear and beautiful,positive
Picture is not clear,negative

1 Ответ

0 голосов
/ 07 сентября 2018

Просто делай что хочешь. Решение довольно простое:

X_train = reviews_tokens[:number_of_rows_of_train_data]
X_test = reviews_tokens[number_of_rows_of_train_data:]

Сделайте то же самое для y_train и y_test.

Конечно, вам нужно знать, какие строки в вашем файле предназначены для обучения, а какие для тестирования.

Если вы хотите сохранить функции и метки в одном файле - с этим проблем нет. Вам потребуется еще один шаг, чтобы отделить ярлыки от функций С пандами было бы намного проще.

EDIT

Имея предоставленные вами файлы, вы можете получить то, что хотите, вот так:

def load_data(filename):

    X = list()
    y = list()
    with open(filename) as file:
        file.readline()
        for line in file:
            line = line.strip().split(',')
            y.append(line[1])
            X.append(line[0].split())

    return X, y

X_train, y_train = load_data('train.txt')
X_test, y_test = load_data('test.txt')
...