AttributeError: ‘DecisionTreeRegressor’ 对象没有 ‘save’ 属性在 GCS

我在尝试将自定义的 DecisionTreeRegressor 用于房价预测部署到 GCS Vertex AI。我所遵循的教程是针对 MPG 数据集教程

然而,当我尝试使用以下命令在本地构建和测试容器时:

docker build ./ -t $IMAGE_URIdocker run $IMAGE_URI

出现了错误消息:AttributeError: ‘DecisionTreeRegressor’ 对象没有 ‘save’ 属性

我运行的代码是 train.py:

# 导入此项目所需的库import numpy as npimport pandas as pdfrom sklearn.model_selection import ShuffleSplit# 加载波士顿房价数据集data = pd.read_csv('trainer/housing.csv')prices = data['MEDV']features = data.drop('MEDV', axis = 1)# 导入 'train_test_split'from sklearn.model_selection import train_test_split# 打乱并将数据分割成训练和测试子集X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state = 42)# 定义模型拟合和调整函数# 导入 'make_scorer', 'DecisionTreeRegressor', 和 'GridSearchCV'from sklearn.tree import DecisionTreeRegressorfrom sklearn.metrics import make_scorerfrom sklearn.model_selection import GridSearchCVfrom sklearn.metrics import r2_score   # 导入 'r2_score'from sklearn.metrics import accuracy_score# TODO: 将 `your-gcs-bucket` 替换为您之前创建的存储桶的名称BUCKET = 'gs://gardena-dps-bucket'def performance_metric(y_true, y_predict):    """ 根据所选择的指标计算并返回真实值(y_true)和预测值(y_predict)之间的性能分数。 """        score = r2_score(y_true, y_predict)        # 返回分数    return scoredef fit_model(X, y):    """ 对输入数据 [X, y] 上的决策树回归器进行网格搜索,以调整 'max_depth' 参数。 """        # 从训练数据中创建交叉验证集    cv_sets = ShuffleSplit(n_splits = 10, test_size = 0.20, random_state = 0)    # 创建决策树回归器对象    regressor = DecisionTreeRegressor()    # 为参数 'max_depth' 创建一个从1到10的范围的字典    params = {'max_depth':[1,2,3,4,5,6,7,8,9,10]}    # 使用 'make_scorer' 将 'performance_metric' 转换为评分函数     scoring_fnc = make_scorer(performance_metric)    # 创建网格搜索 cv 对象 --> GridSearchCV()    # 确保在对象中包含正确的参数:    # (estimator, param_grid, scoring, cv),它们的值分别为 'regressor', 'params', 'scoring_fnc', 和 'cv_sets'。    grid = GridSearchCV(estimator=regressor, param_grid=params, scoring=scoring_fnc, cv=cv_sets)    # 拟合网格搜索对象到数据以计算最优模型    grid = grid.fit(X, y)    # 在拟合数据后返回最优模型    return grid.best_estimator_# 使用网格搜索拟合训练数据到模型reg = fit_model(X_train, y_train)# 为客户数据生成矩阵client_data = [[12, 26.3, 16.99885]]  # 客户数据的二维数组# 显示预测reprice = reg.predict(client_data).astype(int)reprice# 导出模型并保存到 GCSreg.save(BUCKET + '/housing/model')

回答:

Scikit-learn 估计器不提供直接保存其状态的方法。根据 Google 文档,将拟合模型存储到 GCS 的最佳方式是使用 joblib 在本地序列化您的模型,然后将其上传到 GCS。

如下所示:

from google.cloud import storagefrom sklearn.externals import joblib# 将模型导出到文件model = 'model.joblib'joblib.dump(pipeline, model)# 上传模型到 GCSbucket = storage.Client().bucket(BUCKET_NAME)blob = bucket.blob('{}/{}'.format(    datetime.datetime.now().strftime('model_%Y%m%d_%H%M%S'),    model))blob.upload_from_filename(model)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注