首页 > 编程语言 >Python数学建模系列(九):回归

Python数学建模系列(九):回归

时间:2023-07-21 15:05:06浏览次数:52  
标签:plt Python 建模 50 shape train 数学 test import


文章目录

  • 前言
  • 往期文章
  • 1 多元回归
  • 1.1 选取数据
  • 1.2 构建训练集与测试集,并构建模型
  • 1.3 模型预测
  • 1.4 模型评估
  • 2 logistic回归
  • 2.1 鸢尾花数据集
  • 2.2 绘制散点图
  • 2.3 逻辑回归分析
  • 结语

前言

Hello!小伙伴!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
 
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
 
初学Python 小白阶段
文章仅作为自己的学习笔记 用于知识体系建立以及复习
题不在多 学一题 懂一题
知其然 知其所以然!

1 多元回归

注: 这里实在没有找到数据集
引用于:
以下代码未验证

1.1 选取数据

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl   #显示中文
def mul_lr():
    pd_data=pd.read_excel('../profile/test.xlsx')
    print('pd_data.head(10)=\n{}'.format(pd_data.head(10)))
font = {
    "family": "Microsoft YaHei"
}
matplotlib.rc("font", **font)
mpl.rcParams['axes.unicode_minus']=False 
sns.pairplot(pd_data, x_vars=['中证500','泸深300','上证50','上证180'], y_vars='上证指数',kind="reg", size=5, aspect=0.7)
plt.show()

Python数学建模系列(九):回归_python

1.2 构建训练集与测试集,并构建模型

from sklearn.model_selection import train_test_split #这里是引用了交叉验证
from sklearn.linear_model import LinearRegression  #线性回归
from sklearn import metrics
import numpy as np
import matplotlib.pyplot as plt
def mul_lr():   #续前面代码
    #剔除日期数据,一般没有这列可不执行,选取以下数据
    X=pd_data.loc[:,('中证500','泸深300','上证50','上证180')]
    y=pd_data.loc[:,'上证指数']
    X_train,X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2,random_state=100)
    print ('X_train.shape={}\n y_train.shape ={}\n X_test.shape={}\n,  y_test.shape={}'.format(X_train.shape,y_train.shape, X_test.shape,y_test.shape))
    linreg = LinearRegression()
    model=linreg.fit(X_train, y_train)
    print (model)
    # 训练后模型截距
    print (linreg.intercept_)
    # 训练后模型权重(特征个数无变化)
    print (linreg.coef_)

1.3 模型预测

#预测
y_pred = linreg.predict(X_test)
print (y_pred) #10个变量的预测结果

1.4 模型评估

#评价
    #(1) 评价测度
    # 对于分类问题,评价测度是准确率,但这种方法不适用于回归问题。我们使用针对连续数值的评价测度(evaluation metrics)。
    # 这里介绍3种常用的针对线性回归的测度。
    # 1)平均绝对误差(Mean Absolute Error, MAE)
    # (2)均方误差(Mean Squared Error, MSE)
    # (3)均方根误差(Root Mean Squared Error, RMSE)
    # 这里我使用RMES。
    sum_mean=0
    for i in range(len(y_pred)):
        sum_mean+=(y_pred[i]-y_test.values[i])**2
    sum_erro=np.sqrt(sum_mean/10)  #这个10是你测试级的数量
    # calculate RMSE by hand
    print ("RMSE by hand:",sum_erro)
    #做ROC曲线
    plt.figure()
      plt.plot(range(len(y_pred)),y_pred,'b',label="predict")
     plt.plot(range(len(y_pred)),y_test,'r',label="test")
    plt.legend(loc="upper right") #显示图中的标签
    plt.xlabel("the number of sales")
    plt.ylabel('value of sales')
    plt.show()

Python数学建模系列(九):回归_数据集_02

2 logistic回归

2.1 鸢尾花数据集

鸢尾花有三个亚属,分别是山鸢尾(Iris-setosa)、变色鸢尾(Iris- versicolor)和维吉尼亚鸢尾(Iris-virginica)。

该数据集一共包含4个特 征变量,1个类别变量。共有150个样本,iris是鸢尾植物,这里存储了其萼片 和花瓣的长宽,共4个属性,鸢尾植物分三类。

Python数学建模系列(九):回归_数据集_03

2.2 绘制散点图

Demo代码

import matplotlib.pyplot as plt 
import numpy as np 
from sklearn.datasets import load_iris 
iris = load_iris()
#获取花卉两列数据集  
DD = iris.data  
X = [x[0] for x in DD]  
Y = [x[1] for x in DD] 
plt.scatter(X[:50], Y[:50], color='red', marker='o', label='setosa') 
plt.scatter(X[50:100], Y[50:100], color='blue', marker='x', label='versicolor') 
plt.scatter(X[100:], Y[100:],color='green', marker='+', label='Virginica') 
plt.legend(loc=2) #左上角 
plt.show()

运行结果

Python数学建模系列(九):回归_python_04

2.3 逻辑回归分析

Demo代码

