机器学习 波士顿房价预测 Boston Housing

news2024/9/23 21:25:43

目录

一:前言

二:模型预测(KNN算法)

三:回归模型预测比对


一:前言

波士顿房价是机器学习中很常用的一个解决回归问题的数据集

数据统计于1978年,包括506个房价样本,每个样本包括波士顿不同郊区房屋的13种特征信息,

比如:住宅房间数、城镇教师和学生比例等

标签值是每栋房子的房价(千美元);所以这是一个小型数据集,有506*14维

具体步骤包括有

1.加载数据集并获取有效信息

2.划分训练集和测试集

3.对特征做均值方差归一化

4.建立KNN回归模型并预测

相关属性包括有 

No属性字段描述
1CRIM城镇人均犯罪率
2ZN占地面积超过2.5万平方英尺的住宅用地比例
3INDUS城镇非零售业务地区的比例
4CHAS查尔斯河虚拟变量(=1如果土地在河边;否则是0)
5NOX一氧化氮浓度(每1000万份)
6RM平均每居民房数
7AGE在1940年之前建成的所有者占用单位的比例
8DIS与五个波士顿就业中心的加权距离
9RAD辐射状公路的可达性指数
10TAX每10000美元的全额物业税率
11PTRATIO城镇师生比例
12B1000(BK-0.63)^2其中Bk是城镇黑人的比例
13LSTAT人口中地位较低人群的百分数
14MEDV(目标变量/类别属性)以1000美元计算的自有住房的中位数

二:模型预测(KNN算法)

网格模型,超参调优测试

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 加载数据  鸢尾花load_iris
boston_datasets = load_boston()
# 特征数据
boston_data = boston_datasets['data']
# 标签数据
boston_target = boston_datasets['target']
# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(boston_data, boston_target, test_size=0.3, random_state=6)
knn_model = KNeighborsRegressor()
param_list = [
    {
        "n_neighbors": list(range(1, 18)),
        "p": list(range(1, 26)),
        "weights": ['uniform', 'distance']
    }
]

grid = GridSearchCV(knn_model, param_list, cv=4)
grid.fit(X_train, y_train)
print(grid.best_score_)
print(grid.best_params_)
print(grid.best_estimator_)
0.6163962297065405
{'n_neighbors': 5, 'p': 1, 'weights': 'distance'}
KNeighborsRegressor(p=1, weights='distance')

输出结果如上所示:评分0.61很低

n_neighbors:5

p:1

weights:'distance'

KNN模型预测

# 选择算法 -- 有监督的分类问题
# KNN K近邻算法(近朱者赤近墨者黑)
# 创建算法
knn_model = KNeighborsRegressor(n_neighbors=5, p=1, weights='distance')
# 构建基于训练集的模型
knn_model.fit(X_train, y_train)
# 模型评分
score = knn_model.score(X_test, y_test)
print(score)
# 模型预测
predict_y = knn_model.predict(X_test)
print(predict_y == y_test)

预测结果,不尽人意,模型评分本身就低...

对于回归问题,最好图像查看数据,使用模型预测比对

import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 加载数据  鸢尾花load_iris
boston_datasets = load_boston()
# 特征数据
boston_data = boston_datasets['data']
# 标签数据
boston_target = boston_datasets['target']
# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(boston_data, boston_target, test_size=0.3, random_state=6)
# knn_model = KNeighborsRegressor()
# param_list = [
#     {
#         "n_neighbors": list(range(1, 18)),
#         "p": list(range(1, 26)),
#         "weights": ['uniform', 'distance']
#     }
# ]
#
# grid = GridSearchCV(knn_model, param_list, cv=4)
# grid.fit(X_train, y_train)
# print(grid.best_score_)
# print(grid.best_params_)
# print(grid.best_estimator_)

