IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【HDU】机器学习【一】————线性回归方法处理非线性数据 -> 正文阅读

[人工智能]【HDU】机器学习【一】————线性回归方法处理非线性数据

任务目标:

前言:这周学习了用线性回归的方式处理,这是第一次运用,目前能了解线性回归的用法,但仍然不够深入,如果有看见了文章里有一些错误或疑惑的地方还请指出!欢迎大家评论区留言或私信。

对excel表格数据进行提取,并用线性回归方式,求解非线性回归问题


代码内容:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

data = pd.read_csv('data_nonlinear.csv')
data.head()

x = data.loc[:,'x']
y = data.loc[:,'y']
fig1 = plt.figure(figsize=(5,5))
plt.scatter(x,y)
plt.show()

x = np.array(x).reshape(-1,1)

from sklearn.linear_model import LinearRegression
LR = LinearRegression()
LR.fit(x,y)
y_predict = LR.predict(x)
fig2 = plt.figure(figsize=(5,5))
plt.scatter(x,y)
plt.plot(x,y_predict,'r')
plt.show()

x2 = x*x
x_new = np.append(x,x2,axis=1)
LR2 = LinearRegression()
LR2.fit(x_new,y)
y_new_predict = LR2.predict(x_new)
fig3 = plt.figure(figsize=(5,5))
plt.scatter(x,y)
plt.scatter(x,y_new_predict)
plt.show()

from sklearn.metrics import mean_squared_error,r2_score
mean_squared_error_l = mean_squared_error(y,y_new_predict)
r2_score_l = r2_score(y,y_new_predict)
mean_squared_error_l,r2_score_l

代码解析:

这里是我作为一个初学者的理解,并不一定理解正确,如果有误或有更好解释的欢迎留言指出!

1.读取excel表格数据

data = pd.read_csv('data_nonlinear.csv')
data.head()                       #读数据

x = data.loc[:,'x']               #索引找到数据
y = data.loc[:,'y']
fig1 = plt.figure(figsize=(5,5))  #建立5*5表格
plt.scatter(x,y)                  #画散点图 
plt.show()                        #展示散点图

使用pandas库函数将表格数据存在data中,并且通过索引找到数据的x和y(这里表格中只有xy两个一一对应的数据,多因子需要改变x的列表使其检索多个),figure函数可以规定表格的大小,数据点大小颜色和形状等等。

  • data.head()读取的excel表格数据(截图不是完整表格)
    在这里插入图片描述
  • plt.show() 画出的数据散点图
    在这里插入图片描述

2.拟合线性函数

from sklearn.linear_model import LinearRegression
LR = LinearRegression()             #建立模型
LR.fit(x,y)                         #用xy关系建立LR模型
y_predict = LR.predict(x)           #输出新数据
fig2 = plt.figure(figsize=(5,5))
plt.scatter(x,y)
plt.plot(x,y_predict,'r')           #画出y_predict和x的图,颜色为红
plt.show()

在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合(自变量都是一次方)。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。(百度百科)

fit() 用来分析模型参数,predict() 是通过 fit() 算出的模型参数构成的模型,对解释变量进行预测获得的值。所以LR = LinearRegression()可以理解为LR建立一个LinearRegression模型,然后用建立好的LR分析xy的关系,也就是LR.fit(x,y)。这时LR就是一个新模型,这个模型就是用x和y建立的模型
LR -> y = kx + b
y_predict = LR.predict(x),就是在已经建立的LR模型中输入x,输出对应的y_predict。我们将x和y_predict画出(图中红线)。

  • 线性拟合

在这里插入图片描述

3.拟合非线性函数

x2 = x*x
x_new = np.append(x,x2,axis=1)
LR2 = LinearRegression()
LR2.fit(x_new,y)
y_new_predict = LR2.predict(x_new)
fig3 = plt.figure(figsize=(5,5))
plt.scatter(x,y)
plt.scatter(x,y_new_predict)
plt.show()

根据表格数据我们可以看出数据近似平方关系,于是我们建立一个二次函数模型。这里先把x2,也就是x的平方,与x组成一个二维数组x_new,然后对x_new与y进行训练。

这里我的理解是:在第一个单因子模型的建立中,假设x=-10时,y=100。x=0时,y=0。x=10时y=100,所以建立的模型对应下来就类似一个一次函数。
而第二个多因子模型,假设x=-10,x2=100时,y=100。x=-9,x2=81时,y=81。x=0,x2=0时y=0。x=10,x2=100时,y=100。所以对应下来y的位置更接近于x2的位置,而不是只对应x2.

建立模型后画出散点图

  • 非线性拟合

在这里插入图片描述

4.对结果进行评估

from sklearn.metrics import mean_squared_error,r2_score
mean_squared_error_l = mean_squared_error(y,y_new_predict)   #均方差
r2_score_l = r2_score(y,y_new_predict)                       #决定系数R2
mean_squared_error_l,r2_score_l

这里就是算出了均方差和决定系数R2的值来评估刚刚拟合的效果

  • 拟合效果(均方差,决定系数)

在这里插入图片描述
可以看出决定系数为0.997,非常接近1,可以下结论拟合效果好


总结:

线性回归方法是机器学习入门级的方法,本人学识尚浅,理解不足,若有看见文章中有不足或错误的地方欢迎提出!大家一起学习进步。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:50:48  更:2022-03-21 20:51:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:28:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码