Scikit-Learn 与 TensorFlow 机器学习实用指南 读书笔记(一)

一、下载数据

下载并解压数据: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)


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值