python - 为什么散景图没有改变?
问题描述
有人可以帮我找出错误吗?我只使用重量和马力变量在 mpg 数据集上训练了一个回归模型。现在我想用 Bokeh 绘制一个图,用户可以通过滑块选择重量,该图显示了增加马力的预测。这是我的代码:
import matplotlib.pyplot as plt
import numpy as np
from numpy import linspace
import pandas as pd
import random
import sklearn
from sklearn import linear_model, model_selection
from sklearn.metrics import mean_squared_error, r2_score
from bokeh.plotting import figure
from bokeh.io import output_notebook, show
output_notebook() # Output im Jupyter-Notebook.
from bokeh.sampledata.autompg import autompg
auto=autompg[['hp','weight']]
mpg=autompg['mpg']
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(auto, mpg, test_size=0.2)
mod = linear_model.LinearRegression()
model=mod.fit(X_train,Y_train)
#print(model.score(X_test,Y_test))
from bokeh.layouts import column
from bokeh.models import CustomJS, ColumnDataSource, Slider
from bokeh.plotting import Figure, output_file, show
# Datenerzeugung:
wtm=np.mean(auto['weight'])
hpmin=0.75*min(auto['hp'])
hpmax=1.25*max(auto['hp'])
hprange=[hpmin+(i/100)*(hpmax-hpmin) for i in range(100)]
l=len(hprange)
newinput=pd.DataFrame(data={'weight':np.repeat(wtm,l), 'hp':hprange})
preds=model.predict(newinput)
#print(list(X_train.columns.values))
#print(model.coef_)
#print(model.intercept_)
intc=model.intercept_
hpcoef=model.coef_[0]
wtcoef=model.coef_[1]
source = ColumnDataSource(data=dict(hprange=hprange, preds=preds, intc=np.repeat(intc,l), hpcoef=np.repeat(hpcoef,l), wtcoef=np.repeat(wtcoef,l)))
plot = Figure(plot_width=400, plot_height=400)
plot.circle(hprange, preds, size=7, color="firebrick", alpha=0.5)
callback = CustomJS(args=dict(source=source), code="""
var data = source.data;
var wt = cb_obj.value
var intc= data['intc']
var hprange= data['hprange']
var hpcoef= data['hpcoef']
var wtcoef= data['wtcoef']
var preds = data['preds']
for (var i = 0; i < preds.length; i++) {
preds[i] = intc[0]+hpcoef[0]*hprange[i]+wtcoef[0]*wt
}
source.change.emit();
""")
slider = Slider(start=1500, end=5500, value=3000, step=100, title="Weight")
slider.js_on_change('value', callback)
layout = column(slider, plot)
show(layout)
当我运行它时,它会显示绘图,但是当我移动滑块时它不会改变。我想补充一点,我从未使用过 javascript,如果原因真的很愚蠢,我很抱歉。谢谢!
解决方案
对于未来的任何人:我通过这样做来修复它
plot.circle(x='hprange', y='preds', size=7, color="firebrick", alpha=0.5,
source=source)
问题是情节不是指CDS(我认为)。
不过,感谢 bigreddot 的评论,这有助于修复许多其他较小的错误 :)
推荐阅读
- node.js - 未运行 Http 请求不确定是什么问题
- c# - asp按钮不触发功能
- ruby-on-rails - 带有 ruby 的 Elasticsearch 和带有所有拟合参数的 searchkick
- python - 如何将 0、255 二进制图像转换为 0、1 二进制图像?
- .net - Jetbrains Rider:在调试器调用堆栈中显示“外部代码”
- react-native - React native webview android“选择和操作”未打开
- java - Apache Flink 过滤功能
- git - 是否可以在工件中拥有本地 git 存储库?
- python - 在 Python 中向上舍入高于阈值
- powershell - 尝试使用 Powershell 命令远程连接机器时访问被拒绝