基于LASSO的波士顿房价分析
Posted ZHW_AI课题组
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于LASSO的波士顿房价分析相关的知识,希望对你有一定的参考价值。
目录
1. 作者介绍
符振涛,男,西安工程大学电子信息学院,2021级研究生
研究方向:机器视觉与人工智能
电子邮件:2673229503@qq.com
吴燕子,女,西安工程大学电子信息学院,2021级研究生,张宏伟人工智能课题组
研究方向:人工智能与模式识别
电子邮件:1219428323@qq.com
2. 算法介绍
2.1 Lasso算法介绍
Lasso(least absolute shrinkage and selection operator,又译最小绝对值收敛和选择算子、套索算法)。是一种同时进行特征选择和正则化的回归分析方法。它通过构造一个惩罚函数得到一个较为精炼的模型,使得它压缩一些回归系数,即强制系数绝对值之和小于某个固定值;同时设定一些回归系数为零。
保留了子集收缩的优点,是一种处理具有复共线性数据的有偏估计。
擅长处理具有多重共线性的数据。
2.2 公式分析
LASSO就是在普通线性模型中增加了L1正则化惩罚项.其中正则化项是:
2.3 特点分析
红色的椭圆代表的是随着λ的变化所得到的残差平方和,βˆ为椭圆的中心点,为对应普通线性模型的最小二乘估计。等高线和约束域的切点就是目标函数的最优解,对于Lasso方法,其约束域是正方形,会存在与坐标轴的切点,使得部分维度特征权重为0,因此很容易产生稀疏的结果。
所以,Lasso方法可以达到变量选择的效果,将不显著的变量系数压缩至0。
3. 实验过程
3.1 数据集介绍
使用sklearn.datasets.load_boston即可加载相关数据。该数据集是一个回归问题。每个类的观察值数量是均等的,共有 506 个观察,13 个输入变量和1个输出变量。
每条数据包含房屋以及房屋周围的详细信息。其中包含城镇犯罪率,一氧化氮浓度,住宅平均房间数,到中心区域的加权距离以及自住房平均房价等等。
3.2 实验代码
导入波士顿房价数据集,以及设定alpha参数
from sklearn.linear_model import Lasso,Ridge
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np
import mglearn
# 读取数据,并划分训练集和测试集
X,y = mglearn.datasets.load_extended_boston()
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=42)
# 通过设置不同的alpha值建立三个lasso实例
lasso = Lasso().fit(X_train,y_train)
lasso001 =Lasso(alpha=0.01).fit(X_train,y_train)
lasso00001 = Lasso(alpha=0.0001).fit(X_train,y_train)
# 输出三个不同alpha值的结果
print('**********************************')
print("Lasso alpha=1")
print ("training set score::.2f".format(lasso.score(X_train,y_train)))
print ("test set score::.2f".format(lasso.score(X_test,y_test)))
print ("Number of features used:".format(np.sum(lasso.coef_!=0)))
print('**********************************')
print("Lasso alpha=0.01")
print ("training set score::.2f".format(lasso001.score(X_train,y_train)))
print ("test set score::.2f".format(lasso001.score(X_test,y_test)))
print ("Number of features used:".format(np.sum(lasso001.coef_!=0)))
print('**********************************')
print("Lasso alpha=0.0001")
print ("training set score::.2f".format(lasso00001.score(X_train,y_train)))
print ("test set score::.2f".format(lasso00001.score(X_test,y_test)))
print ("Number of features used:".format(np.sum(lasso00001.coef_!=0)))
# 建立岭回归实例
ridge01 = Ridge(alpha=0.1).fit(X_train,y_train)
# 绘制三个lasso和一个岭回归的系数分布结果
plt.figure(figsize = (7,7))
plt.plot(lasso.coef_,'s',label = "Lasso alpha=1")
plt.plot(lasso001.coef_,'^',label = "Lasso alpha=0.01")
plt.plot(lasso00001.coef_,'v',label = "Lasso alpha=0.0001")
plt.plot(ridge01.coef_,'o',label = 'ridge alpha=0.1')
plt.xlabel('Coefficient index')
plt.ylabel('Coefficient magnitude')
plt.ylim(-25,25)
plt.legend(ncol=2,loc=(0,1.05)) 】
plt.show()
3.3 运行结果
)
3.4 结果分析
如图所示,alpha=1时,lasso在训练集和测试集的表现都很差,这表示存在欠拟合。
在减小alpha值为0.1并增加训练次数后,在训练集和测试集中的表现很好。用到了105个特征中的34个,当alpha值降为0.001后,表现出了过拟合。
以上是关于基于LASSO的波士顿房价分析的主要内容,如果未能解决你的问题,请参考以下文章
深度学习实验第四次:Python波士顿房价之构建回归预测模型
机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附源码 超详细)
机器学习岭回归和LASSO回归详解以及相关计算实例-加利福尼亚的房价数据集红酒数据集