python学习4

大家好,这里是七七,今天带来的例子是双对数模型回归代码.总的代码会在文章最后处

本文的风格依旧是面向新手的基础性介绍内容。

目录

库介绍

一、numpy库

二、scipy库

三、sklearn库

代码1

代码2 

 代码3

代码4

代码五

总代码


库介绍

一、numpy库

NumPy是Python中一个用于科学计算的第三方库,它提供了ndarray(N-dimensional array)对象,可以用来表示多维数组。NumPy本身包含了大量基础的数学、统计和线性代数运算函数,例如向量和矩阵运算、随机数生成、傅里叶变换等等。由于NumPy能够进行高效的矩阵计算,因此它成为了很多科学计算库的基础库,例如SciPy、pandas等。

NumPy中最重要的对象是ndarray,它是一个固定类型、多维数组。单个ndarray对象只能存储一种类型的数据,比如整数、浮点数、布尔值等等。NumPy提供了很多运算函数来操作ndarray对象,例如:

  • 创建ndarray对象:可以通过 NumPy 提供的一些函数(例如 np.array()np.zeros()np.ones() 等等)来创建 ndarray 对象;
  • 索引、切片和迭代:ndarray 对象可以和 Python 的内置序列类型一样进行索引、切片和迭代;
  • 形状操作:ndarray 对象可以通过 reshape() 函数改变数组的形状,或者通过 flatten() 函数将多维数组转换为一维数组;
  • 数组拼接和分裂:可以使用 concatenate() 函数将多个数组拼接在一起,或者使用 split() 函数将一个数组分裂为多个子数组;
  • 数组运算:NumPy提供了大量的数学运算函数,例如加减乘除、三角函数、指数函数、对数函数等等;
  • 比较运算:可以使用比较运算符、等价运算符或逻辑运算符来比较数组中的元素,或者使用unique() 函数查找数组中的相同元素;
  • 矩阵计算:NumPy提供了很多用于矩阵计算的函数,例如计算矩阵的转置、求解线性方程组、矩阵的行列式、特征值和特征向量等等。

总之,NumPy 提供了大量的高效计算功能,使得 Python 成为了数据分析、机器学习、科学计算等领域的首选语言。在使用 NumPy 进行科学计算时,需要注意数组对象的维度、数据类型等性质,以便于进行各种操作和计算。

二、scipy库

SciPy(Scientific Python)是一个基于NumPy构建的开源的Python科学计算库。它提供了许多常用的科学计算和数据分析功能,包括数值积分、优化、插值、信号和图像处理、线性代数、统计分布以及一些特殊函数等。SciPy在科学计算、工程、计算机视觉、机器学习等领域得到广泛应用。

SciPy涵盖了许多不同的子模块,每个子模块都关注特定领域的功能和应用。下面是一些常见的SciPy子模块以及它们的主要功能:

- `scipy.optimize`:提供了优化算法的函数,用于最小化或最大化目标函数。
- `scipy.integrate`:提供了数值积分算法的函数,可用于求解单变量或多变量的定积分。
- `scipy.interpolate`:提供了插值函数的工具,用于拟合和重构数据。
- `scipy.signal`:提供了信号处理工具,包括滤波、频谱分析、信号生成等。
- `scipy.linalg`:提供了线性代数函数,用于矩阵运算、求解线性方程组和特征值问题等。
- `scipy.stats`:提供了统计分布和随机变量的函数,用于生成随机样本、计算统计量等。
- `scipy.spatial`:提供了空间数据结构和算法的函数,用于处理空间数据和几何计算。
- `scipy.special`:提供了一些特殊函数,如伽玛函数、贝塞尔函数等。
- `scipy.io`:提供了用于读写各种数据格式的函数,如Matlab文件、NetCDF文件等。
- `scipy.ndimage`:提供了对n维图像数据进行滤波、变换和测量的函数。

