【数据挖掘】模型选择中正则化、交叉验证详解及实战应用(超详细 附源码)

简介: 【数据挖掘】模型选择中正则化、交叉验证详解及实战应用(超详细 附源码)

模型选择

当假设空间含有不同的复杂度的模型时,会面临模型选择(Model Selection)问题。我们希望所选择的模型要与真模型的参数个数相同,所选择的模型的参数向量与真模型的参数向量相近。然而,一味追求提高分类器的预测能力,所选择的模型的复杂度会比真模型要高,这种现象被称为过拟合(Over-fitting)

过拟合指学习时选择的模型所含的参数过多,导致该模型对已知数据预测的很好,但对未知数据预测很差的现象。因此,模型选择旨在避免过拟合并提高模型的预测能力

在模型选择时,不仅要考虑对已知数据的预测能力,还要考虑对未知数据的预测能力

奥卡姆剃刀定律是机器学习选择算法时可参照的标准之一。其含义是:在其他条件一样的情况下,选择简单的那个

该定律的意义在于数据的拟合和低复杂性之间实际上存在着折衷

理论上假设的解决方案越复杂,就越能拟合数据,训练数据误差就会越低(左下图)

泛化数据误差实际是训练数据误差与另一个名为过拟合误差的函数之和

在泛化误差最小得情况下,可获得最佳复杂性

在现实生活中,通常只会获得训练数据误差。但实践表明,如果你不去选择能够使训练数据误差最小化的模型,而是选择复杂性低一点的模型,算法的表现往往会更好

过拟合是机器学习算法性能不佳得主要缘由。这也是在机器学习中应用奥卡姆剃刀定律的原因

模型选择方法主要有正则化和交叉验证方法

(1)正则化

模型选择的典型方法是正则化(Regularization)。正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(Regularizer)或惩罚项(Penalty)。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大,比如,正则化项可以是模型参数向量的范数

正则化符合奥卡姆剃刀(Occam’s razor)原理。奥卡姆剃刀原理应用于模型选择时认为,在所有可能选择的模型中,能够很好地解释已知数据并且尽可能简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率

(2)交叉验证

另一种常用的模型选择方法是交叉验证(Cross Validation)。如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集划分为训练集(Training set)、验证集(Validation Set)和测试集(Test Set)三部分。

训练集用来训练模型,验证集用于模型的选择,测试机则用于最终对学习方法进行评估,在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型,由于验证集有足够多的数据,用它对模型进行选择是有效的

然而在许多实际应用中,数据是不充足的,为了选择好的模型,可以采用交叉验证方法,交叉验证的基本思路是重复的使用数据,把给定数据划分为训练集和测试集,在此基础上进行反复训练,测试和模型选择

1.简单交叉验证

简单交叉验证方法是随机地将已给数据分为训练集和测试集(如70%的数据作为训练集,30%的数据作为测试集),然后用训练集在各种条件下(如不同的参数个数)训练模型在测试集上评价各个模型的测试误差,选出测试误差最小的模型

示例如下

代码如下

from sklearn.model_selection import train_test_split
import numpy as np
X = np.array([[1, 2], [3, 4],[5,6],[7, 8]])
y = np.array([1, 2, 2, 1])
X_train,X_test,y_train,y_test = train_test_split(X,y, test_size=0.50, random_state = 5)
print("X_train:\n",X_train)
print("y_train:\n",y_train)
print("X_test:\n",X_test)
print("y_test:\n",y_test)

2. k-折交叉验证

在k-折交叉验证(k-fold Cross-Validation)中,首先随机地将已给数据划分为k个互不相交的大小相同的子集,然后利用k-1个子集的数据训练模型,利用余下的子集测试模型。将这一过程对可能的k种选择重复进行,最后选出k次评测中平均测试误差最小的模型

示例如下

from sklearn.model_selection import KFold
import numpy as np
X = np.array([[1, 2], [3, 4],[5,6],[7, 8]])
y = np.array([1, 2, 2, 1])
kf = KFold(n_splits=2)
for train_index, test_index in kf.split(X):
      print("Train:", train_index,"Validation:",test_index)
      X_train, X_test = X[train_index], X[test_index]
      y_train, y_test = y[train_index], y[test_index]