# 选择算法 -- 有监督的分类问题
# KNN K近邻算法(近朱者赤近墨者黑)
# 创建算法
knn_model = KNeighborsRegressor(n_neighbors=5, p=1, weights='distance')
# 构建基于训练集的模型
knn_model.fit(X_train, y_train)
# 模型评分
score = knn_model.score(X_test, y_test)
# print(score)
# 模型预测
predict_y = knn_model.predict(X_test)
# print(predict_y == y_test)

# 模型预测对比
plt.plot(y_test, label='True')
plt.plot(predict_y, 'r:', label='Knn')
plt.legend()
plt.show()

上述实现方法,预测效果较差,下面给出优化 

三:回归模型预测比对

使用SelectKBest方法可以筛选出和标签最相关的K个特征

这里选择和房价最相关的3个特征:

RM、PTRATIO、LSTAT

3-1 加载数据、获取有效信息

from sklearn.datasets import load_boston
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import *
from sklearn.feature_selection import SelectKBest, f_regression  # 挑选出与标签最相关的K个特征
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import *
import numpy as np
import pandas as pd
import joblib

# 1加载数据集并获取有效信息
boston = load_boston()
print(boston.feature_names)
['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']

3-2  特征选择(3个)

# 加载数据集并获取有效信息
boston = load_boston()
# print(boston.feature_names)
# 提取特征数据
boston_data = boston['data']
# 提取标签数据
boston_target = boston['target']
# 特征选择--3个
selector = SelectKBest(f_regression, k=3)
# 3个最相关的特征
X_new = selector.fit_transform(boston_data, boston_target)
print(X_new, X_new.shape)
[[ 6.575 15.3    4.98 ]
 [ 6.421 17.8    9.14 ]
 [ 7.185 17.8    4.03 ]
 ...
 [ 6.976 21.     5.64 ]
 [ 6.794 21.     6.48 ]
 [ 6.03  21.     7.88 ]] (506, 3)

3-3 获取相关特征列的下标 

# 获取相关特征列的下标
x_list = selector.get_support(indices=True).tolist()
# 和标签最相关的k个特征的下标
print(x_list)
[5, 10, 12]

如上,下标结果分别对应:RM、PTRATIO、LSTAT 

3-4  数据集划分

# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(X_new, boston_target, train_size=0.7, random_state=6)
print(x_train, x_train.shape)
[[ 6.567 18.4    9.28 ]
 [ 6.219 20.2   16.59 ]
 [ 7.135 17.     4.45 ]
 ...
 [ 7.163 17.4    6.36 ]
 [ 6.162 14.7    7.43 ]
 [ 5.887 20.2   16.35 ]] (354, 3)

3-5 均值方差归一化 

# 均值方差归一化
standard = StandardScaler()
standard.fit(x_train)
# print(standard)
x_train_std = standard.transform(x_train)
x_test_std = standard.transform(x_test)
print(x_train_std, x_train_std.shape)
[[ 3.99220387e-01 -1.66277168e-03 -4.57295919e-01]
 [-1.01428654e-01  8.13351163e-01  6.11434949e-01]
 [ 1.21637170e+00 -6.35562499e-01 -1.16344778e+00]
 ...
 [ 1.25665380e+00 -4.54448291e-01 -8.84203461e-01]
 [-1.83431514e-01 -1.67696919e+00 -7.27768163e-01]
 [-5.79059349e-01  8.13351163e-01  5.76346658e-01]] (354, 3)

3-6 网格模型 超参调优

# 选择算法、有监督学习 回归问题 
knn_model = KNeighborsRegressor()
parameter_list = [
    {
        'n_neighbors': list(range(1, 11)),
        'weights': ['distance'],
        'p': list(range(1, 6))
    },
    {
        'n_neighbors': list(range(1, 11)),
        'weights': ['uniform'],
    }
]
grid = GridSearchCV(knn_model, parameter_list, cv=7)
grid.fit(x_train_std, y_train)
print(grid.best_score_)
print(grid.best_params_)
print(grid.best_estimator_)
0.7670803829107914
{'n_neighbors': 9, 'p': 1, 'weights': 'distance'}
KNeighborsRegressor(n_neighbors=9, p=1, weights='distance')

