数据集 pm2.5 中给出了与预测 pm2.5 有关的气象数据。请利用 2010年至 2013 年的数据作为训练集对 2014 年的 pm2.5 数据进行预测。考虑使用的预测变量包括:hour(日内小时)、dewp(露点)、temp(气温)、pres(气压)cbwd(风向)、lws(风速)、ls(累积降雪)、lr(累积降雨),其中 hour 与 cbwd 应当作类别变量处理。
只有pm25这一列数据有空值,一共2043行。而总的数据集的数据一共43800行,包含空值的数据所占总数据集的比例较少,可以直接删除。 2. 删除缺失值
df.dropna(inplace=True) 更改数据类型 df['cbwd']=df['cbwd'].astype(str) df['hour']=df['hour'].astype(str) 数据了解 df.columns[‘year’, ‘month’, ‘day’, ‘hour’, ‘pm25’, ‘DEWP’, ‘TEMP’, ‘PRES’, ‘cbwd’, ‘Iws’, ‘Is’, ‘Ir’]
df.dtypes 划分训练集测试集 x=df.loc[:,['hour','DEWP','TEMP','PRES','cbwd','Iws', 'Is', 'Ir']] y=df.loc[:,['pm25']] x=pd.get_dummies(x) x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.3,random_state = 1)请建立普通的线性回归模型,并分别对训练集和测试集的预测精度进行评价。
{‘copy_X’: True, ‘fit_intercept’: True, ‘n_jobs’: None, ‘normalize’: False}
fit_intercept:是否有截据,如果没有则直线过原点; normalize:是否将数据归一化(标准化); copy_X:默认为True,当为True时,X会被copied,否则X将会被覆写; n_jobs:默认值为1。计算时使用的核数
回归系数
linear.coef_ linear.intercept_训练集精度:0.295160 测试集精度:0.292433
- 数据标准化 linear=linear_model.LinearRegression(normalize=True) linear.fit(x_train,y_train) linear.score(x_train,y_train) linear.score(x_test,y_test)训练集精度:0.295146 测试集精度:0.292365
将数据进行标准化处理以后,测试精度和训练精度几乎没有改进
训练集:mse=6054 测试集:fmse=5801
画图 plt.rcParams['savefig.dpi']=300 #像素 plt.rcParams['figure.dpi'] = 100 #分辨率 plt.rcParams['figure.figsize']=(8.0,6.0) plt.figure() plt.scatter(list(range(len(y_pre))),y_test,label='real',color='b',s=1) plt.plot(list(range(len(y_pre))),y_pre,label='predict',color='r') plt.legend() plt.show()建立岭回归模型,并利用基于 5 折交叉验证的格子搜索技术确定最优惩罚因子;在最优惩罚因子下,分别评价岭回归在训练集和测试集的预测精度。
{‘alpha’: 1.0,‘copy_X’: True,‘fit_intercept’: True, ‘max_iter’: None, ‘normalize’: False,‘random_state’: None, ‘solver’: ‘auto’, ‘tol’: 0.001}
best_params_:0.0009 best_score:0.2797
训练集精度:0.2951 测试集精度:0.2924
请建立 Lasso 回归模型,并利用基于 5 折交叉验证的格子搜索技术确定最优惩罚因子;在最优惩罚因子下,分别评价 Lasso 回归在训练集和测试集的预测精度。
{‘alpha’: 1.0, ‘copy_X’: True, ‘fit_intercept’: True, ‘max_iter’: 1000, ‘normalize’: False, ‘positive’: False, ‘precompute’: False, ‘random_state’: None, ‘selection’: ‘cyclic’, ‘tol’: 0.0001, ‘warm_start’: False}
best_params_:{‘alpha’: 1} best_score:0.2457
lasso=Lasso() parameters={'alpha':np.arange(0.01,0.1,0.01)} lasso_cv=GridSearchCV(lasso,param_grid=parameters,cv=5) lasso_cv.fit(x,y) print(lasso_cv.best_params_) print(lasso_cv.best_score_)best_params_:{‘alpha’: 0.02} best_score:0.2798
训练集精度:0.2951 测试集精度:0.2923
训练集精度:0.5572 测试集精度:0.4525
画图 y_pre=xgb.predict(x_test) plt.rcParams['savefig.dpi']=300 plt.rcParams['figure.dpi'] = 100 plt.rcParams['figure.figsize']=(8.0,6.0) plt.figure() plt.scatter(list(range(len(y_pre))),y_test,label='real',color='b',s=1) plt.plot(list(range(len(y_pre))),y_pre,label='predict',color='r') plt.legend() plt.show()