3.留一交叉验证

k折交叉验证的特殊情形是k=N,即k设置为元组的个数,称为留一交叉验证(Leave-one-out Cross Validation),往往在数据缺乏的情况下使用

示例如下

from sklearn.model_selection import LeaveOneOut
import numpy as np
X = np.array([[1, 2], [3, 4],[5,6],[7, 8]])
y = np.array([1, 2, 2, 1])
loo = LeaveOneOut()
loo.get_n_splits(X)
for train_index, test_index in loo.split(X):
        print("train:", train_index, "validation:", test_index)

scikit-learn还提供了RepeatedKFold和StratifiedKFold验证方法 前者是针对非平衡数据的分层采样,分层采样就是每一个子集中都保持原始数据集的类别比例

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
5月前
|
机器学习/深度学习 分布式计算 数据挖掘
数据仓库与数据挖掘技术的结合应用
【7月更文挑战第30天】数据仓库与数据挖掘技术的结合应用是现代企业实现高效决策和精准分析的重要手段。通过整合高质量的数据资源,利用先进的数据挖掘技术,企业可以更好地理解市场、客户和业务,从而制定科学的决策和战略。未来,随着技术的不断进步和应用场景的不断拓展,数据仓库与数据挖掘技术的结合应用将会为企业的发展提供更多机遇和挑战。
|
4月前
|
数据采集 自然语言处理 数据可视化
基于python数据挖掘在淘宝评价方面的应用与分析,技术包括kmeans聚类及情感分析、LDA主题分析
本文探讨了基于Python数据挖掘技术在淘宝评价分析中的应用,涵盖了数据采集、清洗、预处理、评论词频分析、情感分析、聚类分析以及LDA主题建模和可视化,旨在揭示淘宝客户评价中的潜在模式和情感倾向,为商家和消费者提供决策支持。
109 0
|
4月前
|
机器学习/深度学习 数据挖掘 Python
【数据挖掘】生成模型和判别模型的区别及优缺点
文章讨论了生成模型和判别模型在数据挖掘中的区别、原理、优缺点,并提供了一些常见的模型示例。
49 0
|
6月前
|
数据采集 数据可视化 数据挖掘
数据挖掘实战:使用Python进行数据分析与可视化
在大数据时代,Python因其强大库支持和易学性成为数据挖掘的首选语言。本文通过一个电商销售数据案例,演示如何使用Python进行数据预处理(如处理缺失值)、分析(如销售额时间趋势)和可视化(如商品类别销售条形图),揭示数据背后的模式。安装`pandas`, `numpy`, `matplotlib`, `seaborn`后,可以按照提供的代码步骤,从读取CSV到数据探索,体验Python在数据分析中的威力。这只是数据科学的入门,更多高级技术等待发掘。【6月更文挑战第14天】
680 11
|
6月前
|
数据采集 机器学习/深度学习 数据可视化
数据挖掘实战:Python在金融数据分析中的应用案例
Python在金融数据分析中扮演关键角色,用于预测市场趋势和风险管理。本文通过案例展示了使用Python库(如pandas、numpy、matplotlib等)进行数据获取、清洗、分析和建立预测模型,例如计算苹果公司(AAPL)股票的简单移动平均线,以展示基本流程。此示例为更复杂的金融建模奠定了基础。【6月更文挑战第13天】
1648 3
|
6月前
|
人工智能 分布式计算 算法
数据挖掘实战随笔更新清单
这是一系列技术博客的摘要,涵盖了多个主题。包括Elasticsearch实战经验、Maxcompute中的Geohash转换和GPS处理、Python环境配置与管理(如Jupyter、Miniforge、Miniconda)、批量接口调用、多进程CSV图片下载、Excel到Markdown转换、Scikit-learn的异常检测(OC-SVM)和模型总结、人工智能领域的图像分类和识别、文本挖掘算法以及数仓相关的行转列处理。所有文章都在持续更新和补充中。
51 2
|
7月前
|
算法 搜索推荐 数据挖掘
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(续)
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(续)