我有一个工作分类器,其数据集分为火车组(70%)和测试组(30%)。
但是,我也希望实现验证集(因此:70%列车,20%验证和10%测试)。应随机选择这些集合,并将结果平均分配给10个不同的任务。
任何想法如何做到这一点?以下是我使用火车和测试装置的实施:
def classifier(samples):
# load the datasets
dataset = samples
data_train, data_test, target_train, target_test = train_test_split(dataset["data"], dataset["target"], test_size=0.30, random_state=42)
# fit a k-nearest neighbor model to the data
model = KNeighborsClassifier()
model.fit(data_train, target_train)
print(model)
# make predictions
expected = target_test
predicted = model.predict(data_test)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))
答案 0 :(得分:2)
对于您所描述的内容,您只需使用train_test_split
对其结果进行以下拆分。
在那里修改教程,从这样开始:
import numpy as np
from sklearn import cross_validation
from sklearn import datasets
from sklearn import svm
iris = datasets.load_iris()
iris.data.shape, iris.target.shape
((150, 4), (150,))
然后,就像那里一样,进行初始训练/测试分区:
X_train, X_test, y_train, y_test = cross_validation.train_test_split(iris.data, iris.target, test_size=0.1, random_state=0)
现在你只需将列车数据的0.9分成两部分:
X_train_cv_train, X_test_cv_train, y_train_cv_train, y_test_cv_train = \
cross_validation.train_test_split(X_train, y_train, test_size=0.2/0.9)
如果你想要10个随机火车/测试cv套装,重复最后一行10次(这会给你重叠的套装)。
或者,您可以使用10倍验证替换最后一行(请参阅the relevant classes)。
重点是从初始列车/测试分区的列车部分构建CV集。
答案 1 :(得分:1)
对于 k - 交叉验证(请注意,这与您的kNN分类器不同 k ),将您的训练集划分为 k 部分。让我们说5作为起点。您将在训练数据上创建5个模型,每个模型都针对一部分进行测试。这意味着您的模型将针对训练集中的每个数据点进行训练和测试。维基百科对cross-validation的详细描述比我在这里给出的更详细。
然后,您可以针对您的测试集进行测试,根据需要进行调整,最后检查您的验证集。
Scikit Learn为此提供了详细记录method。