热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ScikitLearn与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个数据和表头

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

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)



推荐阅读
author-avatar
gl君
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有