九种顶流回归算法及实例总结("九大热门回归算法详解与实战案例汇总")
原创
一、线性回归(Linear Regression)
线性回归是回归分析中最基础、最常用的方法。它通过寻找一条直线,令所有样本点到这条直线的垂直距离之和最小。
1.1 算法原理
线性回归模型可以即为:y = wx + b,其中w是权重,b是偏置,y是预测值。通过最小化损失函数(通常是均方误差)来求解w和b。
1.2 实战案例
以波士顿房价数据集为例,预测房价。
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 加载数据
boston = load_boston()
X = boston.data
y = boston.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print("均方误差:", mse)
二、岭回归(Ridge Regression)
岭回归是线性回归的一种改进,通过引入正则化项来防止过拟合。
2.1 算法原理
岭回归的损失函数为:J(w) = ||y - Xw||^2 + α||w||^2,其中α是正则化系数。
2.2 实战案例
使用岭回归对波士顿房价数据集进行回归分析。
from sklearn.linear_model import Ridge
# 创建岭回归模型
ridge_model = Ridge(alpha=1.0)
# 训练模型
ridge_model.fit(X_train, y_train)
# 预测测试集
y_pred_ridge = ridge_model.predict(X_test)
# 计算均方误差
mse_ridge = mean_squared_error(y_test, y_pred_ridge)
print("岭回归均方误差:", mse_ridge)
三、Lasso 回归(Lasso Regression)
Lasso 回归是另一种正则化线性回归,通过引入L1正则化项来压缩一些权重为零,从而实现特征选择。
3.1 算法原理
Lasso 回归的损失函数为:J(w) = ||y - Xw||^2 + α||w||_1,其中α是正则化系数。
3.2 实战案例
使用Lasso回归对波士顿房价数据集进行回归分析。
from sklearn.linear_model import Lasso
# 创建Lasso回归模型
lasso_model = Lasso(alpha=0.1)
# 训练模型
lasso_model.fit(X_train, y_train)
# 预测测试集
y_pred_lasso = lasso_model.predict(X_test)
# 计算均方误差
mse_lasso = mean_squared_error(y_test, y_pred_lasso)
print("Lasso回归均方误差:", mse_lasso)
四、弹性网络(Elastic Net)
弹性网络是岭回归和Lasso回归的组合,通过调整两个正则化项的比例来实现。
4.1 算法原理
弹性网络的损失函数为:J(w) = ||y - Xw||^2 + α(||w||_1 + ||w||_2),其中α是正则化系数。
4.2 实战案例
使用弹性网络对波士顿房价数据集进行回归分析。
from sklearn.linear_model import ElasticNet
# 创建弹性网络模型
elastic_model = ElasticNet(alpha=0.1, l1_ratio=0.5)
# 训练模型
elastic_model.fit(X_train, y_train)
# 预测测试集
y_pred_elastic = elastic_model.predict(X_test)
# 计算均方误差
mse_elastic = mean_squared_error(y_test, y_pred_elastic)
print("弹性网络均方误差:", mse_elastic)
五、决策树回归(Decision Tree Regression)
决策树回归是一种基于树结构的回归方法,通过构建一棵树来预测目标值。
5.1 算法原理
决策树通过选择最优的特征和阈值来分割数据集,递归地构建子树,直到满足停止条件。
5.2 实战案例
使用决策树回归对波士顿房价数据集进行回归分析。
from sklearn.tree import DecisionTreeRegressor
# 创建决策树回归模型
tree_model = DecisionTreeRegressor()
# 训练模型
tree_model.fit(X_train, y_train)
# 预测测试集
y_pred_tree = tree_model.predict(X_test)
# 计算均方误差
mse_tree = mean_squared_error(y_test, y_pred_tree)
print("决策树回归均方误差:", mse_tree)
六、随机森林回归(Random Forest Regression)
随机森林回归是基于决策树的集成学习方法,通过构建多棵决策树并对它们的预测导致进行平均来尽大概降低损耗预测性能。
6.1 算法原理
随机森林通过随机选择特征和样本来训练每棵树,然后对多棵树的预测导致进行平均。
6.2 实战案例
使用随机森林回归对波士顿房价数据集进行回归分析。
from sklearn.ensemble import RandomForestRegressor
# 创建随机森林回归模型
rf_model = RandomForestRegressor(n_estimators=100)
# 训练模型
rf_model.fit(X_train, y_train)
# 预测测试集
y_pred_rf = rf_model.predict(X_test)
# 计算均方误差
mse_rf = mean_squared_error(y_test, y_pred_rf)
print("随机森林回归均方误差:", mse_rf)
七、梯度提升回归(Gradient Boosting Regression)
梯度提升回归是一种基于梯度提升的集成学习方法,通过迭代地训练决策树来最小化损失函数。
7.1 算法原理
梯度提升回归通过迭代地训练决策树,并在每一步尝试降低损失函数的值。
7.2 实战案例
使用梯度提升回归对波士顿房价数据集进行回归分析。
from sklearn.ensemble import GradientBoostingRegressor
# 创建梯度提升回归模型
gb_model = GradientBoostingRegressor(n_estimators=100)
# 训练模型
gb_model.fit(X_train, y_train)
# 预测测试集
y_pred_gb = gb_model.predict(X_test)
# 计算均方误差
mse_gb = mean_squared_error(y_test, y_pred_gb)
print("梯度提升回归均方误差:", mse_gb)
八、赞成向量机回归(Support Vector Regression)
赞成向量机回归是一种基于最大间隔的回归方法,通过找到间隔最大的超平面来预测目标值。
8.1 算法原理
赞成向量机回归通过求解一个二次规划问题来找到最优的超平面。
8.2 实战案例
使用赞成向量机回归对波士顿房价数据集进行回归分析。
from sklearn.svm import SVR
# 创建赞成向量机回归模型
svr_model = SVR()
# 训练模型
svr_model.fit(X_train, y_train)
# 预测测试集
y_pred_svr = svr_model.predict(X_test)
# 计算均方误差
mse_svr = mean_squared_error(y_test, y_pred_svr)
print("赞成向量机回归均方误差:", mse_svr)
九、神经网络回归(Neural Network Regression)
神经网络回归是一种基于人工神经网络的回归方法,通过调整神经元之间的连接权重来预测目标值。
9.1 算法原理
神经网络回归通过前向传播和反向传播来训练网络,直到网络的预测误差约为最小。
9.2 实战案例
使用神经网络回归对波士顿房价数据集进行回归分析。
from sklearn.neural_network import MLPRegressor
# 创建神经网络回归模型
nn_model = MLPRegressor(hidden_layer_sizes=(100,))
# 训练模型
nn_model.fit(X_train, y_train)
# 预测测试集
y_pred_nn = nn_model.predict(X_test)
# 计算均方误差
mse_nn = mean_squared_error(y_test, y_pred_nn)
print("神经网络回归均方误差:", mse_nn)