一、下载数据

下载并解压数据:housing.tgz

数据地址:https://github.com/ageron/handson-ml/tree/master/datasets/housing

二、读取数据

import pandas as pd

housing=pa.read_csv('./housing.csv')

三、观察数据

head()输出前5个数据和表头




info()输出每个特征的元素总个数,因此可以查看特征是否存在缺失值。还可以查看类型及内存占用情况。

value_counts()统计特征中每个元素的总个数

describe()可以查看实数特征的统计信息(最大值、最小值、平均值、方差、总个数、25%、50%、75%小值)

hist()输出实数域直方图

四、分开训练集和测试集

为了最终验证模型是否具有推广泛化能力,需要分开训练集于测试集,假设将数据集分为80%训练,20%测
试。下面为一种普遍的分开数据集的代码:
import numpy as np

def split_train_test(data,test_ratio): shuffled_indices=np.random.permutation(
len(data)) test_set_size=int(len(data)*test_ratio)
test_indics=shuffled_indices[:test_set_size]
train_indices=shuffled_indices[test_set_size:]return data.iloc[train_indices],
data.iloc[test_indics] train_set,test_set=split_train_test(housing,0.2)
这虽然能正确的分开训练、测试集,但是如果重新运行程序,训练和测试集会不一样。假设在原来模型的基础
上继续训练,则不能保证测试集没有被模型训练过,因此不能验证模型效果。下面有两种方案:
方案一:使用在shuffle之前(即permutation),调用np.random.seed(42),则每次运行shuffle的结果一样(即
训练、测试集一样)。但是如果新增加了一些数据集,则这个方案将不可用。
方案二:为了解决方案一的问题,采用每个样本的识别码(可以是ID,可以是行号)来决定是否放入测试集,
例如计算识别码的hash值,取hash值得最后一个字节(0~255),如果该值小于一个数(20% * 256)则放入


测试集。这样,这20%的数据不会包含训练过的样本。具体代码如下:



import numpy as np

from hashlib import md5
def test_set_check(identifier,test_ratio,hash):
    return hash(np.int64(identifier)).digest()[-1]<256*test_ratio
def split_train_test_by_id(data,test_ratio,id_column,hash=md5):
    ids=data[id_column]
    in_test_set=ids.apply(lambda id_:test_set_check(id_,test_ratio,hash))
    return data.loc[~in_test_set],data.loc[in_test_set]
housing_with_id=housing.reset_index()

train_set,test_set=split_train_test_by_id(housing_with_id,0.2,'index')

实际上,scikit-Learn也提供了相关的分开训练集和测试集的函数

from sklearn.model_selection import train_test_split

train_set, test_set = train_test_split(housing, test_size=0.2, random_state=0)



友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信