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

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

一、实验概述

实验目标:选择加州房价数据集,基于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'
根据提供的引用内容,我们可以使用线性回归模型来预测加利福尼亚州的房价。以下是使用MATLAB实现线性回归模型的步骤: 1.首先,我们需要准备数据集。可以使用公开的加利福尼亚州房价数据集,该数据集包含了加利福尼亚州各个地区的房价以及一些相关特征,例如房间数、卧室数、人口数等等。可以使用MATLAB自带的数据集加载工具箱来加载数据集。 2.接下来,我们需要对数据集进行预处理。这包括数据清洗、特征选择、特征缩放等等。可以使用MATLAB自带的数据预处理工具箱来完成这些任务。 3.然后,我们需要将数据集分为训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。 4.接下来,我们可以使用MATLAB自带的线性回归工具箱来训练线性回归模型。可以选择不同的损失函数、正则化方法等等来优化模型。 5.最后,我们可以使用训练好的模型来预测新的房价。可以使用MATLAB自带的预测工具箱来完成这个任务。 以下是MATLAB代码示例: ```matlab % 加载数据集 load california_housing_dataset % 数据预处理 X = [ones(size(housing, 1), 1) housing(:, 1:end-1)]; y = housing(:, end); [X, mu, sigma] = zscore(X); y = (y - mean(y)) / std(y); % 划分训练集和测试集 m = size(X, 1); idx = randperm(m); X_train = X(idx(1:round(0.7*m)), :); y_train = y(idx(1:round(0.7*m)), :); X_test = X(idx(round(0.7*m)+1:end), :); y_test = y(idx(round(0.7*m)+1:end), :); % 训练线性回归模型 lambda = 0.1; theta = trainLinearReg(X_train, y_train, lambda); % 预测新的房价 price = [1, 1650, 3] * [0; (theta(2:end) ./ sigma')']; price = price * std(y) + mean(y); % 输出预测结果 fprintf('Predicted price: $%f\n', price); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值