запуск модели LinearRegression с использованием scikit-learn с другим фреймом данных pandas (вопрос цикла) - PullRequest
0 голосов
/ 26 октября 2019

У меня есть фрейм данных со стоимостью, ветром, солнечной энергией и часом дня, и я хотел бы использовать модель линейной регрессии из scikit-learn, чтобы выяснить, как ветер и солнечная энергия влияют на стоимость. Каждый час я помечал P1-P24 (24 часа в сутки), то есть каждой строке в зависимости от часа дня будет назначаться P (1-24)

. Поэтому я определил каждую соответствующую строкуветер / солнечная энергия / стоимость для разных данных в зависимости от времени суток

Код работает нормально со всем, что я хотел сделать. Однако я изо всех сил пытаюсь создать код цикла for, который запускается несколько раз в течение каждого часа, чтобы найти функцию linreg.intercept, linreg.coef и np.sqrt (metrics.mean_squared_error (y_test, y_pred) из scikit-learn на различных фреймах данных панды (P1 - P24). ).

Так что на данный момент мне нужно вручную изменить число P 24 раза, чтобы найти соответствующую ошибку перехвата / коэффициента / среднего квадрата для каждого часа

У меня есть код ниже для работыно я всегда изо всех сил пытаюсь построить цикл for

Я пытался построить цикл for, используя for i в [P1, P2 ...], но информационный фрейм стал списком, и я также изо всех сил стараюсь включить его в scikit-часть обучения

b - это исходный кадр данных со столбцами: стоимость, период (полчаса, поэтому у меня период от 1 до 48), ветер, солнечная

импорт данных, кадр

 b = pd.read_csv('/Users/Downloads/cost_latest.csv')

Чтобы поставить это в почасовой, следовательно:

 P1 = b[b['Period'].isin(['01','02'])]
 P2 = b[b['Period'].isin(['03','04'])]...

часть scikit-learn:

 feature_cols = ['wind','Solar']
 X = P1[feature_cols]
 y = P1['Price']

и вот моя проблема, мне нужно изменить P1 на P2 ... P24 перед запуском следуйтеКоды для получения моих параметров

Следующее является частью обучения scikit:

 from sklearn.model_selection import train_test_split
 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
 from sklearn.linear_model import LinearRegression

 linreg = LinearRegression()

подгонка модели к данным тренировки (выучить коэффициенты)

 linreg.fit(X_train, y_train)
 print(linreg.intercept_)
 print(linreg.coef_)
 list(zip(feature_cols, linreg.coef_))
 y_pred = linreg.predict(X_test)
 from sklearn import metrics
 print(np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

Я думаю, что есть более разумный способ избежать ручного редактирования следующего (значения P) и запуска всего за один раз, я приветствую ваши советы, предложения, спасибо

 X = P1[feature_cols]
 y = P1['Price']

Ответы [ 2 ]

2 голосов
/ 26 октября 2019

Просто используйте это:

for P in [P1,P2, P3,P4,P5,P6,P7]:
    X = P[feature_cols]
    y = P['Price']

Все вместе:

from sklearn import metrics
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

all_intercepts = []
all_coefs = []

for P in [P1,P2, P3,P4,P5,P6,P7]:
    X = P[feature_cols]
    y = P['Price']
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
    linreg = LinearRegression()
    linreg.fit(X_train, y_train)
    print(linreg.intercept_)
    print(linreg.coef_)
    list(zip(feature_cols, linreg.coef_))
    y_pred = linreg.predict(X_test)
    print(np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
    all_intercepts.append(linreg.intercept_)
    all_coefs.append(linreg.coef_)


print(all_intercepts)
print(all_coefs)

P будут вашими кадрами данных P1, P2, ... согласно каждой итерации

0 голосов
/ 26 октября 2019

Поместите все Pn фреймы данных в список и запустите свой код.

all_P  = [P1, P2, P3]

for P in all_P:
    X = P[feature_cols]
    y = P['Price']
...