我正在做一项利用稀疏矩阵的机器学习任务(如果你熟悉的话,可以在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%上进行训练会导致分类器不好;此外,无论我如何随机划分我的训练数据,我也必须相应地划分我的培训目标。我该怎么做?
要将训练数据随机划分为两个集,可以使用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
我希望这对你有帮助。