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

这篇具有很好参考价值的文章主要介绍了机器学习 波士顿房价预测 Boston Housing。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一:前言

二:模型预测(KNN算法)

三:回归模型预测比对


一:前言

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

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

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

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

具体步骤包括有

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

2.划分训练集和测试集

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

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

相关属性包括有 

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

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

波士顿房价预测机器学习,机器学习,算法,python,近邻算法,numpy

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

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()

波士顿房价预测机器学习,机器学习,算法,python,近邻算法,numpy

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

三:回归模型预测比对

使用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()

波士顿房价预测机器学习,机器学习,算法,python,近邻算法,numpy

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()

波士顿房价预测机器学习,机器学习,算法,python,近邻算法,numpy

3-11 完整源码分享文章来源地址https://www.toymoban.com/news/detail-769090.html

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()

到了这里,关于机器学习 波士顿房价预测 Boston Housing的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附源码 超详细)

    数据集和源码请点赞关注收藏后评论区留下QQ邮箱或者私信 线性回归是利用最小二乘函数对一个或多个因变量之间关系进行建模的一种回归分析,这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个变量的称为一元回归,大于一个变量的情况叫做多元回归。

    2024年01月21日
    浏览(51)
  • 机器学习与深度学习——使用paddle实现随机梯度下降算法SGD对波士顿房价数据进行线性回归和预测

    随机梯度下降(SGD)也称为增量梯度下降,是一种迭代方法,用于优化可微分目标函数。该方法通过在小批量数据上计算损失函数的梯度而迭代地更新权重与偏置项。SGD在高度非凸的损失表面上远远超越了朴素梯度下降法,这种简单的爬山法技术已经主导了现代的非凸优化。

    2024年02月03日
    浏览(57)
  • 多元线性回归的python代码实现(基于sklearn的波士顿房价boston数据集为例)

    基于sklearn自带数据集波士顿房价数据集进行多元线性回归算法代码实现,其数据集包括13个特征向量,共计506个样本集。 本文代码实现步骤如下: 1. 获取数据集 2. 数据集切分,老规矩,80%训练,20%测试 3. 数据预处理(本用例尝试过归一化处理,但发现效果不好,不是每一个

    2024年02月06日
    浏览(51)
  • 机器学习(线性回归实训)------波士顿房价

    1.机器学习 机器学习是人工智能 (AI) 和计算机科学的分支,专注于使用数据和算法来模仿人类学习的方式,逐渐提高其准确性。机器学习是不断成长的数据科学领域的重要组成部分。 通过使用统计方法,对算法进行训练,以进行分类或预测,揭示数据挖掘项目中的关键洞察

    2024年02月06日
    浏览(53)
  • python-机器学习-波士顿房价回归分析

            以波士顿房价数据集为对象,理解数据和认识数据,掌握 梯度下降法 和 回归分析 的初步方法,掌握 模型正则化 的一般方法,对回归分析的结果解读。         波士顿房价数据集是20世纪70年代中期波士顿郊区房价的中位数,统计了当时城市的13个指标与房价

    2024年02月06日
    浏览(33)
  • 计算机视觉学习笔记(二)---传统神经网络之波士顿房价预测

      本文承接pytorch学习笔记(一),以波士顿房价预测为例演示利用pytorch搭建一个简单的传统神经网络   数据集为波士顿房价数据,预测目标为MEDV(标签),其余变量均为特征。由于是csv格式可以直接采用pandas包下的read_csv读取   观察到在输入的数据中,有的特征普遍

    2024年02月04日
    浏览(48)
  • python 波士顿房价预测

    数据集地址:Index of /ml/machine-learning-databases/housing (uci.edu) 数据集中共有506条样本数据,每条样本包含了13个影响房价的特征。 数据集格式 np.fromfile()  读取数据没有数据类型和数据的形状。所以这里使用了data.reshape()重新变换成原始的形状。 (7084,) (506, 14) (14,) [6.320e-03 1.800e+

    2023年04月08日
    浏览(40)
  • 机器学习基础10-审查回归算法(基于波士顿房价的数据集)

    上一节介绍了如何审查分类算法,并介绍了六种不同的分类算法,还 用同一个数据集按照相同的方式对它们做了审查,本章将用相同的方式对回归算法进行审查。 在本节将学到: 如何审查机器学习的回归算法。 如何审查四种线性分类算法。 如何审查三种非线性分类算法。

    2024年02月11日
    浏览(38)
  • paddle实现波士顿房价预测任务

    要点: 参考官方案例 飞桨PaddlePaddle-源于产业实践的开源深度学习平台 1 加载飞桨框架的相关类库 飞桨支持两种深度学习建模编写方式,更方便调试的动态图模式和性能更好并便于部署的静态图模式。 动态图模式(命令式编程范式,类比Python):解析式的执行方式。用户无

    2023年04月14日
    浏览(44)
  • 实验 09 线性回归与波士顿房价预测

    掌握机器学习的基本概念 掌握线性回归的实现过程 应用LinearRegression实现回归预测 知道回归算法的评估标准及其公式 知道过拟合与欠拟合的原因以及解决方法 Jupter Notebook 人们在生活中经常遇到分类与预测的问题,目标变量可能受多个因素影响,根据相关系数可以判断影响因

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包