数学建模:1.监督学习--回归分析模型(代码片段)

shengyang17 shengyang17     2023-01-01     140

关键词:

技术分享图片

 

1.回归分析

在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量间互相依赖的定量关系的一种统计分析方法。

按照自变量和因变量之间的关系类型,可分为线性回归分析非线性回归分析。

 

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

 

2.线性回归的python实现

 线性回归的python实现方法

 线性回归通常是人们在学习预测模型时首选的技术之一。在这种技术中,因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。
 线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X)之间建立一种关系。

 简单线性回归 / 多元线性回归

 2.1 简单线性回归 (一元线性回归)

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline
# 简单线性回归(一元线性回归)
# (1)数据示例

from sklearn.linear_model import LinearRegression
# 导入线性回归模块

rng = np.random.RandomState(1)  #选择随机数里边的种子1
xtrain = 10 * rng.rand(30)
ytrain = 8 + 4 * xtrain + rng.rand(30)
# np.random.RandomState → 随机数种子,对于一个随机数发生器,只要该种子(seed)相同,产生的随机数序列就是相同的
# 生成随机数据x与y
# 样本关系:y = 8 + 4*x

fig = plt.figure(figsize =(12,3))
ax1 = fig.add_subplot(1,2,1)
plt.scatter(xtrain,ytrain,marker = .,color = k)
plt.grid()
plt.title(样本数据散点图)
# 生成散点图

model = LinearRegression() #创建线性回归模型
model.fit(xtrain[:, np.newaxis], ytrain) #填上值自变量和因变量,如果是多元线性回归自变量给它个矩阵就可以了,model.fit(xtrain, ytrain)这样子是不行的,要把它转置为列的值,
# xtrain.shape #(30,)  # xtrain[:, np.newaxis] #预测结果就会放到这个model里边
# LinearRegression → 线性回归评估器,用于拟合数据得到拟合直线
# model.fit(x,y) → 拟合直线,参数分别为x与y
# x[:,np.newaxis] → 将数组变成(n,1)形状

#print(model.coef_)  #[ 4.00448414]斜率的参数
#print(model.intercept_) #8.44765949943截距的参数

xtest = np.linspace(0, 10, 1000) #测试值
ytest = model.predict(xtest[:, np.newaxis])
# 创建测试数据xtest,并根据拟合曲线求出ytest
# model.predict → 预测

ax2 = fig.add_subplot(1, 2, 2)
plt.scatter(xtrain, ytrain, marker = ., color = k)
plt.plot(xtest, ytest, color = r)
plt.grid()
plt.title(线性回归拟合)
# 绘制散点图、线性回归拟合直线

技术分享图片

# 简单线性回归(一元线性回归)
# (2)误差

rng = np.random.RandomState(8)
xtrain = 10 * rng.rand(15)
ytrain = 8 + 4 * xtrain + rng.rand(15) * 30
model.fit(xtrain[:,np.newaxis],ytrain)
xtest = np.linspace(0,10,1000)
ytest = model.predict(xtest[:,np.newaxis])
# 创建样本数据并进行拟合

plt.plot(xtest,ytest,color = r,linestyle = --)  # 拟合直线
plt.scatter(xtrain,ytrain,marker = .,color = k)  # 样本数据散点图
ytest2 = model.predict(xtrain[:,np.newaxis])  # 样本数据x在拟合直线上的y值
plt.scatter(xtrain,ytest2,marker = x,color = g)   # ytest2散点图
plt.plot([xtrain,xtrain],[ytrain,ytest2],color = gray)  # 误差线
plt.grid()
plt.title(误差)
# 绘制图表

技术分享图片

 

# 简单线性回归(一元线性回归)
# (3)求解a,b

rng = np.random.RandomState(1)  
xtrain = 10 * rng.rand(30)
ytrain = 8 + 4 * xtrain + rng.rand(30)
# 创建数据

model = LinearRegression()
model.fit(xtrain[:,np.newaxis],ytrain)
# 回归拟合

print(斜率a为:%.4f % model.coef_[0])
print(截距b为:%.4f % model.intercept_)
print(线性回归函数为:
y = %.4fx + %.4f % (model.coef_[0],model.intercept_))
# 参数输出

技术分享图片

2.2 多元线性回归

# 多元线性回归

