提交 db4e2c18 编写于 作者: W wizardforcel

6.21

上级 dcf532da
......@@ -362,3 +362,90 @@ NumPy 输出如下:
```
我们可以看到,我们得到了每个分类的样例大小,正好是训练集合测试集的比例。
## 5.5 菜鸟的网格搜索
这个秘籍中,我们打算使用 Python 来介绍基本的网格搜索,并且使用 Sklearn 来处理模型,以及 Matplotlib 来可视化。
### 准备
这个秘籍中,我们会执行下面这些东西:
+ 在参数空间中设计基本的搜索网格。
+ 迭代网格并检查数据集的参数空间中的每个点的损失或评分函数。
+ 选取参数空阿基那种的点,它使评分函数最大或者最小。
同样,我们训练的模型是个基本的决策树分类器。我们的参数空间是 2 维的,有助于我们可视化。
```
criteria = {gini, entropy}
max_features = {auto, log2, None}
```
参数空间是`criteria``max_features`的笛卡尔积。
我们会了解如何使用`itertools`来迭代这个空间。
让我们创建数据集来开始:
```py
>>> from sklearn import datasets
>>> X, y = datasets.make_classification(n_samples=2000, n_features=10)
```
### 操作步骤
之前我们说,我们使用网格搜索来调整两个参数 -- `criteria``max_features``criteria``max_features`。我们需要将其表示为 Python 集合,之后使用`itertools.product`来迭代它们。
不错,所以既然我们拥有了参数空间,让我们迭代它并检查每个模型的准确率,它们由参数指定。之后,我们保存这个准确率,便于比较不同的参数空间。我们也会使用以`50, 50`划分的测试和训练集。
```py
import numpy as np
train_set = np.random.choice([True, False], size=len(y))
from sklearn.tree import DecisionTreeClassifier
accuracies = {}
for criterion, max_feature in parameter_space:
dt = DecisionTreeClassifier(criterion=criterion,
max_features=max_feature)
dt.fit(X[train_set], y[train_set])
accuracies[(criterion, max_feature)] = (dt.predict(X[~train_set])
== y[~train_set]).mean()
>>> accuracies
{('entropy', None): 0.974609375, ('entropy', 'auto'): 0.9736328125, ('entropy', 'log2'): 0.962890625, ('gini', None): 0.9677734375, ('gini', 'auto'): 0.9638671875, ('gini', 'log2'): 0.96875}
```
所以现在我们拥有了准确率和它的表现。让我们可视化它的表现。
```py
>>> from matplotlib import pyplot as plt
>>> from matplotlib import cm
>>> cmap = cm.RdBu_r
>>> f, ax = plt.subplots(figsize=(7, 4))
>>> ax.set_xticklabels([''] + list(criteria))
>>> ax.set_yticklabels([''] + list(max_features))
>>> plot_array = []
>>> for max_feature in max_features:
m = []
>>> for criterion in criteria:
m.append(accuracies[(criterion, max_feature)])
plot_array.append(m)
>>> colors = ax.matshow(plot_array, vmin=np.min(accuracies.values()) -
0.001, vmax=np.max(accuracies.values()) + 0.001, cmap=cmap)
>>> f.colorbar(colors)
```
输出如下:
![](img/5-5-1.jpg)
很容易看到哪个表现最好。单元你可以使用爆破方式看到它如何进一步处理。
### 工作原理
原理很简单,我们只需要执行下列步骤:
1. 选取一系列参数
2. 迭代它们并求得每一步的准确率
3. 通过可视化来寻找最佳的表现
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册