数学建模概述

监督学习-回归分析(线性回归)

监督学习-分类分析(KNN最邻近分类)

非监督学习-聚类(PCA主成分分析& K-means聚类)

随机算法-蒙特卡洛算法

1.回归分析

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

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

2.线性回归的python实现

线性回归的python实现方法

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

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

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

(1)示例

创建线性回归模型:

  1. model = LinearRegression()
    model.fit(xtrain[:, np.newaxis], ytrain)
    model.coef_斜率的参数 model.intercept_ 截距的参数
  1. 拟合测试:
  1. xtest = np.linspace(0, 10, 1000) #测试值、根据拟合曲线求出 ytest = model.predict(xtest[:, np.newaxis])
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. % matplotlib inline
  1. # 简单线性回归(一元线性回归)
  2. # (1)数据示例
  3.  
  4. from sklearn.linear_model import LinearRegression
  5. # 导入线性回归模块
  6.  
  7. rng = np.random.RandomState(1) #选择随机数里边的种子1
  8. xtrain = 10 * rng.rand(30)
  9. ytrain = 8 + 4 * xtrain + rng.rand(30)
  10. # np.random.RandomState → 随机数种子,对于一个随机数发生器,只要该种子(seed)相同,产生的随机数序列就是相同的
  11. # 生成随机数据x与y
  12. # 样本关系:y = 8 + 4*x
  13.  
  14. fig = plt.figure(figsize =(12,3))
  15. ax1 = fig.add_subplot(1,2,1)
  16. plt.scatter(xtrain,ytrain,marker = '.',color = 'k')
  17. plt.grid()
  18. plt.title('样本数据散点图')
  19. # 生成散点图
  20.  
  21. model = LinearRegression() #创建线性回归模型
  22. model.fit(xtrain[:, np.newaxis], ytrain) #填上值自变量和因变量,如果是多元线性回归自变量给它个矩阵就可以了,model.fit(xtrain, ytrain)这样子是不行的,要把它转置为列的值,
  23. # xtrain.shape #(30,) # xtrain[:, np.newaxis] #预测结果就会放到这个model里边
  24. # LinearRegression → 线性回归评估器,用于拟合数据得到拟合直线
  25. # model.fit(x,y) → 拟合直线,参数分别为x与y
  26. # x[:,np.newaxis] → 将数组变成(n,1)形状 把xtrain数组变成列排布(30,1)
  27.  
  28. #print(model.coef_) #[ 4.00448414]斜率的参数
  29. #print(model.intercept_) #8.44765949943截距的参数
  30.  
  31. xtest = np.linspace(0, 10, 1000) #测试值
  32. ytest = model.predict(xtest[:, np.newaxis])
  33. # 创建测试数据xtest,并根据拟合曲线求出ytest
  34. # model.predict → 预测
  35.  
  36. ax2 = fig.add_subplot(1, 2, 2)
  37. plt.scatter(xtrain, ytrain, marker = '.', color = 'k')
  38. plt.plot(xtest, ytest, color = 'r')
  39. plt.grid()
  40. plt.title('线性回归拟合')
  41. # 绘制散点图、线性回归拟合直线

(2)误差

  1. # 简单线性回归(一元线性回归)
  2. # (2)误差
  3.  
  4. rng = np.random.RandomState(8)
  5. xtrain = 10 * rng.rand(15)
  6. ytrain = 8 + 4 * xtrain + rng.rand(15) * 30
  7. model.fit(xtrain[:,np.newaxis],ytrain)
  8. xtest = np.linspace(0,10,1000)
  9. ytest = model.predict(xtest[:,np.newaxis])
  10. # 创建样本数据并进行拟合
  11.  
  12. plt.plot(xtest,ytest,color = 'r',linestyle = '--') # 拟合直线
  13. plt.scatter(xtrain,ytrain,marker = '.',color = 'k') # 样本数据散点图
  14. ytest2 = model.predict(xtrain[:,np.newaxis]) # 样本数据x在拟合直线上的y值
  15. plt.scatter(xtrain,ytest2,marker = 'x',color = 'g') # ytest2散点图
  16. plt.plot([xtrain,xtrain],[ytrain,ytest2],color = 'gray') # 误差线
  17. plt.grid()
  18. plt.title('误差')
  19. # 绘制图表

