深度学习模型在训练集上很好而在测试集表现得不好而拟合次数并不多_机器学习(一)之监督学习模型总结...

本文深入探讨了多种监督学习模型,包括K近邻、线性模型、朴素贝叶斯、决策树及其集成、支持向量机和神经网络。通过分析模型的优缺点、参数调优,以及训练与测试集的表现,帮助读者理解如何在不同场景下选择合适的模型。特别强调了模型复杂度与泛化性能的关系,以及防止过拟合的策略。
摘要由CSDN通过智能技术生成

原文链接:https://blog.csdn.net/snail9610/article/details/104764985

全文2万多字,建议收藏!!!


0 本文介绍1 K近邻     1.1 何为K近邻     1.2 构建K近邻—分类     1.3 KNeighborsClassifier     1.4 构建K近邻—回归     1.5 优点、缺点和参数 2 线性模型     2.1 线性回归     2.2 岭回归Ridge     2.3 Lasso回归     2.4 用于分类的线性模型—logistic/SVC     2.5 用于多分类的线性模型     2.7 优点、缺点、参数 3 朴素贝叶斯分类器     3.1 特点     3.2 实现     3.3 特征计算方式     3.4 优点、缺点和参数 4 决策树     4.1 构造决策树     4.2 控制决策树的复杂度     4.3 分析决策树     4.4 树的特征重要性     4.5 优点、缺点和参数 5 决策树集成     5.1 随机森林     5.2 梯度提升回归树(梯度提升机) 6 核支持向量机     6.1 线性模型与非线性特征     6.2 核技巧     6.3 对SVM的理解     6.4 SVM调参     6.5 数据预处理     6.6 优点、缺点 7 神经网络     7.1 简单神经网络模型     7.2 神经网络构建和调参     7.3 优点、缺点 8 监督学习模型的选择原则

0 本文介绍

本文根据Andreas C.Muller的《Introduction to Machine Learning with Python》和西瓜书,整理了常见的监督学习模型。本文不讲解复杂的数学理论,涉及到了K近邻、线性模型、朴素贝叶斯分类器、决策树、随机森林、梯度提升回归树、SVM、MLP,以及监督学习模型的选择原则,全文2万多字, 后续还会进一步补充 。 在后面的推送中会记录机器学习数学推导、无监督学习等机器学习内容,Kaggle竞赛等竞赛。

1 K近邻

1.1 何为K近邻

KNN 算法可以说是最简单的机器学习算法,构建和预测都非常简单。构建模型只需要保存训练数据集即可。想要对新数据点做出预测,算法会在训练数据集中找到最近的数据点,也就是它的“最近邻”。   一个邻居: KNN算法最简单的就是一个最近邻,也就是与我们想要预测的数据点最近的训练数据点。预测结果就是这个训练数据点的已知输出。 K个邻居: 在考虑多于一个邻居的情况时,我们用 “投票法”(voting) 来指定标签。也就是说,对于每个测试点,我们数一数多少个邻居属于类别0,多少个邻居属于类别1。然后将出现次数更多的类别(也就是k 个近邻中占多数的类别)作为预测结果。

1.2 构建K近邻—分类

在scikit-learn中构建K近邻十分简单,只需要导入类并将其实例化即可。这时可以设定参数,比如邻居的个数。
 from sklearn.neighbors import KNeighborsClassifierclf = KNeighborsClassifier(n_neighbors=optional number)clf.fit(X_train, y_train)clf.predict(X_test)print("Test set accuracy: {:.2f}".format(clf.score(X_test, y_test)))

1.3 KNeighborsClassifier

