Skip to content

Commit 71c83fc

Browse files
committed
Pushing the docs to dev/ for branch: master, commit 10a05a368542a7c1afeadf29b666a51166b9b0b3
1 parent 5f70560 commit 71c83fc

File tree

134 files changed

+621
-434
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

134 files changed

+621
-434
lines changed
Binary file not shown.

dev/_downloads/6bf99924122eedf93b886bae30f1182b/sklearn-gridsearchcv-replacement.ipynb

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
},
2727
"outputs": [],
2828
"source": [
29-
"print(__doc__)\nimport numpy as np"
29+
"print(__doc__)\nimport numpy as np\nnp.random.seed(123)\nimport matplotlib.pyplot as plt"
3030
]
3131
},
3232
{
@@ -62,7 +62,43 @@
6262
},
6363
"outputs": [],
6464
"source": [
65-
"from skopt import BayesSearchCV\nfrom skopt.space import Real, Categorical, Integer\n\nfrom sklearn.datasets import load_digits\nfrom sklearn.svm import LinearSVC, SVC\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.model_selection import train_test_split\n\nX, y = load_digits(10, True)\nX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)\n\n# pipeline class is used as estimator to enable\n# search over different model types\npipe = Pipeline([\n ('model', SVC())\n])\n\n# single categorical value of 'model' parameter is\n# sets the model class\n# We will get ConvergenceWarnings because the problem is not well-conditioned.\n# But that's fine, this is just an example.\nlinsvc_search = {\n 'model': [LinearSVC(max_iter=1000)],\n 'model__C': (1e-6, 1e+6, 'log-uniform'),\n}\n\n# explicit dimension classes can be specified like this\nsvc_search = {\n 'model': Categorical([SVC()]),\n 'model__C': Real(1e-6, 1e+6, prior='log-uniform'),\n 'model__gamma': Real(1e-6, 1e+1, prior='log-uniform'),\n 'model__degree': Integer(1,8),\n 'model__kernel': Categorical(['linear', 'poly', 'rbf']),\n}\n\nopt = BayesSearchCV(\n pipe,\n [(svc_search, 20), (linsvc_search, 16)], # (parameter space, # of evaluations)\n cv=3\n)\n\nopt.fit(X_train, y_train)\n\nprint(\"val. score: %s\" % opt.best_score_)\nprint(\"test score: %s\" % opt.score(X_test, y_test))"
65+
"from skopt import BayesSearchCV\nfrom skopt.space import Real, Categorical, Integer\nfrom skopt.plots import plot_objective, plot_histogram\n\nfrom sklearn.datasets import load_digits\nfrom sklearn.svm import LinearSVC, SVC\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.model_selection import train_test_split\n\nX, y = load_digits(10, True)\nX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)\n\n# pipeline class is used as estimator to enable\n# search over different model types\npipe = Pipeline([\n ('model', SVC())\n])\n\n# single categorical value of 'model' parameter is\n# sets the model class\n# We will get ConvergenceWarnings because the problem is not well-conditioned.\n# But that's fine, this is just an example.\nlinsvc_search = {\n 'model': [LinearSVC(max_iter=1000)],\n 'model__C': (1e-6, 1e+6, 'log-uniform'),\n}\n\n# explicit dimension classes can be specified like this\nsvc_search = {\n 'model': Categorical([SVC()]),\n 'model__C': Real(1e-6, 1e+6, prior='log-uniform'),\n 'model__gamma': Real(1e-6, 1e+1, prior='log-uniform'),\n 'model__degree': Integer(1,8),\n 'model__kernel': Categorical(['linear', 'poly', 'rbf']),\n}\n\nopt = BayesSearchCV(\n pipe,\n # (parameter space, # of evaluations)\n [(svc_search, 40), (linsvc_search, 16)],\n cv=3\n)\n\nopt.fit(X_train, y_train)\n\nprint(\"val. score: %s\" % opt.best_score_)\nprint(\"test score: %s\" % opt.score(X_test, y_test))\nprint(\"best params: %s\" % str(opt.best_params_))"
66+
]
67+
},
68+
{
69+
"cell_type": "markdown",
70+
"metadata": {},
71+
"source": [
72+
"Partial Dependence plot of the objective function for SVC\n\n\n"
73+
]
74+
},
75+
{
76+
"cell_type": "code",
77+
"execution_count": null,
78+
"metadata": {
79+
"collapsed": false
80+
},
81+
"outputs": [],
82+
"source": [
83+
"_ = plot_objective(opt.optimizer_results_[0],\n dimensions=[\"C\", \"degree\", \"gamma\", \"kernel\"],\n n_minimum_search=int(1e8))\nplt.show()"
84+
]
85+
},
86+
{
87+
"cell_type": "markdown",
88+
"metadata": {},
89+
"source": [
90+
"Plot of the histogram for LinearSVC\n\n\n"
91+
]
92+
},
93+
{
94+
"cell_type": "code",
95+
"execution_count": null,
96+
"metadata": {
97+
"collapsed": false
98+
},
99+
"outputs": [],
100+
"source": [
101+
"_ = plot_histogram(opt.optimizer_results_[1], 1)\nplt.show()"
66102
]
67103
},
68104
{
@@ -80,7 +116,7 @@
80116
},
81117
"outputs": [],
82118
"source": [
83-
"from skopt import BayesSearchCV\n\nfrom sklearn.datasets import load_iris\nfrom sklearn.svm import SVC\n\nX, y = load_iris(True)\n\nsearchcv = BayesSearchCV(\n SVC(gamma='scale'),\n search_spaces={'C': (0.01, 100.0, 'log-uniform')},\n n_iter=10,\n cv=3\n)\n\n\n# callback handler\ndef on_step(optim_result):\n score = searchcv.best_score_\n print(\"best score: %s\" % score)\n if score >= 0.98:\n print('Interrupting!')\n return True\n\n\nsearchcv.fit(X, y, callback=on_step)"
119+
"from skopt import BayesSearchCV\n\nfrom sklearn.datasets import load_iris\nfrom sklearn.svm import SVC\n\nX, y = load_iris(True)\n\nsearchcv = BayesSearchCV(\n SVC(gamma='scale'),\n search_spaces={'C': (0.01, 100.0, 'log-uniform')},\n n_iter=10,\n cv=3\n)\n\n# callback handler\ndef on_step(optim_result):\n score = searchcv.best_score_\n print(\"best score: %s\" % score)\n if score >= 0.98:\n print('Interrupting!')\n return True\n\n\nsearchcv.fit(X, y, callback=on_step)"
84120
]
85121
},
86122
{
Binary file not shown.

dev/_downloads/fafa416932f350631f99d023396799bd/sklearn-gridsearchcv-replacement.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
"""
3636
print(__doc__)
3737
import numpy as np
38+
np.random.seed(123)
39+
import matplotlib.pyplot as plt
3840

3941
#############################################################################
4042
# Minimal example
@@ -79,6 +81,7 @@
7981

8082
from skopt import BayesSearchCV
8183
from skopt.space import Real, Categorical, Integer
84+
from skopt.plots import plot_objective, plot_histogram
8285

8386
from sklearn.datasets import load_digits
8487
from sklearn.svm import LinearSVC, SVC
@@ -114,14 +117,30 @@
114117

115118
opt = BayesSearchCV(
116119
pipe,
117-
[(svc_search, 20), (linsvc_search, 16)], # (parameter space, # of evaluations)
120+
# (parameter space, # of evaluations)
121+
[(svc_search, 40), (linsvc_search, 16)],
118122
cv=3
119123
)
120124

121125
opt.fit(X_train, y_train)
122126

123127
print("val. score: %s" % opt.best_score_)
124128
print("test score: %s" % opt.score(X_test, y_test))
129+
print("best params: %s" % str(opt.best_params_))
130+
131+
#############################################################################
132+
# Partial Dependence plot of the objective function for SVC
133+
#
134+
_ = plot_objective(opt.optimizer_results_[0],
135+
dimensions=["C", "degree", "gamma", "kernel"],
136+
n_minimum_search=int(1e8))
137+
plt.show()
138+
139+
#############################################################################
140+
# Plot of the histogram for LinearSVC
141+
#
142+
_ = plot_histogram(opt.optimizer_results_[1], 1)
143+
plt.show()
125144

126145
#############################################################################
127146
# Progress monitoring and control using `callback` argument of `fit` method
@@ -153,7 +172,6 @@
153172
cv=3
154173
)
155174

156-
157175
# callback handler
158176
def on_step(optim_result):
159177
score = searchcv.best_score_
60.1 KB
Binary file not shown.
Loading
Loading
Loading
Loading

dev/_modules/skopt/plots.html

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,10 @@ <h1>Source code for skopt.plots</h1><div class="highlight"><pre>
295295

296296
<span class="k">if</span> <span class="n">ax</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
297297
<span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">gca</span><span class="p">()</span>
298-
<span class="k">assert</span> <span class="n">res</span><span class="o">.</span><span class="n">space</span><span class="o">.</span><span class="n">n_dims</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;Space dimension must be 1&quot;</span>
299-
<span class="n">x</span><span class="p">,</span> <span class="n">x_model</span> <span class="o">=</span> <span class="n">_evenly_sample</span><span class="p">(</span><span class="n">res</span><span class="o">.</span><span class="n">space</span><span class="o">.</span><span class="n">dimensions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">n_points</span><span class="p">)</span>
298+
<span class="n">n_dims</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">space</span><span class="o">.</span><span class="n">n_dims</span>
299+
<span class="k">assert</span> <span class="n">n_dims</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;Space dimension must be 1&quot;</span>
300+
<span class="n">dimension</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="n">space</span><span class="o">.</span><span class="n">dimensions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
301+
<span class="n">x</span><span class="p">,</span> <span class="n">x_model</span> <span class="o">=</span> <span class="n">_evenly_sample</span><span class="p">(</span><span class="n">dimension</span><span class="p">,</span> <span class="n">n_points</span><span class="p">)</span>
300302
<span class="n">x</span> <span class="o">=</span> <span class="n">x</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
301303
<span class="n">x_model</span> <span class="o">=</span> <span class="n">x_model</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
302304
<span class="k">if</span> <span class="n">res</span><span class="o">.</span><span class="n">specs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;args&quot;</span> <span class="ow">in</span> <span class="n">res</span><span class="o">.</span><span class="n">specs</span><span class="p">:</span>
@@ -736,7 +738,8 @@ <h1>Source code for skopt.plots</h1><div class="highlight"><pre>
736738
<span class="sd"> plot_dims : list of str and int, default=None</span>
737739
<span class="sd"> List of dimension names or dimension indices from the</span>
738740
<span class="sd"> search-space dimensions to be included in the plot.</span>
739-
<span class="sd"> If `None` then use all dimensions from the search-space.</span>
741+
<span class="sd"> If `None` then use all dimensions except constant ones</span>
742+
<span class="sd"> from the search-space.</span>
740743

741744
<span class="sd"> sample_source : str or list of floats, default=&#39;random&#39;</span>
742745
<span class="sd"> Defines to samples generation to use for averaging the model function</span>
@@ -750,31 +753,26 @@ <h1>Source code for skopt.plots</h1><div class="highlight"><pre>
750753

751754
<span class="sd"> Valid strings:</span>
752755

753-
<span class="sd"> - &#39;random&#39; - `n_samples` random samples will used</span>
754-
755-
<span class="sd"> - &#39;result&#39; - Use only the best observed parameters</span>
756-
757-
<span class="sd"> - &#39;expected_minimum&#39; - Parameters that gives the best</span>
758-
<span class="sd"> minimum Calculated using scipy&#39;s minimize method.</span>
759-
<span class="sd"> This method currently does not work with categorical values.</span>
760-
761-
<span class="sd"> - &#39;expected_minimum_random&#39; - Parameters that gives the</span>
762-
<span class="sd"> best minimum when using naive random sampling.</span>
763-
<span class="sd"> Works with categorical values.</span>
756+
<span class="sd"> - &#39;random&#39; - `n_samples` random samples will used</span>
757+
<span class="sd"> - &#39;result&#39; - Use only the best observed parameters</span>
758+
<span class="sd"> - &#39;expected_minimum&#39; - Parameters that gives the best</span>
759+
<span class="sd"> minimum Calculated using scipy&#39;s minimize method.</span>
760+
<span class="sd"> This method currently does not work with categorical values.</span>
761+
<span class="sd"> - &#39;expected_minimum_random&#39; - Parameters that gives the</span>
762+
<span class="sd"> best minimum when using naive random sampling.</span>
763+
<span class="sd"> Works with categorical values.</span>
764764

765765
<span class="sd"> minimum : str or list of floats, default = &#39;result&#39;</span>
766766
<span class="sd"> Defines the values for the red points in the plots.</span>
767767
<span class="sd"> Valid strings:</span>
768768

769-
<span class="sd"> - &#39;result&#39; - Use best observed parameters</span>
770-
771-
<span class="sd"> - &#39;expected_minimum&#39; - Parameters that gives the best</span>
772-
<span class="sd"> minimum Calculated using scipy&#39;s minimize method.</span>
773-
<span class="sd"> This method currently does not work with categorical values.</span>
774-
775-
<span class="sd"> - &#39;expected_minimum_random&#39; - Parameters that gives the</span>
776-
<span class="sd"> best minimum when using naive random sampling.</span>
777-
<span class="sd"> Works with categorical values</span>
769+
<span class="sd"> - &#39;result&#39; - Use best observed parameters</span>
770+
<span class="sd"> - &#39;expected_minimum&#39; - Parameters that gives the best</span>
771+
<span class="sd"> minimum Calculated using scipy&#39;s minimize method.</span>
772+
<span class="sd"> This method currently does not work with categorical values.</span>
773+
<span class="sd"> - &#39;expected_minimum_random&#39; - Parameters that gives the</span>
774+
<span class="sd"> best minimum when using naive random sampling.</span>
775+
<span class="sd"> Works with categorical values</span>
778776

779777
<span class="sd"> n_minimum_search : int, default = None</span>
780778
<span class="sd"> Determines how many points should be evaluated</span>
@@ -787,6 +785,7 @@ <h1>Source code for skopt.plots</h1><div class="highlight"><pre>
787785
<span class="sd"> -------</span>
788786
<span class="sd"> ax : `Matplotlib.Axes`</span>
789787
<span class="sd"> A 2-d matrix of Axes-objects with the sub-plots.</span>
788+
790789
<span class="sd"> &quot;&quot;&quot;</span>
791790
<span class="c1"># Here we define the values for which to plot the red dot (2d plot) and</span>
792791
<span class="c1"># the red dotted line (1d plot).</span>
@@ -799,6 +798,8 @@ <h1>Source code for skopt.plots</h1><div class="highlight"><pre>
799798
<span class="c1"># Get all dimensions.</span>
800799
<span class="n">plot_dims</span> <span class="o">=</span> <span class="p">[]</span>
801800
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">space</span><span class="o">.</span><span class="n">n_dims</span><span class="p">):</span>
801+
<span class="k">if</span> <span class="n">space</span><span class="o">.</span><span class="n">dimensions</span><span class="p">[</span><span class="n">row</span><span class="p">]</span><span class="o">.</span><span class="n">is_constant</span><span class="p">:</span>
802+
<span class="k">continue</span>
802803
<span class="n">plot_dims</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">row</span><span class="p">,</span> <span class="n">space</span><span class="o">.</span><span class="n">dimensions</span><span class="p">[</span><span class="n">row</span><span class="p">]))</span>
803804
<span class="k">else</span><span class="p">:</span>
804805
<span class="n">plot_dims</span> <span class="o">=</span> <span class="n">space</span><span class="p">[</span><span class="n">plot_dims</span><span class="p">]</span>
@@ -898,12 +899,14 @@ <h1>Source code for skopt.plots</h1><div class="highlight"><pre>
898899
<span class="sd"> plot_dims : list of str and int, default=None</span>
899900
<span class="sd"> List of dimension names or dimension indices from the</span>
900901
<span class="sd"> search-space dimensions to be included in the plot.</span>
901-
<span class="sd"> If `None` then use all dimensions from the search-space.</span>
902+
<span class="sd"> If `None` then use all dimensions except constant ones</span>
903+
<span class="sd"> from the search-space.</span>
902904

903905
<span class="sd"> Returns</span>
904906
<span class="sd"> -------</span>
905907
<span class="sd"> ax : `Matplotlib.Axes`</span>
906908
<span class="sd"> A 2-d matrix of Axes-objects with the sub-plots.</span>
909+
907910
<span class="sd"> &quot;&quot;&quot;</span>
908911
<span class="n">space</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">space</span>
909912
<span class="c1"># Convert categoricals to integers, so we can ensure consistent ordering.</span>
@@ -917,6 +920,8 @@ <h1>Source code for skopt.plots</h1><div class="highlight"><pre>
917920
<span class="c1"># Get all dimensions.</span>
918921
<span class="n">plot_dims</span> <span class="o">=</span> <span class="p">[]</span>
919922
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">space</span><span class="o">.</span><span class="n">n_dims</span><span class="p">):</span>
923+
<span class="k">if</span> <span class="n">space</span><span class="o">.</span><span class="n">dimensions</span><span class="p">[</span><span class="n">row</span><span class="p">]</span><span class="o">.</span><span class="n">is_constant</span><span class="p">:</span>
924+
<span class="k">continue</span>
920925
<span class="n">plot_dims</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">row</span><span class="p">,</span> <span class="n">space</span><span class="o">.</span><span class="n">dimensions</span><span class="p">[</span><span class="n">row</span><span class="p">]))</span>
921926
<span class="k">else</span><span class="p">:</span>
922927
<span class="n">plot_dims</span> <span class="o">=</span> <span class="n">space</span><span class="p">[</span><span class="n">plot_dims</span><span class="p">]</span>
@@ -979,6 +984,7 @@ <h1>Source code for skopt.plots</h1><div class="highlight"><pre>
979984
<span class="sd"> -------</span>
980985
<span class="sd"> ylim_diagonal : tuple(int)</span>
981986
<span class="sd"> The common min and max ylim for the diagonal plots.</span>
987+
982988
<span class="sd"> &quot;&quot;&quot;</span>
983989

984990
<span class="c1"># Number of search-space dimensions used in this plot.</span>
@@ -1040,6 +1046,7 @@ <h1>Source code for skopt.plots</h1><div class="highlight"><pre>
10401046
<span class="sd"> yi : np.array</span>
10411047
<span class="sd"> The average value of the modelled objective function at</span>
10421048
<span class="sd"> each point `xi`.</span>
1049+
10431050
<span class="sd"> &quot;&quot;&quot;</span>
10441051
<span class="c1"># The idea is to step through one dimension, evaluating the model with</span>
10451052
<span class="c1"># that dimension fixed and averaging either over random values or over</span>

0 commit comments

Comments
 (0)