Почему сюжет Bokeh не меняется? - PullRequest
0 голосов
/ 13 июня 2018

Может кто-нибудь помочь мне найти ошибку?Я обучил регрессионную модель на наборе данных 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, поэтому извините, если причина действительно глупая.Спасибо!

1 Ответ

0 голосов
/ 13 июня 2018

Для любого в будущем: я исправил это, выполнив

plot.circle(x='hprange', y='preds', size=7, color="firebrick", alpha=0.5, 
            source=source)

Проблема заключалась в том, что сюжет не имел отношения к CDS (я думаю).

Спасибо bigreddot закомментарий, который помог исправить многие другие мелкие ошибки:)

...