1

Я работаю над назначением машинного обучения, которое использует разреженные матрицы (в определенных 20 группах новостей, если вы знакомы с ним). Вот то, что я сделал до сих пор:Как спланировать разреженные матрицы случайным образом для классификации машинного обучения

import numpy as np 
import numpy as np 
import scipy as sp 
import matplotlib.pyplot as plt 
import re 
from random import shuffle 

from sklearn.datasets import fetch_20newsgroups 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.svm import SVC, LinearSVC 

dataset = fetch_20newsgroups(subset='train') 
transformer = CountVectorizer().fit(dataset.data) 
tfidf_transformer = TfidfTransformer() 

def preprocess(data): 
    sparse_data = transformer.transform(data) 
    training_data = tfidf_transformer.fit_transform(sparse_data) 
    return training_data 


def predict(): 
    data = preprocess(dataset.data) 
    target = dataset.target 
    print(data) 
    model = LinearSVC().fit(data, target) 
    return model 
testset=fetch_20newsgroups(subset='test') 
data2=preprocess(testset.data) 
predicted=predict().predict(data2) 
print(np.mean(predicted == testset.target)) 

Итак, я тренировался на весь набор данных обучения, а затем я использовал мой классификатор, чтобы классифицировать данные испытаний, и это распечатывается точность 88%. Но я должен был тренироваться на 80% данных обучения и проверять свой классификатор на остальной части данных обучения, а затем мой код будет проверен моим инструктором, используя тестовые данные. Таким образом, я должен случайным образом разбивать данные обучения на 2 набора, поскольку данные в порядке, поэтому обучение на первых 80% приведет к плохому классификатору; кроме того, однако я беспорядочно разделяю свои данные обучения, я также должен соответствующим образом разделить мою целевую аудиторию. Как мне это сделать?

ответ

0

Чтобы разбить данные обучения на два набора, вы можете использовать sklearn.cross_validation.train_test_split. Вот кусок кода ваши ищут:

from sklearn.cross_validation import train_test_split 

X_train, X_test, y_train, y_test = train_test_split(dataset.data, dataset.target, 
                train_size=0.8, random_state=0) 

print("Train size: {0}".format(len(X_train))) 
print("Test size: {0}".format(len(X_test))) 

Выхода:

Train size: 9051 
Test size: 2263 

Я надеюсь, что это поможет.

Смежные вопросы