上次我们用多项式回归预测了天猫的2019年销售额:《Python 多项式预测2019年天猫销售额》。今天的文章同样教大家怎么进行预测,不过对象换成2019年人口出生率。
今天我们将使用多项式回归模型预测2019年的中国人口出生率。
1.准备
在中华人民共和国国家统计局官方网站上下载过去20年的人口出生率数据:http://data.stats.gov.cn/easyquery.htm?cn=C01
数据如下,我们仅取人口出生率作为我们的数据集。
2.数据预测
以下教程默认你已经安装好了Python并可以在CMD或Terminal中使用pip,如果没有请看这篇文章:安装python,同上一节预测2019年天猫销售额一样,没有太多的改变,但是我们需要找到最合适的曲线,而不是一上来就用三元回归曲线:
2.1 数据预处理
# 数据集 datasets_X = [1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018] datasets_Y = [14.64, 14.03, 13.38, 12.86, 12.41, 12.29, 12.4, 12.09, 12.1, 12.14, 11.95, 11.9, 11.93, 12.1, 12.08, 12.37, 12.07, 12.95, 12.43, 10.94] test_X = [2019] # 数据预处理 dataset_length = len(datasets_X) test_length = len(test_X) # 将数据转化为numpy数组 datasets_X = np.array(datasets_X).reshape([dataset_length, 1]) test_X = np.array(test_X).reshape([test_length, 1]) datasets_Y = np.array(datasets_Y)
2.2 数据可视化
将已有的数据显示出来,并用蓝点作为标记,将每一年的横坐标都显示出来。曲线我们从二元回归曲线开始慢慢找到最符合数据趋势的曲线。
# 构造多项式特征 poly_reg = PolynomialFeatures(degree=2) X_poly = poly_reg.fit_transform(datasets_X) # 使用线性回归模型学习X_poly和datasets_Y之间的映射关系 lin_reg = LinearRegression() lin_reg.fit(X_poly, datasets_Y) # 数据可视化 # 蓝色显示训练数据点 plt.scatter(datasets_X, datasets_Y, color='blue') # X轴 my_x_ticks = np.arange(1998, 2020, 1) plt.xticks(my_x_ticks) # 绘制线 X = np.arange(1998, 2020).reshape([-1, 1]) plt.plot(X, lin_reg.predict(poly_reg.fit_transform(X)), color='black') plt.xlabel('Years') plt.ylabel('Born rate') plt.show()
运行代码结果如下:
显然二元回归曲线并不是非常适合这些数据,有许多点分布在离直线很远的距离。让我们试试三元回归曲线,修改poly_reg变量的degree,设为3:
poly_reg = PolynomialFeatures(degree=3)
结果如下:
感觉有辣么点意思了,再试试四元回归曲线:
发现和三元回归曲线相比没有太大的变化,那我们选三元回归曲线进行预测就可以了。
2.3 数据建模
# 数据建模 # 构造三次多项式特征 poly_reg = PolynomialFeatures(degree=3) X_poly = poly_reg.fit_transform(datasets_X) # 使用线性回归模型学习X_poly和datasets_Y之间的映射关系 lin_reg_3 = LinearRegression() lin_reg_3.fit(X_poly, datasets_Y) data = poly_reg.fit_transform(test_X) pred = lin_reg_3.predict(data) print(pred)
预测的2019人口出生率的值为:[ 11.25692317],使用黄点表示该预测的值,得到的曲线图如下:
似乎是条挺合理的曲线,让我们拭目以待今年的人口出生率会不会是11.25,到时候记得翻出这篇文章来看看。
如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们会耐心解答的!
Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典
评论(0)