python用最小二乘法分析数据趋势以及做数据预测
2017-11-08 11:36
1246 查看
1. 背景
目前有某个产品每天的销量数据,想通过这些数据看这个产品的销量趋势。2. 原理
参考文章:最小二乘法
http://blog.csdn.net/yang6464158/article/details/24477547
机器学习经典算法之—–最小二乘法
http://www.cnblogs.com/iamccme/archive/2013/05/15/3080737.html
最小二乘法的本质是什么?
https://www.zhihu.com/question/37031188
3. 代码
import numpy from scipy.optimize import leastsq import pylab def zuixiaoerchen(arrayY, picTitle): print(f"arrayY: {arrayY}") print(f"picTitle: {picTitle}") if len(arrayY) == 0: return [0, 0, 0] # 取得最大销量,作为纵坐标的峰值标准 maxValue = max(arrayY) # 设置横坐标和纵坐标的值 # def arange(start=None, stop=None, step=None, dtype=None) x = numpy.arange(1, len(arrayY) + 1, 1) # def array(p_object, dtype=None, copy=True, order='K', subok=False, ndmin=0) y = numpy.array(arrayY) # 第1個拟合,设置自由度為1 : (y = ax + b) z = numpy.polyfit(x, y, 1) # z: [ 0.46428571 13.35238095] print(f"z: {z}") # 生成的多項式對象(y = ax + b) p = numpy.poly1d(z) # p: -0.1448x + 13.23 print(f"p: {p}") if z[0] > 0: # 绘制原曲线及 拟合后的曲线 # 原曲线 , 设置颜色(蓝色)和标签 pylab.plot(x, y, 'b^-', label='original sales growth') # 自由度为1的趋势曲线, 设置颜色(蓝色)和标签 pylab.plot(x, p(x), 'gv--', label=f'y = {z[0]}x + {z[1]}') # 设置图表的title pylab.title(f"picTitle: {picTitle}") # 设置横坐标,纵坐标的范围 [xmin=0, xmax=16, ymin=0, ymax=30] pylab.axis([0, len(arrayY) + 1, 0, maxValue + 1]) pylab.legend() # 保存成图片,需要提前创建文件夹 Growth,程序不会自动创建 pylab.savefig(f"Growth/{picTitle}.png", dpi=96) # 清除图表设置,以防止曲线多次累计 # 如果不清除,那么在这个程序运行起见,多次调用这个函数时,会不断将之前的曲线累计到新图片中 pylab.clf() return [z[0], z[1], maxValue] if __name__ == '__main__': # 用最小二乘法,生成销量趋势 sales = [10, 15, 8, 20, 16, 19, 11, 30, 21, 15, 19, 17, 16, 22, 17] a, b, maxSale = zuixiaoerchen(sales, "sales Growth") growth = a maxSale = maxSale print(f"growth = {growth}, maxSale = {maxSale}") # 输出结果 arrayY: [10, 15, 8, 20, 16, 19, 11, 30, 21, 15, 19, 17, 16, 22, 17] picTitle: sales Growth z: [ 0.46428571 13.35238095] p: 0.4643 x + 13.35 growth = 0.4642857142857137, maxSale = 30
生成结果
4. 拓展
上例中,为了查看趋势采用的是一次方程,只需要看直线斜率判断趋势。 如果是要预测数据的话,那么模拟出来的曲线应该是越接近数据本身为好。而最小二乘法模拟的是一个多项式函数,理论上来讲,多项式指数越高(上面提到的自由度越大),越接近数据本身。相关文章推荐
- HDFS数据资源使用量分析以及趋势预测
- HDFS数据资源使用量分析以及趋势预测
- Python数据分析基础模块:Anaconda的安装以及简单使用
- LSTM模型分析及对时序数据预测的具体实现(python实现)
- 学习Python数据分析(2.1)----Numpy数组以及数组的操作
- LSTM模型分析及对时序数据预测的具体实现(python实现)
- Python数据分析与机器学习-泰坦尼克获救预测
- 利用python进行泰坦尼克生存预测——数据探索分析
- 2014年大数据和数据分析发展趋势预测
- Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
- Python中如何使用以及去除时间序列数据中的趋势信息
- 用python理解数据---房价预测数据可视化分析kernel读后感
- 阿里云音乐流行趋势预测数据清洗整合——纯python,没有用数据库
- 2014年大数据和数据分析发展趋势预测
- 利用Python进行数据分析——第8章绘图及可视化——学习笔记Python3 5.0.0
- Python数据分析(二): Pandas技巧 (2)
- 用 python 做数据分析:pandas 的 excel 应用初探
- Python 数据分析(一) 本实验将学习 pandas 基础,数据加载、存储与文件格式,数据规整化,绘图和可视化的知识
- 数据加载、存储与文件格式 利用Python进行数据分析 第6章
- 用 Python 进行数据分析,不懂 Python,求合适的 Python 书籍或资料推荐?