(3)求解a,b

  1. # 简单线性回归(一元线性回归)
  2. # (3)求解a,b
  3.  
  4. rng = np.random.RandomState(1)
  5. xtrain = 10 * rng.rand(30)
  6. ytrain = 8 + 4 * xtrain + rng.rand(30)
  7. # 创建数据
  8.  
  9. model = LinearRegression()
  10. model.fit(xtrain[:,np.newaxis],ytrain)
  11. # 回归拟合
  12.  
  13. print('斜率a为:%.4f' % model.coef_[0])
  14. print('截距b为:%.4f' % model.intercept_)
  15. print('线性回归函数为:\ny = %.4fx + %.4f' % (model.coef_[0],model.intercept_))
  16. # 参数输出

2.2 多元线性回归

  1. model = LinearRegression()
  2. model.fit(df[['b1', 'b2', 'b3', 'b4']], df['y'])
  1. # 多元线性回归
  2.  
  3. rng = np.random.RandomState(5)
  4. xtrain = 10 * rng.rand(150,4)
  5. ytrain = 20 + np.dot(xtrain ,[1.5,2,-4,3])
  6. df = pd.DataFrame(xtrain, columns = ['b1','b2','b3','b4'])
  7. df['y'] = ytrain
  8. pd.scatter_matrix(df[['b1','b2','b3','b4']],figsize=(10,6),
  9. diagonal='kde',
  10. alpha = 0.5,
  11. range_padding=0.1)
  12. print(df.head())
  13. # 创建数据,其中包括4个自变量
  14. # 4个变量相互独立
  15.  
  16. model = LinearRegression()
  17. model.fit(df[['b1', 'b2', 'b3', 'b4']], df['y'])
  18. print('斜率a为:', model.coef_)
  19. print('线性回归函数为:\ny = %.1fx1 + %.1fx2 + %.1fx3 + %.1fx4 + %.1f'
  20. % (model.coef_[0],model.coef_[1],model.coef_[2],model.coef_[3],model.intercept_))
  21. # 参数输出

3. 线性回归模型评估

线性回归模型评估

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

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

  1. # 模型评价
  2. # MSE, RMES, R-square
  3.  
  4. from sklearn import metrics
  5.  
  6. rng = np.random.RandomState(1)
  7. xtrain = 10 * rng.rand(30)
  8. ytrain = 8 + 4 * xtrain + rng.rand(30) * 3
  9. # 创建数据
  10.  
  11. model = LinearRegression()
  12. model.fit(xtrain[:,np.newaxis],ytrain)
  13. # 多元回归拟合
  14.  
  15. ytest = model.predict(xtrain[:,np.newaxis]) # 求出预测数据
  16. mse = metrics.mean_squared_error(ytrain,ytest) # 求出均方差MSE
  17. rmse = np.sqrt(mse) # 求出均方根RMSE
  18. print(mse)
  19. print(rmse)
  20.  
  21. # ssr = ((ytest - ytrain.mean())**2).sum() # 求出预测数据与原始数据均值之差的平方和
  22. # sst = ((ytrain - ytrain.mean())**2).sum() # 求出原始数据和均值之差的平方和
  23. # r2 = ssr / sst # 求出确定系数 #0.99464521596949995
  24. r2 = model.score(xtrain[:,np.newaxis],ytrain) # 求出确定系数 #0.99464521596949995
  25. r2
  26.  
  27. print("均方差MSE为: %.5f" % mse)
  28. print("均方根RMSE为: %.5f" % rmse)
  29. print("确定系数R-square为: %.5f" % r2)
  30. # 确定系数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更好,相互比较做出最优比较。

