python房价预测系统前端_python——房价预测案例(完整项目流程)

本文详细介绍了使用Python进行房价预测的项目流程,包括数据检视、创建测试集、数据探索与可视化、数据预处理,以及模型选择和训练。通过数据清洗、特征工程和不同模型的比较,最终选择了随机森林模型并进行了参数调优,测试集误差为0.462982088615。
摘要由CSDN通过智能技术生成

Step 1: 检视源数据集

import numpy as np

import pandas as pd

1.1 读入数据

file=open("D:/python练习/housing.csv")

train_df=pd.read_csv(file)

1.2 检视原数据

train_df.head(5)

image.png

每一行都表示一个街区。共有 10 个属性:经度、维度、房屋年龄中位数、总房间数、卧室数量、人口数、家庭数、收入中位数、房屋价值中位数、离大海距离。

train_df.info()

image.png

可以看出total_bedrooms这一项有缺失值,后面要进行处理。ocean_proximity这一项的数据类型为类别型数据。

train_df.ocean_proximity.value_counts()

image.png

value_counts()方法查看都有什么类型,每个类都有多少街区

train_df.describe()

image.png

画出每个数值属性的柱状图

%matplotlib inline

from matplotlib import pyplot as plt

plt.style.use('ggplot')

train_df.hist(bins=50,figsize=(16,9))

image.png

从柱状图中可以发现以下问题:

1.这些属性的量度不一样,在后面需要进行特征缩放

2.许多柱状图的尾巴过长,对某些机器学习的算法检测规律会变得更难,所以在后面要处理成正态分布。

3.房屋年龄中位数和房屋价值中位数也被设了上限。后者可能是个严重的问题,因为它是你的目标属性(你的标签)。你的机器学习算法可能学习到价格不会超出这个界限。你需要与下游团队核实,这是否会成为问题。如果他们告诉你他们需要明确的预测值,即使超过 500000,你则有两个选项:1)对于设了上限的标签,重新收集合适的标签;2)将这些街区从训练集移除(也从测试集移除,因为若房价超出 500000,你的系统就会被差评)。

4.收入数据经过了缩放处理。

Step 2: 创建测试集

目的:防止数据透视偏差。如果一开始就看过测试集,就会不经意间按照其中的规律选择合适的算法,当再用测试集进行评估时,就会导致结果比较乐观,而实际部署时就比较差了。

from sklearn.model_selection import train_test_split

train_set,test_set=train_test_split(train_df,test_size=0.2,random_state=42)

train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签。test_size:如果是浮点数,在0-1之间,表示样本占比;如果是整数的话就是样本的数量。random_state:是随机数的种子。产生总是相同的洗牌指数;如果没有这个每次运行会产生不同的测试集,多次之后会得到整个数据集。

train_set.head(5)

image.png

不足之处:目前都是采用的纯随机抽样,如果数据量比较小,可能会产生偏差。所以需要关注比较重要的属性,对其进行分层抽样,比如说收入中位数。从直方图中可以看出,大多数的值在2-5(万美元),进行分层抽样时保证每一层都要有足够多的数据,这就意味着,层数不能过多。后面的代码将收入中位数除以1.5(以限制分类的数量),创建收入类别属性,用ceil对值舍入(产生离散的分类),并将大于5的分类归入到分类5。inplace=True原数组内容被改变。

train_df["income_cat"]=np.ceil(train_df.median_income/1.5)

train_df["income_cat"].where(train_df["income_cat"]<5,5.0,inplace=True)

train_df["income_cat"].head(5)

train_df["income_cat

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值