第L2周:ML|线性回归模型

1. 简单线性回归模型

一、概念

1. 回归:
  • 在机器学习中,回归任务是指预测连续值的问题,例如房价、温度、销售额等。
  • 回归模型通过学习输入特征(自变量)与输出目标(因变量)之间的关系来进行预测。
  • 常见的回归算法包括线性回归、多项式回归、决策树回归、支持向量回归(SVR)和神经网络回归等。
2. 线性回归:
  • 线性回归是最简单的回归分析形式,它假设自变量和因变量之间存在线性关系。
  • 线性回归的目标是找到一条直线(在二维空间中)或一个平面(在三维空间中),最好地拟合数据集中的点。
  • 这条直线(或平面)被称为回归线,它由截距(intercept)和斜率(slope)参数定义。
3. 回归与分类的区别:
  • 在机器学习中,回归和分类是两种不同的任务。
  • 分类任务是预测离散标签的问题,例如判断邮件是否为垃圾邮件、图片中是否包含某种物体等。
  • 回归任务则是预测连续值的问题,如房价、温度、时间序列数据等。

二、代码学习

我的环境:

  • 语言环境:cuda环境 Python 3.12.3
  • 编译器:Jupyter Lab

这里我们采用“学习时长-成绩”数据集,采用LinearRegression简单线形回归模型,通过学习时长去预测学生成绩。

1. 数据预处理 (导入数据 + 数据集划分)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

dataset = pd.read_csv("C:\\Users\\Zhao\\Desktop\\data\\studentscores.csv")
X = dataset.iloc[ : , :1].values
Y = dataset.iloc[ : ,1].values

from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25)
2. 构建简单线性回归模型
from sklearn.linear_model import LinearRegression

regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)

解释: 

 (1)sklearn.linear_model包实现了广义线性模型,包括线性回归、Ridge回归、Bayesian回归等。LinearRegression是其中较为简单的线性回归模型。

    (2) 这段代码初始化了一个线性回归模型,并使用训练数据集X_trainY_train来训练这个模型。训练完成后,regressor对象可以用来对新的特征数据进行预测,以估计目标变量的值。

    (3) fit 的作用:找到最佳的线性关系,即最佳拟合线,来描述X_trainY_train之间的关系。

3. 预测结果
Y_pred = regressor.predict(X_test)
4. 可视化

  导入matplotlib.pyplot模块后,可以使用它提供的各种函数来创建图表,如下:

import matplotlib.pyplot as plt

# 假设我们有一些数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# 使用plt.plot()函数创建线图
plt.plot(x, y)

# 给图表添加标题和标签
plt.title("Simple Plot")
plt.xlabel("x axis label")
plt.ylabel("y axis label")

# 显示图表
plt.show()

  回到原题:

  (1)训练集可视化
plt.scatter(X_train, Y_train, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')
plt.show()

  (2)测试集可视化
plt.scatter(X_test, Y_test, color='red')
plt.plot(X_test, regressor.predict(X_test), color='blue')
plt.show()

三、通过鸢尾花花瓣长度预测花瓣宽度(练手项目)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"  
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class'] 
dataset = pd.read_csv(url, names=names)
X = dataset.iloc[ : , 2:3].values
Y = dataset.iloc[ : , 3].values 
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25)
regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)
Y_pred = regressor.predict(X_test)
plt.scatter(X_train, Y_train, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')
plt.show()

值得注意的是:

        X = dataset.iloc[ : , 2:3].values 这行代码不能写成 X = dataset.iloc[ : , 2].values

原因:因为使用LinearRegression模型时,它期望特征集X是多维的(即形状为(n_samples,n_features)的数组),而这里X只有一维。如果你只使用一个特征来预测另一个特征,那么这种情况下模型是可以工作的,但通常这不是机器学习中的标准做法,因为模型将无法从多个特征中学习。

2. 多元线性回归模型

一、概念

1. 简单线性回归:   影响的因数唯一,只有一个。       Y = aX + b
2. 多元线性回归:   影响的因数不唯一,有多个。       Y = aX1 + bX2 + ... + nXn

二、 代码实现 

下面通过 花萼-width 和 花瓣-length 来预测 花瓣-width

1. 数据预处理
  (1)导入数据集
import numpy as np
import pandas as pd
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"  
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class'] 
dataset = pd.read_csv(url, names=names)
# url是包含CSV文件的网址,这里是一个字符串,指向鸢尾花数据集的在线资源
# 由于原始数据集没有列名,所以通过names=names参数指定列名,这样每列就有了一个明确的名称

 (2)数据分析
import matplotlib.pyplot as plt

plt.plot(dataset['花萼-length'], dataset['花瓣-width'], 'x', label="marker='x'")
plt.plot(dataset['花萼-width'],  dataset['花瓣-width'], 'o', label="marker='o'")
plt.plot(dataset['花瓣-length'], dataset['花瓣-width'], 'v', label="marker='v'")
# 这行代码绘制了花瓣长度与花瓣宽度之间的关系,使用的标记样式是倒三角形('v')
 
plt.legend(numpoints=1)
# 添加图例,每个标签只显示一个标记点

plt.show()

X = dataset.iloc[ : ,[1,2]].values
Y = dataset.iloc[ : ,  3 ].values
 (3)划分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, 
                                                    test_size=0.2, 
                                                    random_state=0)
2. 训练多元线性回归模型
from sklearn.linear_model import LinearRegression

regressor = LinearRegression()
regressor.fit(X_train, Y_train)
y_pred = regressor.predict(X_test)

plt.scatter(Y_test,y_pred, color='red')
plt.xlabel("True")
plt.ylabel("Prediction")
plt.show()

三、练手项目:用其他三个变量来预测花瓣长度

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"  
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class'] 
dataset = pd.read_csv(url, names=names)

X = dataset.iloc[ : , [0,1,3]].values
Y = dataset.iloc[ : , 2].values
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
y_pred = regressor.predict(X_test)

plt.scatter(Y_test, y_pred, color='blue')
plt.xlabel('True')
plt.ylabel('Prediction')
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值