社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

一文彻底搞懂机器学习 - 回归(Regression)

架构师带你玩转AI • 3 月前 • 104 次点击  

回归(Regression)是机器学习中的一种基本方法,其目标是通过分析自变量与因变量之间的关系,建立一个数学模型来预测因变量的值。

线性回归、多项式回归、正则化线性回归是机器学习中常用的回归分析方法。其中线性回归用直线拟合数据关系,多项式回归用曲线拟合复杂关系,正则化线性回归通过加约束来防止模型过于复杂。

Regression

一、线性回归

线性回归(Linear Regression)是什么?线性回归是一种统计方法,用于建模两个或多个变量之间的关系。它假设因变量和自变量之间的关系是线性的 ,并试图找到最小化误差平方和的最佳拟合直线。

如何实现线性回归模型并进行可视化?在Python中实现一个线性回归模型并进行可视化,可以使用scikit-learn库来拟合模型,并使用matplotlib库来进行可视化。

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegressionfrom 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-learnLinearRegression来拟合模型,以及matplotlib来进行可视化。

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegressionfrom 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 npimport matplotlib.pyplot as pltfrom sklearn.linear_model import Ridge, Lasso, ElasticNetfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import make_pipelinefrom 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()

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/176568
 
104 次点击