可以进行可视化,以查看决策边界(decision boundary),即算法对类别0 和类别1 的分界线。 模型复杂度和邻居的关系:
  • 使用单一邻居绘制的决策边界紧跟着训练数据
  • 随着邻居个数越来越多,决策边界也越来越平滑
  • 更平滑的边界对应更简单的模型,使用更少的邻居对应更高的模型复杂度,而使用更多的邻居对应更低的模型复杂度
  • 极端情况:邻居个数等于训练集中所有数据点的个数,那么每个测试点的邻居都完全相同(即所有训练点),所有预测结果也完全相同即训练集中出现次数最多的类别。
模型复杂度和泛化能力之间的关系:

d61c7c6dcb8311eda7e12137d20f3262.png

监督学习模型都是符合这张图的。仅考虑单一近邻时,训练集上的预测结果十分完美。但随着邻居个数的增多,模型变得更简单,训练集精度也随之下降。单一邻居时的测试集精度比使用更多邻居时要低,这表示单一近邻的模型过于复杂。与之相反,当考虑10 个邻居时,模型又过于简单,性能甚至变得更差。最佳性能在中间的某处。

1.4 构建K近邻—回归

利用单一邻居的预测结果就是最近邻的目标值。在使用多个近邻时,预测结果为这些 邻居的平均值 。 用于回归的k 近邻算法在scikit-learn 的KNeighborsRegressor 类中实现。其用法与KNeighborsClassifier 类似:
 from sklearn.neighbors import KNeighborsRegressorreg = KNeighborsRegressor(n_neighbors=3)print("Test set R^2: {:.2f}".format(reg.score(X_test, y_test))
  对于回归问题,score是决定系数R^2,是回归模型预测的优度度量,位0到1之间。R^2等于1 对应完美预测,R^2 等于0 对应常数模型,即总是预测训练集响应(y_train)的平均值。

1.5 优点、缺点和参数

通常,KNeighbors 分类器有2 个重要参数:邻居个数与数据点之间距离的度量方法。在实践中,使用较小的邻居个数(比如3 个或5 个)往往可以得到比较好的结果。scikit-learn默认使用欧式距离。
  • KNN的优点之一就是模型很容易理解,通常不需要过多调节就可以得到不错的性能
构建最近邻模型的速度通常很快,但如果训练集很大(特征数很多或者样本数很大),预测速度可能会比较慢。
  • 构建最近邻模型的速度通常很快,但如果训练集很大(特征数很多或者样本数大),预测速度可能会比较慢。
  • 对于有很多特征(几百或更多)的数据集往往效果不好,对于大多数特征的大多数取值都0的数据集(所谓的稀疏数据集)来说,这一算法的效果尤其不好。
  Tips: 虽然k 近邻算法很容易理解,但由于预测速度慢且不能处理具有很多特征的数据集,所以在实践中往往不会用到。而线性模型则没有这两个缺点。

2 线性模型

2.1 线性回归

线性回归或者普通最小二乘法(ordinary least squares,OLS) 均方误差(mean squared error)是预测值与真实值之差的平方和除以样本数。线性回归没有参数,这是一个优点,但也因此无法控制模型的复杂度。 Tips:
  1. 注意到了coef_ 和intercept_ 结尾处奇怪的下划线。scikit-learn总是将从训练数据中得出的值保存在以下划线结尾的属性中。这是为了将其与用户设置的参数区分开。
  2. 训练集和测试集上的分数非常接近(特别是都非常低时)。这说明可能存在欠拟合,而不是过拟合。
  3. 训练集和测试集之间的性能差异是过拟合的明显标志,因此我们应该试图找到一个可以控制复杂度的模型。

2.2 岭回归Ridge

  1. 预测公式与普通最小二乘法相同。(同)
  2. 对系数(w)的选择不仅要在训练数据上得到好的预测结果,而且还要拟合附加约束。(异)
  3. 我们还希望系数尽量小。换句话说,w 的所有元素都应接近于 0。直观上来看,这意味着每个特征对输出的影响应尽可能小(即斜率很小),同时仍给出很好的预测结果。这种约束是所谓正则化(regularization)的一个例子。
  4. 正则化是指对
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值