基本模型 | 类别 |
---|---|
线性模型 | 线性回归、logistic 回归、SVM |
集成学习模型 | (随机森林、GBDT) |
数据预处理 | 数据清洗、特征工程、降维、聚类 |
3.机器学习分类
分类 | 类别 |
---|---|
监督学习(Supervised Learning) | 分类(Classification) ,回归(Regression),排序(Ranking) |
非监督学习(Unsupervised Learning) | 聚类(Clustering),降维(Dimensionality Reduction) , 概率密度估计(density estimation) |
增强学习(Reinforcement Learning) | |
半监督学习(Semi-supervised Learning) | |
迁移学习(Transfer Learning) |
5.常见模型的损失函数和正则项组合
6.机器学习任务的一般步骤
• 确定特征
– 可能是最重要的步骤! (收集训练数据)
• 确定模型
– 目标函数/决策边界形状
• 模型训练:根据训练数据估计模型参数
– 优化计算
• 模型评估:在校验集上评估模型预测性能
• 模型应用/预测
为什么L1正则解是稀疏的? 参考博客
7.线性回归模型
1)模型
–目标函数(损失函数、正则)
•概率解释
• 优化求解
• 模型选择
2)线性回归的目标函数
• 无正则的最小二乘线性回归(Ordinary Least Square,OLS)
通常通过奇异值分解(singular value decomposition,SVD)求解
• L2正则的岭回归(RidgeRegression)模型:
OLS优化求解——梯度下降
梯度下降的基本步骤
• 1.确定学习率η,并初始化参 数值为
• 2. 计算目标函数J(?)在当前参 数值的梯度:
• 3. 梯度下降更新参数:
• 重复以上步骤, 直到收敛 – 目标函数的下降量小于某个阈值
• L1正则的Lasso模型:
3) 线性回归模型求解
– 当数据规模较小时,可直接解析求解
• scikitlearn中的实现采用SVD分解实现
– 当数据规模较大时,可采用随机梯度下降
• Scikitlearn提供一个SGDRegression类
• 岭回归求解类似OLS,采用SVD分解实现
• Lasso优化求解采用坐标轴下降法
8.模型选择
模型评估与模型选择
• 模型训练好后,需要在校验集上采用一些度量准则检查模 型预测的效果
– 校验集划分(train_test_split、交叉验证)
– 评价指标(sklearn.metrics)
• 线性回归模型中的正则参数λ
• OLS中的特征的数目 – 参数搜索范围:网格搜索(GridSearch)
• Scikitlearn将交叉验证与网格搜索合并为一个函数: sklearn.model_selection.GridSearchCV
评价准则
• 模型训练好后,可用一些度量准则检查模型拟合的效果 • 开方均方误差(rooted mean squared error,RMSE):
• 平均绝对误差(mean absolute error,MAE):
• R2score:既考虑了预测值与真值之间的差异,也考虑了问题本身真值之 间的差异(scikitlearn 线性回归模型的缺省评价准则)
• 也可以检查残差的分布
• 还可以打印预测值与真值的散点图
Scikitlearn中的回归评价指标 | 函数 |
---|---|
Regression ‘explained_variance’ | metrics.explained_variance_score |
‘neg_mean_absolute_error’ | metrics.mean_absolute_error |
‘neg_mean_squared_error’ | metrics.mean_squared_error |
‘neg_mean_squared_log_error’ | metrics.mean_squared_log_error |
‘neg_median_absolute_error’ | metrics.median_absolute_error |
‘r2’ | metrics.r2_score |
9.线性回归中的模型选择
• Scikitlearn中的modelselection模块提供模型选择功能
–对于线性模型,留一交叉验证(N折交叉验证,亦称为leave-oneout cross-validation,LOOCV)有更简便的计算方式,因此Scikit learn提供了RidgeCV类和LassoCV类实现了这种方式
– 交叉验证和参数调优GridSearchCV
1)RidgeCV
• RidgeCV中超参数λ用alpha表示 • RidgeCV(alphas=(0.1,1.0,10.0),fit_intercept=True,normali ze=False,scoring=None,cv=None,gcv_mode=None,store_c v_values=False)
from sklearn.linear_model import RidgeCV
alphas = [0.01, 0.1, 1, 10,20, 30, 50, 60, 80,100]
reg = RidgeCV(alphas=alphas, store_cv_values=True) reg.fit(X_train, y_train)
2)LassoCV
• LassoCV的使用与RidgeCV类似
• Scikitlearn还提供一个与Lasso类似的LARS(least angle regression,最小角回归),二者仅仅是优化方法不同,目 标函数相同。
• 当数据集中特征维数很多且存在共线性时,LassoCV更合适。
3)小结:线性回归之模型选择
• 采用交叉验证评估模型预测性能,从而选择最佳 模型
– 回归性能的评价指标
– 线性模型的交叉验证通常直接采用广义线性模型的留
一交叉验证进行快速模型评估
• Scikitlearn中对RidgeCV和LassoCV实现该功能
10.一些概念
1)直方图:
每个取值在数据集中出现的样本数目,可视为概 率函数(PDF)的估计(seaborn可视化工具比较简单)
import seabornas sns
%matplotlibinline(seaborn是基于matplotlib)
• 连续型特征 – sns.distplot(data.MEDV.values, bins=30, kde=False)
• 离散型特征 – sns.countplot(X_train.RAD)
2)离群点
• 离群点:或称奇异点(outlier),指远离大多数样本的样 本点。通常认为这些点是噪声,对模型有坏影响
• 可以通过直方图或散点图发现奇异点 – 直方图的尾巴 – 散点图上孤立的点
• 可以通过只保留某些分位数内的点去掉奇异点 – 如0.5%-99.5%,或>99%
ulimit= np.percentile(train.某特征.values, 99)
train['某特征'].ix[train['某特征']>ulimit] = ulimit
3)散点图
• 可以通过两个变量之间的散点图直观感受二者的相关性
sns.pairplot(data, size=6, x_vars=LSTAT,y_vars=MEDV]
4)相关性
• 相关性可以通过计算相关系数或打印散点图来发现
• 相关系数:两个向量(所有样本在该特征的取值构成一个 向量)x,y之间的线性相关程度