为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。
练习题
波士顿房价预测数据集来源于1978年美国某经济杂志。Scikit-learn中自带该数据。它包含若干波士顿房屋的价格及相关数据,共506个样例(样本),每个样例包含14个数据项(属性)。下表给出了这14个属性列的名称和具体的含义,其中最后一项房屋均价是待预测的目标列,即房价。
分别使用普通线性回归、岭回归和套索回归对波士顿房屋均价进行预测,并比较预测效果。
分析与Python代码
1、导入模块
import pandas as pd
import matplotlib.pyplot as plt
# 拆分数据的模块
from sklearn.model_selection import train_test_split
# 获得普通线性模型、岭回归模型、套索回归模型
from sklearn.linear_model import LinearRegression, Ridge, Lasso
# 模型效果评估
from sklearn.metrics import r2_score
2、读取并清洗数据(关键)
data = pd.read_csv('HousingData.csv')
data.info() #查看数据的类型,完整性
以上结果显示,该数据集有缺失值,因此我们对数据集做直接删除含有缺失值的行的处理。处理后再次检查数据情况,数据集没有缺失值。
data.dropna(inplace=True) #删除有缺失的样本
data.info() #再次查看数据的类型,完整性
3、定义变量
y = data['MEDV'] # 标签-房价
X = data.drop(['MEDV'], axis=1) #去掉标签(房价)的数据子集
因变量为房价,自变量为除了房价以外的其他13项属性。
4、拆分数据为训练集和测试集
X_train为训练数据, y_train为训练集标签,X_test为测试数据,y_test为测试集标签。
抽取90%的数据作为训练集, 用剩余样本进行分类结果测试。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1)
5、创建机器学习模型
分别创建普通线性回归、岭回归及套索回归模型
line = LinearRegression()
ridge = Ridge()
lasso = Lasso()
6、训练和预测
将三个模型分别在训练集上进行训练,并在测试集上预测得到结果。
# 训练
line.fit(X_train, y_train)
ridge.fit(X_train,y_train)
lasso.fit(X_train, y_train)
# 预测
line_y_pred = line.predict(X_test)
ridge_y_pred = ridge.predict(X_test)
lasso_y_pred = lasso.predict(X_test)
7、绘制图形
将三个模型预测出的房价分别绘制在同一个线图中,并和真实的房价比较。
plt.figure(figsize = (14,7))
plt.plot(y_test.values,c="r",label="y_test", linestyle = '-')
plt.plot(line_y_pred,c="b",label="line_y_pred", linestyle = '--')
plt.plot(ridge_y_pred,c="black",label="Ridge_y_pred", linestyle = '-.')
plt.plot(lasso_y_pred,c="g",label="Lasso_y_pred", linestyle = ':')
plt.legend()
plt.show()
对比3个回归模型对房价的预测,可以简单地看出Line线(普通线性回归)更接近原始数据,且趋势也接近原始数据。为了进一步确认哪个模型更好,需要计算它们的判定系数R2,再进行对比。
8、模型评估
line_score = r2_score(y_test, line_y_pred)
ridge_score = r2_score(y_test, ridge_y_pred)
lasso_score = r2_score(y_test, lasso_y_pred)
print('线性回归R2:', line_score, '\n'
'岭回归R2:', ridge_score, '\n'
'套索回归R2:', lasso_score)
线性回归R2: 0.6639129481248678 岭回归R2: 0.6534546368301792 套索回归R2: 0.5724075030413937
由上面得到的R2值可以看出,预测波士顿房价时,普通线性回归模型比其他两个模型要好,同时岭回归比套索回归模型稍好一些。
都读到这里了,不妨关注、点赞一下吧!