(三)模型和调参

数据的数学模型描述了数据不同部分之间的关系,常用的机器学习的模型可以分为线性模型,比如线性回归,还有树模型,如决策树、随机森林、GBDT、XGBoost、LightGBM,还有在CV中广泛运用的卷积神经网络,等等,这里以二手车交易交易价格预测的赛题为例,介绍模型的选择和调参方法,适合于传统的机器学习方法。

赛题链接:
https://tianchi.aliyun.com/competition/entrance/231784/information

数据读入,这里的数据是经过上一篇的特征工程处理后的数据,使用pandas库读入,划分出训练数据和标签

import pandas as pd
sample_feature = pd.read_csv('data_for_tree.csv')
continuous_feature_names = [x for x in sample_feature.columns if x not in ['price','brand','model','brand']]
sample_feature = sample_feature.dropna().replace('-', 0).reset_index(drop=True)
sample_feature['notRepairedDamage'] = sample_feature['notRepairedDamage'].astype(np.float32)
train = sample_feature[continuous_feature_names + ['price']]

train_X = train[continuous_feature_names]
train_y = train['price']

模型构建,这里采用的是随机森林的模型,直接调用sklearn中的包即可,也可以采用其他的模型,如xgboost、lightbgm等,实验多个不同的模型,比较结果,然后选择结果最好的那个模型。

from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor()

采用五折交叉验证,五折交叉验证,是把训练集的数据,划分成5份,每次把其中的4份作为测试集,另一份作为验证集,如此循环,用于找到使得模型泛化性能最优的超参值,这里也是直接使用sklearn库中的包

from sklearn.model_selection import cross_val_score
from sklearn.metrics import mean_absolute_error,  make_scorer

def log_transfer(func):
    def wrapper(y, yhat):
        result = func(np.log(y), np.nan_to_num(np.log(yhat)))
        return result
    return wrapper
    
scores = cross_val_score(model, X=train_X, y=train_y, verbose=1, cv = 5, scoring=make_scorer(log_transfer(mean_absolute_error)))

输出结果

result = dict()
model_name = str(model)
result[model_name] = scores
result = pd.DataFrame(result)
result.index = ['cv' + str(x) for x in range(1, 6)]
print(result)

五折交叉验证的运行结果如下:
在这里插入图片描述

<think>好的,我现在需要处理用户关于机器学习回归模型调参的问题。首先,我得回顾一下用户提供的引用内容,看看哪些信息可以直接应用。用户提到了引用1到4,其中引用12讨论了调参的目的重要性,引用34提到了网格搜索交叉验证的方法。用户的问题是如何对回归模型进行参数调整,所以需要结合这些引用来构建回答。 首先,我应该明确调参的基本概念,区分超参数模型参数。根据引用3,超参数是学习算法需要手动设置的参数,而模型参数是通过训练数据自动学习的。这一点很重要,因为调参主要调整的是超参数。 接下来,用户需要具体的调参方法。引用4提到了GridSearchCV,也就是网格搜索交叉验证的结合。我需要详细解释网格搜索的步骤,以及如何结合交叉验证来评估不同参数组合的性能。同时,除了网格搜索,还有随机搜索贝叶斯优化,这些也是常用的方法,需要补充进去。 然后,考虑到用户关注的是回归模型,我需要强调回归任务中的评估指标,如MSE、RMSE、MAE、R²。这些指标在调参过程中用于衡量模型性能,引用1指出对于回归算法,目标是降低模型在未知数据上的误差,所以需要明确这些指标的作用。 另外,引用2提到Python中的工具库,比如Scikit-learn,这里可以具体举例,如使用GridSearchCVRandomizedSearchCV的代码示例。用户可能希望看到实际的代码操作,所以提供示例代码会很有帮助,同时要确保代码符合之前的系统级指令,使用正确的格式。 还需要注意步骤化的结构,用户希望回答结构清晰,逐步解决问题。因此,我应该将调参过程分解为几个步骤,比如确定参数范围、选择优化方法、交叉验证、评估指标、自动化工具迭代优化。每个步骤详细说明,并引用相关的内容支持。 同时,用户要求生成相关问题,我需要根据回答内容提出相关问题,比如网格搜索随机搜索的区别,评估指标的选择,自动化调参工具等。这些问题需要与主题紧密相关,帮助用户进一步探索。 在写作过程中,要确保使用中文,数学公式用$...$或$$...$$格式,例如MSE公式:$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$。同时检查LaTeX语法是否正确,避免格式错误。 最后,需要确认所有引用都正确标注,例如引用4关于GridSearchCV的解释,在相应的位置添加引用标识。同时确保回答真实可靠,基于提供的引用内容,不添加未提及的信息。</think>### 机器学习回归模型调参方法分步指南 #### 1. **调参目标与关键概念** 调参的核心目标是提升回归模型在未知数据上的泛化能力,即最小化预测误差[^1]。 需区分两类参数: - **模型参数**:通过训练数据自动学习(如线性回归的系数) - **超参数**:需手动设置的算法控制参数(如正则化强度$\lambda$、树模型的深度等)[^3] #### 2. **调参方法详解** ##### 2.1 网格搜索 (Grid Search) 通过遍历预设参数组合寻找最优解,常与交叉验证结合(GridSearchCV)[^4] **实现步骤**: ```python from sklearn.model_selection import GridSearchCV param_grid = { 'alpha': [0.1, 1, 10], # 正则化强度 'max_iter': [1000, 2000] # 最大迭代次数 } grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5) grid_search.fit(X_train, y_train) ``` ##### 2.2 随机搜索 (Random Search) 在参数空间中随机采样组合,适合高维参数空间: ```python from sklearn.model_selection import RandomizedSearchCV param_dist = { 'alpha': loguniform(1e-3, 100), # 对数均匀分布 'learning_rate': [0.01, 0.1, 0.5] } random_search = RandomizedSearchCV(model, param_dist, n_iter=50, cv=5) ``` ##### 2.3 贝叶斯优化 基于高斯过程建模参数-性能关系,逐步逼近最优解: $$P(score|params) \sim \mathcal{N}(\mu(params), \sigma^2(params))$$ #### 3. **回归评估指标选择** 调参需配合适当的评估指标: - 均方误差:$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$ - 决定系数:$R^2 = 1 - \frac{\sum(y_i - \hat{y}_i)^2}{\sum(y_i - \bar{y})^2}$ #### 4. **关键调参流程** 1. **确定参数空间**:基于模型类型选择核心参数(如岭回归的$\alpha$,GBDT的树深度) 2. **选择优化方法**:低维用网格搜索,高维用随机搜索或贝叶斯优化 3. **交叉验证**:使用5-10折交叉验证防止过拟合 4. **早停机制**:监控验证集误差,设置提前终止条件 #### 5. **自动化调参工具** | 工具 | 特点 | 示例库 | |----------------|-------------------------------|-----------------------| | Hyperopt | 支持贝叶斯优化 | `hyperopt` | | Optuna | 动态参数采样 | `optuna` | | TPOT | 自动化机器学习(AutoML) | `tpot` | #### 6. **实践建议** - 优先调整对模型影响大的参数(如正则化系数、树模型复杂度参数) - 使用学习曲线分析模型状态(欠拟合/过拟合) - 最终评估必须在独立测试集上进行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值