rng = np.random.RandomState(5)  
xtrain = 10 * rng.rand(150,4)
ytrain = 20 + np.dot(xtrain ,[1.5,2,-4,3])
df = pd.DataFrame(xtrain, columns = [b1,b2,b3,b4])
df[y] = ytrain
pd.scatter_matrix(df[[b1,b2,b3,b4]],figsize=(10,6),
                 diagonal=kde,
                 alpha = 0.5,
                 range_padding=0.1)
print(df.head())
# 创建数据,其中包括4个自变量
# 4个变量相互独立

model = LinearRegression()
model.fit(df[[b1, b2, b3, b4]], df[y])
print(斜率a为:, model.coef_)
print(线性回归函数为:
y = %.1fx1 + %.1fx2 + %.1fx3 + %.1fx4 + %.1f 
      % (model.coef_[0],model.coef_[1],model.coef_[2],model.coef_[3],model.intercept_))
# 参数输出

技术分享图片

技术分享图片

 

 3. 线性回归模型评估

 技术分享图片

技术分享图片

技术分享图片

 

线性回归模型评估

通过几个参数验证回归模型

SSE(和方差、误差平方和):The sum of squares due to error
MSE(均方差、方差):Mean squared error
RMSE(均方根、标准差):Root mean squared error
R-square(确定系数) Coefficient of determination

# 模型评价
# MSE, RMES, R-square

from sklearn import metrics

rng = np.random.RandomState(1)  
xtrain = 10 * rng.rand(30)
ytrain = 8 + 4 * xtrain + rng.rand(30) * 3
# 创建数据

model = LinearRegression()
model.fit(xtrain[:,np.newaxis],ytrain)
# 多元回归拟合

ytest = model.predict(xtrain[:,np.newaxis])  # 求出预测数据
mse = metrics.mean_squared_error(ytrain,ytest)  # 求出均方差MSE
rmse = np.sqrt(mse)  # 求出均方根RMSE
print(mse)
print(rmse)

# ssr = ((ytest - ytrain.mean())**2).sum()  # 求出预测数据与原始数据均值之差的平方和
# sst = ((ytrain - ytrain.mean())**2).sum()  # 求出原始数据和均值之差的平方和
# r2 = ssr / sst # 求出确定系数 #0.99464521596949995
r2 = model.score(xtrain[:,np.newaxis],ytrain)  # 求出确定系数 #0.99464521596949995
r2

print("均方差MSE为: %.5f" % mse)
print("均方根RMSE为: %.5f" % rmse)
print("确定系数R-square为: %.5f" % r2)
# 确定系数R-square非常接近于1,线性回归模型拟合较好

技术分享图片

总结:

能比较的有两个 R_square ‘确定系数‘ 、 MSE,

做两个回归模型可以分别判断哪个MSE更小就好,R哪个接近于1哪个就更好。如果只有一个回归模型,判断是否接近1,只要是大于0.6、0.8就非常不错了。同时在后边做组成成分,假如现在有10个参数,做一个回归模型,做一个R模型评估,比如说为0.85,把这10个参数降维,降维为3个主成分,再做一个3元的线性回归,这个叫回归模型2,为0.92,这个时候我们就选择那个3元的线性回归模型0.92更好,相互比较做出最优比较。

 

数学建模:2.监督学习--分类分析-knn最邻近分类算法(代码片段)

 1.分类分析分类(Classification)指的是从数据中选出已经分好类的训练集,在该训练集上运用数据挖掘分类的技术,建立分类模型,对于没有分类的数据进行分类的分析方法。分类问题的应用场景:分类问题是用于将事物打... 查看详情

机器学习1-概述(代码片段)

机器学习包含监督学习、非监督学习、以及强化学习三大部分。监督学习分为分类和回归两大类。分类:例如经过大量水果图片训练,识别新水果图片中是否含有苹果回归:例如经过大量面积-房价的数据的训练,预测某个面积... 查看详情

01_有监督学习--简单线性回归模型(最小二乘法代码实现)(代码片段)

