sklearn 中的交叉验证:我需要调用 fit() 和 cross_val_score() 吗?
Cross-validation in sklearn: do I need to call fit() as well as cross_val_score()?
我想在学习模型时使用 k 折交叉验证。到目前为止,我是这样做的:
# splitting dataset into training and test sets
X_train, X_test, y_train, y_test = train_test_split(dataset_1, df1['label'], test_size=0.25, random_state=4222)
# learning a model
model = MultinomialNB()
model.fit(X_train, y_train)
scores = cross_val_score(model, X_train, y_train, cv=5)
在这一步我不太确定我是否应该使用 model.fit() 或不,因为在 official documentation of sklearn 它们不适合但只需调用 cross_val_score 如下(他们甚至没有将数据分成训练集和测试集):
from sklearn.model_selection import cross_val_score
clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
我想在学习模型的同时调整模型的超参数。什么是正确的管道?
你的第二个例子适合做交叉验证。请参阅此处的示例:http://scikit-learn.org/stable/modules/cross_validation.html#computing-cross-validated-metrics
拟合会在cross_val_score
函数中完成,您无需事先担心。
[已编辑] 如果除了交叉验证之外,你还想训练一个模型,你可以在之后调用 model.fit()
。
如果您想进行超参数选择,请查看 RandomizedSearchCV
或 GridSearchCV
。如果您想之后使用最佳模型,请使用 refit=True
调用其中一个,然后使用 best_estimator_
.
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import RandomizedSearchCV
log_params = {'penalty': ['l1', 'l2'], 'C': [1E-7, 1E-6, 1E-6, 1E-4, 1E-3]}
clf = LogisticRegression()
search = RandomizedSearchCV(clf, scoring='average_precision', cv=10,
n_iter=10, param_distributions=log_params,
refit=True, n_jobs=-1)
search.fit(X_train, y_train)
clf = search.best_estimator_
http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html
我想在学习模型时使用 k 折交叉验证。到目前为止,我是这样做的:
# splitting dataset into training and test sets
X_train, X_test, y_train, y_test = train_test_split(dataset_1, df1['label'], test_size=0.25, random_state=4222)
# learning a model
model = MultinomialNB()
model.fit(X_train, y_train)
scores = cross_val_score(model, X_train, y_train, cv=5)
在这一步我不太确定我是否应该使用 model.fit() 或不,因为在 official documentation of sklearn 它们不适合但只需调用 cross_val_score 如下(他们甚至没有将数据分成训练集和测试集):
from sklearn.model_selection import cross_val_score
clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
我想在学习模型的同时调整模型的超参数。什么是正确的管道?
你的第二个例子适合做交叉验证。请参阅此处的示例:http://scikit-learn.org/stable/modules/cross_validation.html#computing-cross-validated-metrics
拟合会在cross_val_score
函数中完成,您无需事先担心。
[已编辑] 如果除了交叉验证之外,你还想训练一个模型,你可以在之后调用 model.fit()
。
如果您想进行超参数选择,请查看 RandomizedSearchCV
或 GridSearchCV
。如果您想之后使用最佳模型,请使用 refit=True
调用其中一个,然后使用 best_estimator_
.
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import RandomizedSearchCV
log_params = {'penalty': ['l1', 'l2'], 'C': [1E-7, 1E-6, 1E-6, 1E-4, 1E-3]}
clf = LogisticRegression()
search = RandomizedSearchCV(clf, scoring='average_precision', cv=10,
n_iter=10, param_distributions=log_params,
refit=True, n_jobs=-1)
search.fit(X_train, y_train)
clf = search.best_estimator_
http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html