西瓜书 1、2章小总结

 本文是笔者研读西瓜书一二章做的一个总结。由于一二章主要在介绍关于机器学习算法的一些重要的基本概念,因此本文基本都是文字形式输出了。

机器学习:关于在计算机上从数据产生模型的算法,即学习算法。有了学习算法,就可以基于提供的经验数据产生模型,在面对新的情况提供相应的判断(预测)。

第一章    一些基本术语的介绍(我自己觉得不太清楚的,比较重要的几点hhh)

学得模型也称为假设,亦可成为学习器;

根据训练数据是否有标记信息(是否有y),学习任务可大致分为“监督学习”和“无监督学习”两大类,其中分类和回归是监督学习的代表,聚类是无监督学习的代表。

使学得的模型更好地适用于新样本数据的能力,称为“泛化能力”;

任何一个有效的机器学习的算法必有其归纳偏好;否则它被假设空间中看似在训练集上“等效”的假设迷惑,无法产生确定的学习结果;

“没有免费的午餐”定理(NFL)

前提:所有“问题”出现的机会相同(所有问题同等重要),实际情况并非如此

无论多聪明的算法和无论多笨拙的算法的期望总误差相等(可以证明)

第二章    模型评估与选择的一些指标

学习器  在训练集上的误差:训练误差(经验误差)

             在新样本上的误差:泛化误差

过拟合:当学习器把“训练样本”学的“太好”,把训练样本自身的一些特点当做了所有潜在样本都有具有的一般性质,导致泛化能力下降

欠拟合:对训练样本的一般性质没学好

评估方法:把样本数据划分为训练集与测试集(尽可能互斥),以测试集的测试误差近似为泛化误差,对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型(也有个调参过程)。

  • 怎么分训练集与测试集?

留出法  交叉验证法  自助法(bootstrapping)

tips:前两个方法划分出来的训练集会比原来的样本数据更小,会引入一些因训练样本规模不同而导致的估计误差;而bootstrap这个方法可以避免这个问题,但这种方法改变了初始数据集的分布,会引入估计误差;因此在初始数据量足够时,前两种方法更常用一些。

  • 怎么衡量模型泛化能力的评价标准?

回归模型:MSE(均方误差)、RMSE(均方根误差)

分类模型:错误率与精度

——关心问题:挑出的西瓜中有多少比例是好瓜?(在所有被预测成的好瓜中多少比例是真的好瓜?)

查准率(准确率)

——关心问题:所有好瓜中有多少比例被挑出来了?(在所有好瓜中被正确的预测为好瓜?)

查全率(召回率 recall)

P-R曲线:查全率为横坐标,查准率为纵坐标

F1:  查准率与查全率的调和平均值

 ROC: 横坐标为假正例率(FPR),纵坐标为真正例率(TPR)

                                           

AUC:ROC曲线下的面积

