
02-06 普通线性回归(波斯顿房价预测)+特征选择
发布日期:2021-05-09 05:36:33
浏览次数:14
分类:博客文章
本文共 2420 字,大约阅读时间需要 8 分钟。
目录
人工智能从入门到放弃完整教程目录:
普通线性回归(波士顿房价预测)
一、导入模块
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsfrom matplotlib.font_manager import FontPropertiesfrom sklearn.linear_model import LinearRegression%matplotlib inlinefont = FontProperties(fname='/Library/Fonts/Heiti.ttc')
二、获取数据
housing-data.txt
数据下载地址https://pan.baidu.com/s/1SvG0hFxupYA3KQO4fLsP5A
2.1 打印数据
df = pd.read_csv('housing-data.txt', sep='\s+', header=0)df.head()
CRIM | ZN | INDUS | CHAS | NOX | RM | AGE | DIS | RAD | TAX | PTRATIO | B | LSTAT | MEDV | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0.00632 | 18.0 | 2.31 | 0 | 0.538 | 6.575 | 65.2 | 4.0900 | 1 | 296.0 | 15.3 | 396.90 | 4.98 | 24.0 | |
0.02731 | 0.0 | 7.07 | 0 | 0.469 | 6.421 | 78.9 | 4.9671 | 2 | 242.0 | 17.8 | 396.90 | 9.14 | 21.6 | |
0.02729 | 0.0 | 7.07 | 0 | 0.469 | 7.185 | 61.1 | 4.9671 | 2 | 242.0 | 17.8 | 392.83 | 4.03 | 34.7 | |
0.03237 | 0.0 | 2.18 | 0 | 0.458 | 6.998 | 45.8 | 6.0622 | 3 | 222.0 | 18.7 | 394.63 | 2.94 | 33.4 | |
0.06905 | 0.0 | 2.18 | 0 | 0.458 | 7.147 | 54.2 | 6.0622 | 3 | 222.0 | 18.7 | 396.90 | 5.33 | 36.2 |
三、特征选择
3.1 散点图矩阵
使用sns库的pairplot()方法绘制的散点图矩阵可以查看数据集内部特征之间的关系,例如可以观察到特征间分布关系以及离群样本。
本文只绘制了三列(RM、MEDV(标记)、LSTAT)特征和标记之间的联系,有兴趣的可以调用该方法查看其它特征之间的关系。
# 选择三列特征cols = ['RM', 'MEDV', 'LSTAT']# 构造三列特征之间的联系即构造散点图矩阵sns.pairplot(df[cols], height=3)plt.tight_layout()plt.show()
上图可以看出第一行(RM)第二列(MEDV)的特征与标记存在线性关系;第二行(MEDV)第二列(MEDV)即MEDV值可能呈正态分布。
3.2 关联矩阵
使用sns.heatmap()方法绘制的关联矩阵可以看出特征之间的相关性大小,关联矩阵是包含皮尔森积矩相关系数的正方形矩阵,用来度量特征对之间的线性依赖关系。
# 求解上述三列特征的相关系数'''对于一般的矩阵X,执行A=corrcoef(X)后,A中每个值的所在行a和列b,反应的是原矩阵X中相应的第a个列向量和第b个列向量的相似程度(即相关系数)'''cm = np.corrcoef(df[cols].values.T)# 控制颜色刻度即颜色深浅sns.set(font_scale=2)# 构造关联矩阵hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={ 'size': 20}, yticklabels=cols, xticklabels=cols)plt.show()
上图可以看出特征LSTAT和标记MEDV的具有最高的相关性-0.74,但是在散点图矩阵中会发现LSTAT和MEDV之间存在着明显的非线性关系;而特征RM和标记MEDV也具有较高的相关性0.70,并且从散点矩阵中会发现特征RM和标记MEDV之间存在着线性关系。因此接下来将使用RM作为线性回归模型的特征。
四、训练模型
X = df[['RM']].valuesy = df['MEDV'].valueslr = LinearRegression()lr.fit(X, y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
五、可视化
plt.scatter(X, y, c='r', s=30, edgecolor='white',label='训练数据')plt.plot(X, lr.predict(X), c='g')plt.xlabel('平均房间数目[MEDV]', fontproperties=font)plt.ylabel('以1000美元为计价单位的房价[RM]', fontproperties=font)plt.title('波士顿房价预测', fontproperties=font, fontsize=20)plt.legend(prop=font)plt.show()print('普通线性回归斜率:{}'.format(lr.coef_[0]))
普通线性回归斜率:9.10210898118031
使用RANSAC算法之后可以发现线性回归拟合的线与未用RANSAC算法拟合出来的线的斜率不同,可以说RANSAC算法降低了离群值潜在的影响,但是这并不能说明这种方法对未来新数据的预测性能是否有良性影响。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年03月30日 14时03分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Pinpoint agent 手册
2021-05-09
nginx故障分析与记录
2021-05-09
mongodb二进制安装与yum安装
2021-05-09
Hello world
2021-05-09
[转] C++中的namespace
2021-05-09
[转] Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
2021-05-09
[转] C++项目中的extern "C" {}
2021-05-09
Vue.js 学习笔记之三:与服务器的数据交互
2021-05-09
一文读懂Java动态代理
2021-05-09
Tomcat下载安装配置教程(详细)
2021-05-09
ArrayList源码分析笔记
2021-05-09
Linux系统常用命令以及常见问题的解决方法
2021-05-09
C++之指针和引用
2021-05-09
如何只根据日期计算对应的星期数
2021-05-09
完美替代postman的接口测试工具—— apipost
2021-05-09
记某次sql注入绕过ids
2021-05-09
【mybatis-plus】条件查询
2021-05-09
【Git】1. Git概述
2021-05-09
软件评测师笔记(七)—— 测试基础概念
2021-05-09