Я хочу построить графики с помощью
- квантилей линии, которые не пересекаются
- а также имеют свою индивидуальную форму, соответствующую данным (а не просто одну и ту же строку, 10 раз разделенную % стандартной ошибки)
идеальный график квантилей
I Я попробовал smf.quantreg("y ~ X", filtered_data) с smf, импортированным из statsmodels.formula.api.
Это создает линейные графики, когда не все мои наборы данных являются линейными. Из-за характера линейности все линии в конечном итоге пересекаются, что приводит к неверным расчетам процентилей для некоторых точек (как вы можете видеть в квантиле 50% и 60% справа).
smf. попытка построения графика Quantreg
model = smf.quantreg("y ~ X", filtered_data).fit(
q=q,
max_iter=2000,
p_tol=1e-06,
)
Я также пробовал методы keras и tensorflow из -https://colab.research.google.com/githu ... ison.ipynb - которые привело к большей нелинейности, но линии часто пересекаются.
Попытка построения графика keras
def tilted_loss(q, y, f):
e = (y - f)
return tf.reduce_mean(tf.maximum(q * e, (q - 1) * e), axis=-1)
def keras_pred(x_train, train_labels, x_test, q):
# Set input_dim for the number of features.
if len(x_train.shape) == 1:
input_shape = (1,)
else:
input_shape = (x_train.shape[1],)
model = Sequential()
model.add(Input(shape=input_shape))
model.add(Dense(units=10, activation='relu'))
model.add(Dense(units=10, activation='relu'))
model.add(Dense(1))
model.compile(loss=lambda y, f: tilted_loss(q, y, f), optimizer='adadelta')
model.fit(x_train, train_labels, epochs=EPOCHS, batch_size=BATCH_SIZE,
verbose=0)
# Predict the quantile
return model.predict(x_test)
preds.loc[preds.method == 'keras', 'pred'] = np.concatenate(
[keras_pred(x_train_expanded, train_labels, x_test_expanded, q)
for q in QUANTILES])
Подробнее здесь: https://stackoverflow.com/questions/790 ... antiles-fo