本文首要对LSTM神经网络完成我国人口猜测项目的数据处理部分进行讲解,首要包含数据根本处理,可视化,相关性剖析,缺失值及反常值检测等。

1. 项目简介

本项目将运用PaddlePaddle结构进行机器学习实战,依据指定数据集(我国人口数据集等)运用Paddle结构建立LSTM神经网络,包含数据预处理、模型构建、模型练习、模型猜测、猜测成果可视化等。

  • 咱们将依据我国人口数据会集的多个特征(features),例如:出世人口(万)、我国人均GPA(美元计)、我国性别份额(依照女生=100)、自然增长率(%)等8个特征字段,猜测我国未来总人口(万人)这1个标签字段。属于多输入,单输出LSTM神经网路猜测领域。
  • LSTM算法是一种重要的现在运用最多的时间序列算法,是一种特殊的RNN(Recurrent Neural Network,循环神经网络),可以学习长时间的依靠联系。

2. 数据集介绍

本项目运用的数据集为我国人口猜测数据集,包含10个字段,其间8个特征字段,1个标签字段,1个行索引字段,数据集各字段对应的数据类型如下表所示:

  • 有些字段为int64类型,需求经过相关的数据处理,才可传入模型进行练习。
  • 数据包含50条样本,因而应该合理确认练习数据、测试数据和验证数据
年份 出世人口(万) 总人口(万人) 我国人均GPA(美元计) 我国性别份额(依照女生=100) 自然增长率(%) 乡镇人口(乡镇+村庄=100) 村庄人口 美元兑换人民币汇率 我国就业人口(万人)
int64 int64 int64 int64 float64 float64 float64 float64 float64 int64

3. 实战演练

3.1 环境准备

%matplotlib inline
# 导入 paddle
import paddle
import paddle.nn.functional as F
# 导入其他模块
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
print(paddle.__version__)
import paddle.nn as nn

3.2 数据处理

3.2.1 导入数据

population = pd.read_csv("data/data140190/人口.csv")
population.head()

运转成果如下所示:

【机器学习】LSTM神经网络实现中国人口预测(1)

3.2.2 检查各字段类型

检查数据类型,由于练习时或许需求转化数据类型,才能传入神经网络。

population.dtypes

【机器学习】LSTM神经网络实现中国人口预测(1)

3.3 数据可视化

3.3.1 特征(features)折线图

制作出各个特征与年份索引之间的折线图,进行初步调查

由于数据会集包含中文字段,想要可以在绘图中正常显示中文,需求进行如下设定:

from pylab import mpl
from matplotlib.font_manager import FontProperties
myfont=FontProperties(fname=r'/usr/share/fonts/fangzheng/FZSYJW.TTF',size=12)
sns.

制作折线图:


