gpt4 book ai didi

python - 使用 sklearn 使用 k 折叠来预测测试数据的类别

转载 作者:行者123 更新时间:2023-11-30 09:22:05 26 4
gpt4 key购买 nike

我正在开发一个数据挖掘项目,我使用 python 中的 sklearn 包对我的数据进行分类。

为了训练我的数据并评估预测值的质量,我使用 sklearn.cross_validation.cross_val_predict 函数。

但是,当我尝试在测试数据上运行模型时,它会要求提供不可用的基类。

我已经看到使用 sklearn.grid_search.GridSearchCV 函数的(可能的)解决方法,但我不愿意对一组固定的参数使用这样的方法。

浏览 sklearn.cross_validation 文档,我遇到了 cross_val_score 函数。由于我对分类问题的世界相当陌生,我不太确定这是否可以解决我的问题。

任何帮助都会很棒!

谢谢!

编辑:

你好!我的印象是我最初的查询相当模糊。我将尝试详细说明我正在做什么。这里是:

我生成了 3 个 numpy.ndarrays X、X_test 和 y,其中 nrows = 10158、22513 和 10158,分别对应于我的训练数据、测试数据和训练数据的类标签。

此后,我运行以下代码:

    from sklearn.svm import SVC
from sklearn.cross_validation import cross_val_predict
clf = SVC()
testPred = cross_val_predict(clf,X,y,cv=2)

这工作得很好,然后我可以按照教程中提到的使用 StemPred 和 y。

但是,我希望预测 X_test 的类别。该错误消息相当不言自明,并显示:

    ValueError: Found arrays with inconsistent numbers of samples: [10158 22513]

我正在使用的当前解决方法(我不知道这是一种解决方法还是唯一的方法)是:

    from sklearn import grid_search
# thereafter I create the parameter grid (grid) and appropriate scoring function (scorer)
model = grid_search.GridSearchCV(estimator = clf, param_grid = grid, scoring = scorer, refit = True, cv = 2, n_jobs = -1)
model.fit(X,y)
model.best_estimator_.fit(X,y)
testPred = model.best_estimator_.predict(X_test)

这种技术暂时效果很好;但是,如果我不必使用 GridSearchCV 函数,我就能睡得更好。

最佳答案

IIUC,你混淆了不同的东西。

假设您有一个具有给定方案的分类器。然后您可以根据一些数据对其进行训练,并预测(通常是其他)数据。这很简单,看起来像这样。

首先,我们构建预测器并对其进行拟合。

from sklearn import svm, grid_search, datasets
from sklearn.cross_validation import train_test_split
iris = datasets.load_iris()
clf = svm.SVC()
train_x, test_x, train_y, test_y = train_test_split(iris.data, iris.target)
>> clf.fit(train_x, train_y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)

现在它已经完全构建完毕,您可以用它来预测。

>> clf.predict(test_x)
array([1, 0, 0, 2, 0, 1, 1, 1, 0, 2, 2, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 2, 0,
1, 0, 2, 0, 2, 1, 2, 1, 2, 2, 2, 1, 0, 0, 0])

就这么简单。

这里发生了什么?

  • 分类器有一个完全指定的方案 - 它只需要调整其参数

  • 分类器根据训练数据调整其参数

  • 分类器已准备好进行预测

<小时/>

在许多情况下,分类器有一个需要使用参数进行调整的方案,但它也有元参数。一个例子是分类器的 Degree 参数。

你应该如何调整它们?方法有很多种。

  • 不要。只需坚持使用默认值(这就是我的示例所做的)

  • 使用某种形式的交叉验证(例如网格搜索)

  • 使用某种复杂性衡量标准,例如 AIC、BIC 等。

<小时/>

所以重要的是不要混淆这些东西。交叉验证并不是获得测试数据预测变量的技巧。具有默认参数的预测器已经可以做到这一点。交叉验证用于调整元参数。一旦你选择了它们,你就可以调整参数。那么你就有了一个不同的预测变量。

关于python - 使用 sklearn 使用 k 折叠来预测测试数据的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31089774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com