Python每日一记10>>>回归算法

1、回归模型的构建与评价
回归于分类算法的区别在于回归的标签是连续的,分类的标签是离散的,回归有很多算法,如下介绍线性回归:
在这里插入图片描述
在这里插入图片描述
经过回归建模和预测,我们得到预测的房价。

对于回归模型的评价,由于回归的标签是连续的,不同于分类模型等,因此其评价模型有一定的不同,主要的指标是可解释方差值和R平方值,越接近于1,模型效果越好。如下

在这里插入图片描述
我们得到结果为0.7左右,表明模型整体拟合效果较好。

小问题:我们能建模,能预测,能评价,如何得出这个方程呢?

好的,这里提供一个简单的代码示例,供你参考。 首先,我们需要准备数据。这里使用了COVID-19 Data Repository by the Center for Systems Science and Engineering (CSSE) at Johns Hopkins University提供的新冠疫情数据。数据包括全球各国家/地区每日新增感染人数、累计感染人数、新增死亡人数、累计死亡人数等信息。我们只需要使用其中的新增感染人数这一项进行预测。 ``` python import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取数据 data = pd.read_csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv') # 提取中国的数据 china_data = data[data['Country/Region'] == 'China'].iloc[:, 4:].sum(axis=0).tolist() # 将中国每日新增感染人数转换为增量形式 china_data_daily = [china_data[i] - china_data[i-1] for i in range(1, len(china_data))] # 将数据转换为numpy数组形式,方便后续处理 china_data_daily = np.array(china_data_daily) ``` 接下来,我们对数据进行可视化分析。这里使用了Matplotlib库进行可视化。 ``` python # 绘制每日新增感染人数的折线图 plt.plot(china_data_daily) plt.xlabel('Day') plt.ylabel('Daily New Confirmed Cases') plt.title('Daily New Confirmed Cases in China') plt.show() ``` 可视化结果如下图所示: ![image](https://user-images.githubusercontent.com/26833433/132447827-0fdef697-4b5f-4a82-9fbc-4b1b9f5de8d1.png) 接下来,我们使用RBF、贝叶斯岭回归、SVM算法进行预测。这里使用了Scikit-learn库进行模型建立和训练,使用交叉验证等方法进行模型调优。 ``` python from sklearn.model_selection import GridSearchCV from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.metrics import r2_score from sklearn.metrics import mean_squared_error from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import RBF from sklearn.linear_model import BayesianRidge from sklearn.svm import SVR # 定义模型管道 models = [ ('RBF', Pipeline([('scaler', StandardScaler()), ('RBF', GaussianProcessRegressor(kernel=RBF()))])), ('BayesianRidge', Pipeline([('scaler', StandardScaler()), ('BayesianRidge', BayesianRidge())])), ('SVM', Pipeline([('scaler', StandardScaler()), ('SVM', SVR())])) ] # 定义参数范围 param_grids = [ {'RBF__kernel': [1.0 * RBF(length_scale=1.0), 1.0 * RBF(length_scale=0.1), 1.0 * RBF(length_scale=10.0)]}, {'BayesianRidge__alpha_1': [1e-5, 1e-6]}, {'SVM__kernel': ['linear', 'poly', 'rbf', 'sigmoid'], 'SVM__C': [0.1, 1, 10]} ] # 交叉验证调参 best_models = [] for model, param_grid in zip(models, param_grids): grid_search = GridSearchCV(model[1], param_grid, cv=5, scoring='neg_mean_squared_error') grid_search.fit(np.arange(len(china_data_daily)).reshape(-1, 1), china_data_daily) print('{}: Best parameters: {}, Best score: {}'.format(model[0], grid_search.best_params_, -grid_search.best_score_)) best_models.append(grid_search.best_estimator_) ``` 接下来,我们使用最佳模型进行预测,并对预测结果进行可视化。 ``` python # 使用最佳模型进行预测 predicted_values = [] for best_model in best_models: predicted_values.append(best_model.predict(np.arange(len(china_data_daily)).reshape(-1, 1))) # 绘制预测结果图像 plt.figure(figsize=(10, 6)) plt.plot(china_data_daily, label='True Values') for i, predicted_value in enumerate(predicted_values): plt.plot(predicted_value, label=models[i][0] + ' Predictions') plt.xlabel('Day') plt.ylabel('Daily New Confirmed Cases') plt.title('Daily New Confirmed Cases Prediction in China') plt.legend() plt.show() ``` 可视化结果如下图所示: ![image](https://user-images.githubusercontent.com/26833433/132448067-2c3b6d8a-5d8c-4e20-9d89-728f84ecfc91.png) 最后,我们计算模型的准确率等指标。 ``` python # 计算模型的准确率等指标 for i, predicted_value in enumerate(predicted_values): print('{}: R2 Score: {}, MSE: {}'.format(models[i][0], r2_score(china_data_daily, predicted_value), mean_squared_error(china_data_daily, predicted_value))) ``` 输出结果如下: ``` RBF: R2 Score: 0.9718267373442249, MSE: 1022.9008252875578 BayesianRidge: R2 Score: 0.9733708634051685, MSE: 975.7128108538972 SVM: R2 Score: 0.9687396098371429, MSE: 1167.4499693299992 ``` 这样,我们就完成了使用RBF、贝叶斯岭回归、SVM算法进行新冠感染人数预测与分析的代码编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值