机器学习实战 第八章 预测数值型数据:回归(Regression)

本文深入探讨回归技术,从线性回归开始,讲解如何找到最佳拟合直线,然后介绍局部加权线性回归(LWLR)以改善欠拟合。接着,讨论缩减方法,包括岭回归、lasso和前向逐步回归,以平衡偏差和误差。最后,分析了在机器学习中权衡偏差与误差的重要性。

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

首先介绍线性回归,然后引入局部平滑技术,更好地拟合数据。接着探讨回归在“欠拟合”情况下的缩减(shrinkage),探讨偏差和方差的概念。

一、用线性回归找到最佳拟合直线

优点:结果已于理解,计算上并不复杂。
缺点:对非线性的数据拟合不好。
使用数据类型:数值型和标称型。

回归方程(regression equation),回归系数(regression weights),求回归系数的过程就是回归。说到回归,一般都是指线性回归(linear regression),还存在非线性回归模型。

假定输入数据存放在矩阵X中,而回归系数存放在向量 w 中,那么对于给定的数据X1,预测结果将会通过Y1=XT1w。现在的问题是,手里有一些x和对应的 y ,如何找到w呢?常用的方法是找到使误差(一般采用平方误差,否则正负误差会相互抵消)最小的 w 。平方误差可写作:

i=1m(yixTiw)2

用矩阵表示还可以写成(YXw)T(YXw),如果对w求导,得到XT(YXw),令其等于零,解出w如下(这里的 w^

在Python中,我们可以使用matplotlib库绘制图形,pandas处理数据,numpy进行数学运算,以及自定义线性回归模型来进行预测。这里是一个简单的例子,假设你有一个名为`abalone_data.csv`的数据集,其中包含鲍鱼年龄以及其他可能影响年龄的因素。 首先,你需要导入所需的库并加载数据: ```python import pandas as pd import matplotlib.pyplot as plt import numpy as np # 加载数据 data = pd.read_csv('abalone_data.csv') ``` 然后,你可以选择一些特征作为输入X,比如壳长、壳高和重量等,年龄作为输出Y: ```python X = data[['length', 'diameter', 'weight']] # 假设长度、直径和重量是特征 y = data['rings'] # 假设rings列是目标变量,即年龄 ``` 接着,创建一个简单的线性回归模型: ```python class LinearRegression: def __init__(self, learning_rate=0.01, n_iterations=1000): self.learning_rate = learning_rate self.n_iterations = n_iterations self.weights = np.zeros(X.shape[1]) self.bias = 0 def predict(self, X): return np.dot(X, self.weights) + self.bias def fit(self, X, y): for _ in range(self.n_iterations): y_pred = self.predict(X) dw = (1 / len(y)) * np.dot(X.T, (y - y_pred)) db = (1 / len(y)) * np.sum(y - y_pred) self.weights -= self.learning_rate * dw self.bias -= self.learning_rate * db ``` 训练模型并进行预测: ```python model = LinearRegression() model.fit(X, y) predictions = model.predict(X) ``` 为了可视化结果,你可以画出实际年龄和预测年龄之间的散点图: ```python plt.scatter(y, predictions) plt.xlabel('Actual Rings') plt.ylabel('Predicted Rings') plt.title('Age Prediction using Simple Linear Regression') plt.show() ``` 分析部分,你可以通过观察散点图和回归线的倾斜程度判断模型的效果。如果大部分点接近直线,说明模型拟合较好;若偏离较大,可能存在过拟合或欠拟合问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值