本文首要对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()
运转成果如下所示:
3.2.2 检查各字段类型
检查数据类型,由于练习时或许需求转化数据类型,才能传入神经网络。
population.dtypes
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神经网络进行解决
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()
运转成果如下图所示:
- 箱型图在数据处理中一般用来调查离群点(大于上下界反常点)
- 由于本数据都是收集到真实数据,因而大于上下界的样本不做除掉
3.3.3 相关性剖析
相关性剖析在数据处理中用来检查变量两两之间的相关性
- 剖析特征之间的相关性:可以考虑将两个相关性较强的特征挑选一个进行保存,由于本数据集特征字段不是许多,就不考虑除掉了。
- 剖析目标值与特征之间的相关性:发现目标值与特征间(包含年份)的相关性都比较强,因而年份也可以作为特征传入模型进行练习。
corr = population.corr()
# 调用热力求制作相关性联系
plt.figure(figsize=(10,10),dpi=100)
sns.heatmap(corr, square=True, linewidths=0.1, annot=True)
运转成果如下图所示:
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万现金大奖」