from sklearn.linear_model import LogisticRegression 
iris = load_iris() 
X = iris.data[:, :2]   #获取花卉两列数据集 
Y = iris.target 
lr = LogisticRegression(C=1e5)    
lr.fit(X,Y) 
#meshgrid函数生成两个网格矩阵  
h = .02  
x_min, x_max = X[:, 0].min()-.5, X[:, 0].max()+.5 
y_min, y_max = X[:, 1].min()-.5, X[:, 1].max()+.5 
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) 
Z = lr.predict(np.c_[xx.ravel(), yy.ravel()]) 
Z = Z.reshape(xx.shape)  
plt.figure(1, figsize=(8,6))  
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired) 
plt.scatter(X[:50,0], X[:50,1], color='red',marker='o', label='setosa')  
plt.scatter(X[50:100,0], X[50:100,1], color='blue', marker='x', label='versicolor')
plt.scatter(X[100:,0], X[100:,1], color='green', marker='s', label='Virginica') 
plt.xlabel('Sepal length')  
plt.ylabel('Sepal width')  
plt.xlim(xx.min(), xx.max())  
plt.ylim(yy.min(), yy.max())  
plt.xticks(())  
plt.yticks(())  
plt.legend(loc=2)   
plt.show()

运行结果

Python数学建模系列(九):回归_Python_05

结语

学习来源:B站及其课堂PPT,对其中代码进行了复现

https://www.bilibili.com/video/BV12h411d7Dm 参考资料:

文章仅作为学习笔记,记录从0到1的一个过程

希望对您有所帮助,如有错误欢迎小伙伴指正~

Python数学建模系列(九):回归_数学建模_06


标签:plt,Python,建模,50,shape,train,数学,test,import
From: https://blog.51cto.com/u_15939722/6800494

相关文章

  • Python数学建模系列(六):蒙特卡洛算法
    文章目录前言往期文章1、蒙特卡洛算法样例1样例2样例32、三门问题3、M*M豆问题结语前言Hello!小伙伴!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖......
  • Python基础day01
    1.编码1.1计算机中所有的数据本质上由0和1来存储。注意:以什么编码保存就以什么编码打开否则会乱码。1.2pycharm运行地址:前面:python解释器地址后面:py文件地址 默认python解释器以'utf-8'编码打开文件。2.输入#将结果呈现给客户,print会在尾部加换行符print("xxx")#en......
  • python excel 怎么换行列
    PythonExcel换行列的解决方案在处理Excel文件时,有时候需要将一列的数据进行换行操作,即将一列的数据拆分为多行显示。本文将介绍如何使用Python解决这个问题。准备工作首先,我们需要安装openpyxl库,它是一个用于处理Excel文件的Python库。可以使用以下命令进行安装:pipinstallop......
  • python sip freeswitch
    PythonSIPandFreeSWITCHIntroductionInthisarticle,wewillexplorehowtousePythontointeractwithFreeSWITCH,anopen-sourcetelephonyplatform.WewillspecificallyfocusonutilizingtheSessionInitiationProtocol(SIP)moduleinPythontoest......
  • python excel 去掉多列
    PythonExcel去掉多列实现方法引言在日常的数据处理工作中,经常会遇到需要处理Excel文件的情况,其中一项常见的操作是去掉不需要的列。本文将教你如何使用Python来实现去掉多列操作。整体流程以下是去掉多列的步骤概览:步骤描述步骤一打开Excel文件步骤二选择要去......
  • python set保存
    Pythonset保存的实现方法一、整体流程下面是实现“Pythonset保存”的步骤和对应的代码:步骤代码步骤1创建一个空的set变量步骤2使用add()方法向set中添加元素步骤3使用update()方法向set中添加另一个set或者list中的元素步骤4使用remove()方法从set中删......
  • python draw.text字体粗细
    Python绘制文本字体粗细作为一名经验丰富的开发者,你可以帮助新手学会如何在Python中绘制具有不同字体粗细的文本。在本文中,我们将通过以下步骤来实现这个目标:导入必要的库创建画布和绘图对象设置字体样式和大小绘制文本让我们一步步来进行详细说明。1.导入必要的库在开......
  • python session post传xml格式
    PythonSessionPost传递XML格式1.简介在本文中,我将向你介绍如何使用Python中的requests模块通过Session发送POST请求并传递XML格式的数据。我们将使用以下步骤来完成这个任务:创建一个Session对象构建POST请求发送请求并获取响应处理响应数据在下面的表......
  • Python多进程使用案例
    Python多进程使用案例为什么推荐多进程?由于python解释器GIL锁的存在,python中的多线程并不是真的多线程,事实上是在一个cpu内核上运行的,无法调用电脑的多核性能,就出现了一个人干活,剩下几个人在旁边围观的经典场景。那么为了更好的提升性能,在一定情况下是推荐使用多进程模式实现功......
  • python之地图类信息爬取
    importrequestsimportbs4importMysqlimporttimeimportpymysqldb=pymysql.connect(host="localhost",port=3306,user='root',password='Njx200259',db="sjz_kg")update=db.cursor()head={"User-Agent&q......