构建机器学习项目的流程及对基本回归模型和衍生模型的掌握
一、以线性回归为例使用sklearn构建机器学习项目的完整流程
- 明确项目任务:回归/分类
- 收集数据集并选择合适的特征。
- 选择度量模型性能的指标。
- 选择具体的模型并进行训练以优化模型。
- 评估模型的性能并调参。
1.明确项目任务:回归/分类
任务即为回归
2.搜集数据集并选择合适的特征
import pandas as pd
import numpy as np
from sklearn import datasets
boston = datasets.load_boston()
X = boston.data #使用大写X,X包含多个小x
y = boston.target
features = boston.feature_names
boston_data = pd.DataFrame(X, columns=features)
boston_data["PRICE"] = y
boston_data.head()
3.选择度量模型性能的指标
解释方差得分之前没接触过
4.选择具体的模型并进行训练以优化模型
这里选择线性回归模型
from sklearn import linear_model # 引入线性回归方法
lin_reg = linear_model.LinearRegression() # 创建线性回归的类
lin_reg.fit(X,y) # 输入特征X和因变量y进行训练
print("模型系数:",lin_reg.coef_) # 输出模型的系数
print("模型得分:",lin_reg.score(X,y)) # 输出模型的决定系数R^2
5.评估模型的性能并调参
这里可以通过决定系数看出模型的好坏,不过回归模型没有参数可以调整。
二、基本的回归模型及其衍生模型
基本多元线性回归
线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数
多项式回归
线性回归中,我们假设因变量与特征之间的关系是线性关系,这样的假设使得模型很简单,但是缺点也是显然的,那就是当数据存在非线性关系时,我们使用线性回归模型进行预测会导致预测性能极其低下,因为模型的形式本身是线性的,无法表达数据中的非线性关系。我们一个很自然的想法就是去推广线性回归模型,使得推广后的模型更能表达非线性的关系。
交互项问题
- 两个连续变量构造的交互项
- 两个虚拟变量构造的交互项
- 连续变量与虚拟变量构造的交互项
- 模型低次项的检验必须在高次项(交互项)检验前完成
- 若引入交互项后,即使低次项不显著也要保留
广义可加模型(GAM)
通过一些变换,让原本不服从线性关系的响应变量解释变量,转换成线性关系,广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架,在这个框架中,每一个变量都用一个非线性函数来代替,但是模型本身保持整体可加性。GAM模型不仅仅可以用在线性回归的推广,还可以将线性分类模型进行推广。具体的推广形式是:
线性分类模型的推广主要指的是两类逻辑回归模型。
回归树
树模型的优缺点:
- 树模型的解释性强,在解释性方面可能比线性回归还要方便。
- 树模型更接近人的决策方式。 树模型可以用图来表示,非专业人士也可以轻松解读。
- 树模型可以直接做定性的特征而不需要像线性回归一样哑元化。
- 树模型能很好处理缺失值和异常值,对异常值不敏感,但是这个对线性模型来说却是致命的。
- 树模型的预测准确性一般无法达到其他回归模型的水平,但是改进的方法很多。