有一些前置知识比较简单,就不累述了。
今天说一下scipy包
SciPy(Scientific Python)是一个用于科学计算和数据分析的开源Python库,它建立在NumPy库的基础上,提供了更多的功能和工具,用于处理科学和工程领域的各种问题。SciPy涵盖了许多数学、科学和工程领域的功能,包括优化、信号处理、统计分析、线性代数、插值、数值积分、图像处理等。
以下是SciPy库中一些常见模块和功能的简要介绍:
- 数学优化(scipy.optimize) :提供了各种优化算法,用于寻找函数的最小值或最大值,包括非线性最小二乘法、全局优化、约束优化等。
- 信号处理(scipy.signal) :提供了信号处理相关的函数,包括滤波、傅里叶变换、谱分析、卷积等。
- 统计分析(scipy.stats) :提供了多种统计分析工具,包括概率分布、假设检验、回归分析、描述性统计等。
- 插值(scipy.interpolate) :提供了各种插值算法,用于在已知数据点之间进行数据估计,如线性插值、样条插值等。
- 线性代数(scipy.linalg) :提供了线性代数相关的函数,包括矩阵运算、特征值计算、SVD分解等。
- 数值积分(scipy.integrate) :提供了数值积分的方法,包括定积分、数值微分等。
- 图像处理(scipy.ndimage) :提供了图像处理相关的函数,包括图像过滤、形态学操作、图像变换等。
- 空间距离和坐标转换(scipy.spatial) :提供了空间距离计算和坐标转换的功能。
- 稀疏矩阵(scipy.sparse) :提供了处理稀疏矩阵的方法,用于在节省内存的同时进行线性代数计算。
线性回归
import matplotlib.pyplot as plt
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
重点语句,slope, intercept, r, p, std_err = stats.linregress(x, y)
x,y就是散点图,找出线性回归的曲线,
slope(斜率):这个变量表示线性回归线的斜率,即回归线的倾斜程度。斜率代表了自变量(x)的单位变化引起因变量(y)的变化。intercept(截距):这个变量表示线性回归线与y轴的交点,即当自变量(x)为0时,对应的因变量(y)的值。它表示了回归线在y轴上的偏移。r(相关系数):这个变量表示Pearson相关系数,它衡量了x和y之间的线性关系的强度和方向。取值范围为-1到1,越接近1表示正相关,越接近-1表示负相关,越接近0表示没有线性关系。p(p值):这个变量表示线性回归分析的假设检验的p值。p值用于判断斜率是否显著不等于零,从而判断回归线是否能够有效地拟合数据。std_err(标准误差):这个变量表示回归线的标准误差,即回归线与真实数据之间的平均偏差。标准误差越小,表示回归线对数据的拟合程度越好。
根据斜率和截距就可以画出直线了。
多项式回归(Polynomial Regression)
import matplotlib.pyplot as plt
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
myline = numpy.linspace(1, 22, 100)
plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()
核心语句: NumPy 有一种方法可以让我们建立多项式模型:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
numpy.polyfit(x, y, 3):这个函数用于在给定的数据点(x, y)上进行多项式拟合。它的参数包括数据点的x值列表x、对应的y值列表y,以及指定要拟合的多项式次数,这里是3,表示拟合一个三次多项式。numpy.poly1d(...):这个函数将多项式系数转换为一个多项式对象,以便于进行多项式运算。它接受拟合多项式的系数作为参数,然后创建一个多项式对象。
问题,这里为什么要三次多项式,而不是二次呢。
回答:选择三次多项式拟合的主要基于尝试和实验,以及对数据拟合的预期形状。
然后指定行的显示方式,我们从位置 1 开始,到位置 22 结束:
myline = numpy.linspace(1, 22, 100)
numpy.linspace(start, stop, num) 是一个函数,用于生成一个等间隔的数值序列。具体来说:
start:起始值。stop:终止值。num:生成的样本数量,即要生成的序列中的元素个数。
计算相关度:
from sklearn.metrics import r2_score
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 2))
print(r2_score(y, mymodel(x)))