10万+字的机器学习理论笔记&特征工程tips分享,附PDF下载
- 2020 年 4 月 11 日
- 筆記

随着我们在机器学习、数据建模、数据挖掘分析这条发展路上越走越远,其实越会感觉到机器学习理论知识和特征工程的重要性,这里有两本一位好友整理的学习资料,都是满满干货!分别是《machine learning knowledge》和 《Tips of feature engineering》,全文加起来超过10万字!
资料领取方式:
1.扫码关注下方 “SAMshare” 公众号
2.回复关键词1获取机器学习理论知识:MLK
3.回复关键词2获取特征工程:TIPS
SAMshare

? 《machine learning knowledge》内容摘选

目前作者更新的系列文章有12篇,每一篇都相对比较干货的,目录如下:
MLK01 | 机器学习论文搜索利器推荐
MLK02 | 如何解决机器学习树集成模型的解释性问题
MLK03 | 那些常见的特征工程
MLK04 | 机器学习的降维”打击“
MLK05 | 机器学习采样方法大全
MLK06 | 非监督学习最强攻略
MLK07 | 机器学习常见算法优缺点了解一下
MLK08 | 模型评估的一些事
MLK09 | 一文理清深度学习前馈神经网络
MLK10 | 一文理清深度学习循环神经网络
MLK11 | 一文理清集成学习知识点(Boosting&Bagging)
MLK12 | Keras 基础模型调参指南
我们看看当中的一些文章片段:
? 机器学习论文搜索利器推荐

? 树集成模型的解释性问题
目前TREE SHAP可以支持的树集成模型有XGBoost, LightGBM, CatBoost, and scikit-learn tree models,可以看看下面的demo:
import xgboost import shap # load JS visualization code to notebook shap.initjs() """训练 XGBoost 模型,SHAP里提供了相关数据集""" X,y = shap.datasets.boston() model = xgboost.train({"learning_rate": 0.01}, xgboost.DMatrix(X, label=y), 100) """ 通过SHAP值来解释预测值 (同样的方法也适用于 LightGBM, CatBoost, and scikit-learn models) """ explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(X) # 可视化解释性 (use matplotlib=True to avoid Javascript) shap.force_plot(explainer.expected_value, shap_values[0,:], X.iloc[0,:])

# visualize the training set predictions shap.force_plot(explainer.expected_value, shap_values, X)

? 还有很多机器学习基础理论


? 《Tips of feature engineering》内容摘选
大家可以先看看目前更新到的内容明细:

项目目前更新到19节,一般来说是每天一更新,每一节都会有配套的数据集以及代码,下面我们拿几个“锦囊”来看一下!
Tip15:如何使用sklearn的多项式来衍生更多的变量?
关于这种衍生变量的方式,理论其实大家应该很早也都听说过了,但是如何在Python里实现,也就是今天在这里分享给大家,其实也很简单,就是调用sklearn
的PolynomialFeatures
方法,具体大家可以看看下面的demo。
这里使用一个人体加速度数据集,也就是记录一个人在做不同动作时候,在不同方向上的加速度,分别有3个方向,命名为x、y、z。
关键代码
# 扩展数值特征 from sklearn.preprocessing import PolynomialFeatures x = df[['x','y','z']] y = df['activity'] poly = PolynomialFeatures(degree=2, include_bias=False, interaction_only=False) x_poly = poly.fit_transform(x) pd.DataFrame(x_poly, columns=poly.get_feature_names()).head()

就这样子简单的去调用,就可以生成了很多的新变量了。
Tip17:如何把分布修正为类正态分布?
今天我们用的是一个新的数据集,也是在kaggle上的一个比赛,大家可以先去下载一下:

下载地址:
https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data
import pandas as pd import numpy as np # Plots import seaborn as sns import matplotlib.pyplot as plt # 读取数据集 train = pd.read_csv('./data/house-prices-advanced-regression-techniques/train.csv') train.head()

首先这个是一个价格预测的题目,在开始前我们需要看看分布情况,可以调用以下的方法来进行绘制:
sns.set_style("white") sns.set_color_codes(palette='deep') f, ax = plt.subplots(figsize=(8, 7)) #Check the new distribution sns.distplot(train['SalePrice'], color="b"); ax.xaxis.grid(False) ax.set(ylabel="Frequency") ax.set(xlabel="SalePrice") ax.set(title="SalePrice distribution") sns.despine(trim=True, left=True) plt.show()

我们从结果可以看出,销售价格是右偏,而大多数机器学习模型都不能很好地处理非正态分布数据,所以我们可以应用log(1+x)转换来进行修正。那么具体我们可以怎么用Python代码实现呢?
# log(1+x) 转换 train["SalePrice_log"] = np.log1p(train["SalePrice"]) sns.set_style("white") sns.set_color_codes(palette='deep') f, ax = plt.subplots(figsize=(8, 7)) sns.distplot(train['SalePrice_log'] , fit=norm, color="b"); # 得到正态分布的参数 (mu, sigma) = norm.fit(train['SalePrice_log']) plt.legend(['Normal dist. ($mu=$ {:.2f} and $sigma=$ {:.2f} )'.format(mu, sigma)], loc='best') ax.xaxis.grid(False) ax.set(ylabel="Frequency") ax.set(xlabel="SalePrice") ax.set(title="SalePrice distribution") sns.despine(trim=True, left=True) plt.show()

资料领取方式:
1.扫码关注下方 “SAMshare” 公众号
2.回复关键词1获取机器学习理论知识:MLK
3.回复关键词2获取特征工程:TIPS
SAMshare
