社区所有版块导航
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学习  »  机器学习算法

机器学习——线性回归算法

Python知识驿站 • 2 天前 • 15 次点击  

线性回归是众多回归算法中的基础,它是研究1个或多个自变量对因变量的影响程度及关系的研究方法。

1、算法原理

在线性回归领域,最基础的就是最小二乘法,也是应用最多的。它在sklearn科学计算包中已经有了完整的模型,可以直接使用。这里,我仅简单说明最小二乘法的原理。

图说明了我们期望通过点获取的目标函数y=ax+b。右侧是样本数据集,下面是按照该样本建立的优化模型。到这里,我们只需要找到使得f(a,b)最小的解就行了。到此打住,因为我们不需要再深入理解,我们的目标使用,而不是解题(涉及到高数内容,不是谁都能看懂的)。至于如何计算这里不做公式探讨,毕竟计算机可以帮我们实现,下面就来看看如何用。

2、算法演示

下面使用sklearn的数据集进行演示,如下:

import matplotlib.pyplot as pltimport numpy as npfrom sklearn import datasets, linear_modelfrom sklearn.metrics import mean_squared_error, r2_score
# 加载数据集diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)

数据预处理,并将数据切分为训练和测试数据,如下:

# 使用1个特征(索引位置为2),新增维度diabetes_X = diabetes_X[:, np.newaxis, 2]    # 维度增加是numpy里的内容,还没讲到,不需要理解
# 将特征数据划分为训练数据和测试数据diabetes_X_train = diabetes_X[:-30]diabetes_X_test = diabetes_X[-30:]
# 将结果数据划分为训练数据和测试数据diabetes_y_train = diabetes_y[:-30]diabetes_y_test = diabetes_y[-30:]
# 画训练数据的散点图plt.scatter(diabetes_X_train, diabetes_y_train, color="black")plt.show()

训练数据的散点图,如下:

从散点图上,可以观测到数据是从左下角向右上角的一个走势,具有一定的规律,可以进行线性回归分析。使用sklearn中的LinearRegression()模型进行拟合,如下:

# 创建线性回归模型regr = linear_model.LinearRegression()
# 使用训练数据进行训练regr.fit(diabetes_X_train, diabetes_y_train)
# 模型测试diabetes_y_pred = regr.predict(diabetes_X_test)
# 系数和解决print(f"系数: {regr.coef_[0]:.2f}\n截距: {regr.intercept_:.2f}\n回归方程:y = {regr.coef_[0]:.2f}*x + {regr.intercept_:.2f}")# 均方差,表名数据误差print("MSE: %.2f" % mean_squared_error(diabetes_y_test, diabetes_y_pred)) # 拟合优度检验,使用R^2print("拟合优度R^2: %.2f" % r2_score(diabetes_y_test, diabetes_y_pred))

数据输出结果,如下:

系数: 941.43截距: 153.40回归方程:y = 941.43*x + 153.40MSE: 3035.06拟合优度R^2: 0.41

可以看到,模型使用训练数据拟合的回归方程的均方差为3035.06,拟合优度为0.41,说明其线性相关性较高。那我们再画一个图来比较下:

# 测试数据和回归曲线plt.scatter(diabetes_X_test, diabetes_y_test, color="black")plt.plot(diabetes_X_test, diabetes_y_pred, color="blue", linewidth=2)plt.title(f'formula : $y = {regr.coef_[0]:.2f}*x + {regr.intercept_:.2f}$')plt.show()

回归曲线和测试散点效果图,如下:

经过原理讲解和实例演示,相信小伙伴已经可以使用LinearRegression做回归分析了,期望小伙伴可以用到实际数据分析中。特别的,回归分析是一种有监督学习,在使用中如果样本质量越高,拟合效果越好。

参考文献:

[1] scikit-learn developers.User Guide : Linear Regression v1.5.0 [S/OL].[2024-5-27]

---------知识需要分享,需要传播---------

这里是Python知识驿站,致力于知识传播,让更多人了解Python、使用Python、爱上Python。如果你是一名程序员、业余开发者、IT从业者,或者任何一名对Python感兴趣的人,都可以加入Python知识驿站,让我们一同畅享在知识的海洋中。

---------关注我,获得更多知识---------

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