加州房价预测 [Hands On ML] 2. 一个完整的机器学习项目

文章目录10. 自定义转换器11. 特征缩放12. 转换流水线. 训练模型14. 交叉验证15. 微调模型 16. 分析最佳模型的误差17. 用测试集评估模型18. 启动、监控、维护系统19. 练习
本文为《机器学习实战:基于-Learn和》的读书笔记 。
中文翻译参考
1. 项目介绍
利用加州普查数据,建立一个加州房价模型 。
数据包含每个街区组的人口、收入中位数、房价中位数等指标 。
利用这个数据进行学习,然后根据其它指标,预测任何街区的的房价中位数 。
2. 性能指标
均方根误差(RMSE):
RMSE ? ( X , h ) = 1 m ∑ i = 1 m ( h ( x ( i ) ) ? y ( i ) ) 2 \{RMSE}(\{X}, h)=\sqrt{\frac{1}{m} \sum\{i=1}^{m}\left(h\left(\{x}^{(i)}\right)-y^{(i)}\right)^{2}} RMSE(X,h)=m1?i=1∑m?(h(x(i))?y(i))2?
平均绝对误差(MAE)
MAE ? ( X , h ) = 1 m ∑ i = 1 m ∣ h ( x ( i ) ) ? y ( i ) ∣ \{MAE}(\{X}, h)=\frac{1}{m} \sum\{i=1}^{m}\left|h\left(\{x}^{(i)}\right)-y^{(i)}\right| MAE(X,h)=m1?i=1∑m?∣∣∣?h(x(i))?y(i)∣∣∣?
范数的指数越高,就越关注大的值而忽略小的值 。这就是为什么 RMSE 比 MAE 对异常值更敏感 。但是当异常值是指数分布的(类似正态曲线),RMSE 就会表现很好 。
3. 确定任务类型
是分类?(房子便宜、中等、昂贵)
是回归?(预测房子价格),本任务是回归 。
4. 查看数据
import pandas as pddata = http://www.kingceram.com/post/pd.read_csv("housing.csv")data.info()
RangeIndex: 20640 entries, 0 to 20639Data columns (total 10 columns):longitude20640 non-null float64latitude20640 non-null float64housing_median_age20640 non-null float64total_rooms20640 non-null float64total_bedrooms20433 non-null float64population20640 non-null float64households20640 non-null float64median_income20640 non-null float64median_house_value20640 non-null float64ocean_proximity20640 non-null objectdtypes: float64(9), object(1)memory usage: 1.6+ MB
20433 non-null有缺失数据
data['ocean_proximity'].value_counts()查看 ocean_proximity 特征 有多少种值
<1H OCEAN9136INLAND6551NEAR OCEAN2658NEAR BAY2290ISLAND5Name: ocean_proximity, dtype: int64
data.describe()数字特征统计
data.head()数据前5行
%matplotlib inlineimport matplotlib.pyplot as pltdata.hist(bins=50,figsize=(20,15))直方图
数据有不同的量纲,一些数据左右分布不均匀 。一般将其变为正态分布,一些模型会工作的比较好 。
5. 创建测试集
from sklearn.model_selection import train_test_splittrain_set, test_set = train_test_split(data, test_size=0.2, random_state=1)train_set.info()
Int64Index: 16512 entries, 15961 to 235Data columns (total 10 columns):longitude16512 non-null float64latitude16512 non-null float64housing_median_age16512 non-null float64total_rooms16512 non-null float64total_bedrooms16349 non-null float64population16512 non-null float64households16512 non-null float64median_income16512 non-null float64median_house_value16512 non-null float64ocean_proximity16512 non-null objectdtypes: float64(9), object(1)memory usage: 1.4+ MB
这种随机的切分方法,在数据量小的时候可能会出现,分出来的数据某些特征比例不再是原有的比例,后序预测可能造成误差