笔记-端到端的机器学习项目

机器学习实战 第二章 端到端的机器学习项目

真实数据

性能指标

  • RMSE(均方根误差)
    68-95-99.7规则
    回归任务首选性能指标
  • 平均绝对误差(MAE)

RMSE对应欧几里得范数,||-||2
MAE对应||-||1,曼哈顿距离

范数指数越高,越关注大的价值,忽视小的价值

下载数据

  • os.path.join()
    用法:将多个路径组合后返回
    语法*:os.path.join(path1[,path2[,path3[,…[,pathN]]]])
    返回值:将多个路径组合后返回
    注意:第一个绝对路径之前的参数将会被忽略

  • os.makedirs()
    参数:exist_ok

  • six
    Six is a Python 2 and 3 compatibility library. It provides utility functions for smoothing over the differences between the Python versions with the goal of writing Python code that is compatible on both Python versions. See the documentation for more information on what is provided.

  • urllib.urlretrieve(url[, filename[, reporthook[, data]]])
    参数说明:
    url:外部或者本地url ,url中不要含有中文,好像会出错。
    filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
    reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
    data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。

  • pd.read_csv()

快速查看数据结构

  • head()
    查看前五行数据

  • info()
    简单描述,总行数,类型,非空值

  • value_count()
    分类统计

  • describe()
    属性摘要
    std 标准差

  • hist()
    绘制每个属性的直方图

  • plt
    matplot.pyplot
    绘图库

创建测试集

  • 数据窥探偏误
    data snooping bias

  • numpy.random.permutation
    随机产生一个序列,或是返回一个排列范围

  • 随机切片时设置种子
    np.random.seed(42)

  • 设置标识符决定是否进入测试集

  • sklearn的切分数据集函数
    sklearn.model_selection.train_test_split()

  • hash值做标志

1
2
def test_set_check(identifier, test_ratio, hash=hashlib.md5):
return hash(np.int64(identifier)).digest()[-1] < 256 * test_ratio
  • 分层抽样

  • sklearn.model_selection.StratifiedShuffleSplit()
    参数 n_splits是将训练数据分成train/test对的组数,可根据需要进行设置,默认为10
    参数test_size和train_size是用来设置train/test对中train和test所占的比例。

将地理数据可视化

  • data.copy()
    数据复制

  • plot()
    scatter 散点图

1
2
3
4
5
housing.plot(kind="scatter", x="longitude", y="latitude", alpha=0.4,
s=housing["population"]/100, label="population", figsize=(10,7),
c="median_house_value", cmap=plt.get_cmap("jet"), colorbar=True,
sharex=False)
plt.legend()

plt.get_cmap()
https://matplotlib.org/tutorials/colors/colormaps.html

  • np.linspace
    返回指定范围内的指定数量的数值

  • 设置colorbar label

1
cbar.ax.set_yticklabels(["$%dk"%(round(v/1000)) for v in tick_values], fontsize=14)

寻找相关性

  • corr()
    计算标准相关系数(皮尔逊相关系数)

  • sort_values(ascending=False)
    降序

  • scatter_matrix()
    绘制每个属性相对其他属性的相关值

试验不同属性组合

数据清理

  • dropna(subset)
  • isnull().any()
    判断哪些列存在缺失值
  • drop()
    执行时创建数据副本 不影响原数据
  • fillna()
  • imputer
    计算数字 SimpleImputer(strategy)
    结果存储在statistics_变量中
    X=imputer.transform() X为numpy数组
    pd.DataFrame(X,columns,index)

处理文本和分类属性

  • LabelEncoder
    fit_transform()应用
    ordinal_encoder.categories_属性查看映射关系 (书中为classes_)
1
from sklearn.preprocessing import OrdinalEncoder
  • OneHotEncoder
    返回稀疏矩阵
    toarray()转换
1
from sklearn.preprocessing import OneHotEncoder

自定义转换器

  • duck typing
    对象的类型不再由继承等方式决定,而由实际运行时所表现出的具体行为来决定
    创建一个类,实现fit、transform、fit_transform方法
  • FunctionTransformer

特征缩放

  • 最小-最大缩放(归一化缩放)
    是最终范围在0-1
    sklearn中的MinMaxScaler
  • 标准化
    减去平均值,再除以方差

转换流水线(pipeline)

  • ColumnTransformer

训练评估训练集

  • 线性回归
1
from sklearn.linear_model import LinearRegression
  • 决策树回归
    DecisionTreeRegressor
1
2
3
4
from sklearn.tree import DecisionTreeRegressor

tree_reg = DecisionTreeRegressor(random_state=42)
tree_reg.fit(housing_prepared, housing_labels)

使用交叉验证

1
from sklearn.model_selection import cross_val_score

网格搜索

  • GridSearchCV

随机搜索

  • RandomizedSearchCV

分析最佳模型及其错误

  • best_estimator_.feature_importances_

通过测试集评估系统

test

  • np.argpartition