一个完整的机器学习流程:
- 明确项目任务:回归/分类
- 收集数据集并选择合适的特征。
- 选择度量模型性能的指标。
- 选择具体的模型并进行训练以优化模型。
- 评估模型的性能并调参。
1. 准备数据
# 使用Boston房价来做本项目
from sklearn import datasets
boston=datasets.load_boston()
X=boston.data
y=boston.target
features=boston.feature_names
boston_data=pd.DataFrame(X,columns=features)
boston_data['Price']=y
boston_data.head()
2. 选择衡量标准
- MSE均方误差:这就是线性回归中最常用的损失函数,线性回归过程中尽量让该损失函数最小。
- MAE平均绝对误差:平均绝对误差能更好地反映预测值误差的实际情况.
-
决定系数:
介于0~1之间,越接近1,回归拟合效果越好,一般认为超过0.8的模型拟合优度比较高。
- 解释方差得分:
sklearn.metrics提供了一系列的评估指标函数。基本上直接调用就能很方便的计算指标了。
https://scikit-learn.org/stable/modules/model_evaluation.html#regression-metrics
选择模型- 线性回归
线性回归的推广
如果数据关系是非线性时,效果会比较差。需要推广后的模型来表达非线性的关系
- 从标准线性表达式 换成多项式
对于多项式的阶数d不能取过大,一般不大于3或者4,因为d越大,多项式曲线就会越光滑,在X的边界处有异常的波动。
使用sklearn.preprocessing.PolynomialFeatures来进行特征的构造。它是使用多项式的方法来进行的,如果有a,b两个特征,那么它的2次多项式为(1,a,b,a^2,ab, b^2)。
PolynomialFeatures有三个参数
degree:控制多项式的度
interaction_only: 默认为False,如果指定为True,那么就不会有特征自己和自己结合的项,上面的二次项中没有a2和b2。
include_bias:默认为True。如果为True的话,那么就会有上面的 1那一项。
from sklearn.preprocessing import PolynomialFeatures
X_arr = np.arange(6).reshape(3, 2)
print("原始X为:\n",X_arr)
poly = PolynomialFeatures(2)
print("2次转化X:\n",poly.fit_transform(X_arr))
poly = PolynomialFeatures(interaction_only=True)
print("2次转化X:\n",poly.fit_transform(X_arr))
-
广义可加模型(GAM):
广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架,在这个框架中,每一个变量都用一个非线性函数来代替,但是模型本身保持整体可加性。GAM模型不仅仅可以用在线性回归的推广,还可以将线性分类模型进行推广。具体的推广形式是:
标准的线性回归模型:
GAM模型框架:
GAM模型的优点与不足:- 优点:简单容易操作,能够很自然地推广线性回归模型至非线性模型,使得模型的预测精度有所上升;由于模型本身是可加的,因此GAM还是能像线性回归模型一样把其他因素控制不变的情况下单独对某个变量进行推断,极大地保留了线性回归的易于推断的性质。
- 缺点:GAM模型会经常忽略一些有意义的交互作用,比如某两个特征共同影响因变量,不过GAM还是能像线性回归一样加入交互项
的形式进行建模;但是GAM模型本质上还是一个可加模型,如果我们能摆脱可加性模型形式,可能还会提升模型预测精度
回归树
建立回归树的过程可以分为:
- 将自变量的特征空间的可能取值分割成J个不重叠的区域
- 对落入同一区域的每个观察值做相同的预测。
如果特征变量与因变量的关系能很好的用线性关系来表达,那么线性回归通常有着不错的预测效果,拟合效果则优于不能揭示线性结构的回归树。反之,如果特征变量与因变量的关系呈现高度复杂的非线性,那么树方法比传统方法更优。
参数:
criterion:{“ mse”,“ friedman_mse”,“ mae”},默认=“ mse”。衡量分割标准的函数 。
splitter:{“best”, “random”}, default=”best”。分割方式。
max_depth:树的最大深度。
min_samples_split:拆分内部节点所需的最少样本数,默认是2。
min_samples_leaf:在叶节点处需要的最小样本数。默认是1。
min_weight_fraction_leaf:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。默认是0。
- 支持向量机回归(SVR)
约束优化问题。(明天再仔细推一下。=。=)
参数:
kernel:核函数,{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, 默认=’rbf’。(后面会详细介绍)
degree:多项式核函数的阶数。默认 = 3。
C:正则化参数,默认=1.0。(后面会详细介绍)
epsilon:SVR模型允许的不计算误差的邻域大小。默认0.1。
模型的方差与偏差。
Bias和Variance分别从两个方面来描述我们学习到的模型与真实模型之间的差距。
Bias是用所有可能的训练数据集训练出的所有模型的输出的平均值与真实模型的输出值之间的差异。
Variance是不同的训练数据集训练出的模型输出值之间的差异。
方差的数学定义:
image.png
方差的含义:方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
偏差的数学定义:
image.png
偏差的含义:偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
image.png
特征的构建
训练误差修正
交叉验证
K折交叉验证:我们把训练样本分成K等分,然后用K-1个样本集当做训练集,剩下的一份样本集为验证集去估计由K-1个样本集得到的模型的精度,这个过程重复K次取平均值得到测试误差的一个估计
从p个特征中选择m个特征,使得对应的模型的测试误差的估计最小。
- 最优子集选择。 但计算量太大
- 向前逐步选择
正则化:
- 岭回归
- lasso
降维:
调参:
- 网格搜索
2.随即搜索