3-7 房价预测模型

knn_reg = grid.best_estimator_
y_predict = knn_reg.predict(x_test_std)
print(y_predict)
[20.61413167 25.69014522 26.53431206 22.49276463 22.29361203 20.03067734
 12.30509611 49.31963669 23.8629333  15.66808516 25.43857778 16.71685745
 42.09414818 31.27590939 37.18674079 20.76969738 14.01746504 26.50519941
 18.99827941 13.38236798 14.60131047 29.25983529 21.40346774 23.10192473
 13.69775228 12.05762476 19.16388847 24.68013235 21.7662908  22.02178492
 23.90670944 21.36843821 26.27998708 47.54031662 15.95655019 24.16460747
 14.77397874 24.40052961 19.36083547  9.71063023  9.94329652 12.13796063
 14.58385182  8.40489325 19.66276108 23.48302845 29.40883465 22.48871882
 16.62382774 14.78819327 22.00928403 16.98691657 23.14763138 19.91953996
 38.18357785 32.31782764 16.28642224 26.66384154 14.49653769 19.93626013
 21.0910618  20.90344495 10.13254373 23.95172463 21.171378   12.42604108
 33.99524627 17.80379203 22.95047344 33.63189197 10.25926643 21.23729724
 17.06492846 17.92216224 33.06564366 25.42810344 21.50713277 47.70013793
 12.43358315 22.73541226 18.08351721 19.67990825  9.95820477 34.04765968
 20.38174808 35.46450948  9.76899009 19.70558846 12.76224312 45.96867712
  9.51119918 10.16735441 13.04497719 20.35484349 21.35950966 14.88138344
 23.80386979 17.27987054 22.45650947 11.69187726 20.9008809  24.19265661
 13.84394225 13.92241276 23.26842931  9.80813999 24.78404197 23.17245645
 27.16435427 18.84364355 24.17148621 17.11197019 27.45506657 23.26650882
 19.85980115 25.84685235 18.12905112 19.92929044 47.68624535 19.49631889
 24.15733542  8.91126671 21.86073719 21.01559513 10.37336975 17.89135825
 46.99139357 25.56999325 34.83618654 39.63717439 12.90644525 31.94668966
 11.0268659   8.17437073 19.96818107 20.83755255 20.30338769 15.91087899
 30.91401211 44.45219838 32.84033764 14.92874778 29.6394809  23.25259285
 20.14802167 16.6513891  22.97487837 27.91101101 46.15269019 13.99564029
 27.81227712 21.65462227]

3-8 利用均方根误差判断模型效果

# 利用均方根误差判断模型效果
RSME = np.sqrt(mean_squared_error(y_test, y_predict))
print(RSME)
4.59257494294638

3-9 查看数据 线型图

import matplotlib.pyplot as plt

test_pre = pd.DataFrame({"test": y_test.tolist(),
                         "pre": y_predict.flatten()
                         })
test_pre.plot(figsize=(18, 10))
plt.show()

 

3-10 查看数据 点状图示 

import matplotlib.pyplot as plt

# 预测与实际
plt.scatter(y_test, y_predict, label="test")
plt.plot([y_test.min(), y_test.max()],
         [y_test.min(), y_test.max()],
         'k--',
         lw=3,
         label="predict"
         )
plt.show()

3-11 完整源码分享

from sklearn.datasets import load_boston
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import *
from sklearn.feature_selection import SelectKBest, f_regression  # 挑选出与标签最相关的K个特征
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import *
import numpy as np
import pandas as pd
import joblib