<think>好的,我现在需要帮助用户找到《机器学习西瓜》第三的代码实现,并且用户特别提到用Python。首先,我得回忆一下第三的内容。西瓜的第三主要是关于线性模型,包括线性回归、对数几率回归(也就是逻辑回归)、线性判别分析(LDA)以及多分类学习等。 接下来,我要考虑用户的需求。用户可能已经看过理论部分,现在需要实际的代码来加深理解或者应用。不过西瓜本身并没有提供完整的代码,通常需要参考南瓜或者其他开源项目,比如Datawhale的南瓜项目,他们可能会有配套的代码实现。 然后,我需要检查提供的引用内容。根据用户给出的引用[2],里面提到了第三的线性模型和类别划分的编码矩阵,还有解码过程。引用[3]提到了第五的神经网络代码,可能不太相关。引用[1]则涉及聚类算法的代码,属于后面的节。所以主要的线索在引用[2]里,但具体代码实现可能需要更多信息。 接下来,我需要确定用户是否有其他资源可用。比如,南瓜通常会有配套的代码,或者一些开源社区如GitHub上的项目。可能需要引导用户去这些地方查找。另外,用户可能不知道南瓜的存在,所以需要提及这一点。 然后,考虑用户可能的深层需求。他们可能想通过代码来实践第三的内容,比如实现线性回归、逻辑回归或者多分类问题。因此,除了直接指出资源的位置,最好也能提供一些简单的示例代码,帮助他们入门。比如,用sklearn实现线性回归或逻辑回归,或者手动编写梯度下降的代码。 另外,用户可能遇到的问题包括数据准备、参数设置、算法理解等,所以示例代码需要简单明了,并附有必要的注释。同时,需要注意代码的正确性,比如在逻辑回归中使用sigmoid函数,处理多分类时的策略如OvR或OvO。 最后,要确保回答结构清晰,分点列出资源链接和示例代码,并提醒用户参考籍的具体页码,如引用中提到的南瓜第56页和西瓜第197页,但第三可能需要不同的页码。不过用户的问题集中在第三,可能需要确认正确的引用页码,但根据现有信息,引用[2]提到了第三,所以可以引用它。 总结步骤: 1. 指出官方代码可能不完整,建议参考南瓜和开源项目。 2. 提供GitHub链接,如Datawhale的南瓜项目。 3. 给出线性回归和逻辑回归的示例代码,使用sklearn和手动实现。 4. 提及多分类学习的实现方法,如OvR和OvO。 5. 添加相关问题,帮助用户深入理解。</think>根据《机器学习》(西瓜)第三“线性模型”的理论内容,以下是代码实现思路及参考资源整理: --- ### 一、第三核心算法及对应代码实现 第三主要包含以下模型,代码实现方式如下: 1. **线性回归** - 手动实现梯度下降法: ```python import numpy as np # 生成数据 X = np.array([[1, 2], [2, 3], [3, 4]]) y = np.dot(X, np.array([1, 2])) + 3 + np.random.normal(0, 0.1, 3) # 梯度下降 w = np.random.randn(2) b = 0 lr = 0.01 for _ in range(1000): y_pred = np.dot(X, w) + b grad_w = np.dot(X.T, (y_pred - y)) / len(y) grad_b = np.mean(y_pred - y) w -= lr * grad_w b -= lr * grad_b print(f"权重: {w}, 偏置: {b}") ``` - 使用 `sklearn` 实现: ```python from sklearn.linear_model import LinearRegression model = LinearRegression().fit(X, y) print(f"权重: {model.coef_}, 偏置: {model.intercept_}") ``` 2. **对数几率回归(逻辑回归)** - Sigmoid函数与交叉熵损失实现: ```python def sigmoid(z): return 1 / (1 + np.exp(-z)) # 二分类逻辑回归梯度下降 X = np.array([[1, 2], [2, 3], [3, 4]]) y = np.array([0, 1, 1]) w = np.random.randn(2) b = 0 for _ in range(1000): logits = np.dot(X, w) + b probs = sigmoid(logits) grad_w = np.dot(X.T, (probs - y)) / len(y) grad_b = np.mean(probs - y) w -= lr * grad_w b -= lr * grad_b ``` - 使用 `sklearn` 实现: ```python from sklearn.linear_model import LogisticRegression model = LogisticRegression().fit(X, y) ``` 3. **线性判别分析(LDA)** ```python from sklearn.discriminant_analysis import LinearDiscriminantAnalysis model = LinearDiscriminantAnalysis().fit(X, y) ``` 4. **多分类学习(OvR/OvO策略)** ```python from sklearn.multiclass import OneVsRestClassifier, OneVsOneClassifier from sklearn.svm import SVC ovr_model = OneVsRestClassifier(SVC()).fit(X, y) ovo_model = OneVsOneClassifier(SVC()).fit(X, y) ``` --- ### 二、官方代码资源 1. **南瓜配套代码** - GitHub仓库地址:[https://github.com/datawhalechina/pumpkin-book](https://github.com/datawhalechina/pumpkin-book) - 第三代码文件通常命名为 `ch03_linear_models.ipynb`,包含线性回归、逻辑回归的推导与实现[^2]。 2. **第三方实现参考** - 线性模型完整实现(含梯度下降可视化):[西瓜线性模型代码示例](https://github.com/Vay-keen/Machine-learning-learning-notes) --- ### 三、关键理论对照 - **编码与解码策略**:多分类问题中,`OneVsRest` 对应“一对其余”(OvR),`OneVsOne` 对应“一对一”(OvO),分类结果通过编码矩阵组合后解码得到最终预测。 - **性能优化**:逻辑回归可通过调整正则化参数(如 `penalty='l2'`)或使用随机梯度下降(`SGDClassifier`)优化。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值