把刚刚的模型升级一下,提高准确度。
时间: 2024-03-26 14:40:12 浏览: 23
好的,以下是一个升级版的Catboost回归模型,它使用了一些常见的技巧来提高准确度:
```python
import pandas as pd
from catboost import CatBoostRegressor, Pool
from sklearn.metrics import mean_squared_error, make_scorer
from sklearn.model_selection import KFold, RandomizedSearchCV
from scipy.stats import uniform, randint
import matplotlib.pyplot as plt
# 读入数据
data = pd.read_csv('data.csv')
# 拆分数据集为特征和目标值
X = data.drop('target', axis=1)
y = data['target']
# 初始化Catboost回归器
catboost = CatBoostRegressor(
iterations=2000,
learning_rate=0.05,
depth=8,
l2_leaf_reg=5,
loss_function='RMSE',
verbose=False
)
# 初始化交叉验证器
kfold = KFold(n_splits=5, shuffle=True)
# 定义用于交叉验证的函数
def cross_validate(model, X, y):
mse_list = []
for train_index, test_index in kfold.split(X):
# 拆分数据为训练集和测试集
X_train, X_test = X.iloc[train_index], X.iloc[test_index]
y_train, y_test = y.iloc[train_index], y.iloc[test_index]
# 将数据转化为Catboost Pool格式
train_pool = Pool(X_train, y_train)
test_pool = Pool(X_test, y_test)
# 训练Catboost模型
model.fit(train_pool, eval_set=test_pool)
# 在测试集上进行预测
y_pred = model.predict(test_pool)
# 计算MSE并将其添加到列表中
mse_list.append(mean_squared_error(y_test, y_pred))
# 计算平均MSE
avg_mse = sum(mse_list) / len(mse_list)
return avg_mse
# 定义用于随机搜索的参数空间
param_space = {
'iterations': randint(1000, 3000),
'learning_rate': uniform(0.01, 0.1),
'depth': randint(4, 10),
'l2_leaf_reg': randint(1, 10),
}
# 定义用于随机搜索的评估指标
scorer = make_scorer(mean_squared_error, greater_is_better=False)
# 初始化随机搜索器
searcher = RandomizedSearchCV(
catboost,
param_space,
n_iter=50,
cv=kfold,
scoring=scorer,
n_jobs=-1,
verbose=1
)
# 进行随机搜索
searcher.fit(X, y)
# 输出最优参数
best_params = searcher.best_params_
print(f'Best Parameters: {best_params}')
# 根据最优参数重新训练模型并执行交叉验证
catboost.set_params(**best_params)
avg_mse = cross_validate(catboost, X, y)
print(f'Average MSE: {avg_mse:.2f}')
# 可视化每次交叉验证的MSE
plt.plot([i+1 for i in range(len(mse_list))], mse_list)
plt.xlabel('Cross Validation Iteration')
plt.ylabel('MSE')
plt.title('MSE for Catboost Regression Model')
plt.show()
```
这个升级版的模型中,我们使用了Catboost Pool来处理输入数据,这通常可以提高训练速度和准确度。我们还使用了随机搜索来搜索最优参数组合,并在最优参数下重新训练模型并执行交叉验证。最后,我们可视化了每次交叉验证的MSE。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)