除了以上的子模块外,SciPy还提供了许多其他功能,如优化工具包`scipy.optimize`、稀疏矩阵工具包`scipy.sparse`、图像处理工具包`scipy.ndimage`等。这些功能使得SciPy成为一个全面且强大的科学计算库,能够满足各种科学计算和数据分析的需求。

总之,SciPy是一个基于NumPy的Python科学计算库,提供了丰富的函数和工具,用于数值计算、优化、插值、信号处理、线性代数、统计分析以及其他科学计算领域的功能。它与其他Python科学计算库(如NumPy、Matplotlib和pandas)互补,使得Python成为了一种强大的科学计算语言。

三、sklearn库

scikit-learn(简称sklearn)是一个基于Python的机器学习库,提供了丰富的工具和函数,用于数据挖掘和数据分析。它建立在NumPy、SciPy和matplotlib等科学计算库之上,提供了各种机器学习算法和数据预处理技术,使得开发者可以快速、高效地构建和应用各种机器学习模型。

以下是scikit-learn库的主要特点和提供的功能:

1. 一致的API:scikit-learn提供了一致的、基于类的API,使得使用各种不同的机器学习算法变得简单和一致。这使得开发者可以轻松地尝试不同的算法,并对其进行比较和评估。

2. 丰富的机器学习算法:scikit-learn支持包括分类、回归、聚类、降维、模型选择等多种机器学习算法。其中包括最近邻、决策树、支持向量机、线性回归、逻辑回归、聚类算法(如k-means)等。

3. 数据预处理功能:scikit-learn提供了用于数据预处理的工具,包括特征提取、特征缩放、特征选择、数据清洗等。这些工具使得数据准备过程更加简单和高效。

4. 模型评估和选择:scikit-learn提供了评估和选择不同模型的工具,包括交叉验证、网格搜索、模型比较等。这些工具可以帮助开发者选择最佳的模型,并对模型的性能进行评估。

5. 效率和可扩展性:scikit-learn基于优化的C和C++实现,具有高效和可扩展的特点。它支持并行计算,在大规模数据集上能够快速处理。

6. 用于数据可视化的工具:scikit-learn提供了一些工具,用于将数据可视化为图形,帮助开发者更好地理解和分析数据。

总之,scikit-learn是一个功能丰富、易于使用且高效的Python机器学习库。它提供了各种机器学习算法和数据预处理工具,使得开发者可以轻松地构建和应用机器学习模型,并进行数据分析和挖掘。它的文档详尽,拥有广泛的用户社区,为开发者提供了广阔的机器学习领域实践应用和资源。

代码1

from scipy.optimize import minimize

`scipy.optimize.minimize` 是 SciPy 库中的一个函数,用于最小化多元函数的目标值。它提供了多种优化算法,可以用于解决无约束或有约束的最小化问题。

具体来说,`minimize` 函数的使用方法如下:
from scipy.optimize import minimize

result = minimize(fun, x0, method=None, bounds=None, constraints=None)

其中参数的含义如下:

- `fun`:目标函数,即需要最小化的函数。可以是一个 Python 函数或方法。
- `x0`:初始猜测值,即优化变量的初始值。
- `method`:优化算法的选择。可选参数,默认为 `None`,表示使用默认算法(`BFGS`)。
- `bounds`:变量的取值范围。可选参数,默认为 `None`,表示无约束问题。
- `constraints`:约束条件。可选参数,默认为 `None`,表示无约束问题。

`minimize` 函数返回一个 `OptimizeResult` 对象,其中包含了最优解的估计值、目标函数的最小值等信息。

`minimize` 函数提供了多种优化算法,包括无约束优化算法(如 `BFGS`、`Nelder-Mead`、`Powell` 等)、约束优化算法(如 `COBYLA`、`SLSQP` 等)、全局优化算法(如 `differential_evolution`)等。通过指定 `method` 参数,可以选择不同的算法来求解最小化问题。根据具体的问题和约束条件,可以选择合适的算法来获得最佳的结果。

除了 `minimize` 函数,SciPy 的 `optimize` 模块还提供了其他一些用于优化的函数,例如最大化问题的求解函数 `scipy.optimize.maximize`、曲线拟合函数 `scipy.optimize.curve_fit` 等等。

