撰写机器学习/深度学习相关程序时,我们常要调整超参数(Hyperparameters),观察模型的准确度或其他效能指标的变化,如果能设计各式输入栏位,就很容易说明 what-if 或将程序提供他人使用。
ipywidgets套件提供我们在 Jupyter Notebook 内设计各式输入栏位,安装指令如下:
pip install ipywidgets
之後启动 Jupyter Notebook 确定是否安装成功:
如果未现该扩充程序,执行以下指令,并确定有打勾:
jupyter nbextension enable --py widgetsnbextension
# 载入套件
from ipywidgets import interact
# 定义一个简单函数
def f(x):
return x
# 呼叫 interact 函数,如 x 为整数则输入栏位为一拉杆(slider)
interact(f, x=10)
执行结果如下,拖曳拉杆,可改变输入值:
# 如 x 为boolean则输入栏位为 checkbox
interact(f, x=True)
# 如 x 为字串则输入栏位为文字框
interact(f, x='')
# 如 x 为list则输入栏位为下拉式栏位
interact(f, x=[1,2,3])
interact 会视 x 参数资料型态产生各式输入栏位。
# 使用装饰器(Decorator)
@interact(x=20, y=1.0)
def g(x, y):
return x + y
虽然在画面上可以看到我们输入值,但没办法在下面的程序码抓到它,笔者一度脑筋打结,後来google一下,才了解必须要在函数中使用输入值,以下介绍两种应用。
# 筛选资料
import pandas as pd
import numpy as np
from sklearn import datasets
@interact(x=[0,1,2])
def f(x):
# 载入鸢尾花资料
ds = datasets.load_iris()
df=pd.DataFrame(ds.data, columns=ds.feature_names)
df['y'] = ds.target
# 依据输入值筛选资料
return df.query(f'y == {x}')
执行结果如下,改变输入值可筛选资料:
import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
@interact(x=(3,11))
def f(x):
# 载入鸢尾花资料
ds = datasets.load_iris()
X=pd.DataFrame(ds.data, columns=ds.feature_names)
y=ds.target
# 切割训练及测试资料
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .2)
# KNN 模型的 n_neighbors 参数调校
clf = KNeighborsClassifier(n_neighbors = x)
clf.fit(X_train, y_train)
return f'score={clf.score(X_test, y_test)}'
够简单吧? 美中不足的是,没办法在函数外抓到输入值,还好有人解决这个问题,请待下回分解。
在今年的 Google I/O 大会中,Google 介绍了一个名为 INP(Interaction...
这篇调整的方向是 透过 Partial View 来 Render Collection 项目 透过...
tree-二元树的前中後追踪&&最大最小值&树叶 实作练习 说明 实习课的一...
RGB -> Gray scale Gray scale(灰阶影像) from PIL imp...
一个服务发出讯息之後, 可以由多个服务分别注册多个channel来监听, 同一个TOPIC底下的每个...