加州房价模型(住房价格中位数)

本文使用Python的机器学习库Scikit-Learn对加州房价数据集进行分析,包括数据预处理、特征工程、模型选择(如线性回归、决策树、随机森林)和模型微调,最终找到最佳模型来预测房价。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验概述

实验目标:选择加州房价数据集,基于1990年加州人口普查的数据,添加了一个分类属性,并且移除了一些特征。模型需要从这个数据中学习,从而能够根据其他指标,预测任意区域的房价中位数。

二、获取数据

1.创建工作环境

工作环境选择的Jupyter notebook,使用python3.0版本,安装Python模块:Jupyter、Numpy、Pandas、Matplotlib和Scikit-Learn。

2.下载数据(这里我不会按照网上的教程下载,我是找到了数据集之后直接引用的,这方面还存在不足,还有加强)

import pandas as pd
housing = pd.read_csv("C:/Users/10489/Desktop/datasets/housing/housing.csv")#这里大家就写自己下载好的数据集地址

3.查看数据结构

housing.head()#默认是5行

在这里插入图片描述
每一行都表示一个分区,每一列代表一个属性:经度、维度、房屋年龄中位数、总房间数、卧室数量、人口数、家庭数、收入中位数、房屋价值中位数、大海距离。

housing.info()

在这里插入图片描述
info()方法可以快速查看数据的描述,包括总行数、每个属性的类型和非空值的数量。可以看出来,所有的属性都是数值的,只有第十项大海距离这项不是数值,它是文本。通过上面前五行的表格数据,可以看出其中有的列是相同的、重复的,意味着它可能是一个分类属性,它可以使用value_counts()的方法查看都有什么类型,每个类型有几个分区:

housing["ocean_proximity"].value_counts()

在这里插入图片描述
可以看出有五个类别,每个类别有9139、6551、2658、2290、5个分区。

housing.describe()

在这里插入图片描述
describe()方法展示了数值属性的概括。std表示标准差。25%、50%、75%展示了对应的分位数:每个分位数指明小于这个值,且指定分组的百分比。例如,25%的分区的房屋年龄中位数小于18,而50%的小于29,75%的小于37。

import matplotlib.pyplot as plt
housing.hist(bins=55, figsize=(20, 15))
plt.show()

在这里插入图片描述
这是快速了解数据类型的一种方法,画出每个数值属性的柱状图。纵轴表示了特定范围的实例个数。

4.创建测试集(利用sklearn实现,纯随机采用测试集)

from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(housing, test_size=0.2, random_state=42)

做一个分层处理

import numpy as np
housing["income_cat"] = pd.cut(housing["median_income"], 
                               bins = [0., 1.5, 3.0, 4.5, 6., np.inf], 
                               labels=[1, 2, 3, 4, 5]) 

分层采样:将人群分成均匀的子分组,称为分层,从每个分层取出合适数量的实例,以保证测试集对总人数有代表性。分层不宜过多,这里分了5层。

housing.head()

在这里插入图片描述
income_cat存的是pd.cut之后的标签。

housing["income_cat"].hist()

在这里插入图片描述
显示各个标签的个数。

from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(housing, housing["income_cat"]):
    strat_train_set = housing.loc[train_index]
    strat_test_set = housing.loc[test_index]

按照收入类别划分训练集和测试集。

strat_train_set["income_cat"].value_counts() / len(strat_train_set)

在这里插入图片描述

strat_test_set["income_cat"].value_counts()/len(strat_test_set)

在这里插入图片描述

strat_train_set.drop('income_cat',axis=1,inplace=True)  
strat_test_set.drop('income_cat',axis=1,inplace=True)

将income_cat这个属性删除,使得数据回到最初的状态,这一部分我们只是熟悉一下这个数据集,观察一下数据集,并没有开始搭建模型。

三、可视化数据,观察规律

housing = strat_train_set.copy()

我们要保证我们将测试集放在了一旁,只研究了训练集。这一步呢是做了一个复制,是因为这个数据集很小,所以我们可以在这个数据集上直接进行操作,复制下来,以免损伤训练集。

1.可视化地理数据

housing.plot(kind='scatter',x='longitude',y='latitude'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值