饭店流量预测

作者: 透明的红萝卜123 | 来源:发表于2019-02-15 15:08 被阅读0次

lightgbm 模型


import lightgbm as lgbm
from sklearn import metrics
from sklearn import model_selection


np.random.seed(42)

model = lgbm.LGBMRegressor(
    objective='regression', #目标函数,回归任务
    max_depth=5, #最大深度
    num_leaves=25, #叶子节点个数
    learning_rate=0.007, #学习率
    n_estimators=1000, # 最佳迭代轮数
    min_child_samples=80,
    subsample=0.8, #采样
    colsample_bytree=1,
    reg_alpha=0,
    reg_lambda=0,
    random_state=np.random.randint(10e6)
)

n_splits = 6
#K折交叉验证
cv = model_selection.KFold(n_splits=n_splits, shuffle=True, random_state=42)

val_scores = [0] * n_splits

sub = submission['id'].to_frame()
sub['visitors'] = 0

feature_importances = pd.DataFrame(index=X_train.columns)

for i, (fit_idx, val_idx) in enumerate(cv.split(X_train, y_train)):
    #fit代表训练集,val代表验证集。validation(验证)
    X_fit = X_train.iloc[fit_idx]
    y_fit = y_train.iloc[fit_idx]
    X_val = X_train.iloc[val_idx]
    y_val = y_train.iloc[val_idx]
    
    model.fit(
        X_fit,
        y_fit,
        eval_set=[(X_fit, y_fit), (X_val, y_val)],
        eval_names=('fit', 'val'),
        eval_metric='l2',
        early_stopping_rounds=200,
        feature_name=X_fit.columns.tolist(),
        verbose=False
    )
    
    val_scores[i] = np.sqrt(model.best_score_['val']['l2'])
    sub['visitors'] += model.predict(X_test, num_iteration=model.best_iteration_)
    feature_importances[i] = model.feature_importances_
    
    print('Fold {} RMSLE: {:.5f}'.format(i+1, val_scores[i]))
    
sub['visitors'] /= n_splits
sub['visitors'] = np.expm1(sub['visitors'])

val_mean = np.mean(val_scores)
val_std = np.std(val_scores)

print('Local RMSLE: {:.5f} (±{:.5f})'.format(val_mean, val_std))
Fold 1 RMSLE: 0.48936
Fold 2 RMSLE: 0.49091
Fold 3 RMSLE: 0.48654
Fold 4 RMSLE: 0.48831
Fold 5 RMSLE: 0.48788
Fold 6 RMSLE: 0.48706
Local RMSLE: 0.48834 (±0.00146)

修改参数

model = lgbm.LGBMRegressor(
    objective='regression', #目标函数,回归任务
    max_depth=5, #最大深度
    num_leaves=25, #叶子节点个数
    learning_rate=0.007, #学习率
    n_estimators=1000, # 最佳迭代轮数
    min_child_samples=80,
    colsample_bytree=1,
    random_state=np.random.randint(10e6)
)

交叉验证


【机器学习】Cross-Validation(交叉验证)详解.

在机器学习里,通常来说我们不能将全部用于数据训练模型,否则我们将没有数据集对该模型进行验证,从而评估我们的模型的预测效果。为了解决这一问题,有如下常用的方法:

1、K-fold Cross Validation

一种折中的办法叫做K折交叉验证,和LOOCV的不同在于,我们每次的测试集将不再只包含一个数据,而是多个,具体数目将根据K的选取决定。比如,如果K=5,那么我们利用五折交叉验证的步骤就是:

1.将所有数据集分成5份

2.不重复地每次取其中一份做测试集,用其他四份做训练集训练模型,之后计算该模型在测试集上的MSE_i

3.将5次的MSE_i取平均得到最后的MSE

image
不难理解,其实LOOCV是一种特殊的K-fold Cross Validation(K=N)
2 、实践

K折交叉验证:sklearn.model_selection.KFold(n_splits=3, shuffle=False, random_state=None)

思路:将训练/测试数据集划分n_splits个互斥子集,每次用其中一个子集当作验证集,剩下的n_splits-1个作为训练集,进行n_splits次训练和测试,得到n_splits个结果

注意点:对于不能均等份的数据集,其前n_samples % n_splits子集拥有n_samples // n_splits + 1个样本,其余子集都只有n_samples // n_splits样本

参数说明:

n_splits:表示划分几等份

shuffle:在每次划分时,是否进行洗牌

①若为Falses时,其效果等同于random_state等于整数,每次划分的结果相同

②若为True时,每次划分的结果都不一样,表示经过洗牌,随机取样的

random_state:随机种子数

相关文章

  • 饭店流量预测

    lightgbm 模型 修改参数 交叉验证 【机器学习】Cross-Validation(交叉验证)详解. 在机器...

  • 基于LSTM预测未来一天的网络流量

    实验笔记:网络流量预测 概述 需要对未来的网络流量大小进行预测,故进行此实验,尝试网络流量预测的可行性。该笔记完整...

  • 得流量者,得天下

    任何生意都离不开流量获取,流量转化,流量变现。 生意的过程,就是产品—流量—变现的过程中。 饭店选址好,口碑好,流...

  • 自媒体市场需要预测

    自媒体从事流量预测,一般要经过三个阶段及环境预测,内容预测,销售预测。 预测的基础只有三种。 一,人们所说的 指己...

  • 机器学习算法 回归

    1 回归 线性回归 应用场景 机场客流量分布预测,电影票房预测

  • 交通流量预测

    智慧交通系统 即Intelligent TransportationSystem (ITS) 属于时空预测方向,在...

  • Diffusion Convolutional Recurren

    diffusion process:扩散过程 背景 交通流量预测属于时空预测的范围,难点如下: (1)对道路网络的...

  • Video Ads 移动视频广告2017趋势

    几年前,YouTube的Robert Kyncl预测,到2020年,90%的移动流量都将是视频,现在看来,他的预测...

  • 百万富翁儿子被拐,十年后被发现竟叫流浪乞丐爸爸

    周海涛是个开饭店的老板,他的饭店坐落在市区两条繁华的街道的交汇处,生意非常兴隆。 由于饭店位于十字路口,人流量很大...

  • 使用R预测网页流量

    本案例使用回归模型预测互联网排名前1000的网站在2011年的访问量。数据由 NeilKodner提供。 数据描述...

网友评论

    本文标题:饭店流量预测

    本文链接:https://www.haomeiwen.com/subject/vmbreqtx.html