python学习4

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: python学习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)+b
    return np.sum((y_pred-y)**2)


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


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


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


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


  1. 平方误差通过计算预测值 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 相等。


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


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


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


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


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


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


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


  1. 使用 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'] = False
 
xlsx_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.index
        price.index=group_data.index
        sale_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)+b
    return 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}")
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
24天前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
43 3
|
29天前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
33 4
|
2月前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
324 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
5天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
7天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
11天前
|
存储 程序员 Python
Python学习的自我理解和想法(2)
今日学习Python第二天,重点掌握字符串操作。内容涵盖字符串介绍、切片、长度统计、子串计数、大小写转换及查找位置等。通过B站黑马程序员课程跟随老师实践,非原创代码,旨在巩固基础知识与技能。
|
10天前
|
程序员 Python
Python学习的自我理解和想法(3)
这是学习Python第三天的内容总结,主要围绕字符串操作展开,包括字符串的提取、分割、合并、替换、判断、编码及格式化输出等,通过B站黑马程序员课程跟随老师实践,非原创代码。
|
7天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
6天前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
7天前
|
存储 索引 Python
Python学习的自我理解和想法(4)
今天是学习Python的第四天,主要学习了列表。列表是一种可变序列类型,可以存储任意类型的元素,支持索引和切片操作,并且有丰富的内置方法。主要内容包括列表的入门、关键要点、遍历、合并、判断元素是否存在、切片、添加和删除元素等。通过这些知识点,可以更好地理解和应用列表这一强大的数据结构。
下一篇
DataWorks