七步利用Sklearn实现加州房产价格预测,学习了解机器学习项目的整个流程

本文详述了利用Sklearn进行机器学习项目,特别是预测加州房产价格的过程。步骤包括:导入库、获取数据、数据预处理(如数据分割、特征处理、缺失值填充)、模型训练(线性回归、决策树、随机森林)以及模型调参(网格搜索、随机搜索)。通过K折交叉验证评估模型性能,展示了从数据准备到模型优化的完整流程。
摘要由CSDN通过智能技术生成

一、导入需要用到的库

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import os
import tarfile
from six.moves import urllib

二、编写获取加州房产数据的函数

fetch_housing_data(),获取housing.csv数据,当调用fetch_housing_data(),就会在工作空间创建一个datasets/housing目录, 并且下载housing.tgz,解压housing.tgz


DOWNLOAD_ROOTDOWNLOA  = "https://raw.githubusercontent.com/ageron/handson-ml/master/"
HOUSING_PATH = "datasets/housing"
HOUSING_URL = DOWNLOAD_ROOT + HOUSING_PATH + "/housing.tgz"

def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
    if not os.path.isdir(housing_path):
        os.makedirs(housing_path)
    tgz_path = os.path.join(housing_path, "housing.tgz")
    urllib.request.urlretrieve(housing_url, tgz_path)
    housing_tgz = tarfile.open(tgz_path)
    housing_tgz.extractall(path=housing_path)
    housing_tgz.close()
    
fetch_housing_data()

三、编写读取housing.csv的函数

load_housing_data(),加载加州房产数据

def load_housing_data(housing_path=HOUSING_PATH):
    csv_path = os.path.join(housing_path, "housing.csv")
    return pd.read_csv(csv_path)

housing=load_housing_data()

四、利用Sklearn分割数据,获得训练数据集和测试数据集

(一)利用train_test_split

关于train_test_split常用参数说明(详细可见sklearn文档说明):

test_size : float, int or None, optional (default=0.25)
random_state :用于设置随机数生成器的种子,目的是保证当多次运行此段代码能够得到完全一样的分割结果,常设为42
shuffle:布尔值。默认为True,设为True时代表在分割数据集前先对数据进行洗牌(随机打乱数据集)
stratify:默认为None.当shuffle=True时,才能不为None,如果不是None,则数据集以分层方式拆分,并使用此作为类标签。

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

(二)利用StratifiedShuffleSplit

关于StratifiedShuffleSplit说明(详细可见sklearn文档说明):
这个函数主要是为了用于实现交叉验证(见后续),实现分层方式分割。
其创建的每一组划分将保证每组类比例相同与原数据集中各类的比例保持相同,即第一组训练数据类别比例为2:1,则后面每组类别都满足这个比例 参数说明:
n_splits是将训练数据分成train/test对的组数,可根据需要进行设置,默认为10
(分层方式是指保持原数据集各个类的比例进行分割。比如原来数据集有两类A和B,A:B=5:2,那么在分割后训练数据集和测试数据集中A和B的比例也各自均为5:2。这样利用分层采样可以避免产生严重偏差)
为了进行分层分割,首先我们的数据集应该有类别。假设收入中位数是预测房价中位数非常重要的属性,我们根据多种收入分类。
首先看一下原数据的收入中位数分布
收入中位数分布然后我们对收入中位数进行处理:
(1)首先将每个收入中位数除以1.5(用于限制收入分类的数量),用ceil对值舍入,向上取整(以产生离散的分类)
(2)将所有大于5的收入中位数归入到类别5,小于5的收入中位数保持对应的数值作为其类别(1,2,3,4).关于where的使用见http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.where.html (需要尤其注意它的other参数,对于不满足cond参数的部分的值将变为other参数的值5.0)

housing["income_cat"] = np.ceil(housing["median_income"] / 1.5)
# print (housing["income_cat"])
# print (type(housing["income_cat"]))
housing["income_cat"].where(housing["income_cat"] < 5, 5.0, inplace=True)
# print (housing["income_cat"])

经过处理后的收入中位数分布:
处理后的收入中位数分布

from sklearn.model_selection import StratifiedShuffleSplit
ss
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值