#python #dataframe #loops #predict
Вопрос:
df_tmp
zipcode. var1 var2. orders
Z1. 20. 19. 20
Z1. 50. 28. 10
Z1. 80. 45. 26
Z2. 19. 36. 10
Z2. 20. 90. 16
Z2. 40. 59. 18
Я использую следующую функцию для общего прогнозирования —
#split x and y
x = df_tmp.drop(columns=['orders'])
y = df_tmp['orders']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size = 0.20, random_state = 0)
from sklearn import datasets, linear_model
from sklearn.linear_model import LinearRegression
import statsmodels.api as sm
from scipy import stats
X2 = sm.add_constant(X_train)
est = sm.OLS(y_train, X2).fit()
X_test = sm.add_constant(X_test) # add again the constant
y_test_predicted = est.predict(X_test)
y_test_predicted
Тем не менее, я хочу предсказать для каждого почтового индекса, используя аналогичный код. Циклическое выполнение может быть крайне неэффективным, поэтому ищите некоторые предложения о том, как это можно сделать
Спасибо!
Ответ №1:
Я бы предложил создать генератор, содержащий фрагменты фрейма данных с различными кодами, абстрагируя вашу логику моделирования в функцию, а затем сопоставляя ее с этим генератором.
Это будет намного быстрее, чем использование для циклов.
Код здесь:
from sklearn.model_selection import train_test_split
import statsmodels.api as sm
zipcodes = df_tmp['zipcode.'].unique()
different_df_sections = (df_tmp.loc[df_tmp['zipcode.'] == x] for x in zipcodes)
def calculate_predictions(df_tmp):
x = df_tmp.drop(columns=['orders'])
y = df_tmp['orders']
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size = 0.20, random_state = 0)
X2 = sm.add_constant(X_train)
est = sm.OLS(y_train, X2).fit()
X_test = sm.add_constant(X_test) # add again the constant
y_test_predicted = est.predict(X_test)
return y_test_predicted
different_predictions = map(calculate_predictions, different_df_sections)
all_predictions = [x for x in different_predictions]
Комментарии:
1. Я получаю ошибку со значением: При n_samples=1, test_size=0,2 и train_size=Нет, результирующий набор поездов будет пустым. Отрегулируйте любой из вышеупомянутых параметров.
2. Вы добавили параметр train_size при вызове разделения теста на поезд? Я также не могу сказать наверняка, не зная больше о контексте того, что вы делаете, но, возможно, вы можете отказаться от разделения тестов, если вы делаете это в нескольких подразделах данных, а затем сравниваете результаты
3. Отредактировал сейчас с помощью другого подхода, который, я думаю, лучше…
4. Спасибо за помощь, тест на поезд, похоже, все еще не работает для меня. Однако — « different_predictions = карта(вычисление_предикций, section_generator(X_train, X_test, y_train, y_test)) ` ` изменено на ` ` different_predictions = карта(вычисление_предикций, section_generator(X_train, X_test, y_train, y_test, zipcodes)) » По-прежнему не работает. Однако, если я не использую поезд и тестовый сплит, это работает! Я постараюсь еще немного погрузиться, чтобы исправить ситуацию