【Scikit-Learn 中文文档】模型选择:选择估计量及其参数 - 关于
中文文档:?http://sklearn.apachecn.org/cn/stable/tutorial/statistical_inference/model_selection.html 英文文档:?http://sklearn.apachecn.org/en/stable/tutorial/statistical_inference/model_selection.html
官方文档:?http://scikit-learn.org/stable/ GitHub:?https://github.com/apachecn/scikit-learn-doc-zh(觉得不错麻烦给个 Star,我们一直在努力) 贡献者:?https://github.com/apachecn/scikit-learn-doc-zh#贡献者 关于我们:?http://www.apachecn.org/organization/209.html
模型选择:选择估计量及其参数分数和交叉验证分数如我们所见,每一个估计量都有一个可以在新数据上判定拟合质量(或预期值)的? 为了更好地预测精度(我们可以用它作为模型的拟合优度代理),我们可以连续分解用于我们训练和测试用的?折叠数据。
numpy as np
>>> X_folds = np.array_split(X_digits, 3)
>>> y_folds .array_split(y_digits,9); font-weight:bold">>>> scores = list()
>>> for k in range(3):
... # 为了稍后的 ‘弹出’ 操作,我们使用 ‘列表’ 来复制数据
... X_train list(X_folds)
... X_test = X_train.pop(k)
.concatenate(X_train)
... y_train list(y_folds)
... y_test = y_train.concatenate(y_train)
... scores.append(svc.fit(X_train, y_train).score(X_test, y_test))
>>> print(scores)
[0.93489148580968284,0.95659432387312182,0.93989983305509184]
这被称为? 交叉验证生成器scikit-learn 有可以生成训练/测试索引列表的类,可用于流行的交叉验证策略。 类提供了? 下面是使用?
import KFold, cross_val_score
>>> X = ["a", "b",160)">"c",160)">"c"]
>>> k_fold = KFold(n_splitsfor train_indices, test_indices in k_fold.split(X):
... print('Train: %s | test: ' % (train_indices, test_indices))
Train: [2 3 4 5] | test: [0 1]
Train: [0 1 4 5] | test: [2 3]
Train: [0 1 2 3] | test: [4 5]
然后就可以很容易地执行交叉验证了:
[svc.fit(X_digits[train], y_digits[train]).score(X_digits[test], y_digits[test])
... for train, test .split(X_digits)]
交叉验证分数可以使用?
cross_val_score ?直接计算出来。给定一个估计量,交叉验证对象,和输入数据集,?cross_val_score ?函数就会反复分解出训练和测试集的数据,然后使用训练集和为每次迭代交叉验证运算出的基于测试集的分数来训练估计量。
默认情况下,估计器的? 可以参考?metrics 模块?学习更多可用的评分方法。
cross_val_score(svc, X_digits, y_digits, cv=k_fold, n_jobs=-1)
array([ 0.93489149,0.95659432,0.93989983])
n_jobs=-1?意味着运算会被调度到所有 CPU 上进行。 或者,可以提供?
练习 在数字数据集中,用一个线性内核绘制一个? 方法:?Cross-validation on Digits Dataset Exercise 网格搜索和交叉验证估计量
网格搜索scikit-learn 提供了一个对象,在给定数据情况下,在一个参数网格,估计器拟合期间计算分数,并选择参数来最大化交叉验证分数。这个对象在构建过程中获取估计器并提供一个估计器 API。
GridSearchCV,9); font-weight:bold">>>> Cs 6, 10)
>>> clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs),9); font-weight:bold">... n_jobs1)
>>> clf.fit(X_digits[:1000], y_digits[:1000])
GridSearchCV(cv=None,...
.best_score_
0.925...
.best_estimator_.C
0.0077...
# Prediction performance on test set is not as good as on train set
.score(X_digits[1000:], y_digits[1000:])
0.943...
默认情况下,? 嵌套交叉验证 verbose=False)
# 估计器自动选择它的 lambda:
.alpha_
0.01229...
这些估计量和它们的副本称呼类似,在名字后加 ‘CV’。 练习 在糖尿病数据集中,找到最优正则化参数 α。 另外:?你有多相信 α 的选择? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |