当前位置: 首页 > news >正文

机器学习基础 -- 线性回归模型

 线性回归模型

    在机器学习中,线性回归模型是一种基础的模型算法,其数学原理通过最小二乘法使欧式距离(均方误差)最小化来求出w和b。

    本篇文章将介绍一些数学原理,给定几个数据并通过scikit-learn库中集成的LinearRegression进行代码实现,再使用matplotlib进行可视化展示。

 数学原理

   线性回归模型的数学表达式:

image

    其中线性回归模型就是通过一堆数据(x和y)来求出w和b,对于如何求出w和b,就需要求出均方误差(欧式距离):

image

     然后分别对w和b求偏导:

                

image

image

 

    分别令偏导为0,可以求出w和b的闭式解:

  

image

    这个过程可能会有一点复杂,主要考察数学知识,联立两个偏导为0的式子和y = wx+b,既可以求出解来。

  代码实现

    根据python语言的天然优势,有很多可以拿来科学计算的库,比如scikit-learn,numpy,pandas,matplotlib,我们可以很快速的使用python代码来进行我们的科学计算和模型训练。

    本篇文章使用scikit-learn库来实现一个简单的线性回归模型的训练和可视化展示,首先,如果之前没有安装过scikit-learn库,可以使用pip3进行安装。

    pip3 install  scikit-learn

    安装之后导入scikit-learn库:

from sklearn.linear_model import LinearRegression#线性回归模型类
from sklearn.model_selection import train_test_split #区分训练集和测试集
from sklearn.metrics import r2_score #R2评估
import matplotlib.pyplot as plt #绘制图像专用库
import numpy as np #生成数据点专用

 

    导入库之后输入数据集:

x = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13]]#注意必须要是二维数组
y = [1,4,9,16,25,36,49,64,81,100,121,144,169]

    导入数据集之后区分训练集和测试集:

x_train,x_test,y_train,y_test = train_test_split(x,y,random_state = 42,train_size = 0.8)

    创建一个LinearRegression模型,并使用训练集进行训练

model = LinearRegression()
model.fit(x_train,y_train)

     这样我们就训练得到了一个model模型,运用这个模型我们可以进行未知数据的预测

y_pred = model.predict(x_test)

       接下来我们使用r2系数去评估这个模型

r2 = r2_score(y_test,y_pred)
print(r2)

      运行结果如下:

image

   r2的值为0.2非常接近于1,说明模型训练很成功,接下来我们使用matplotlib库进行图像绘制。

plt.figure(figsize=(10,6))
plt.xlabel("x")
plt.ylabel("y")
x_plot = np.linspace(0,13,100)#创建100个0-13的点
y_plot = model.predict(x_plot.reshape(-1,1))#重新将x_plot数组转换为二维数组
plt.plot(x_plot,y_plot)
plt.scatter(x_train,y_train)
plt.scatter(x_test,y_test)
plt.show()

  运行之后的结果:

image

  我们可以看到有一个直线去拟合了我们的数据点,这就是利用最小二乘法进行线性回归模型的最基础应用,具体的线性模型在生产生活中还有广泛应用。

  完整代码展示:

from sklearn.linear_model import LinearRegression#线性回归模型类
from sklearn.model_selection import train_test_split #区分训练集和测试集
from sklearn.metrics import r2_score #R2评估
import matplotlib.pyplot as plt
import numpy as np
x = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13]]#注意必须要是二维数组
y = [1,4,9,16,25,36,49,64,81,100,121,144,169]
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state = 42,train_size = 0.8)model = LinearRegression()
model.fit(x_train,y_train)
y_pred = model.predict(x_test)
r2 = r2_score(y_test,y_pred)
print(r2)
plt.figure(figsize=(10,6))
plt.xlabel("x")
plt.ylabel("y")
x_plot = np.linspace(0,13,100)#创建100个0-13的点
y_plot = model.predict(x_plot.reshape(-1,1))#重新将x_plot数组转换为二维数组
plt.plot(x_plot,y_plot)
plt.scatter(x_train,y_train)
plt.scatter(x_test,y_test)
plt.show()

 

 

 

    

 

     

 

    

              

http://www.zskr.cn/news/26765.html

相关文章:

  • 软件工程作业三
  • 一键生成爆款文章,并自动发布!
  • 1188. 设计有限阻塞队列
  • MySQL分页解决方案
  • Failed to resolve: org.webrtc:google-webrtc:1.0.32006
  • 日总结 15
  • NVIDIA Triton服务器漏洞危机:攻击者可远程执行代码,AI模型最高权限告急
  • lgP14254 分割(divide)
  • 2025.10.21
  • 化学同位素
  • equal和hashcode
  • NOIP 二十五
  • 「清华集训2014-主旋律」题解
  • 第二次高级程序作业
  • 大学生需要认真听课的肌肉记忆(注意力训练)
  • AWS IAM角色最佳实践:构建云安全的核心防线
  • 初始人工智能和机器学习
  • 盒子模型外边距合并问题
  • o(N^2)找出所有回文子串
  • 二叉树的中序遍历- 二叉树基本-栈 - MKT
  • 做了一个概率小游戏,没想到服务器被打爆被攻击了!原因竟然是他?真没想到...
  • 阿里云对象存储OSS之Java - Soul
  • Solidity合约继承场景下的构造函数执行顺序
  • 反数字化:线下活动也能年赚百万
  • sqlserver 主要的日期函数及用法示例
  • 图论刷题记录
  • 英语_备忘_疑难
  • 「JOISC2020-掃除」题解
  • CF简单构造小计
  • 软件工程第三次作业:四则运算题目生成器 - Nyanya-