# 1加载数据集并获取有效信息
boston = load_boston()
# print(boston.feature_names)
# 提取特征数据
boston_data = boston['data']
# 提取标签数据
boston_target = boston['target']
# 特征选择--3个
selector = SelectKBest(f_regression, k=3)
# 3个最相关的特征
X_new = selector.fit_transform(boston_data, boston_target)
# print(X_new, X_new.shape)
# 获取相关特征列的下标
x_list = selector.get_support(indices=True).tolist()
# 和标签最相关的k个特征的下标
# print(x_list)
# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(X_new, boston_target, train_size=0.7, random_state=6)
# print(x_train, x_train.shape)
# 均值方差归一化
standard = StandardScaler()
standard.fit(x_train)
# print(standard)
x_train_std = standard.transform(x_train)
x_test_std = standard.transform(x_test)
# print(x_train_std, x_train_std.shape)

# 选择算法、有监督学习 回归问题 
knn_model = KNeighborsRegressor()
parameter_list = [
    {
        'n_neighbors': list(range(1, 11)),
        'weights': ['distance'],
        'p': list(range(1, 6))
    },
    {
        'n_neighbors': list(range(1, 11)),
        'weights': ['uniform'],
    }
]
grid = GridSearchCV(knn_model, parameter_list, cv=7)
grid.fit(x_train_std, y_train)
# print(grid.best_score_)
# print(grid.best_params_)
# print(grid.best_estimator_)

knn_reg = grid.best_estimator_
y_predict = knn_reg.predict(x_test_std)
# print(y_predict)
# 利用均方根误差判断模型效果
RSME = np.sqrt(mean_squared_error(y_test, y_predict))
# print(RSME)

import matplotlib.pyplot as plt

# 预测与实际
plt.scatter(y_test, y_predict, label="test")
plt.plot([y_test.min(), y_test.max()],
         [y_test.min(), y_test.max()],
         'k--',
         lw=3,
         label="predict"
         )
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL - MySQL回表

一、回表概念;现象 回表,顾名思义就是回到表中,也就是先通过普通索引(我们自己建的索引不管是单列索引还是联合索引,都称为普通索引)扫描出数据所在的行,再通过行主键ID 取出索引中未包含的数据…

[附源码]计算机毕业设计Python创新创业管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Trie(Trie字符串统计)【实质就是二维数组 表示 链表】【二维数组的第一行就是 头结点】

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示:重难点✔ 蓝色文字表示&#xff1a…

探索MapReduce

文章目录一,案例分析(一)TopN分析法介绍(二)案例需求二,案例实施(一)准备数据文件(1)启动hadoop服务(2)在虚拟机上创建文本文件&#…

ArcGIS中的OBJECTID、FID 和 OID 的区别!不要傻傻分不清

喜欢就关注我们吧 时常有很多我朋友分不清OBJECTID、FID 和 OID有什么区别,不懂得怎么应用和管理,今天我们来说个明白。 ArcGIS Desktop 产品要求独立表和属性表均具有 ObjectID字段,该字段包含唯一的长整型用于标识每个记录。 此 ID 由 Esri…

第二证券|元宇宙发展规划出炉,3只元宇宙概念股估值创年内新低

本月以来,北上资金加仓23只元国际概念股。 12月15日晚间,浙江省发改委等5部门联合印发《浙江省元国际工业开展举动计划(2023—2025年)》(以下简称《计划》)。《计划》中说到,到2025年&#xff0…

查找外文文献必备网站

查找下载外文文献不仅先要找到文献数据库资源,并且还需要有数据库的文献下载权限,如果你没有文献数据库使用权限就用下面这个方法。 文献党下载器(wxdown.org)有资源有权限,覆盖全科。下面举几个例子,用文…

脑电图分类任务中深度神经网络模型的数据增强:综述2021

Data Augmentation for Deep Neural Networks Model in EEG Classification Task: A Review 脑电图(EEG)的分类是测量神经活动节奏振荡的关键方法,是脑机接口系统(BCI)的核心技术之一。然而,从非线性和非平…

RNA-seq 详细教程:似然比检验(13)

学习内容 应用似然比检验 (LRT) 进行假设检验将 LRT 生成的结果与使用 Wald 检验获得的结果进行比较从 LRT 显著基因列表中识别共享表达谱似然比检验 在评估超过两个水平的表达变化时,DESeq2 还提供似然比检验作为替代方法。被确定为重要的基因是那些在不同因子水平…