有监督学习--简单线性回归模型(最小二乘法代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.定义模型拟合函数4.测试:运行最小二乘算法,计算w和b5.画出拟合曲线6.附录-测试数据有监督学习--简单线性回归模型(最... 查看详情

02_有监督学习--简单线性回归模型(梯度下降法代码实现)(代码片段)

有监督学习--简单线性回归模型(梯度下降法代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.定义模型的超参数4.定义核心梯度下降模型函数5.测试:运行梯度下降算法,计算最优的w和b6.画出拟合曲线7.附录-测试数据... 查看详情

03_有监督学习--简单线性回归模型(调用sklearn库代码实现)(代码片段)

有监督学习--简单线性回归模型(调用sklearn库代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.导入机器学习库sklearn4.测试:运行算法,从训练好的模型中提取出系数和截距5.画出拟合曲线6.附录-测试数据有监督学习--... 查看详情

有监督学习——线性回归(代码片段)

1.线性模型有监督学习是通过已知的样本产生预测模型的学习方法,任何有监督学习模型都可被想象成一个函数:\\[y=f(x_1,x_2,x_3,...x_n)\\tag1-1\\]其中,\\(x_1,x_2,x_3...x_n\\)是模型的n维的特征值,\\(y\\)是要预测的目标值/分类,当\\(y\\)... 查看详情

机器学习笔记之生成模型综述监督学习与无监督学习(代码片段)

机器学习笔记之生成模型综述——监督学习与无监督学习引言回顾:生成模型介绍判别方式:生成模型VS\\textVSVS判别模型生成模型的建模手段监督学习与无监督学习监督学习模型基于监督学习的非概率模型基于监督学习... 查看详情

机器学习知识点总结

二、基本概念 1有监督学习与无监督学习根据样本数据是否带有标签值,可以将机器学习算法分成有监督学习和无监督学习两类。有监督学习的样本数据带有标签值,它从训练样本中学习得到一个模型,然后用这个模型对新... 查看详情

常用机器学习算法(代码片段)

一般说来,机器学习有三种算法:1.监督式学习监督式学习算法包括一个目标变量(因变量)和用来预测目标变量的预测变量(自变量)。通过这些变量我们可以搭建一个模型,从而对于一个已知的预测变量值,我们可以得到对... 查看详情

3.线性回归(代码片段)

...因变量之间关系进行建模的一种回归分析。线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个线性函数,然后测试这个函数训练的好不好(即此函数是否足够拟合训练集... 查看详情

python数学建模系列:回归(代码片段)

文章目录前言往期文章1多元回归1.1选取数据1.2构建训练集与测试集,并构建模型1.3模型预测1.4模型评估2logistic回归2.1鸢尾花数据集2.2绘制散点图2.3逻辑回归分析结语前言Hello!小伙伴!非常感谢您阅读海轰的文章࿰... 查看详情

机器学习模型和算法(代码片段)

文章目录python简介python基本语法监督学习--回归模型线性回归模型一元线性回归线性回归最小二乘代码实现多元线性回归梯度下降法和最小二乘法相比线性回归梯度下降代码实现非线性回归python简介略python基本语法文件开头加上#... 查看详情

清风:数学建模算法编程和写作培训(代码片段)

清风:数学建模算法、编程和写作培训一、评价模型1.1层次分析法1.2代码详解1.3模型拓展1.4课后作业二、插值与拟合模型三、相关性模型四、回归模型五、图论模型六、分类问题七、聚类模型八、时间序列模型九、预测模型... 查看详情

关于模型

...识的数学模型。2.模型分类:按照学习的数据分类,(1)监督学习(supervisedlearning):训练的数据有标记信息。又由标记信息的【1】分类:标记信息呈现离散状态。KNN、朴素贝叶斯、逻辑回归、随机森林、支持向量机、决策树、... 查看详情

softmax回归(代码片段)

...该问题的目的是辨识10个不同的单个数字。Softmax回归是有监督的,不过后面也会介绍它与深度学习/无监督学习方法的结合。(译者注:MNIST是一个手写数字识别库,由N 查看详情

机器学习(05)——主要概念理解(代码片段)

...解,有助于后续的学习与理解,需要了解的核心概念有:监督学习、无监督学习、模型、策略、算法等。监督学习监督学习,指的是学习的数据与后续测试的数据,都有答案(标签)。比如说,我们自己的相片集,里面每个人我... 查看详情

朴素贝叶斯

...VM)  5.隐马尔可夫模型  6.遗传算法 分类属于有监督的学习过程,可以根据经验或者数学推导等辅助的方法给机器一些指导,帮助机器去噪,收敛,剪枝。让计算更加快捷和准确。分类问题:  1.二值分类:1或0----->... 查看详情

机器学习介绍及基本概念

...将来,我们将拥有安全高效的无人驾驶汽车。分类:  监督学习(supervisedlearning)、无监督学习(unsupervisedlearning)和强化学习(reinforcementlearning)。监督学习:  监督学习的主要目的是使用有类标的训练(training)数据构... 查看详情