数学建模:1.概述& 监督学习--回归分析模型的更多相关文章

  1. 数学建模:2.监督学习--分类分析- KNN最邻近分类算法

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

  2. 2017 年“认证杯”数学中国数学建模网络挑战赛 C题思路讲解

    之前有小伙伴私信我叫我说说这次比赛C题的思路,怎么写的,我就写篇博客说说吧,仅供参考! 针对C题,该题目比较综合,是一个成熟的数模赛题,与国赛的相似性较高.一般而言,第一问难度较低,题目要求进行数据挖 ...

  3. “GANs”与“ODEs”:数学建模的终结?

    在本文中,我想将经典数学建模和机器学习之间建立联系,它们以完全不同的方式模拟身边的对象和过程.虽然数学家基于他们的专业知识和对世界的理解来创建模型,而机器学习算法以某种隐蔽的不完全理解的方式描述世界, ...

  4. 【数学建模】day07-数理统计II

    方差分析和回归分析. 用数理统计分析试验结果.鉴别各因素对结果影响程度的方法称为方差分析(Analysis Of Variance),记作 ANOVA. 比如:从用不同工艺制作成的灯泡中,各自抽取了若 ...

  5. MATLAB之数学建模:深圳市生活垃圾处理社会总成本分析

    MATLAB之数学建模:深圳市生活垃圾处理社会总成本分析 注:MATLAB版本--2016a,作图分析部分见<MATLAB之折线图.柱状图.饼图以及常用绘图技巧> 一.现状模式下的模型 % ...

  6. Matlab与数学建模

    一.学习目标. (1)了解Matlab与数学建模竞赛的关系. (2)掌握Matlab数学建模的第一个小实例—评估股票价值与风险. (3)掌握Matlab数学建模的回归算法. 二.实例演练. 1.谈谈你 ...

  7. Python数学建模-01.新手必读

    Python 完全可以满足数学建模的需要. Python 是数学建模的最佳选择之一,而且在其它工作中也无所不能. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数学 ...

  8. Python数学建模-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...

  9. Python小白的数学建模课-A1.2021年数维杯C题(运动会优化比赛模式探索)探讨

    Python小白的数学建模课 A1-2021年数维杯C题(运动会优化比赛模式探索)探讨. 运动会优化比赛模式问题,是公平分配问题 『Python小白的数学建模课 @ Youcans』带你从数模小白成为 ...

随机推荐

  1. Java中常用的加密算法小结

      散列算法(单向散列,不可逆) MD5(Message Digest Algorithm 5) SHA(Secure Hash Algorithm)   对称加密(加密解密使用同一密钥,速度快) D ...

  2. C语言-社保工资查询系统

    一.简述 此次程序没有涉及函数,完成工资.保险和住房公积金税前税后的查询.工资和社保公积金算法是依据最新的北京标准计算. 五险一金标准: 税率: 1.输入编号1~6查询保险,然后再选择是依据税前工资还 ...

  3. deepin、Ubuntu安装Nginx

    deepin安装nginx 切换至root用户 su 密码: 基础库的安装 安装gcc g++的依赖库 sudo apt-get install build-essential && ...

  4. gulp前端工程化教程

    gulp npm install -g gulp-concat 文件打包 npm install -g gulp-rename 文件重命名 npm install -g gulp-imagemin 图 ...

  5. plugin-barcodescanner 报错

    https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/418 ionic cordova platform rm andr ...

  6. 二.Rsync备份服务

    自己动手部署一遍 期中架构-第二章-备份服务笔记====================================================================== 01. 课 ...

  7. 线性空间和异或空间(线性基)bzoj4004贪心+高斯消元优秀模板

    线性空间:是由一组基底构成的所有可以组成的向量空间 对于一个n*m的矩阵,高斯消元后的i个主元可以构成i维的线性空间,i就是矩阵的秩 并且这i个主元线性无关 /* 每个向量有权值,求最小权极大线性无关 ...

  8. Python之yield简明详解

    yield在Python中被称之为生成器(只能在函数中使用),他的作用是将函数中每次执行的结果以类似元组的形式保存起来一遍后续使用. 什么是生成器? 通过列表生成式,我们可以直接创建一个列表.但是,受 ...

  9. 阿里云使用js 实现OSS图片上传、获取OSS图片列表、获取图片外网访问地址(读写权限私有、读写权限公共);

    详情请参考:https://help.aliyun.com/document_detail/32069.html?spm=a2c4g.11186623.6.763.ZgC59a 或者https://h ...

  10. python requests的content和text方法的区别

    requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等.其中返回的网页部分会存在.content和.text两个对 ...