机器学习 回归模型的建立与预测

本文介绍了如何使用Python的机器学习技术,如岭回归进行特征选择,然后利用SVR构建风速预测模型。作者通过递归特征消除法选取了两个重要特征,并进行了参数调优以提高模型性能。
摘要由CSDN通过智能技术生成

机器学习 回归模型的建立与预测

基于岭回归选取特征集以及基于SVR构建回归模型

关于数据集:某一地区十年的风速数据,基于SVR构建风速预测模型

1、导入所需的模块

import pandas as pd
from sklearn.feature_selection import RFE
from sklearn.linear_model import Ridge#岭回归进行特征选择
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error

2、读取数据,选取特征集和目标向量

data = pd.read_excel("./data.xlsx")
# 特征集
data_list = ['cloud_cover', 'humidity', 'global_radiation', 'precipitation', 'sunshine', 'temp_mean', 'temp_min', 'temp_max']
# X为特征集,y为目标向量
X = data[data_list]
y = data['wind_speed']

3、选取特征集

递归特征消除(Recursive Feature Elimination):这是一种基于模型的特征选择方法,它通过递归地训练模型,并在每一轮中剔除最不重要的特征,直到达到预定的特征数量为止。在这个过程中,可以根据模型的性能评估特征的重要性。

基于岭回归选取最重要的前2个特征集。

# 使用岭回归模型作为基础模型
model = Ridge()

# 创建RFE对象,指定基础模型和要保留的特征数量
rfe = RFE(model, n_features_to_select=2)

# 使用RFE进行特征选择
X_rfe = rfe.fit_transform(X, y)

# 获取选择的特征索引
selected_features_index = rfe.support_

# 输出选择的特征名字
selected_feature_names = [data_list[i] for i, selected in enumerate(selected_features_index) if selected]

##'humidity', 'global_radiation'

4、数据可视化一:特征集与目标向量的相关性

#选择的特征集与目标向量的关系
sns.pairplot(data
             , x_vars=selected_feature_names
             , y_vars='wind_speed'
             , size=7
             , aspect=0.8
             , kind='reg')
plt.show()

在这里插入图片描述

5、构建SVR回归模型,进行参数调优,选取最优参数。

#构建回归模型
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_rfe, y, random_state=1,test_size=0.25)

# 定义SVR模型
svr = SVR()

# 设置参数网格
param_grid = {
    'kernel': ['linear', 'poly', 'rbf'],
    'C': [0.1, 1, 10],
    'gamma': ['scale', 'auto'],
    'epsilon': [0.1, 0.2, 0.5]
}

# 创建GridSearchCV对象
grid_search = GridSearchCV(svr, param_grid, cv=5, scoring='neg_mean_squared_error')

# 在训练集上拟合GridSearchCV对象
grid_search.fit(X_train, y_train)

# 获取最佳参数组合
best_params = grid_search.best_params_
print("Best Parameters:", best_params)
# best_params = {'C': 10, 'epsilon': 0.5, 'gamma': 'scale', 'kernel': 'rbf'}

6、根据最优参数,构建最终模型。

# 使用最佳参数构建最终的SVR模型
best_svr = SVR(kernel=best_params['kernel'], C=best_params['C'], gamma=best_params['gamma'], epsilon=best_params['epsilon'])
best_svr.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = best_svr.predict(X_test)

# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)
# Mean Squared Error: 2.1474928766471284

plt.figure(figsize=(20, 6))  # 设置图形的宽度为8英寸,高度为4英寸
plt.plot(range(300),y_pred[:300],'b',label="predict")
plt.plot(range(300),y_test[:300],'r',label="test")
plt.legend(loc="upper right")
plt.xlabel("number")
plt.ylabel('value')
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值