总之,`scipy.optimize.minimize` 函数是 SciPy 库中用于最小化多元函数的优化函数,通过指定目标函数和初始值,可以使用不同的优化算法求解无约束或有约束的最小化问题。

代码2 

from sklearn.metrics import mean_squared_error,r2_score,mean_absolute_error

这是在Python中使用sklearn中的metrics模块,导入了如下三个方法:

1. `mean_squared_error(y_true, y_pred)`: 均方误差,是常用的衡量模型预测准确度的指标。它的计算方法为预测值与真实值之差的平方和的均值,公式为:

MSE = 1/n * ∑(y_true_i - y_pred_i)^2,其中n表示样本数量。

2. `r2_score(y_true, y_pred)`: R平方系数,是用来描述两个变量之间的线性关系的强度的常用指标。其取值范围为-∞到1,R²为1表示完美拟合,为0表示预测能力为随机准确率,为负数表示预测结果比随机还糟糕。其计算方法是将总变异分为已解释的变异和未解释的变异两部分,并将已解释的变异占总变异的比例作为模型拟合的好坏程度的指标,公式为:R² = 1 - (SS_res / SS_tot),其中SS_res表示残差平方和,SS_tot表示总平方和。

3. `mean_absolute_error(y_true, y_pred)`: 平均绝对误差,是衡量模型预测准确度的指标之一。其计算方法为预测值和真实值差值的绝对值的平均数,公式为:MAE = 1/n * ∑|y_true_i - y_pred_i|,其中n表示样本数量。

这三个方法都是用于评估机器学习模型的性能表现的指标。在模型训练完毕后,可以使用这些方法对模型的预测结果进行评估,从而调整模型的超参数,提高模型的准确度和泛化能力。

 代码3

y=data.iloc[:,1]
x=data.iloc[:,-7:]
  • y = data.iloc[:, 1]:这行代码将 data DataFrame 的所有行(:)中的第二列(索引1)提取出来,赋值给变量 y。它表示选取 DataFrame 中的一列作为因变量或目标变量。

  • x = data.iloc[:, -7:]:这行代码将 data DataFrame 的所有行(:)中的倒数第七列(索引-7)到最后一列的数据提取出来,赋值给变量 x。它表示选取 DataFrame 中的一部分列作为自变量或特征变量。

`iloc` 是 pandas 中用于按位置(行和列的索引)提取数据的方法,它的作用是通过整数位置进行数据的定位和选择。

`iloc` 的语法为 `dataframe.iloc[row_index, column_index]`,其中 `dataframe` 表示要进行操作的 DataFrame,`row_index` 表示行的索引位置,`column_index` 表示列的索引位置。

`iloc` 的主要特点是使用整数索引进行选取,不像 `loc` 方法那样使用标签进行选取。它接受的索引可以是单个整数、整数列表、整数切片或布尔数组。使用整数索引可以确切地按照位置选取数据,与数据的索引名称无关。

以下是一些常见的用法:

- 单个整数:`dataframe.iloc[3]` 表示选取第4行的数据。
- 整数列表:`dataframe.iloc[[1, 3, 5]]` 表示选取第2、4、6行的数据。
- 整数切片:`dataframe.iloc[2:5]` 表示选取第3到第5行的数据。
- 布尔数组:`dataframe.iloc[boolean_array]` 表示根据布尔数组选取对应位置为 `True` 的行的数据。

类似地,可以在 `column_index` 中使用相同的方式选择列。使用 `iloc` 可以根据行和列的位置灵活地提取数据,非常适用于需要按位置进行数据选择和操作的情况。

代码4

def objective(params,x,y):a=params[:-1]b=params[-1]y_pred=np.dot(x,a)+breturn np.sum((y_pred-y)**2)

这是一个定义了一个目标函数 objective 的 Python 函数。该函数有三个参数:paramsx,和 y。函数的目标是通过计算数据 x 经过线性变换后的预测值 y_pred,并计算预测值和真实值 y 的平方误差之和。