from pylab import mpl
from matplotlib.font_manager import FontProperties
myfont=FontProperties(fname=r'/usr/share/fonts/fangzheng/FZSYJW.TTF',size=12)
sns.set(font=myfont.get_name())
titles = [
    "出世人口(万)",
    "总人口(万人)",
    "我国人均GPA(美元计)",
    "我国性别份额(依照女生=100)",
    "自然增长率(%)",
    "乡镇人口(乡镇+村庄=100)",
    "村庄人口",
    "美元兑换人民币汇率",
    "我国就业人口(万人)",
]
feature_keys = [
    "出世人口(万)",
    "总人口(万人)",
    "我国人均GPA(美元计)",
    "我国性别份额(依照女生=100)",
    "自然增长率(%)",
    "乡镇人口(乡镇+村庄=100)",
    "村庄人口",
    "美元兑换人民币汇率",
    "我国就业人口(万人)",
]
colors = [
    "blue",
    "chocolate",
    "green",
    "red",
    "purple",
    "brown",
    "darkblue",
    "black",
    "magenta",
]
date_time_key = "年份"
def show_raw_visualization(data):
    time_data = data[date_time_key]
    fig, axes = plt.subplots(
        nrows=3, ncols=3, figsize=(15, 15), dpi=100, facecolor="w", edgecolor="k"
    )
    for i in range(len(feature_keys)):
        key = feature_keys[i]
        c = colors[i % (len(colors))]
        t_data = data[key]
        t_data.index = time_data
        t_data.head()
        ax = t_data.plot(
            ax=axes[i // 3, i % 3],
            color=c,
            title="{}".format(titles[i], key),
            rot=25,
        )
        ax.legend([titles[i]])
    plt.tight_layout()
show_raw_visualization(population)

部分运转成果如下图所示:

  • 咱们想通过机器学习(建立LSTM神经网络)的手段对总人口变量进行猜测
  • 因而调查总人口变量的改变趋势折线图,可以发现总人口在时间段内的改变比较有规律,所以适用LSTM神经网络进行解决

【机器学习】LSTM神经网络实现中国人口预测(1)

3.3.2 箱型图

检查部分数据的分布情况,下面抽取了出世人口(万)、总人口(万人)、我国人均GPA(美元计)、我国就业人口(万人)这四个字段进行箱型图展示。


from pylab import mpl
from matplotlib.font_manager import FontProperties
myfont=FontProperties(fname=r'/usr/share/fonts/fangzheng/FZSYJW.TTF',size=12)
sns.set(font=myfont.get_name())
plt.figure(figsize=(15,8),dpi=100)
plt.subplot(1,4,1)
sns.boxplot(y="出世人口(万)", data=population, saturation=0.9)
plt.subplot(1,4,2)
sns.boxplot(y="总人口(万人)", data=population, saturation=0.9)
plt.subplot(1,4,3)
sns.boxplot(y="我国人均GPA(美元计)", data=population, saturation=0.9)
plt.subplot(1,4,4)
sns.boxplot(y="我国就业人口(万人)", data=population, saturation=0.9)
plt.tight_layout()

运转成果如下图所示:

  • 箱型图在数据处理中一般用来调查离群点(大于上下界反常点)
  • 由于本数据都是收集到真实数据,因而大于上下界的样本不做除掉

【机器学习】LSTM神经网络实现中国人口预测(1)

3.3.3 相关性剖析

相关性剖析在数据处理中用来检查变量两两之间的相关性

  • 剖析特征之间的相关性:可以考虑将两个相关性较强的特征挑选一个进行保存,由于本数据集特征字段不是许多,就不考虑除掉了。
  • 剖析目标值与特征之间的相关性:发现目标值与特征间(包含年份)的相关性都比较强,因而年份也可以作为特征传入模型进行练习。
corr = population.corr()
# 调用热力求制作相关性联系
plt.figure(figsize=(10,10),dpi=100)
sns.heatmap(corr, square=True, linewidths=0.1, annot=True)

运转成果如下图所示:

【机器学习】LSTM神经网络实现中国人口预测(1)

3.4 缺失值及重复值

3.4.1 重复值检测

检查特征中是否包含重复值,回来false阐明没有重复值。无需除掉。

population.duplicated().any()

3.4.2 缺失值检测

检查是否有缺失的样本。回来True阐明无缺失值,无需进行额外处理。

pd.notnull(population).all()

3.4.3 转化字段类型

咱们需求将int类型字段转化为float类型的字段。

  • 首要运用如下语句检查数据集各个字段类型。
  • 接下来咱们将int64转为float64并替换原数据字段
population['出世人口(万)'] = population['出世人口(万)'].astype('float64')
population['总人口(万人)'] = population['总人口(万人)'].astype('float64')
population['我国人均GPA(美元计)'] = population['我国人均GPA(美元计)'].astype('float64')
population['我国就业人口(万人)'] = population['我国就业人口(万人)'].astype('float64')

4. 总结

本文首要完成了项目的数据处理部分,包含根本的统计学剖析,数据可视化,反常值以及缺失值处理,下一节将进行数据预处理以及神经网络的建立,然后猜测我国人口。

本文正在参加「金石计划 . 瓜分6万现金大奖」