Как постепенно добавлять столбец линейной регрессии к пандам - PullRequest
0 голосов
/ 28 августа 2018

У меня есть пример кадра данных для панд:

     a    b
0  6.0  0.6
1  1.0  0.3
2  3.0  0.8
3  5.0  0.1
4  7.0  0.4
5  2.0  0.2
6  0.0  0.9
7  4.0  0.7
8  8.0  0.0
9  9.0  0.5

Я хочу добавить новый столбец linear к столбцу, который является выходом линейной регрессии для подгонки a на b. Теперь я получил:

from sklearn.linear_model import LinearRegression
repr = LinearRegression()
repr.fit(df['a'].as_matrix().reshape(-1,1),df['b'].as_matrix().reshape(-1,1))
repr.predict(df['a'].as_matrix().reshape(-1,1)) # This will give the linear regression outcome for whole column

Теперь я хочу постепенно выполнять линейную регрессию на сериях a, поэтому первая запись linear будет b[0], а вторая будет b[0]/a[0]*a[1], а третья будет результатом линейной регрессии первые две записи и тд и тп. Я понятия не имею, как это сделать с пандами, за исключением итерации по всем записям, есть ли способ для теста?

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете использовать , расширяя с некоторыми пользовательскими функциями применения. Интересный способ сделать LR ...

from io import StringIO
import pandas as pd
import numpy as np

df = pd.read_table(StringIO("""     a    b
0  6.0  0.6
1  1.0  0.3
2  3.0  0.8
3  5.0  0.1
4  7.0  0.4
5  2.0  0.2
6  0.0  0.9
7  4.0  0.7
8  8.0  0.0
9  9.0  0.5
10 10.0 0.4
11 11.0 0.35
12 12.0 0.3
13 13.0 0.28
14 14.0 0.27
15 15.0 0.22"""), sep='\s+')
df = df.sort_values(by='a')
ax = df.plot(x='a',y='b',kind='scatter')
m, b = np.polyfit(df['a'],df['b'],1)
lin_reg = lambda x, m, b : m*x + b 
df['lin'] = lin_reg(df['a'], m, b)
def make_m(x):
    y = df['b'].iloc[0:len(x)]
    return np.polyfit(x, y, 1)[0]
def make_b(x):
    y = df['b'].iloc[0:len(x)]
    return np.polyfit(x, y, 1)[1]
df['new'] = df['a'].expanding().apply(make_m, raw=True)*df['a'] + df['a'].expanding().apply(make_b, raw=True)
# df = df.sort_values(by='a')
ax.plot(df.a,df.lin)
ax.plot(df.a,df.new)

Iterative Linear Regression

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...