具体来说,函数的实现如下:

  1. 函数接受一个参数 params,它是一个包含模型权重和偏差的数组。通过将 params 划分为除最后一个元素以外的部分 a 和最后一个元素 b,可以获得模型权重和偏差。

  2. 预测值 y_pred 通过将数据 x 与权重 a 做点积,再加上偏差 b 得到。

  3. 平方误差通过计算预测值 y_pred 与真实值 y 的差的平方,然后求和得到。

最终,函数 objective 返回预测值与真实值的平方误差之和。

代码五

#定义约束条件
constraints=({'type':'eq','fun':lambda params:np.sum(params[:-1]-1)})
#初始参数猜测
initial_guess=np.random.rand(8)
#最小化目标函数
result=minimize(objective,initial_guess,args=(x,y),constraints=constraints)
#获取带约束条件的多元线性回归结果
coefficients=result.x[:-1]
intercept=result.x[-1]
#输出多元线性回归结果
print(f"Cofficients(系数):{coefficients}")
print(f"Intercept(截距):{intercept}")
#使用模型进行预测
y_pred=np.dot(x,coefficients)+intercept
#计算均方误差(MSE)
mse=mean_squared_error(y,y_pred)
#计算R平方(R-squared)
r2=r2_score(y,y_pred)
#计算平均绝对误差(MAE)
mae=mean_squared_error(y,y_pred)
  1. 首先定义了一个约束条件,使用 'type':'eq' 指定了等式类型的约束条件,并使用 lambda 函数将约束条件定义为参数 params 的元素之和与 1 相等。

  2. 定义了用于初始参数猜测的 initial_guess,它是一个包含 8 个随机值的数组。

  3. 使用 minimize 函数最小化目标函数 objective,传入初始参数猜测 initial_guess、数据 (x, y),以及约束条件 constraints

  4. 从最小化结果 result 中获取带约束条件的多元线性回归的系数 coefficients,并获取截距 intercept

  5. 输出多元线性回归的系数和截距。

  6. 使用获得的模型参数进行预测,计算预测值 y_pred

  7. 使用 mean_squared_error 函数计算均方误差(MSE)。

  8. 使用 r2_score 函数计算R平方(R-squared)。

  9. 使用 mean_absolute_error 函数计算平均绝对误差(MAE)。

总代码

