小编S. *_*ole的帖子

GridSearch over MultiOutputRegressor?

让我们考虑一个多元回归问题(2个响应变量:纬度和经度).目前,像支持向量回归sklearn.svm.SVR这样的一些机器学习模型实现目前不提供对多元回归的天真支持.因此,sklearn.multioutput.MultiOutputRegressor可以使用.

例:

from sklearn.multioutput import MultiOutputRegressor
svr_multi = MultiOutputRegressor(SVR(),n_jobs=-1)

#Fit the algorithm on the data
svr_multi.fit(X_train, y_train)
y_pred= svr_multi.predict(X_test)
Run Code Online (Sandbox Code Playgroud)

我的目标是调整SVRby 的参数sklearn.model_selection.GridSearchCV.理想情况下,如果响应是单个变量而不是多个,我将按如下方式执行操作:

from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline

pipe_svr = (Pipeline([('scl', StandardScaler()),
                  ('reg', SVR())]))

grid_param_svr = {
    'reg__C': [0.01,0.1,1,10],
    'reg__epsilon': [0.1,0.2,0.3],
    'degree': [2,3,4]
}

gs_svr = (GridSearchCV(estimator=pipe_svr, 
                  param_grid=grid_param_svr, 
                  cv=10,
                  scoring = 'neg_mean_squared_error',
                  n_jobs = -1))

gs_svr = gs_svr.fit(X_train,y_train)
Run Code Online (Sandbox Code Playgroud)

但是,由于我的回答y_train是二维的,我需要使用MultiOutputRegressorSVR的顶部.如何修改上面的代码以启用此GridSearchCV操作?如果不可能,还有更好的选择吗?

python regression machine-learning scikit-learn

9
推荐指数
3
解决办法
3036
查看次数

在pandas数据帧上同时操作groupby和resample?

我的pandas数据框由一个分类列JOB_TITLE,一个数字列BASE_SALARY和一个日期时间索引JOIN_DATE组成.我想对分类和下采样日期时间组进行聚合,如下所示:

# Resampled at frequency of start data of every 5 years
mean_agg = (df
          .groupby('JOB_TITLE')
          .resample('5AS')['BASE_SALARY']
          .mean())
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于groupby操作在重采样之前发生,因此对每个JOB_TITLE组独立地执行重采样操作.这导致以下系列:

| JOB_TITLE         | JOIN_DATE  |       |
|-------------------|------------|-------|
| Data Scientist    | 2004-01-01 | 60000 |
|                   | 2009-01-01 | 75000 |
|                   | 2014-01-01 | 90000 |
|                   |            |       |
| Software Engineer | 2001-01-01 | 70000 |
|                   | 2006-01-01 | 85000 |
|                   | 2011-01-01 | 90000 |
|                   | 2016-01-01 | 85000 |
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,Data Scientist组和软件工程师在JOIN_DATE级别的索引未对齐.当您为级别JOB_TITLE应用unstack时,这会产生一个问题,如下所示:

mean_agg.unstack('JOB_TITLE')
Run Code Online (Sandbox Code Playgroud)

这导致以下数据帧: …

python group-by time-series dataframe pandas

5
推荐指数
1
解决办法
1346
查看次数