Vue基础6

Vue基础6收集表单数据过滤器局部过滤器全局过滤器内置指令v-textv-html使用安全性cookie工作原理v-html不安全案例v-cloak指令v-once指令v-pre指令自定义指令函数式对象式自定义命名组合式全局自定义指令自定义指令总结&#xff1a;收集表单数据 <!DOCTYPE html> <ht…

VMware、linux虚拟机设置网络实现虚拟机与主机网络互通

需要配置三个方面才可以&#xff0c;即&#xff1a;WMware网络配置、windows主机网络配置、虚拟机网络配置。 首先&#xff0c;确认VMware虚拟机设置中配置的网络连接方式为&#xff1a;NAT模式 可以在VMware上方的菜单中找到&#xff1a;虚拟机---->设置&#xff0c;然后…

HC-SR04超声波测距模块介绍

超声波简介 超声波是由机械振动产生的, 可在不同介质中以不同的速度传播, 具有定向性好、能量集中、传输过程中衰减较小、反射能力较强等优点。超声波传感器可广泛应用于非接触式检测方法,它不受光线、被测物颜色等影响, 对恶劣的工作环境具有一定的适应能力, 因此在水文液位测…

毕业设计 - 基于JSP_Servlet校园二手交易平台设计于实现【源码+论文】

文章目录前言一、项目设计1. 模块设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java web 设计项目: 基于JSP/Servlet校园二手交易平台设计于实现 一、项目设计 1. 模块设计 系统完成的主要功能有&#xff1a;用户设置功能、发布信息功能、信息管理功能…

Android中AP和BP概念

AP和BP 大多数的手机都含有两个处理器。操作系统、用户界面和应用程序都在Application Processor(AP)上执行&#xff0c;AP一般采用ARM芯片的CPU。而手机射频通讯控制软件&#xff0c;则运行在另一个分开的CPU上&#xff0c;这个CPU称为Baseband Processor(BP)。 把射频功能放…

《API安全技术与实战》 读书笔记 API的前生今世和API安全的演进

文章目录一、API的前生今世&#xff08;1&#xff09;4中API表现形式&#xff08;2&#xff09;基于技术形式的类型划分的API二、API安全的演进&#xff08;1&#xff09;什么是API安全&#xff08;2&#xff09;常见的API安全漏洞类型一、API的前生今世 &#xff08;1&#x…

Nacos系列——Nacos概述(2.x版本)1-1

Nacos系列——Nacos概述&#xff08;2.x版本&#xff09;1-1前言Nacos概述&#xff08;2.x版本&#xff09;文档地址关键特性服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元数据管理Nacos地图核心概念地域可用区接入点命名空间配置配置管理配置项配置集配置集 ID配…

[阶段4 企业开发进阶] 7. 微服务

文章目录1 微服务1.1 微服务概念1.2 SpringCloud1.3 工程搭建1.4 支付模块构建cloud-provider-payment-80011 微服务 1.1 微服务概念 概念 Microservice architectures are the ‘new normal’. Building small, self-contained, ready to run applications can bring great f…

毕业设计 Stm32家庭气象仪 天气监控系统 - 物联网 单片机 嵌入式

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 DHT11温湿度传感器4.2 MQ135空气质量传感器4.35 部分核心代码6 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩…

安全分析模型自动化调优

安全分析模型自动化调优 MLOps&#xff08;Machine Learning Operations&#xff09;是一种人工智能 的工程实践&#xff0c;是面向机器学习项目的研发运营管理体系 。旨在实现 ML 管道的操作、ML 模型的部署和管理标准化&#xff0c;支持ML 模型的发布、激活、监控、性能跟踪…

Stm32旧版库函数18——读传感器

/******************************************************************************* // // 使用单片机STM32F100C8T6 // 晶振&#xff1a;8.00M // 编译环境 Keil uVision4 // 在3.3V的供电环境下&#xff0c;就能运行 // 波特率 19200 ************************************…