import pandas as pd
import numpy as np
from scipy.optimize import minimize
from sklearn.metrics import mean_squared_error,r2_score,mean_absolute_error
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = [u'simHei']
plt.rcParams['axes.unicode_minus'] = Falsexlsx_file = 'data/附件1.xlsx'
df_1 = pd.read_excel(xlsx_file)
xlsx_file = 'data/附件2.xlsx'
data = pd.read_excel(xlsx_file)data['销售日期']=pd.to_datetime(data['销售日期'])mapping_dict=df_1.set_index('单品编码')['分类名称'].to_dict()
data['品类']=data['单品编码'].map(mapping_dict)grouped=data.groupby("品类")
sale_num=pd.DataFrame()
price=pd.DataFrame()for group_name,group_data in grouped:print(group_name)group_data=group_data[["销售日期","销量(千克)","销售单价(元/千克)"]]group_data=group_data.set_index("销售日期")if group_name=="水生根茎类":sale_num.index=group_data.indexprice.index=group_data.indexsale_num=sale_num.join(group_data["销量(千克)"].rename(group_name),on="销售日期",how="left")price=price.join(group_data["销售单价(元/千克)"].rename(group_name),on="销售日期",how="left")
sale_num.fillna(0)
price.fillna(0)data=pd.read_excel("./double/oduble_log.xlsx")
data=data.fillna(0)y=data.iloc[:,1]
x=data.iloc[:,-7:]#定义多元线性回归的目标函数(最小二乘法)
def objective(params,x,y):a=params[:-1]b=params[-1]y_pred=np.dot(x,a)+breturn np.sum((y_pred-y)**2)#定义约束条件
constraints=({'type':'eq','fun':lambda params:np.sum(params[:-1]-1)})
#初始参数猜测
initial_guess=np.random.rand(8)
#最小化目标函数
result=minimize(objective,initial_guess,args=(x,y),constraints=constraints)
#获取带约束条件的多元线性回归结果
coefficients=result.x[:-1]
intercept=result.x[-1]
#输出多元线性回归结果
print(f"Cofficients(系数):{coefficients}")
print(f"Intercept(截距):{intercept}")
#使用模型进行预测
y_pred=np.dot(x,coefficients)+intercept
#计算均方误差(MSE)
mse=mean_squared_error(y,y_pred)
#计算R平方(R-squared)
r2=r2_score(y,y_pred)
#计算平均绝对误差(MAE)
mae=mean_squared_error(y,y_pred)
print(f"均方误差(MSE):{mae}")
print(f"R平方(R-squared):{r2}")
print(f"平均绝对误差(MAE):{mae}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/231114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python函数装饰器基础举例

1 Python函数装饰器基础举例 1.1 用staticmethod统计实例数 描述 staticmethod后接def funcname, 效果等于 funcnamestaticmethod(funcname),只是书写简洁一些。 示例 >>> class CountInsBISM:numOfInstances0def __init__(self):CountIn…

设计模式——结构型

1.装饰器模式 要素:装饰器,装饰对象 为待装饰对象中某一结构特征添加内容,而不是新建一个特征 /*** 装饰对象*/ public interface Shape {public void draw(); } /*** 具体装饰对象*/ public class Circle implements Shape{private String…

计算机组成原理——校验码

计算机组成原理学习笔记——校验码-CSDN博客 校验码——海明码及码距,码距_海明码的码距是多少-CSDN博客 1 下列关于码距与检错与纠错能力的描述中正确的是 (ABC) (多选) A. 码距为1的编码不具备任何检错能力 B. 码…

社交网络分析4(上):社交网络链路预测分析、Logistic回归模型、LLSLP方法(LightGBM 堆叠链路预测)、正则化方法、多重共线性

社交网络分析4 写在最前面社交网络链路预测分析概述链路预测分析简介链路预测分析的重要性社交网络链路预测分析方法基于网络结构的方法基于节点属性的方法基于随机游走的方法基于深度学习的方法 基于相似性和基于似然性的链路预测方法基于相似性的方法基于邻居的方法基于路径的…

Linux shell编程学习笔记36:read命令

*更新日志 *2023-12-18 1.根据[美] 威廉肖特斯 (Willian shotts)所著《Linux命令行大全(第2版)》 更新了-e、-i、-r选项的说明 2.更新了 2.8 的实例,增加了gif动图 3.补充了-i的应用实例 2.1…

回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 (多指标,多图) 目录 回归预测 | MATLAB实现SABO-LSTM基于减法平均优化器优化长短期记忆神经网络的多输入单输出数据回归预测模型 &a…

01矩阵(课程F)

输入2个整数N和M,输出N行M列的的01数字矩阵。第1行第1个数是’1’,后面的数都和其左边或上面数相反(0和1称为相反)。例如:N4,M5时: 10101 01010 10101 01010 输入格式 第一行2个正整数:N和M&a…

【mysql】mysql的索引有哪些?聚簇索引和非聚簇索引又是个啥?

0 回答 聚簇索引 将数据存储与索引放到了一块,找到了索引也就找到了数据,当表有聚簇索引时,它的数据实际上存放在索引的叶子页上,也就是B树的叶子节点上,因为数据行不能存在两个地方,所以一个表只能有一个聚…

自清洗过滤器工作原理尺寸选型参数,内部结构,压差开关如何调节

​ 1:全自动自清洗过滤器设备介绍 全自动反冲洗过滤器是水净化过程中不可缺少的处理手段,用于拦截水中的各种杂质,以净化水质或保护系统中其他设备的正常工作。普通网式过滤器因其结构简单、过滤效果好、阻力小而广泛应用于水源过滤、工业循…

[RK-Linux] RK3399使用RK开源SPL,修改U-Boot为FIT打包方式,裁剪trust分区

文章目录 一、启动方式二、FIT打包三、RK3568相关配置参考四、RK3399支持与调试一、启动方式 RK3399平台根据前级Loader代码是否开源,目前有两套启动方式: // 前级loader闭源 BOOTROM => ddr bin => Miniloader => TRUST => U-BOOT => KERNEL // 前级loader…

神经网络可以计算任何函数的可视化证明

神经网络可以计算任何函数的可视化证明 对于神经网络,一个显著的事实就是它可以计算任何函数。 如下:不管该函数如何,总有神经网络能够对任何可能的输入x,输出值f(x) 即使函数有很多输入和输出&#xff0…

货物数据处理,pandas和openpyxl联合处理

处理文件题头格式 部门名称 年度名称 季节名称 商品名称 商品代码 品牌名称 品类名称 颜色名称 商店名称 0M 1L 1XL 27 28 29 2XL 30 31 32 33 3XL 4XL 5XL 6XL S 均1.导入包 导入源 pip install openpyxl -i https://pypi.doubanio.com/simple pip install pandas -i https…

Git提交前的必备神器——自动清除调试语句脚本

说在前面 不知道大家有没有遇到这样一种情况,平时在写代码调试时有时候会使用到debugger,可能大部分时间在提交代码前会记得把debugger先删除,但可能也会存在将debugger提交上去的情况,那我们该怎么防止出现这种情况呢&#xff1f…

RLC防孤岛负载测试:电力系统安全运行的重要保障

在电力系统中,孤岛效应是一个严重的问题,它可能导致电力系统的不稳定甚至崩溃。为了确保电力系统的安全运行,必须进行RLC防孤岛负载测试。RLC防孤岛负载测试是一种模拟电网故障后,对电力系统进行检测的方法,主要用于检…

在 linux上运行 Scratch,找到了更github 的项目地址,而且找到了scratch的官方项目。

1,关于Scratch Scratch 是麻省理工学院的“终身幼儿园团队”发布的一种图形化编程工具, 主要面对全球青少年开放,所有人都可以在软件中创作自己的程序。 2,在linux 上面还真有个默认的 scratch 版本 但是太老旧了。 于是找了下…

天猫数据分析平台-天猫销售数据查询软件-11月天猫平台冲锋衣市场销售运营数据分析

随着气温逐渐下降,保暖服饰迎来热销,冲锋衣的需求大增。如今冲锋衣已经不仅仅是户外运动的装备,还成为很多年轻人的日常穿搭和时尚的追求。 新的穿搭趋势也带来了巨大的市场机会。据公开数据显示,中国有冲锋衣生产及经营企业超过8…

分布式事务--TC服务的高可用和异地容灾

1.模拟异地容灾的TC集群 计划启动两台seata的tc服务节点: 节点名称ip地址端口号集群名称seata127.0.0.18091SHseata2127.0.0.18092HZ 之前我们已经启动了一台seata服务,端口是8091,集群名为SH。 现在,将seata目录复制一份&…

消息队列-broker

在消息队列系统中,Broker(代理)是指消息队列的中间件服务器,负责接收、存储和转发消息。它充当了消息发送者和接收者之间的中间人,协调消息的传递和处理。 具体来说,Broker在消息队列中扮演以下角色&#…

9. DashBoard

9. DashBoard 文章目录 9. DashBoard9.1 部署Dashboard9.2 使用DashBoard 在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。 为了提供更丰富的用户体验,kubernetes还开发了一个基于web的用户界面(Dashboard)。 用户可以使用…

入门Linux操作系统,一定要学会这70个命令!

【关注微信公众号:跟强哥学SQL,回复“笔试”免费领取大厂SQL笔试题。】 一、文件和目录管理 ls:列出目录下的内容。 cd:改变当前目录。 pwd:显示当前工作目录。 mkdir:创建新目录。 rm:删除…