目录
1.项目概述
数据的有哪些特征类别,将要建立的模型需要预测什么
1.1.划定问题
第一个问题就是项目的商业目标是什么,建立模型不是最终目的,建立模型的目的是公司的收益和将要处理的问题
第二个问题就是现有解决方案的性能,以便对将要建立的模型性能有个大概预期
1.2.选择性能指标
RMSE和MAE都是测量预测值和目标值两个向量距离的方法,有多种测量向量距离,或范式的方法:
欧几里得范数的平方和的根(RMSE),计算对应与e1范数的绝对值之和(MAE),又称为曼哈顿范数,测量列城市中的两点,沿着矩形边形行走的距离
范数的指数越高,就越关注大的值而忽略小的值,这就是RMSE比MAE对异常值更命案,但当异常值是指数分布(类似正太分布),RMSE表现会更高
范数(norm):它常常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小
回归问题的常用性能指标是均方根误差(RMSE),均方根误差测量的是系统预测的标准差
当异常值较多时,可以用到平均绝对误差(MAE,Mean Absolute Error)
1.3.核实假设
最后,最好列出并核对迄今作出的假设,这样可以尽早发现问题,例如,你的系统输出会传入下游机器学习系统,我们的假设会被下游机器学习系统当作输入使用,如果下游系统实际需要的是分类值(高,中,低),这就是你就需要假设分类问题,而不是回归问题
2.获取数据
2.1.创建工作空间
安装相关工具,准备相关初始数据
2.2.下载数据
import os
import tarfile
import pandas as pd
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):
'''在工作空间创建一个目录,下载tar文件,然后解压出csv文件'''
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()
def load_housing_data(housing_path=HOUSING_PATH):
'''读取csv文件'''
csv_path = os.path.join(housing_path, "housing.csv")
return pd.read_csv(csv_path)
2.3.快速查看数据结构及其可视化
data.head()
data.info()
data.value_counts
data.describe
import matplotlib.pyplot as plt
housing.hist(bins=50, figsize=(20,15))
plt.show()
2.4.创建测试集
分割数据:如果查看了测试集,就会根据测试集的规律来选择某个机器学习类型,再当你使用测试集来评估误差时,就会导致过于乐观,而实际部署的系统表现就会差,这称为数据透视偏差。
创建测试集很简单,只是简单从数据集内随机抽取一部分数据即可,一般是数据集的20%,放到一边:
import numpy as np
def split_train_test(data,test_ratio): #scikit-learn提供列此方法
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(housing,0.2)
print(len(train_set),"train +", len(test_set),"test")
16512 train + 4128 test
3.数据探索并可视化数据,发现规律
3.1.查找关联
标准相关系数:standard correlation coeficent,又称为皮尔逊相关系数。使用corr(两类)或corr_matrix(1和其他)方法,相关系数范围是-1~1,1表示正相关,即x大y大,-1表示负相关,x大y小,为0表示没有相关
from pandas.tools.plotting import scatter_matrix #每个属性和其他属性的相关性
attributes = ["median_house_value", "median_income", "total_rooms", "housing_median_age"]
scatter_matrix(housing[attributes], figsize=(12,8))
3.2.特征组合试验
将多个特征组合为一个特征,如将单价和数量组合为总价
data['总价']=data['单价']*data['数量']
4.为机器学习模型学习准备数据
4.1.数据清洗
4.11.首先需要将数据集的标签和样本拆分,使用drop删掉标签
housing=strat_train_set.drop("median_house_value",axis=1)
housing_labels=strat_train_set["median_house_value"]
4.12.大多数机器学习算法不能处理缺失值,因此先创建一个函数来处理特征值缺失
housing.dropna(subset=["total_bedrooms"]) #删除缺失值所在行
housing.drop("total_bedrooms", axis=1) #删除整个属性
median = housing["total_bedrooms"].median()
housing["total_bedrooms"].fillna(median) #填充缺失,0或中位数或平均数
scikit-learn提供列缺失值处理方法Imputer
from sklearn.preprocessing import Imputer
imputer = Imputer(strategy="median") #实例化Imputer
imputer.fit(housing_num) #使用fit方法,将Imputer实例拟合到训练数据
#Imputer计算出了houseing_num样本集所有特征的中位数,现在即将现在只有某个特征存在缺失值,但不能保证其他特征不存在缺失值,所以需要进一步扩充到其他特征,即使用转换器