下面的代码模拟机器学习,线性回归过程。在
它的目的是允许用户在Jupyter笔记本中手动和可视化地进行回归,以更好地感受线性回归过程。在
函数的第一个部分(x,y)生成一个用于执行回归的绘图。在
下一个部分(a,b)生成用于模拟回归的线。在
我希望能够在不重新生成散点图的情况下更改坡度滑块。在
任何指导都是非常有帮助和欢迎的。:-)
import numpy as np
import ipywidgets as widgets
from ipywidgets import interactive
import matplotlib.pyplot as plt
def scatterplt(rand=3, num_points=20, slope=1):
x = np.linspace(3, 9, num_points)
y = np.linspace(3, 9, num_points)
#add randomness to scatter
pcent_rand = rand
pcent_decimal = pcent_rand/100
x = [n*np.random.uniform(low=1-pcent_decimal, high=1+ pcent_decimal) for n in x]
y = [n*np.random.uniform(low=1-pcent_decimal, high=1+ pcent_decimal) for n in y]
#plot regression line
a = np.linspace(0, 9, num_points)
b = [(slope * n) for n in a]
#format & plot the figure
plt.figure(figsize=(9, 9), dpi=80)
plt.ylim(ymax=max(x)+1)
plt.xlim(xmax=max(x)+1)
plt.scatter(x, y)
plt.plot(a, b)
plt.show()
#WIDGETS
interactive_plot = interactive(scatterplt,
rand = widgets.FloatSlider(
value=3,
min=0,
max=50,
step=3,
description='Randomness:', num_points=(10, 50, 5)
),
num_points = widgets.IntSlider(
value=20,
min=10,
max=50,
step=5,
description='Number of points:'
),
slope=widgets.FloatSlider(
value=1,
min=-1,
max=5,
step=0.1,
description='Slope'
)
)
interactive_plot
{{{1}你也可以使用{cd2}代替^{cd2}。 你得到的是一个按钮,让你手动运行功能,一旦你高兴。在
你需要这两条线
第一次运行时,您应该看到:![enter image description here](https://i.stack.imgur.com/aJrjO.png)
单击按钮后,将显示完整输出:![enter image description here](https://i.stack.imgur.com/JJMHD.png)
问题的一部分是很难修改Matplotlib图形中的单个元素,也就是说,从头开始重新绘制整个绘图要容易得多。重新绘制整个图形不会是超快速或平滑的。因此,我将向您展示一个如何在BQplot中执行此操作的示例(如Pascal Bugnion所建议的)。它不是Matplotlib,我猜你可能想要的,但它确实演示了一种方法,可以将斜率和随机性指令以及计算从每个滑块中分离出来,同时仍然使用标准的交互式小部件。在
interactive
函数并不能真正让您访问这个粒度级别。它总是运行整个scatterplt
回调。基本上,interactive
的目的是让一类问题变得非常简单一旦你离开了这类问题,它就不再适用了。在然后你必须回到其他的小部件机器。这在最初可能有点难以理解,因此,为了最小化跳跃,我将首先解释一下
interactive
在引擎盖下的作用。在当您调用}更改时绑定回调。回调在
interactive(func, widget)
时,它将创建widget
,并在{Output
小部件(docs)中运行func
。Output
小部件捕获func
的全部输出。interactive
然后将widget
和输出小部件打包到VBox
(一个用于堆叠小部件的容器)。在回到你现在想做的事情上。您的申请有以下条件:
为了满足(1),我们可能应该创建一个类来维护状态。为了满足(2),我们需要根据调用的滑块运行不同的回调。在
像这样的东西似乎能满足你的需要:
最后一点,移动滑块时,动画仍有点刺耳。为了更好的交互性,我建议查看bqplot。特别是,Chakri Cherukuri有一个很好的example of linear regression,这与您正在尝试做的有点相似。在
相关问题 更多 >
编程相关推荐