机器学习笔记(通俗易懂)---线性模型(分类)算法介绍(4)---附完整代码

本文介绍了线性模型在回归问题中的应用,包括线性回归和岭回归。线性回归通过最小化均方误差来学习参数,而岭回归引入正则化来防止过拟合。通过调整正则化参数,可以在模型复杂度和泛化性能之间找到平衡。实验结果显示,岭回归在测试集上的表现优于线性回归,尤其是在数据量有限的情况下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习笔记—线性模型(回归)算法介绍(4)—附完整代码

以下都是本人在学习机器学习过程中的一些心得和笔记,仅供参考。


线性模型是在实践中广泛使用的一类模型,被广泛研究。

线性模型利用输入特征的**线性函数(linear function)**进行预测。

1.用于回归的线性模型

  • 对于回归问题,线性模型预测的一般公式如下:

在这里插入图片描述

其中的w[0]是斜率,b是y轴偏移。

  • 下面在一维wave数据集上学习参数w[0]b

In

import  matplotlib.pyplot as plt
import mglearn
mglearn.plots.plot_linear_regression_wave()
plt.show()

Out

w[0]: 0.393906  b: -0.031804

在这里插入图片描述

图为 线性模型对wave数据集的预测结果

w[0]可以看出,斜率应该在0.4左右,在图像中也可以直观地确认这一点。

截距是指预测直线与y轴的交点:比0略小,也可以从图中确认。

用于回归的线性模型可以表示为这样的回归模型:对单一特征的预测结果是一条直线,两个特征的时候是一个平面,或者更高维度(即更多特征)时是一个超平面。

但是将直线的预测结果与KNeighborsRegressor的预测结果进行比较,能够发现直线的预测能力非常受限。

似乎数据的细节都丢失了。

对一维数据得出的观点有些片面,对于有多个特征的数据集而言,线性模型可以非常强大。


2.线性回归(普通最小二乘法)

  • 有许多不同的线性回归模型。这些模型之间的区别在于如何从训练数据中学习参数wb,以及如何控制模型的复杂度。
  • 线性回归也就是普通最小二乘法(OLS,是回归问题最简单也是最经典的线性方法。
  • OLS寻找参数wb,使得对训练集的预测值与真实的回归目标值y之间的均方误差最小。
  • 均方误差是预测值与真实值之差的平方和除以样本数。

PS:线性回归没有参数,这是一个优点,但是也因此无法控制模型的复杂度。

import mglearn
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X,y=mglearn.datasets.make_wave(n_samples=60)
#导入wave数据集
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=42)
#random_state参数指定随机数生成器的种子,使每次拆分的数据集相同
lr = LinearRegression().fit(X_train, y_train)

斜率参数被保存在coef_属性中,而偏移或截距被保存在intercept_属性中:

In

print("lr.coef_:", lr.coef_)
#w(权重或系数)被保存在coef_属性中
print("lr.intercept_:", lr.intercept_)
#b(偏移或截距)被保存在intercept_属性中

Out

lr.coef_: [0.394]
lr.intercept_: -0.031804343026759746

coef_属性和intercept_属性的简单介绍:

coef_intercept_结尾处都有着下划线。其实,在sklearn中总是将从训练数据中得出的值保存在以下划线结尾的属性中。

  • 这是为了将其与其他用户设置的参数区分开。

intercept_属性是一个浮点数,而coef_属性是一个NumPy数组,每个元素对应一个输入特征。


接下来继续看模型在训练集和测试集上的性能:

In

print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Test set score: {:.2f}".format(lr.score(X_test, y_test)))

Out

Training set score: 0.67
Test set score: 0.66

R²约为0.66,这个结果不算好,但是可以发现,训练集和测试集的分数非常接近,表明可能存在欠拟合。


接下来导入波士顿房价数据集,这个数据集有506个样本和105个导出特征:

In

import  matplotlib.pyplot as plt
import mglearn
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
X,y=mglearn.datasets.load_extended_boston()
#导入波士顿房价数据集
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)
#random_state参数指定随机数生成器的种子,使每次拆分的数据集相同
lr = LinearRegression().fit(X_train, y_train)
print(
### 易于理解的《机器学习》(西瓜书)笔记 #### 决策树概述 决策树是一种基于树形结构进行决策的监督学习方法。通过一系列的条件判断,最终到达叶子节点完成分类或回归任务[^1]。 #### 构建决策树的过程 构建一棵决策树是从根节点开始,依据某种特征选择准则不断分裂数据集,创建新的分支直至满足特定终止条件为止。这一过程可以采用递归来实现,使得逻辑清晰明了[^5]。 #### 特征选择的重要性 为了使生成的决策路径尽可能纯净,在每一步都需要挑选最优划分属性。常用的衡量指标有信息增益、基尼指数等,它们帮助确定哪个特性最有利于区分不同类别的样本。 #### 防止过拟合的方法——集成学习之随机森林 单独的一棵决策树可能因为训练过程中偶然因素而变得复杂度过高从而导致过拟合现象发生;为此可以通过建立多个CART(Classification And Regression Trees)并行工作来提高稳定性与准确性。具体做法是在每次抽样时引入一定量噪声干扰以及限制单棵树的最大深度等方式降低个体差异带来的影响[^4]。 #### 偏差-方差权衡原理简介 当评价某个算法的好坏时不仅要考虑其平均表现还要关注波动情况。“偏差-方差分解”理论为我们提供了一个框架用于分析模型误差来源,并指导如何调整参数设置达到最佳效果[^2]。 #### 线性模型的优势特点 尽管非线性关系普遍存在但在很多实际应用场景中简单的线性假设依然能够取得不错的结果。这类模型具备计算效率高、易于理解和解释性强等特点特别适合初学者入门练习使用[^3]。 ```python from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier, plot_tree import matplotlib.pyplot as plt # 加载鸢尾花数据集 data = load_iris() X, y = data.data, data.target # 创建并训练决策树模型 clf = DecisionTreeClassifier(random_state=0) clf.fit(X, y) plt.figure(figsize=(12,8)) plot_tree(clf, filled=True, feature_names=data.feature_names, class_names=data.target_names); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值