机器学习第二篇---线性回归算法

目录

一、线性回归算法是什么

二、一元线性回归和多元线性回归

2.1一元线性回归:

2.2.多元线性回归:

三、Python实现线性回归算法

3.1:使用到的库和函数

3.2代码实现一般流程(详细案例背景见第五点)

四、多元线性回归的案例(糖尿病检测)

4.1:csv数据集(测试集/训练集):

4.2:代码实现:

五、总结

ps.启发性问题


一、线性回归算法是什么


线性回归(Linear Regression)是一种基本的回归分析方法,目的是通过数据集中的自变量(特征)来预测因变量(目标)。线性回归假设目标变量与自变量之间存在线性关系,模型的目标是通过调整权重(系数)来最小化预测值与实际值之间的差距。
在一元线性回归中,假设目标变量(y)与一个自变量(x)之间有线性关系:

其中:

1.(y) 是因变量(预测目标),
2.(x) 是自变量(输入特征),
3.(a) 是回归系数(斜率),
4.(b) 是截距。

在多元线性回归中,目标变量与多个自变量之间存在线性关系:

这里有多个自变量((x1, x2, …, xn)),相应的回归系数((a1, a2, …, an))表示每个自变量对因变量的影响。


二、一元线性回归和多元线性回归

2.1一元线性回归:


一元线性回归模型仅涉及一个自变量,用来预测一个因变量。模型的形式是:

通过拟合数据,得到系数 (a) 和截距 (b),进而预测目标变量。


2.2.多元线性回归:


多元线性回归涉及多个自变量,能够捕捉更多的复杂关系。模型的形式是:

该模型适用于具有多个特征(变量)的数据集,通常用于预测多个特征影响下的因变量。

三、Python实现线性回归算法


在Python中,我们可以使用scikit-learn库来实现线性回归模型。pandas库则帮助我们处理数据,特别是读取CSV文件,方便数据的操作和处理。


3.1:使用到的库和函数

import pandas as pd
from sklearn.linear_model import LinearRegression

(1)pandas库:用于数据处理,读取CSV文件并进行数据清洗。


pd.read_csv():从CSV文件读取数据。
DataFrame.corr():计算相关系数矩阵。


(2)sklearn.linear_model.LinearRegression:用于实现线性回归模型。


fit():用来训练线性回归模型,基于数据集中的特征和目标变量。
score():用于评估模型的好坏,输出 (R^2) 值。
predict():用于根据训练好的模型对新的数据进行预测。

3.2代码实现一般流程(详细案例背景见第五点)

#第零步:导入相关库和函数

import pandas as pd
from sklearn.linear_model import LinearRegression

#第一步:数据导入和数据预处理

# 导入数据
data = pd.read_csv("多元线性回归.csv", encoding='gbk', engine='python') 
 # 读取CSV文件,返回DataFrame格式的数据

#这个案例数据集已经处理好了,直接使用,有的案例需要numpy或pandas库中的方法或函数预数据处理

#打印相关系数矩阵,查看各个特征之间的相关性
#corr = data[["体重", "年龄", "血压收缩"]].corr()
#print("相关系数矩阵:")
#print(corr)

# 第二步:建立线性回归模型

lr_model = LinearRegression()  # 创建线性回归模型对象

# 定义自变量和因变量
x = data[['体重', '年龄']]  # 选取"体重"和"年龄"作为自变量
y = data[['血压收缩']]  # 选取"血压收缩"作为因变量

#第三步:训练模型

lr_model.fit(x, y)  # 使用训练数据训练回归模型

# 第四步:模型评估

score = lr_model.score(x, y)  # 计算R²值,评估模型的拟合度
print(f"模型的R²值:{score:.4f}")

# 第五步:得到回归方程,使用模型进行预测

print("预测结果:")
print(lr_model.predict([[80, 60]]))  # 对新的数据进行预测,输入体重为80,年龄为60
print(lr_model.predict([[70, 30], [70, 20]]))  # 对多组数据进行预测

# 输出回归模型的系数和截距
a = lr_model.coef_  # 获取回归系数
b = lr_model.intercept_  # 获取截距
print(f"线性回归模型为:y = {a[0][0]:.2f}x1 + {a[0][1]:.2f}x2 + {b[0]:.2f}")

解释代码中的函数和参数:

1.pd.read_csv():pandas库中的方法,用于从CSV文件中读取数据,常用的参数如encoding='gbk'是为了处理中文字符编码问题,确保文件读取不产生乱码,engine='python'指定使用Python解析引擎,这有助于处理一些复杂或非标准的CSV文件格式,尤其是在数据量较小或特定格式时。


2.DataFrame.corr():pandas库中的方法,计算数据框中指定列的相关系数。相关系数衡量两列数据之间的线性关系,取值范围在-1到1之间,1表示完全正相关,-1表示完全负相关,0表示无线性关系。该方法返回一个相关矩阵,可以通过它分析多变量之间的关系。


