一文彻底搞懂机器学习 - 回归(Regression)
创作时间:
作者:
@小白创作中心
一文彻底搞懂机器学习 - 回归(Regression)
引用
CSDN
1.
https://blog.csdn.net/Everly_/article/details/144260616
回归分析是机器学习中的一种基本方法,主要用于预测和分析变量之间的关系。本文将详细介绍三种常见的回归分析方法:线性回归、多项式回归和正则化线性回归,并通过Python代码实现和可视化展示,帮助读者深入理解这些方法的原理和应用。
一、线性回归
线性回归(Linear Regression)是一种统计方法,用于建模两个或多个变量之间的关系。它假设因变量和自变量之间的关系是线性的,并试图找到最小化误差平方和的最佳拟合直线。
如何实现线性回归模型并进行可视化?
在Python中实现一个线性回归模型并进行可视化,可以使用scikit-learn库来拟合模型,并使用matplotlib库来进行可视化。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# 生成一些示例数据
np.random.seed(0) # 设置随机种子以获得可重复的结果
X = 2 * np.random.rand(100, 1) # 生成100个0到2之间的随机数作为自变量
y = 4 + 3 * X + np.random.randn(100, 1) # 生成因变量,其中加入了随机噪声
# 将数据集拆分为训练集和测试集
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)
# 可视化结果
plt.scatter(X, y, color='blue', label='Data Points') # 绘制数据点
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Regression Line') # 绘制回归线
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Linear Regression')
plt.show()
# 打印模型参数
print(f'Intercept: {model.intercept_[0]}')
print(f'Coefficient: {model.coef_[0][0]}')
二、多项式回归
多项式回归(Polynomial Regression)是线性回归的一种推广,它允许因变量和自变量之间存在非线性关系。通过在传统的线性回归模型中增加变量的高次项(如平方项、立方项等),来捕捉数据中的非线性关系。
如何实现多项式回归模型并进行可视化?
在Python中实现多项式回归模型并进行可视化,可以使用numpy来生成数据和计算多项式特征,scikit-learn的LinearRegression来拟合模型,以及matplotlib来进行可视化。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
# 生成一些示例数据
np.random.seed(0)
X = np.sort(5 * np.random.rand(40, 1), axis=0) # 生成40个0到5之间的随机数并排序作为自变量
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0]) # 生成因变量,其中加入了随机噪声
# 定义多项式的次数
degree = 3
# 创建多项式特征
poly = PolynomialFeatures(degree)
X_poly = poly.fit_transform(X)
# 创建线性回归模型并拟合多项式特征数据
model = LinearRegression()
model.fit(X_poly, y)
# 使用模型进行预测
X_test = np.linspace(0, 5, 100).reshape(-1, 1) # 生成测试数据
X_test_poly = poly.transform(X_test)
y_pred = model.predict(X_test_poly)
# 可视化结果
plt.scatter(X, y, color='blue', label='Data Points') # 绘制数据点
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Polynomial Regression') # 绘制多项式回归曲线
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title(f'Polynomial Regression (degree={degree})')
plt.show()
# 打印模型参数(可选)
# 由于多项式回归的系数较多,这里只打印出来供参考,通常不会直接解释这些系数
print("Model coefficients:", model.coef_)
print("Model intercept:", model.intercept_)
三、正则化线性回归
正则化线性回归(Regularized Linear Regression)是一种用于处理线性回归模型过拟合问题的技术。通过在模型的损失函数中引入额外的惩罚项,限制模型参数的大小,从而减少过拟合的风险。
正则化线性回归类型有哪些?
- 岭回归侧重于通过最小化参数平方和来防止模型过拟合,尤其适用于处理共线性问题;
- Lasso回归则强调稀疏性,通过推动参数变为零来实现特征选择;
- 弹性网络回归结合了岭回归和Lasso回归的特点,平衡了正则化项,既处理过拟合又进行特征选择。
如何实现正则化线性回归模型并进行可视化?
在Python中实现正则化线性回归模型并进行可视化,可以使用scikit-learn库来实现岭回归(Ridge Regression)、Lasso回归以及弹性网络回归(Elastic Net Regression),并使用matplotlib库来可视化结果。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge, Lasso, ElasticNet
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split
# 生成示例数据
np.random.seed(0)
X = 2 * np.random.rand(100, 1) - 1 # 生成-1到1之间的随机数作为自变量
y = 4 + 3 * X + np.random.randn(100, 1) * 0.5 # 生成因变量,加入随机噪声
# 标准化数据(对于Lasso和ElasticNet很重要)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 拆分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# 定义正则化参数
alpha = 1.0
# 创建岭回归模型并拟合数据
ridge = Ridge(alpha=alpha)
ridge.fit(X_train, y_train)
# 创建Lasso回归模型并拟合数据
lasso = Lasso(alpha=alpha)
lasso.fit(X_train, y_train)
# 创建弹性网络回归模型并拟合数据(这里使用l1_ratio=0.5表示L1和L2正则化的混合)
elastic_net = ElasticNet(alpha=alpha, l1_ratio=0.5)
elastic_net.fit(X_train, y_train)
# 使用模型进行预测
X_test_scaled = scaler.transform(X_test) # 注意:测试数据也需要经过相同的标准化处理
y_pred_ridge = ridge.predict(X_test_scaled)
y_pred_lasso = lasso.predict(X_test_scaled)
y_pred_elastic_net = elastic_net.predict(X_test_scaled)
# 可视化结果
plt.scatter(X_test, y_test, color='blue', label='Data Points') # 绘制数据点
plt.plot(X_test, y_pred_ridge, color='red', linewidth=2, label='Ridge Regression') # 绘制岭回归线
plt.plot(X_test, y_pred_lasso, color='green', linewidth=2, label='Lasso Regression') # 绘制Lasso回归线
plt.plot(X_test, y_pred_elastic_net, color='purple', linewidth=2, label='Elastic Net Regression') # 绘制弹性网络回归线
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('Regularized Linear Regression')
plt.show()
热门推荐
LIN和CAN之间的对比优劣
「水肿」怎麼辦?9個常見「水肿原因」,3招自我檢測再告訴妳快速消水肿方法
蓝底照片背景一般用在哪?证件照底色大全
属龙和属猪婚配分析及属相适配性探讨
从《哪吒之魔童闹海》看创新文化——“哪吒”为何诞生在今天
C语言右移如何取出移出来的数
Win11提示“本地安全机构保护已关闭,你的设备可能易受攻击”的解决方法
2-4月淡季出行,这8个目的地,春季去玩正好
慢性荨麻疹奇痒难耐,该如何应对
意大利面和中国面条有啥区别?哪种更营养?
优化CAD显示效果:高效解决图纸显示异常的全面策略
SVG在光伏发电站内无功补偿的选型计算
方脸怎么改善脸型
证件照底色有什么讲究?
多久更新一次薪资扣税计算器的数据
“City不City”火遍网络,感受热梗背后的真实中国
陪护费赔偿标准
香港美食攻略:23家必吃餐厅推荐
基于DBO算法的微电网多目标优化调度研究
史上最严年检?老车强制报废?多方回应:不实
斑秃怎么检查
排解调节负面情绪的有效方法 调节负面情绪的五个方式
全站仪后方交会注意事项详解,请查收!
古代奇人:师旷
如何进行合规的交易操作?这种交易操作有哪些风险防范措施?
探秘《遗传厄运》:恐怖表象下的人性真相
“上坟不带三果,家中不惹灾祸”:解读中国传统祭祀文化中的水果禁忌
如何设计服务器的散热结构以提高其效率和稳定性?
潮汕话里,潮州话、汕头话和揭阳话有什么区别?
如何注重孩子的品德教育(进行品德教育的建议)