机器学习实战(基于Sklearn和tensorflow)第二章学习笔记

机器学习实战 书籍第二章例子学习笔记

书中源码,here文中还有很多扩展知识和更新方法,很值得学习
本文地址here

注:
1.增加CustomLabelBinarizer转换器解决参数传递问题(出现args参数数量错误)
2.在评估数据集some_data报错 因为选取数据object那个对象进行稀疏向量表示时会出现长度不是样本的5维,例如选择了5组数据,原本第一组属性是object应该是[1,0,0,0,0]表示一个值,但是因为选取5组数据使用one-hot编码后样本种类不足5导致第一组属性是object表示是[1,0,0] 那么长度就不一致了,预测会报错。** (5, 14) (1000, 15) (10000, 16) **

主要分为获取数据、数据分析可视化、数据预处理、选择和训练模型、分析模型几个部分。
在这里插入图片描述

获取数据(数据下载 测试集获取)
import os
import tarfile
from six.moves import urllib

DOWNLOAD_ROOT = "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):
    print("download from url : ", housing_url)
    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()

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

注: six.moves 兼容py2 py3
当然如果确认环境 也可以使用
import urllib.request
urllib.request.urlopen(“http://”)

pandas 查看原始数据常用

  • info() 数据简单描述
  • describe() 数值属性摘要 count max min mean std(标准差 数据离散程度)这里的空值会被忽略
  • value_counts() 查看数据基本分类
data.ocean_proximity.value_counts()
data.describe()

%matplotlib inline 
import matplotlib.pyplot as plt
data.longitude.hist(bins = 50, figsize = (4, 3))
plt.show()

创建测试集
测试集创建一次之后避免变化,四种方法:
1.运行一次之后保存测试数据集
2.设定随机种子,例如permutation产生随机数之前运行 np.random.seed(1)使得每次产生的随机数和首次一致(程序重新运行就失效了)
sklearn提供了类似第二种方法函数:
from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(data, test_size=0.2, random_state=42)

3.计算示例的hash 取hash最后一个字节 如果该值小于等于51 即(256的20%)当作测试集
4.数据分层取样 对于数据特征较少,且数据与某属性关联较大
例如书籍上分析预测房价问题,房价和用户收入关联很大。例如用户收入聚集在2~5万,2万10人 3万20人,4万30人,5万30万,大于5万10人。那么收入比例分别是0.1, 0.2, 0.3, 0.3, 0.1,那么纯随机采样可能会出现和样本很大偏差。所以采用分层取样就可以得到和总样本基本一致的分布

#随机数
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_indices = shuffled_indices[:test_set_size]
    train_indices = shuffled_indices[test_set_size:]
    return data.iloc[train_indices], data.iloc[test_indices]
train_set, test_set = split_train_test(data, test_ratio=0.2)
print("train len : ", len(train_set), "  test len : ", len(test_set))

#hash
import hashlib 
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=hashlib.md5):
    ids = data[id_column]
    in_test_set = ids.apply(lambda id_: test_set_check(id_, test_ratio, hash))
    return data.loc[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值