3.LinearRegression():sklearn.linear_model库中的方法,初始化线性回归模型。这个模型通过最小化误差平方和来拟合数据,以建立自变量和因变量之间的线性关系。通常用于预测和回归任务,是回归分析中最常用的算法之一。


4.fit(X, y):sklearn.linear_model库中的方法,训练线性回归模型。X是输入数据(自变量或特征),y是目标变量(因变量)。fit方法通过学习数据中的模式,调整模型参数(回归系数)以最佳拟合数据。这一步是模型的训练过程。


5.predict():sklearn.linear_model库中的方法,用于预测新的数据点的因变量值。输入的X为新的自变量数据,predict方法利用模型中的已学习的回归系数生成因变量的预测值。它可以在已有模型的基础上预测未见数据的结果。


6.coef_ 和 intercept_:sklearn.linear_model库中的属性,分别表示回归模型的系数和截距。coef_是每个特征变量的权重,表示每个自变量对因变量的影响程度;intercept_是回归方程的常数项,表示当所有自变量为零时,因变量的值。
 

四、多元线性回归的案例(糖尿病检测)

在这个案例中,我们使用一个多元线性回归模型和多个特征来预测是否患有糖尿病。数据集包含442行数据,每一行是一个患者的特征信息,包含了10个特征(如年龄、性别、体质指数等)和一个目标变量(target),表示是否患有糖尿病。下面是如何使用线性回归模型来实现糖尿病预测。

4.1:csv数据集(测试集/训练集):


4.2:代码实现:

import pandas as pd
from sklearn.linear_model import LinearRegression

# 1. 读取数据
data = pd.read_csv("糖尿病数据.csv")  # 读取糖尿病数据集

# 2. 构造自变量(10 个)和因变量
feature_cols = ['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']  # 特征列
X = data[feature_cols]  # 自变量
y = data['target']  # 因变量

# 3. 建立并训练模型
lr_model = LinearRegression()  # 创建线性回归模型对象
lr_model.fit(X, y)  # 训练回归模型

# 4. 模型评估
print(f"R² = {lr_model.score(X, y):.4f}")  # 输出模型的R²值

# 5. 预测示例
sample1 = pd.DataFrame([[0.0381, 0.0507, 0.0617, 0.0219, -0.0442, -0.0348, -0.0434, -0.0026, 0.0199, -0.0176]],
                       columns=feature_cols)
sample2 = pd.DataFrame([[0.0, -0.0446, 0.0445, -0.0057, -0.0456, -0.0342, -0.0324, -0.0026, 0.0029, -0.0259],
                        [0.0, -0.0446, 0.0391,  0.0219,  0.0039,  0.0156,  0.0081, -0.0026, -0.0320, -0.0466]],
                       columns=feature_cols)

print("预测1:", lr_model.predict(sample1))
print("预测2:", lr_model.predict(sample2))

# 6. 输出完整回归方程


coef = lr_model.coef_  # 获取回归系数
intercept = lr_model.intercept_  # 获取截距
equation = "target = "
equation += " + ".join([f"{c:.3f}*{name}" for c, name in zip(coef, feature_cols)])  # 构建回归方程
equation += f" + {intercept:.3f}"
print("\n回归方程:")
print(equation)  # 输出回归方程

读者朋友可以不看下文自行按照3.2的一般流程解读一下这个代码,是不是一目了然了呢?其实,细心的读者有没有发现,线性回归的算法和上一节knn算法的实现流程有许多相似之处呢,哈哈,这或许就是机器学习的魅力,需要读者朋友们好好总结体会!

代码流程解析:

0.导入相关的库或函数(也可以写代码用到时再导入)

1.数据导入和数据预处理:通过 pandas.read_csv() 加载数据集,通过 data[feature_cols] 提取所有特征列,data['target'] 提取目标列(糖尿病是否发生)。

2.建立线性回归模型:使用 LinearRegression() 创建回归模型。

3.训练模型:调用 model.fit(X, y) 进行训练

4.模型评估:通过 model.score(X, y) 输出线性回归模型的 R² 值,评估模型的拟合效果。

5.使用模型进行预测:通过 model.predict() 对新的样本数据进行预测,输出糖尿病的预测概率。

6.输出完整回归方程:通过 model.coef_ 和 model.intercept_ 输出回归方程,详细显示每个特征的系数

五、总结


本文介绍了线性回归算法的基本概念,并展示了如何通过scikit-learn和pandas库实现一元线性回归和多元线性回归模型。通过案例代码,大家可以快速上手,学习如何使用Python进行数据分析和模型构建。同时,我们还讲解了如何评估模型和进行预测。

ps.启发性问题

1.如何选择线性回归模型的特征,以提高模型的预测精度?
2.多元线性回归中如何避免多重共线性问题?
3.除了线性回归,还有哪些机器学习算法适合用于回归问题?


对于这三个问题,读者可以自己思考,查阅相关资料,有什么新颖的想法欢迎大家在评论区讨论分享,一起学习,一起进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值