繁体   English   中英

使用适合sklearn gridsearchcv

[英]use fit for sklearn gridsearchcv

我是Sklearn和python的新手; 我有一个我试图破译的项目的代码片段。 我希望你们能帮助我。

from repository import Repository
from configuration import config
repository = Repository(config)
dataset, labels = repository.get_dataset_and_labels()
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.svm import SVC
from sklearn.cross_validation import ShuffleSplit
from sklearn.grid_search import GridSearchCV  
# Ensure that there are no NaNs
dataset = dataset.fillna(-85)
# Split the dataset into training (90 \%) and testing (10 \%)
X_train, X_test, y_train, y_test = train_test_split(dataset, labels,      test_size = 0.1 )
cv = ShuffleSplit(X_train.shape[0], n_iter=10, test_size=0.2, random_state=0)
# Define the classifier to use
estimator = SVC(kernel='linear')
# Define parameter space
gammas = np.logspace(-6, -1, 10)
# Use Test dataset and use cross validation to find bet hyper-p  rameters.
classifier = GridSearchCV(estimator=estimator, cv=cv, param_grid=dict(gamma=gammas))
classifier.fit(X_train, [repository.locations.keys().index(tuple(l))  for l in y_train])

我无法确定的是使用分类器的fit方法。 我在网上找到的所有示例中,“ fit”都会接收训练数据和相应的标签。 在上面的示例中,“适合”接收训练数据和标签(而非标签)的索引。 分类器如何获取索引而不是标签并仍然有效

标签只是一个抽象术语。 它可以是任何东西,单词,数字,索引等等。 在您的情况下(无论是repository.locations.keys().index(...) ,让我们仅假定它是确定性函数,为简单起见,将其称为f ),您将创建一个列表

 [f(tuple(l)) for l in y_train]

y_train本身是一个列表(或更笼统-可迭代)。 因此,以上也是标签列表,由于其他一些原因(简单地通过f转换了标签,也许在这种情况下,用户需要的标签集合与原始数据集中的标签集合完全不同)。 无论哪种方式,您仍将标签传递给fit方法,它们只是被转换了。

例如考虑标签['cat', 'dog']集合,我是否在[x1, x2, x3]['cat', 'cat', 'dog']或上训练模型并不重要[x2,x3,x3][0, 0, 1] [x2,x3,x3] [0, 0, 1] (标签的索引)。

显然,您的标签在此处编码:

[repository.locations.keys().index(tuple(l))  for l in y_train]

除此之外,我认为值得阅读SearchGridCV文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM