1.数据集
使用sklearn 中自带的波士顿房价数据集进行预测,对数据进行训练集与测试集的划分,训练集与测试集的比例为 7:3。
将训练集标准化后,使用 ElasticNet 函数进行拟合,对测试集进行预测,并对预测的结果进行评估。
最后对验证集样本的预测值和真实值进行画图比较。
同时,因为训练样本为随机选取,每次训练的结果不同,为了减少误差,进行五次训练,取平均值检验模型的优劣。
1.1 获取数据集
import pandas as pd
import numpy as np
from sklearn.datasets import load_boston
boston = load_boston()
X = boston.data
y =boston.target
print(X.shape)
print(y.shape)
(506, 13)
(506,)
1.2 划分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7)
1.3 数据标准化
from sklearn import preprocessing
standard_X = preprocessing.StandardScaler()
X_train = standard_X.fit_transform(X_train)
X_test = standard_X.transform(X_test)
standard_y = preprocessing.StandardScaler()
y_train = standard_y.fit_transform(y_train.reshape(-1, 1))
y_test = standard_y.transform(y_test.reshape(-1, 1))
2. 运用 ElasticNet 回归模型训练和预测
from sklearn.linear_model import ElasticNet
ElasticNet_clf = ElasticNet(alpha=0.1, l1_ratio=0.71)
ElasticNet_clf.fit(X_train, y_train.ravel())
ElasticNet_clf_sorce = ElasticNet_clf.score(X_test, y_test.ravel())
print("lasso 模式得分:", ElasticNet_clf_sorce)
print("特征权重:")
print(ElasticNet_clf.coef_)
print("偏置值:", ElasticNet_clf.intercept_)
print("迭代次数:", ElasticNet_clf.n_iter_)
lasso 模式得分: 0.6263061571539503
特征权重:
[-0.01602952 0. -0. 0.02917632 -0. 0.34096688
-0. -0.00854171 -0. -0.0299037 -0.18516203 0.03440105
-0.33360442]
偏置值: 6.277045769494396e-15
迭代次数: 18
3. 结果展示
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(20, 3))
axes = fig.add_subplot(1, 1, 1)
line1, = axes.plot(range(len(y_test)), y_test, 'b', label='Actual_Value')
ElasticNet_clf_result = ElasticNet_clf.predict(X_test)
line2, = axes.plot(range(len(ElasticNet_clf_result)), ElasticNet_clf_result, 'r--', label='ElasticNet_Predict')
axes.grid()
fig.tight_layout()
plt.legend(handles=[line1, line2])
plt.title('ElasticNet')
plt.show()