Оптимизация циклической линейной регрессии в Python - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь повысить эффективность своего кода, что включает в себя цикл следующего, чтобы найти разницу между отдельными точками и кривой линейной регрессии несколько сотен раз с примерно 20000 записями для каждого l oop. Каждая итерация занимает более секунды, и наряду с обработкой данных и их копированием для каждой итерации требуется около десяти минут для запуска всей программы, мне интересно, делаю ли я что-то по своей сути неправильно, что влияет на эффективность.

df.plot.scatter('sd', 'iv', c='days', colormap='viridis')

    x = df['sd']
    y = df['iv']
    x = x[:, np.newaxis]
    y = y[:, np.newaxis]
    polynomial_features= PolynomialFeatures(degree=3)
    x_poly = polynomial_features.fit_transform(x)

    model = make_pipeline(StandardScaler(), LinearRegression())
    model.fit(x_poly, y)
    y_poly_pred = model.predict(x_poly)

    r2 = r2_score(y,y_poly_pred)

    print(r2)

    sort_axis = operator.itemgetter(0)
    sorted_zip = sorted(zip(x,y_poly_pred), key=sort_axis)
    x, y_poly_pred = zip(*sorted_zip)
    plt.plot(x, y_poly_pred, c=np.random.rand(3,), label = "Polynomial Regression Line")
    plt.scatter(df['sd'],df['iv'], alpha = 0.3, c =df['days'])

    axes = plt.gca()
    axes.set_xlim([-2,2])
    axes.set_ylim([0.6,1.8])
    plt.gcf().subplots_adjust(bottom=0.25)
    plt.xlabel("standard moneyness")
    plt.ylabel("implied volatility")
    plt.legend()
    plt.show()

    df['distance'] = y - y_poly_pred
    df['absdistance'] = abs(df['distance'])

    df.drop(columns = ['sd','type'])
    
    dis = df['distance']
    df['scaled'] = (dis - dis.mean())/(dis.std()) 
    
    cols = ['days','symbol','distance','absdistance','scaled','datetime','iv','delta','price','multiplier']
    
    df = df[cols]

    tradingstrategy = pd.concat([tradingstrategy,df])
...