【问题标题】:How to predict data in python after training a stacked model?训练堆叠模型后如何在python中预测数据?
【发布时间】:2018-07-29 23:39:26
【问题描述】:

我是 python 机器学习的新手,已经看到了堆叠模型的概念,并想试一试。问题是我不知道如何预测新数据,因为我不完全理解 python 中的机器学习实现。我管理废品的代码如下所示:

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error,mean_squared_error
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import BaggingRegressor
from sklearn.ensemble import GradientBoostingRegressor
from catboost import CatBoostRegressor
from xgboost import XGBRegressor
from vecstack import stacking
import pandas as pd

X = pd.read_csv('db/file_name3.csv')
y = pd.read_csv('db/train_labels(1).csv')
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

models = [    
    CatBoostRegressor(iterations=200,
                            learning_rate=0.03,
                            depth=4,
                            loss_function='RMSE',
                            eval_metric='RMSE',
                            random_seed=99,
                            od_type='Iter',
                            od_wait=50,
                     logging_level='Silent'),

    CatBoostRegressor(iterations=500,
                            learning_rate=0.06,
                            depth=3,
                            loss_function='RMSE',
                            eval_metric='RMSE',
                            random_seed=99,
                            od_type='Iter',
                            od_wait=50,
                     logging_level='Silent'),

    ExtraTreesRegressor(random_state = 0, n_jobs = -1, 
        n_estimators = 100, max_depth = 3),

    RandomForestRegressor(random_state = 0, n_jobs = -1, 
        n_estimators = 300, max_depth = 3),

    XGBRegressor(eta=0.02,reg_lambda=5,reg_alpha=1),

    XGBRegressor(eta=0.1,reg_lambda=1,reg_alpha=10),

    XGBRegressor(eta=0.02,reg_lambda=1,reg_alpha=10,n_estimators=300),

    XGBRegressor(eta=0.012,max_depth=3,n_estimators=200),

    GradientBoostingRegressor(),

    BaggingRegressor(),
]
test1= pd.read_csv('db/Cleaned Data.csv')
S_train, S_test = stacking(models, X_train, y_train, X_train, 
    regression = True, metric = mean_absolute_error, n_folds = 10 , 
    shuffle = True, random_state = 0, verbose = 2)
model = model.fit(S_train, y_train)
y_pred = model.predict(S_test)
print(y_pred.shape)

如您所见,test1 是我想要预测但无法弄清楚的数据。我可以从我的训练集中预测数据,但不能预测新的数据。我没有从文档中更改模型的任何参数。

【问题讨论】:

    标签: python machine-learning


    【解决方案1】:
    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.model_selection import KFold, cross_val_score
    
    
    # load your X, y and test1 data here
    
    
    RF = RandomForestRegressor(random_state = 0, n_jobs = -1, 
                               n_estimators = 300, max_depth = 3)
    
    # Validation function
    n_folds = 5
    def rmsle_cv(model):
        kf = KFold(n_folds, shuffle=True, 
                   random_state=42).get_n_splits(X.values)
        rmse= np.sqrt(-cross_val_score(model, X.values, y.values.ravel(), 
                      scoring="neg_mean_squared_error", cv = kf))
        return(rmse)
    
    score = rmsle_cv(RF)
    print("Random Forest score: {:.3f} ({:.3f})\n".format(score.mean(), 
           score.std()))
    
    RF.fit(X,y.values.ravel())
    RF_train_pred = RF.predict(X)
    RF_pred = RF.predict(test1)
    print (RF_pred.shape)
    

    【讨论】:

    • 是的,这就是我最初的想法,但得到了这个错误 ValueError:shapes (3080,29) and (10,1) not aligned: 29 (dim 1) != 10 (dim 0) and both我的测试和训练包含 29 列,我不知道这 10,1 是用于的。
    • 如果您能分享一个示例数据文件会很有帮助。
    • train_labels(1).csv 这是训练的 y file_name3.csv 这是训练的 X Cleaned Data.csv 我想预测 y 的值
    • 我无法下载文件Cleaned Data.csv。尝试再次上传,文件名中不包含空格。
    猜你喜欢
    • 2018-04-15
    • 2020-09-02
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2021-02-22
    • 2020-03-16
    • 2021-07-30
    相关资源
    最近更新 更多